<?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>207600</bug_id>
          
          <creation_ts>2020-02-11 16:43:22 -0800</creation_ts>
          <short_desc>Nullptr crash in EditCommand::EditCommand via CompositeEditCommand::removeNode</short_desc>
          <delta_ts>2020-05-01 15:57:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Jack">shihchieh_lee</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>ajuma</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>eugenebut</cc>
    
    <cc>ews-feeder</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mifenton</cc>
    
    <cc>product-security</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sdefresne</cc>
    
    <cc>shihchieh_lee</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1617767</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-11 16:43:22 -0800</bug_when>
    <thetext>m_frame can sometimes be nullptr in EditCommand::EditCommand

1   0x40fc44479 WTFCrash
2   0x3f411ff8b WTFCrashWithInfo(int, char const*, char const*, int)
3   0x3f6c6a202 WebCore::EditCommand::EditCommand(WebCore::Document&amp;, WebCore::EditAction)
4   0x3f6c6063e WebCore::SimpleEditCommand::SimpleEditCommand(WebCore::Document&amp;, WebCore::EditAction)
5   0x3f6c32247 WebCore::AppendNodeCommand::AppendNodeCommand(WTF::Ref&lt;WebCore::ContainerNode, WTF::DumbPtrTraits&lt;WebCore::ContainerNode&gt; &gt;&amp;&amp;, WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;&amp;&amp;, WebCore::EditAction)
6   0x3f6c3240c WebCore::AppendNodeCommand::AppendNodeCommand(WTF::Ref&lt;WebCore::ContainerNode, WTF::DumbPtrTraits&lt;WebCore::ContainerNode&gt; &gt;&amp;&amp;, WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;&amp;&amp;, WebCore::EditAction)
7   0x3f6c45b29 WebCore::AppendNodeCommand::create(WTF::Ref&lt;WebCore::ContainerNode, WTF::DumbPtrTraits&lt;WebCore::ContainerNode&gt; &gt;&amp;&amp;, WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;&amp;&amp;, WebCore::EditAction)
8   0x3f6c33f8f WebCore::CompositeEditCommand::appendNode(WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;&amp;&amp;, WTF::Ref&lt;WebCore::ContainerNode, WTF::DumbPtrTraits&lt;WebCore::ContainerNode&gt; &gt;&amp;&amp;)
9   0x3f6c3a002 WebCore::ApplyStyleCommand::surroundNodeRangeWithElement(WebCore::Node&amp;, WebCore::Node&amp;, WTF::Ref&lt;WebCore::Element, WTF::DumbPtrTraits&lt;WebCore::Element&gt; &gt;&amp;&amp;)
10  0x3f6c3ecfb WebCore::ApplyStyleCommand::applyInlineStyleChange(WebCore::Node&amp;, WebCore::Node&amp;, WebCore::StyleChange&amp;, WebCore::ApplyStyleCommand::EAddStyledElement)
11  0x3f6c3d413 WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange(WebCore::EditingStyle&amp;, WebCore::Node&amp;, WebCore::Node*)
12  0x3f6c3ca6c WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle(WebCore::EditingStyle&amp;, WebCore::Position const&amp;, WebCore::Position const&amp;)
13  0x3f6c3896b WebCore::ApplyStyleCommand::applyInlineStyle(WebCore::EditingStyle&amp;)
14  0x3f6c363b6 WebCore::ApplyStyleCommand::doApply()
15  0x3f6c44cdf WebCore::CompositeEditCommand::applyCommandToComposite(WTF::Ref&lt;WebCore::EditCommand, WTF::DumbPtrTraits&lt;WebCore::EditCommand&gt; &gt;&amp;&amp;)
16  0x3f6c45511 WebCore::CompositeEditCommand::applyStyledElement(WTF::Ref&lt;WebCore::Element, WTF::DumbPtrTraits&lt;WebCore::Element&gt; &gt;&amp;&amp;)
17  0x3f6c4d164 WebCore::CreateLinkCommand::doApply()
18  0x3f6c2fc35 WebCore::CompositeEditCommand::apply()
19  0x3f6cb1b63 WebCore::executeCreateLink(WebCore::Frame&amp;, WebCore::Event*, WebCore::EditorCommandSource, WTF::String const&amp;)
20  0x3f6c8b869 WebCore::Editor::Command::execute(WTF::String const&amp;, WebCore::Event*) const
21  0x3f69724c5 WebCore::Document::execCommand(WTF::String const&amp;, bool, WTF::String const&amp;)
22  0x3f4a0c0f7 WebCore::jsDocumentPrototypeFunctionExecCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;)
23  0x3f4917972 long long WebCore::IDLOperation&lt;WebCore::JSDocument&gt;::call&lt;&amp;(WebCore::jsDocumentPrototypeFunctionExecCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*)
24  0x3f4917654 WebCore::jsDocumentPrototypeFunctionExecCommand(JSC::JSGlobalObject*, JSC::CallFrame*)
25  0x5c6b89a01178
26  0x41015e449 llint_entry
27  0x41015e449 llint_entry
28  0x410141113 vmEntryToJavaScript
29  0x410f4d767 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
30  0x410f4dddd JSC::Interpreter::executeCall(JSC::JSGlobalObject*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
31  0x411269a39 JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)

&lt;rdar://problem/56969450&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617776</commentid>
    <comment_count>1</comment_count>
      <attachid>390468</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-11 16:53:06 -0800</bug_when>
    <thetext>Created attachment 390468
Test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626176</commentid>
    <comment_count>2</comment_count>
      <attachid>392594</attachid>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2020-03-05 10:29:27 -0800</bug_when>
    <thetext>Created attachment 392594
Another test case

This is another test case where m_frame is null in EditCommand::EditCommand, though the rest of the stack is different. The stack here is:

    #0 0x3348786f1 in std::__1::unique_ptr&lt;WebCore::FrameSelection, std::__1::default_delete&lt;WebCore::FrameSelection&gt; &gt;::operator*() const (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0xcfe6f1)
    #1 0x336dd5cc9 in WebCore::EditCommand::EditCommand(WebCore::Document&amp;, WebCore::EditAction) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x325bcc9)
    #2 0x336d94678 in WebCore::CompositeEditCommand::CompositeEditCommand(WebCore::Document&amp;, WebCore::EditAction) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x321a678)
    #3 0x336e679a1 in WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand(WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;&amp;&amp;, WebCore::ShouldAssumeContentIsAlwaysEditable, WebCore::EditAction) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32ed9a1)
    #4 0x336daf847 in WebCore::RemoveNodePreservingChildrenCommand::create(WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;&amp;&amp;, WebCore::ShouldAssumeContentIsAlwaysEditable, WebCore::EditAction) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x3235847)
    #5 0x336d9f2f0 in WebCore::CompositeEditCommand::removeNodePreservingChildren(WebCore::Node&amp;, WebCore::ShouldAssumeContentIsAlwaysEditable) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32252f0)
    #6 0x336dd3179 in WebCore::DeleteSelectionCommand::removeRedundantBlocks() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x3259179)
    #7 0x336dd37da in WebCore::DeleteSelectionCommand::doApply() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32597da)
    #8 0x336dae3ba in WebCore::CompositeEditCommand::applyCommandToComposite(WTF::Ref&lt;WebCore::EditCommand, WTF::DumbPtrTraits&lt;WebCore::EditCommand&gt; &gt;&amp;&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32343ba)
    #9 0x336da957d in WebCore::CompositeEditCommand::deleteSelection(bool, bool, bool, bool, bool) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x322f57d)
    #10 0x336db4de0 in WebCore::CompositeEditCommand::moveParagraphs(WebCore::VisiblePosition const&amp;, WebCore::VisiblePosition const&amp;, WebCore::VisiblePosition const&amp;, bool, bool) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x323ade0)
    #11 0x336e57cee in WebCore::InsertListCommand::listifyParagraph(WebCore::VisiblePosition const&amp;, WebCore::QualifiedName const&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32ddcee)
    #12 0x336e56393 in WebCore::InsertListCommand::doApplyForSingleParagraph(bool, WebCore::HTMLQualifiedName const&amp;, WebCore::Range*) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32dc393)
    #13 0x336e5556e in WebCore::InsertListCommand::doApply() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32db56e)
    #14 0x336d90476 in WebCore::CompositeEditCommand::apply() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x3216476)
    #15 0x336e3e530 in WebCore::executeInsertUnorderedList(WebCore::Frame&amp;, WebCore::Event*, WebCore::EditorCommandSource, WTF::String const&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x32c4530)
    #16 0x336acdc91 in WebCore::Document::execCommand(WTF::String const&amp;, bool, WTF::String const&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x2f53c91)
    #17 0x334587800 in WebCore::jsDocumentPrototypeFunctionExecCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0xa0d800)
    #18 0x334444625 in long long WebCore::IDLOperation&lt;WebCore::JSDocument&gt;::call&lt;&amp;(WebCore::jsDocumentPrototypeFunctionExecCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x8ca625)
    #19 0x2a3107c01177  (&lt;unknown module&gt;)
    #20 0x34e6db45b in llint_entry (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0xa8c45b)
    #21 0x34e6c43d8 in vmEntryToJavaScript (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0xa753d8)
    #22 0x34fcec937 in JSC::Interpreter::executeCall(JSC::JSGlobalObject*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x209d937)
    #23 0x350318140 in JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x26c9140)
    #24 0x350318242 in JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x26c9242)
    #25 0x35031861f in JSC::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x26c961f)
    #26 0x33641401b in WebCore::JSExecState::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x289a01b)
    #27 0x33643d071 in WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext&amp;, WebCore::Event&amp;) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x28c3071)
    #28 0x336bdf35b in WebCore::EventTarget::innerInvokeEventListeners(WebCore::Event&amp;, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::RegisteredEventListener, WTF::DumbPtrTraits&lt;WebCore::RegisteredEventListener&gt; &gt;, 1ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;, WebCore::EventTarget::EventInvokePhase) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x306535b)
    #29 0x336bda6f2 in WebCore::EventTarget::fireEventListeners(WebCore::Event&amp;, WebCore::EventTarget::EventInvokePhase) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x30606f2)
    #30 0x33795a69d in WebCore::DOMWindow::dispatchEvent(WebCore::Event&amp;, WebCore::EventTarget*) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x3de069d)
    #31 0x33796bfa8 in WebCore::DOMWindow::dispatchLoadEvent() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x3df1fa8)
    #32 0x336ab7180 in WebCore::Document::dispatchWindowLoadEvent() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x2f3d180)
    #33 0x336ab6af0 in WebCore::Document::implicitClose() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x2f3caf0)
    #34 0x3377a4bc2 in WebCore::FrameLoader::checkCompleted() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x3c2abc2)
    #35 0x336a9d00e in WebCore::Document::loadEventDelayTimerFired() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x2f2300e)
    #36 0x337cb6f06 in WebCore::ThreadTimers::sharedTimerFiredInternal() (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x413cf06)
    #37 0x337d2e40e in WebCore::timerFired(__CFRunLoopTimer*, void*) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x41b440e)
    #38 0x7fff35c0fe14 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation:x86_64+0x59e14)
    #39 0x7fff35c0f9c0 in __CFRunLoopDoTimer (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation:x86_64+0x599c0)
    #40 0x7fff35c0f4f9 in __CFRunLoopDoTimers (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation:x86_64+0x594f9)
    #41 0x7fff35bf0b33 in __CFRunLoopRun (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation:x86_64+0x3ab33)
    #42 0x7fff35bf0084 in CFRunLoopRunSpecific (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation:x86_64+0x3a084)
    #43 0x7fff37e64a9e in -[NSRunLoop(NSRunLoop) runMode:beforeDate:] (/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation:x86_64+0x1ca9e)
    #44 0x7fff37e64973 in -[NSRunLoop(NSRunLoop) run] (/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation:x86_64+0x1c973)
    #45 0x7fff622dc1d6 in _xpc_objc_main (/usr/lib/system/libxpc.dylib:x86_64+0x111d6)
    #46 0x7fff622dbcd8 in xpc_main (/usr/lib/system/libxpc.dylib:x86_64+0x10cd8)
    #47 0x328904465 in WebKit::XPCServiceMain(int, char const**) (/Users/chrome-bot/clusterfuzz/bot/builds/mac_asan_webkit/custom/Release/WebKit.framework/Versions/A/WebKit:x86_64+0x904465)
    #48 0x7fff620a93d4 in start (/usr/lib/system/libdyld.dylib:x86_64+0x163d4)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638219</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-04-06 12:03:06 -0700</bug_when>
    <thetext>Based on Jack’s analysis, the issue here is that ApplyStyleCommand is removing an iframe and unload event handler is detaching the document in which this command is running from its frame. As a result, ApplyStyleCommand’s call to appendNode hits a crash in EditCommand’s constructor as frame is null.

EditCommand::frame which returns Frame&amp; doesn’t make much sense either because there is no gurantee that Document this command is associated with will continue to have a Frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642920</commentid>
    <comment_count>4</comment_count>
      <attachid>396822</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-17 18:35:05 -0700</bug_when>
    <thetext>Created attachment 396822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642921</commentid>
    <comment_count>5</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-17 18:37:12 -0700</bug_when>
    <thetext>For regression test and review.

(In reply to Jack from comment #4)
&gt; Created attachment 396822 [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642937</commentid>
    <comment_count>6</comment_count>
      <attachid>396826</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-17 19:43:47 -0700</bug_when>
    <thetext>Created attachment 396826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642946</commentid>
    <comment_count>7</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-17 20:34:30 -0700</bug_when>
    <thetext>In this case there is reentrancy in nested JS commands. And in the second JS command, document is detached from frame, so when the first JS command continues and need to create an EditCommand (in this case appendNode), the code crashes.

Geoff&apos;s idea is to move selection and editor to document, so they are not depending on frame, and by definition editing commands should be applied to document, not frame.

There will be several incremental changes to fully separate edit commands from frame. In this patch, we first move selection to document so EditCommnd will not dereference selection from frame.

Majority or the EditCommand APIs are still passing frame as argument, so frame.selection/editor are still defined but is redirected to document&apos;s selection/editor.

And since RefPtr on document is defined in EditCommand and Editor::command, there is no need for protection on document access in EditCommand. However, in Editor and frameSelection as well as some other classes, RefPtr on document are added along side the RefPtr on frame.

Besides, RefPtr on frame remains in most of the files since I am not sure if frame are still being accessed in the call stack.

Lastly, three editor functions are called in frameLoader at the time document has been detached:
    m_frame.editor().clearUndoRedoOperations(); 
    m_frame.editor().clearLastEditCommand();
    m_frame.editor().clear();

However, I am not sure if they should be called in document. It seems that document and editor have same life cycle, so maybe clear is not needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642950</commentid>
    <comment_count>8</comment_count>
      <attachid>396826</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-17 21:25:25 -0700</bug_when>
    <thetext>Comment on attachment 396826
Patch

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

Fundamentally, if a document does not have a frame then there is no visual representation (no render tree, etc etc) for editing operations and selection. So, no need for editor, selection etc. First glance seems mind boggling to invert this relationship. Possibly memory impact and perf regression could fall out as well

&gt; Source/WebCore/editing/Editor.cpp:1206
&gt; +    , m_frame(*m_document.frame())

A frame always has a document (*). But a document may NOT have a frame. Same comments for all the times frame is deferenced and stored below.

(*) just for me: there is a very tiny window of less than 5 source lines where this isn&apos;t true: a frame can have no document. Doesn&apos;t effect the general rule: a frame always has a document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642957</commentid>
    <comment_count>9</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-17 23:40:18 -0700</bug_when>
    <thetext>Daniel, really appreciate your spending time to review the huge change. There are many potential reentrancy like this so we though it would be better to change it once than to patch as fuzzer finds more similar holes.

For dereferencing m_document.frame() in editor, it is going to be removed next upload. I kept them temporarily to see if it makes difference in regression tests. 

For memory impact, hope there would not be many detached documents?

(In reply to Daniel Bates from comment #8)
&gt; Comment on attachment 396826 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=396826&amp;action=review
&gt; 
&gt; Fundamentally, if a document does not have a frame then there is no visual
&gt; representation (no render tree, etc etc) for editing operations and
&gt; selection. So, no need for editor, selection etc. First glance seems mind
&gt; boggling to invert this relationship. Possibly memory impact and perf
&gt; regression could fall out as well
&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:1206
&gt; &gt; +    , m_frame(*m_document.frame())
&gt; 
&gt; A frame always has a document (*). But a document may NOT have a frame. Same
&gt; comments for all the times frame is deferenced and stored below.
&gt; 
&gt; (*) just for me: there is a very tiny window of less than 5 source lines
&gt; where this isn&apos;t true: a frame can have no document. Doesn&apos;t effect the
&gt; general rule: a frame always has a document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643063</commentid>
    <comment_count>10</comment_count>
      <attachid>396864</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-18 15:14:25 -0700</bug_when>
    <thetext>Created attachment 396864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643209</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-19 08:52:17 -0700</bug_when>
    <thetext>Looks like the right approach to me, but these test failures will need investigation:

&gt; editing/undo/undo-iframe-location-change.html

Please look at the history of this test and find out why the author thought an undo operation should be prohibited after location change. It&apos;s possible that allowing the operation, now that operations are per-document, is OK. Or we may need to figure a way to prohibit operations after navigation.

&gt; fast/xsl/transform-to-html.xml	crash
&gt; fast/xsl/xslt-transform-to-fragment-crash.html	crash
&gt; http/tests/security/xss-DENIED-xsl-document.xml	crash
&gt; imported/blink/editing/undo/crash-redo-with-iframes.html	crash

These crashes look like they&apos;re caused by this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643630</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-20 14:00:25 -0700</bug_when>
    <thetext>&gt; Fundamentally, if a document does not have a frame then there is no visual
&gt; representation (no render tree, etc etc) for editing operations and
&gt; selection. So, no need for editor, selection etc.

An exception to this general rule is the case where a document has a frame and starts an editing or selection operation, and then during the course of the operation it triggers a side effect that disconnects the document from the frame.

To address that exceptional case, the options we&apos;ve considered so far are (a) null check the frame in every line of editing code (doable once but easy to forget in future); or (b) move these objects to Document.

To address the observation that some Documents never have a visual representation, perhaps we should consider null checking the frame in the Document constructor, and leaving these objects null when the frame is null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643706</commentid>
    <comment_count>13</comment_count>
      <attachid>397042</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-20 17:39:14 -0700</bug_when>
    <thetext>Created attachment 397042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643746</commentid>
    <comment_count>14</comment_count>
      <attachid>397048</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-20 19:54:52 -0700</bug_when>
    <thetext>Created attachment 397048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644024</commentid>
    <comment_count>15</comment_count>
      <attachid>397122</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-21 14:41:11 -0700</bug_when>
    <thetext>Created attachment 397122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644175</commentid>
    <comment_count>16</comment_count>
      <attachid>397160</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-21 20:27:13 -0700</bug_when>
    <thetext>Created attachment 397160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644201</commentid>
    <comment_count>17</comment_count>
      <attachid>397166</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-21 21:44:19 -0700</bug_when>
    <thetext>Created attachment 397166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644245</commentid>
    <comment_count>18</comment_count>
      <attachid>397178</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-22 00:52:54 -0700</bug_when>
    <thetext>Created attachment 397178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644403</commentid>
    <comment_count>19</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-22 11:26:04 -0700</bug_when>
    <thetext>Solutions in the patch:
1. Restore FrameSelection state when frame is not changed: call setSelectionFromNone and setCaretVisible in constructor to restore the internal state of the FrameSelection.

What didn&apos;t work: tried modifying function FocusController::setFocusedFrame such that it calls FrameSelection::setFocused(). Although it restores the state of frame selection and solves test failures related to Caret Visibility, tests in counting number of blur/focus start failing. Besides, it also requires that FrameSelection being constructed with m_focused = false, and that makes other tests fail.

2. Initial state of m_focused in FrameSelection constructor: need to check the focused state of the original frame (m_frame) and restore the state because FocusController::setFocusedFrame will ignore the focus state change request if frame is not changed.  

3. Possible detachment of document from frame in Editor: m_frame in Editor is removed so it will not be misused when a document is detached. Dependency on frame/page is replaced with m_document.frame()/page(). Not every function checks if document is detached. However, they are null deref so there is no security concern. One such bug is fixed in Editor::applyStyle in this change.

4. Possible change of frame in EditorCommand: EditorCommand and its callers are tightly coupled with frame. Decoupling will take more considerations and it&apos;s better done incrementally. For the time being, it is safe to store m_frame since it is assumed to remain unchanged throughout the processing of the commands. Besides, to prevent UAF, m_frame and m_document are both constructed as RefPtr. There is also check if m_document is in the same frame in Editor::Command::execute (unlikely to fail).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644681</commentid>
    <comment_count>20</comment_count>
      <attachid>397318</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-22 22:11:33 -0700</bug_when>
    <thetext>Created attachment 397318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644692</commentid>
    <comment_count>21</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-22 22:41:45 -0700</bug_when>
    <thetext>In this patch, the failed test case in api-ios is fixed. The root cause is that in the original code &quot;selection().prepareForDestruction()&quot; is called after document gets detached, which makes WebEditorClient::respondToChangedSelection being skipped. Function respondToChangedSelection is required for restoring  &quot;m_hasPendingEditorStateUpdate&quot; in WebPage in order for the EditorStateUpdate event to be delivered to other components.

The fix is moving the function call into Document::prepareForDestruction since now selection is part of document. Besides, &quot;editor().clear()&quot; is also moved into the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644865</commentid>
    <comment_count>22</comment_count>
      <attachid>397362</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-23 11:00:20 -0700</bug_when>
    <thetext>Created attachment 397362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644884</commentid>
    <comment_count>23</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-23 11:47:11 -0700</bug_when>
    <thetext>In this patch the failed tests in previous upload are resolved.
1. Crash due to AlternativeTextUITimer fires after document is detached. Fix: stop AlternativeTextUITimer in Editor::clear().
2. Extra selection change notification when a document is closed: because FrameSelection is associated with document now, its prepareForDestruction() is called when a document is closed, resulting in more selection change notifications. Fix: modify expected result for editing/pasteboard/drag-drop-dead-frame.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645061</commentid>
    <comment_count>24</comment_count>
      <attachid>397416</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-23 19:53:32 -0700</bug_when>
    <thetext>Created attachment 397416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645063</commentid>
    <comment_count>25</comment_count>
      <attachid>397417</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-23 20:02:01 -0700</bug_when>
    <thetext>Created attachment 397417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645227</commentid>
    <comment_count>26</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-24 09:50:00 -0700</bug_when>
    <thetext>Looks like editing/inserting/insert-list-then-edit-command-crash.html is still crashing on iOS-wk2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645237</commentid>
    <comment_count>27</comment_count>
      <attachid>397417</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-24 10:03:06 -0700</bug_when>
    <thetext>Comment on attachment 397417
Patch

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

&gt; Source/WebCore/dom/Document.cpp:2596
&gt; +    editor().clear();
&gt; +    selection().prepareForDestruction();

Are we sure we need this? Destruction should naturally clear selection and stop all timers, so I&apos;m a little unclear on why we need this.

&gt; Source/WebCore/loader/FrameLoader.cpp:574
&gt; +    if (currentDocument)

currentDocument needs to be RefPtr. stopLoading() will fire the JavaScript unload event, which can have arbitrary side-effects.

&gt; Source/WebCore/loader/FrameLoader.cpp:-646
&gt; -    m_frame.editor().clear();

Kind of nice that we can remove lines of code like this: Now, the new document in the new load naturally starts out with an empty editor state.

&gt; LayoutTests/platform/mac/editing/pasteboard/drag-drop-dead-frame-expected.txt:7
&gt; +EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification

It looks like this means that we now report document destruction as a selection change because we clear selection before destruction. Seems OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645239</commentid>
    <comment_count>28</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 10:04:54 -0700</bug_when>
    <thetext>eah, I just look at it. The root cause is this in function shouldChangeSelection.

Most likely it is in nested command execution this line of code is still using frame().

bool Editor::shouldChangeSelection (...) {
#if PLATFORM(IOS_FAMILY)
    if (m_document.frame()-&gt;selectionChangeCallbacksDisabled())
        return true;
#endif
}

Can we just return true or false when document is detached?

If we move function selectionChangeCallbacksDisabled to Document, callers like below needs to be modified. Document should have already been attached when this is called?  
- (void)setSelectionChangeCallbacksDisabled:(BOOL)flag
{
    WebCore::Frame *frame = core(self);
    frame-&gt;setSelectionChangeCallbacksDisabled(flag);
}


(In reply to Geoffrey Garen from comment #26)
&gt; Looks like editing/inserting/insert-list-then-edit-command-crash.html is
&gt; still crashing on iOS-wk2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645246</commentid>
    <comment_count>29</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 10:18:19 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #27)
&gt; Comment on attachment 397417 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=397417&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:2596
&gt; &gt; +    editor().clear();
&gt; &gt; +    selection().prepareForDestruction();
&gt; 
&gt; Are we sure we need this? Destruction should naturally clear selection and
&gt; stop all timers, so I&apos;m a little unclear on why we need this.
Thanks. Yeah, the timers are being stopped in prepareForDestruction. FrameSelection only has default destructor. Should we move the code into destructor?


&gt; &gt; Source/WebCore/loader/FrameLoader.cpp:574
&gt; &gt; +    if (currentDocument)
&gt; 
&gt; currentDocument needs to be RefPtr. stopLoading() will fire the JavaScript
&gt; unload event, which can have arbitrary side-effects.
Got it. Thanks. I will add that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645254</commentid>
    <comment_count>30</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 10:30:31 -0700</bug_when>
    <thetext>(In reply to Jack from comment #29)
&gt; (In reply to Geoffrey Garen from comment #27)
&gt; &gt; Comment on attachment 397417 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=397417&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/Document.cpp:2596
&gt; &gt; &gt; +    editor().clear();
&gt; &gt; &gt; +    selection().prepareForDestruction();
&gt; &gt; 
&gt; &gt; Are we sure we need this? Destruction should naturally clear selection and
&gt; &gt; stop all timers, so I&apos;m a little unclear on why we need this.
&gt; Thanks. Yeah, the timers are being stopped in prepareForDestruction.
&gt; FrameSelection only has default destructor. Should we move the code into
&gt; destructor?
Sorry, I forgot that we need to stop the timer before detaching the document, otherwise some timer callback functions may still use frame().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645310</commentid>
    <comment_count>31</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-24 12:08:34 -0700</bug_when>
    <thetext>&gt; bool Editor::shouldChangeSelection (...) {
&gt; #if PLATFORM(IOS_FAMILY)
&gt;     if (m_document.frame()-&gt;selectionChangeCallbacksDisabled())
&gt;         return true;
&gt; #endif
&gt; }
&gt; 
&gt; Can we just return true or false when document is detached?

Yes. Probably true.

&gt; If we move function selectionChangeCallbacksDisabled to Document, callers
&gt; like below needs to be modified.

I don&apos;t think we want to move it, at least not right now. Moving this setting would change its meaning because it would cause the setting to disappear after navigation. That change might not be compatible with existing client expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645315</commentid>
    <comment_count>32</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-24 12:10:56 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/dom/Document.cpp:2596
&gt; &gt; &gt; +    editor().clear();
&gt; &gt; &gt; +    selection().prepareForDestruction();
&gt; &gt; 
&gt; &gt; Are we sure we need this? Destruction should naturally clear selection and
&gt; &gt; stop all timers, so I&apos;m a little unclear on why we need this.
&gt; Thanks. Yeah, the timers are being stopped in prepareForDestruction.
&gt; FrameSelection only has default destructor. Should we move the code into
&gt; destructor?

I see. &quot;prepareForDestruction&quot; really should be named something like &quot;willRemoveFromFrame&quot;. It&apos;s not directly tied to object lifetime, though they may coincidentally happen at the same time.

I don&apos;t think we should move this code into the Document destructor. That&apos;s worse. Generally, we want to avoid relying on object destruction to implement any observable behavior other than memory safety. The reason is that reference counted objects can be destroyed at unpredictable times -- especially if they are referenced by the JavaScript garbage collector -- so you can&apos;t rely on object destruction to guarantee any behavior that needs to happen at a particular time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645317</commentid>
    <comment_count>33</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-24 12:13:19 -0700</bug_when>
    <thetext>&gt; &gt; Can we just return true or false when document is detached?
&gt; 
&gt; Yes. Probably true.

Wenson suggested false to match the status quo. I guess that&apos;s a little better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645327</commentid>
    <comment_count>34</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 12:28:14 -0700</bug_when>
    <thetext>Thanks! Got it! I will change the name off the function.

(In reply to Geoffrey Garen from comment #32)
&gt; &gt; &gt; &gt; Source/WebCore/dom/Document.cpp:2596
&gt; &gt; &gt; &gt; +    editor().clear();
&gt; &gt; &gt; &gt; +    selection().prepareForDestruction();
&gt; &gt; &gt; 
&gt; &gt; &gt; Are we sure we need this? Destruction should naturally clear selection and
&gt; &gt; &gt; stop all timers, so I&apos;m a little unclear on why we need this.
&gt; &gt; Thanks. Yeah, the timers are being stopped in prepareForDestruction.
&gt; &gt; FrameSelection only has default destructor. Should we move the code into
&gt; &gt; destructor?
&gt; 
&gt; I see. &quot;prepareForDestruction&quot; really should be named something like
&gt; &quot;willRemoveFromFrame&quot;. It&apos;s not directly tied to object lifetime, though
&gt; they may coincidentally happen at the same time.
&gt; 
&gt; I don&apos;t think we should move this code into the Document destructor. That&apos;s
&gt; worse. Generally, we want to avoid relying on object destruction to
&gt; implement any observable behavior other than memory safety. The reason is
&gt; that reference counted objects can be destroyed at unpredictable times --
&gt; especially if they are referenced by the JavaScript garbage collector -- so
&gt; you can&apos;t rely on object destruction to guarantee any behavior that needs to
&gt; happen at a particular time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645339</commentid>
    <comment_count>35</comment_count>
      <attachid>397490</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 12:55:01 -0700</bug_when>
    <thetext>Created attachment 397490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645344</commentid>
    <comment_count>36</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 13:05:14 -0700</bug_when>
    <thetext>In this revision:
1. In function Editor::shouldChangeSelection, return false if document has been detached from frame.
2. Change function names:
Frame::prepareForDestruction -&gt; willBeRemovedFromDocument
Document::prepareForDestruction -&gt; willBeRemovedFromFrame

(In reply to Jack from comment #35)
&gt; Created attachment 397490 [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645347</commentid>
    <comment_count>37</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 13:06:38 -0700</bug_when>
    <thetext>Sorry for the typo. Please see correction below:

(In reply to Jack from comment #36)
&gt; In this revision:
&gt; 1. In function Editor::shouldChangeSelection, return false if document has
&gt; been detached from frame.
&gt; 2. Change function names:
&gt; FrameSelection::prepareForDestruction -&gt; willBeRemovedFromDocument
&gt; Document::prepareForDestruction -&gt; willBeRemovedFromFrame
&gt; 
&gt; (In reply to Jack from comment #35)
&gt; &gt; Created attachment 397490 [details]
&gt; &gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645435</commentid>
    <comment_count>38</comment_count>
      <attachid>397490</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-24 15:43:09 -0700</bug_when>
    <thetext>Comment on attachment 397490
Patch

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

&gt; Source/WebCore/editing/FrameSelection.cpp:1577
&gt; +void FrameSelection::willBeRemovedFromDocument()

This should probably be named willBeRemovedFromFrame. A given selection object is always a member of its document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645460</commentid>
    <comment_count>39</comment_count>
      <attachid>397526</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 16:07:25 -0700</bug_when>
    <thetext>Created attachment 397526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645463</commentid>
    <comment_count>40</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-24 16:12:32 -0700</bug_when>
    <thetext>That&apos;s right. Thanks. Please see the new revision.

&gt; &gt; +void FrameSelection::willBeRemovedFromDocument()
&gt; 
&gt; This should probably be named willBeRemovedFromFrame. A given selection
&gt; object is always a member of its document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646053</commentid>
    <comment_count>41</comment_count>
      <attachid>397526</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-27 09:44:24 -0700</bug_when>
    <thetext>Comment on attachment 397526
Patch

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

I think this patch is ready, but I spotted two details that could use tidying.

&gt; Source/WebCore/editing/FrameSelection.h:143
&gt; +    WEBCORE_EXPORT explicit FrameSelection(Document* = nullptr);

Is there actually a case where someone constructs a FrameSelection with a null Document? Since FrameSelection is now a data member of Document, I think we always have a Document. If so, it would be better to change the type of the constructor argument and data member to Document&amp;.

&gt; Source/WebCore/editing/FrameSelection.h:342
&gt;      Frame* m_frame;

Can you remove the m_frame data member now? Anything that used to use m_frame should ideally be gone now. If uses remain, they should use m_document-&gt;frame() will a null check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646104</commentid>
    <comment_count>42</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 11:18:58 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #41)
&gt; &gt; Source/WebCore/editing/FrameSelection.h:143
&gt; &gt; +    WEBCORE_EXPORT explicit FrameSelection(Document* = nullptr);
&gt; &gt; Is there actually a case where someone constructs a FrameSelection with a
&gt; null Document? Since FrameSelection is now a data member of Document, I
&gt; think we always have a Document. If so, it would be better to change the
&gt; type of the constructor argument and data member to Document&amp;.
Yeah, there are a few places in TypingCommand.cpp, WebFrame.mm and AccessibilityRenderObject.cpp where the selection is explicitly set after the construction. 

&gt; &gt; Source/WebCore/editing/FrameSelection.h:342
&gt; &gt;      Frame* m_frame;
&gt; 
&gt; Can you remove the m_frame data member now? Anything that used to use
&gt; m_frame should ideally be gone now. If uses remain, they should use
&gt; m_document-&gt;frame() will a null check.
Yeah, that should be true. Let me try this. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646142</commentid>
    <comment_count>43</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-27 12:38:21 -0700</bug_when>
    <thetext>&gt; Yeah, there are a few places in TypingCommand.cpp, WebFrame.mm and
&gt; AccessibilityRenderObject.cpp where the selection is explicitly set after
&gt; the construction. 

I checked the DOMUIKitExtensions.mm case, and it looks like we could provide a document in the constructor (using the Range&apos;s document). TypingCommand has a Document as a data member. Perhaps all these cases can provide a Document in the constructor.

&gt; 
&gt; &gt; &gt; Source/WebCore/editing/FrameSelection.h:342
&gt; &gt; &gt;      Frame* m_frame;
&gt; &gt; 
&gt; &gt; Can you remove the m_frame data member now? Anything that used to use
&gt; &gt; m_frame should ideally be gone now. If uses remain, they should use
&gt; &gt; m_document-&gt;frame() will a null check.
&gt; Yeah, that should be true. Let me try this. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646151</commentid>
    <comment_count>44</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 12:51:58 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #43)
&gt; &gt; Yeah, there are a few places in TypingCommand.cpp, WebFrame.mm and
&gt; &gt; AccessibilityRenderObject.cpp where the selection is explicitly set after
&gt; &gt; the construction. 
&gt; 
&gt; I checked the DOMUIKitExtensions.mm case, and it looks like we could provide
&gt; a document in the constructor (using the Range&apos;s document). TypingCommand
&gt; has a Document as a data member. Perhaps all these cases can provide a
&gt; Document in the constructor.
Thanks. Yeah, I am trying this approach as well. Hopefully all have easy access to document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646182</commentid>
    <comment_count>45</comment_count>
      <attachid>397731</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 13:49:15 -0700</bug_when>
    <thetext>Created attachment 397731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646329</commentid>
    <comment_count>46</comment_count>
      <attachid>397773</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 17:44:43 -0700</bug_when>
    <thetext>Created attachment 397773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646330</commentid>
    <comment_count>47</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 17:45:36 -0700</bug_when>
    <thetext>Resolve the merge conflicts in previous upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646347</commentid>
    <comment_count>48</comment_count>
      <attachid>397780</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 18:39:22 -0700</bug_when>
    <thetext>Created attachment 397780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646348</commentid>
    <comment_count>49</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 18:40:59 -0700</bug_when>
    <thetext>Add additional argument for document in wordSelectionContainingCaretSelection. Need this to instantiate FrameSelection.

(In reply to Jack from comment #48)
&gt; Created attachment 397780 [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646351</commentid>
    <comment_count>50</comment_count>
      <attachid>397781</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 18:47:16 -0700</bug_when>
    <thetext>Created attachment 397781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646375</commentid>
    <comment_count>51</comment_count>
      <attachid>397795</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 20:52:12 -0700</bug_when>
    <thetext>Created attachment 397795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646393</commentid>
    <comment_count>52</comment_count>
      <attachid>397809</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 22:45:07 -0700</bug_when>
    <thetext>Created attachment 397809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646394</commentid>
    <comment_count>53</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-27 22:46:35 -0700</bug_when>
    <thetext>Isolate test failures in previous upload. First resolve the merge conflicts. 
(In reply to Jack from comment #52)
&gt; Created attachment 397809 [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646512</commentid>
    <comment_count>54</comment_count>
      <attachid>397809</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-28 09:19:50 -0700</bug_when>
    <thetext>Comment on attachment 397809
Patch

I&apos;ll say r+ because this patch passed EWS and it seems ready to go. Please follow up to remove that m_frame data member, since that will be the compile-time verification that instances of this bug are gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646516</commentid>
    <comment_count>55</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-28 09:24:35 -0700</bug_when>
    <thetext>Thanks. Yes. Currently am resolving the test failures and hope to submit the rest of the changes shortly.

(In reply to Geoffrey Garen from comment #54)
&gt; Comment on attachment 397809 [details]
&gt; Patch
&gt; 
&gt; I&apos;ll say r+ because this patch passed EWS and it seems ready to go. Please
&gt; follow up to remove that m_frame data member, since that will be the
&gt; compile-time verification that instances of this bug are gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646527</commentid>
    <comment_count>56</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-28 09:36:43 -0700</bug_when>
    <thetext>Committed r260831: &lt;https://trac.webkit.org/changeset/260831&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397809.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646618</commentid>
    <comment_count>57</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-28 12:34:23 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646619</commentid>
    <comment_count>58</comment_count>
      <attachid>397872</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-28 12:34:31 -0700</bug_when>
    <thetext>Created attachment 397872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646691</commentid>
    <comment_count>59</comment_count>
      <attachid>397889</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-28 15:07:08 -0700</bug_when>
    <thetext>Created attachment 397889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647257</commentid>
    <comment_count>60</comment_count>
      <attachid>398025</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-29 19:47:34 -0700</bug_when>
    <thetext>Created attachment 398025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647259</commentid>
    <comment_count>61</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-29 19:54:29 -0700</bug_when>
    <thetext>In this revision:
1. Data member m_frame in FrameSelection is removed.
2. Improvement of test run time (from Alan).

(In reply to Jack from comment #60)
&gt; Created attachment 398025 [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647262</commentid>
    <comment_count>62</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-29 20:01:59 -0700</bug_when>
    <thetext>Also tried changing m_document in FrameSelection to reference member, instead of pointer. However, some tests fail if we try to pass (to FrameSelection constructor) the document in the context where FrameSelection is instantiated. Doing so change the behavior in some member functions in FrameSelection.

In the original code, those functions null-check document/frame and return early. It seems that the document/frame pointer is overloaded as a flag for certain behavior. We can create a flag when calling the constructor and do the null-checks. I experimented it and the code passes all the failed cases.

However, there is no clear definition for when the flag should be set. And it is weird for the caller to pass parameters of document along with a flag saying don’t use the document.

Therefore, we decided to only remove m_frame in FrameSelection for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647266</commentid>
    <comment_count>63</comment_count>
      <attachid>398028</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-29 20:08:03 -0700</bug_when>
    <thetext>Created attachment 398028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647281</commentid>
    <comment_count>64</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-29 21:46:38 -0700</bug_when>
    <thetext>The previous patch failed in editing/selection/focus-iframe-removal-crash.html.

&lt;iframe&gt;&lt;/iframe&gt;
&lt;script&gt;
if (window.testRunner)
    testRunner.dumpAsText();

function run()
{
    var iframe = document.getElementsByTagName(&apos;iframe&apos;)[0];
    iframe.contentDocument.documentElement.contentEditable = true;
    iframe.contentDocument.documentElement.addEventListener(&apos;focusout&apos;, function () {
        iframe.parentNode.removeChild(iframe);
    }, false);
    iframe.contentDocument.documentElement.focus();

    document.write(&quot;PASS. WebKit didn&apos;t crash.&quot;);
}

document.addEventListener(&apos;DOMContentLoaded&apos;, run);
&lt;/script&gt;

Root cause:
This is another reentrancy issue.
1. Focus command (frame #45) is followed by removeChild (frame #13).
2. Document is detached before Focus can finish.
3. Code crashes when we access frame() in function selectFrameElementInParentIfFullySelected.

  * frame #0: 0x000000044bc7d54c WebCore`WebCore::FrameDestructionObserver::observeFrame(this={ origin = file://, url = about:blank, inMainFrame = Detached, backForwardCacheState = NotInBackForwardCache }, frame={ origin = , url = , isMainFrame = 0, backForwardCacheState =  }) at FrameDestructionObserver.cpp:50:13
    frame #1: 0x0000000449e6607b WebCore`WebCore::Document::detachFromFrame(this={ origin = file://, url = about:blank, inMainFrame = Detached, backForwardCacheState = NotInBackForwardCache }) at Document.cpp:8284:5
    frame #2: 0x0000000449e674c1 WebCore`WebCore::Document::willBeRemovedFromFrame(this={ origin = file://, url = about:blank, inMainFrame = Detached, backForwardCacheState = NotInBackForwardCache }) at Document.cpp:2599:5
    frame #3: 0x000000044bc6df73 WebCore`WebCore::Frame::setView(this={ origin = file://, url = about:blank, isMainFrame = 0, backForwardCacheState = NotInBackForwardCache }, view=0x00007ffee3c1d8a0) at Frame.cpp:235:16
    frame #4: 0x000000044b824bb1 WebCore`WebCore::FrameLoader::closeAndRemoveChild(this=0x0000614000007440, child={ origin = file://, url = about:blank, isMainFrame = 0, backForwardCacheState = NotInBackForwardCache }) at FrameLoader.cpp:2738:11
    frame #5: 0x000000044b8248d5 WebCore`WebCore::FrameLoader::detachFromParent(this=0x0000614000051c40) at FrameLoader.cpp:2858:26
    frame #6: 0x000000044b825ce4 WebCore`WebCore::FrameLoader::frameDetached(this=0x0000614000051c40) at FrameLoader.cpp:2833:5
    frame #7: 0x000000044a92304b WebCore`WebCore::HTMLFrameOwnerElement::disconnectContentFrame(this=0x000061300005be40) at HTMLFrameOwnerElement.cpp:80:25
    frame #8: 0x0000000449da300b WebCore`WebCore::disconnectSubframes(root=0x000061300005be40, policy=RootAndDescendants) at ContainerNodeAlgorithms.cpp:308:25
    frame #9: 0x0000000449d97485 WebCore`WebCore::disconnectSubframesIfNeeded(root=0x000061300005be40, policy=RootAndDescendants) at ContainerNodeAlgorithms.h:78:5
    frame #10: 0x0000000449d97849 WebCore`WebCore::ContainerNode::removeNodeWithScriptAssertion(this=0x000060c000085300, childToRemove=0x000061300005be40, source=API) at ContainerNode.cpp:145:13
    frame #11: 0x0000000449d96889 WebCore`WebCore::ContainerNode::removeChild(this=0x000060c000085300, oldChild=0x000061300005be40) at ContainerNode.cpp:577:10
    frame #12: 0x000000044a1c4868 WebCore`WebCore::Node::removeChild(this=0x000060c000085300, oldChild=0x000061300005be40) at Node.cpp:490:43
    frame #13: 0x0000000445d75db9 WebCore`WebCore::jsNodePrototypeFunctionRemoveChildBody(lexicalGlobalObject=0x000061f000032ce8, callFrame=0x00007ffee3c1e820, castedThis=0x000060e000064c68, throwScope=0x00007ffee3c1e660) at JSNode.cpp:956:63
    frame #14: 0x0000000445c5c0de WebCore`long long WebCore::IDLOperation&lt;WebCore::JSNode&gt;::call&lt;&amp;(lexicalGlobalObject=0x000061f000032ce8, callFrame=0x00007ffee3c1e820, operationName=&quot;removeChild&quot;)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*) at JSDOMOperation.h:53:16
    frame #15: 0x0000000445c5bc34 WebCore`WebCore::jsNodePrototypeFunctionRemoveChild(lexicalGlobalObject=0x000061f000032ce8, callFrame=0x00007ffee3c1e820) at JSNode.cpp:962:12
    frame #16: 0x00005e9a69801178
    frame #17: 0x0000000474896c3e JavaScriptCore`llint_entry at LowLevelInterpreter.asm:1045
    frame #18: 0x0000000474877562 JavaScriptCore`vmEntryToJavaScript at LowLevelInterpreter64.asm:296
    frame #19: 0x0000000476d8fd90 JavaScriptCore`JSC::JITCode::execute(this=0x00006040000e7290, vm=0x000062f00001c400, protoCallFrame=0x00007ffee3c1edc0) at JITCodeInlines.h:38:38
    frame #20: 0x0000000476d91107 JavaScriptCore`JSC::Interpreter::executeCall(this=0x00006020000157f0, lexicalGlobalObject=0x000061f00003fee8, function=0x000062d0001d3d00, callData=0x00007ffee3c1fd00, thisValue=JSValue @ 0x00007ffee3c1ebe0, args=0x00007ffee3c20040) at Interpreter.cpp:921:31
    frame #21: 0x0000000477724160 JavaScriptCore`JSC::call(globalObject=0x000061f00003fee8, functionObject=JSValue @ 0x00007ffee3c1f220, callData=0x00007ffee3c1fd00, thisValue=JSValue @ 0x00007ffee3c1f240, args=0x00007ffee3c20040) at CallData.cpp:58:28
    frame #22: 0x0000000477724672 JavaScriptCore`JSC::call(globalObject=0x000061f00003fee8, functionObject=JSValue @ 0x00007ffee3c1f420, callData=0x00007ffee3c1fd00, thisValue=JSValue @ 0x00007ffee3c1f440, args=0x00007ffee3c20040, returnedException=0x00007ffee3c1ffc0) at CallData.cpp:65:22
    frame #23: 0x000000047772531a JavaScriptCore`JSC::profiledCall(globalObject=0x000061f00003fee8, reason=Other, functionObject=JSValue @ 0x00007ffee3c1f720, callData=0x00007ffee3c1fd00, thisValue=JSValue @ 0x00007ffee3c1f740, args=0x00007ffee3c20040, returnedException=0x00007ffee3c1ffc0) at CallData.cpp:86:12
    frame #24: 0x000000044919756e WebCore`WebCore::JSExecState::profiledCall(lexicalGlobalObject=0x000061f00003fee8, reason=Other, functionObject=JSValue @ 0x00007ffee3c1f9a0, callData=0x00007ffee3c1fd00, thisValue=JSValue @ 0x00007ffee3c1f9c0, args=0x00007ffee3c20040, returnedException=0x00007ffee3c1ffc0) at JSExecState.h:73:16
    frame #25: 0x00000004491e631e WebCore`WebCore::JSEventListener::handleEvent(this=0x00006060000bab60, scriptExecutionContext={ origin = file://, url = about:blank, inMainFrame = Detached, backForwardCacheState = NotInBackForwardCache }, event=0x000060b00005c9d0) at JSEventListener.cpp:179:22
    frame #26: 0x000000044a0db8cb WebCore`WebCore::EventTarget::innerInvokeEventListeners(this=0x000060c000086e00, event=0x000060b00005c9d0, listeners={ size = 1, capacity = 1 }, phase=Bubbling) at EventTarget.cpp:335:40
    frame #27: 0x000000044a0d20b4 WebCore`WebCore::EventTarget::fireEventListeners(this=0x000060c000086e00, event=0x000060b00005c9d0, phase=Bubbling) at EventTarget.cpp:267:9
    frame #28: 0x000000044a1db9e6 WebCore`WebCore::Node::handleLocalEvents(this=0x000060c000086e00, event=0x000060b00005c9d0, phase=Bubbling) at Node.cpp:2371:5
    frame #29: 0x000000044a0a89cf WebCore`WebCore::EventContext::handleLocalEvents(this=0x00006040000fe9d0, event=0x000060b00005c9d0, phase=Bubbling) const at EventContext.cpp:55:17
    frame #30: 0x000000044a0a8d54 WebCore`WebCore::MouseOrFocusEventContext::handleLocalEvents(this=0x00006040000fe9d0, event=0x000060b00005c9d0, phase=Bubbling) const at EventContext.cpp:81:19
    frame #31: 0x000000044a0a9ebe WebCore`WebCore::dispatchEventInDOM(event=0x000060b00005c9d0, path=0x00007ffee3c20ea0) at EventDispatcher.cpp:100:22
    frame #32: 0x000000044a0a96fb WebCore`WebCore::EventDispatcher::dispatchEvent(node=0x000060c000086e00, event=0x000060b00005c9d0) at EventDispatcher.cpp:154:9
    frame #33: 0x000000044a1dba3d WebCore`WebCore::Node::dispatchEvent(this=0x000060c000086e00, event=0x000060b00005c9d0) at Node.cpp:2381:5
    frame #34: 0x000000044a27fa64 WebCore`WebCore::ScopedEventQueue::dispatchEvent(this=0x00000004551d8460, event=0x000060b00005c9d0) const at ScopedEventQueue.cpp:57:37
    frame #35: 0x000000044a27f96e WebCore`WebCore::ScopedEventQueue::enqueueEvent(this=0x00000004551d8460, event=0x00007ffee3c212c0) at ScopedEventQueue.cpp:52:9
    frame #36: 0x000000044a0a8eeb WebCore`WebCore::EventDispatcher::dispatchScopedEvent(node=0x000060c000086e00, event=0x000060b00005c9d0) at EventDispatcher.cpp:52:35
    frame #37: 0x000000044a1dba0d WebCore`WebCore::Node::dispatchScopedEvent(this=0x000060c000086e00, event=0x000060b00005c9d0) at Node.cpp:2376:5
    frame #38: 0x000000044a029881 WebCore`WebCore::Element::dispatchFocusOutEvent(this=0x000060c000086e00, eventType={ length = 8, contents = &apos;focusout&apos; }, newFocusedElement=0x00007ffee3c215c0) at Element.cpp:3095:5
    frame #39: 0x0000000449e833ee WebCore`WebCore::Document::setFocusedElement(this={ origin = file://, url = about:blank, inMainFrame = Detached, backForwardCacheState = NotInBackForwardCache }, element=0x000060c000086f80, direction=FocusDirectionNone, eventsMode=Dispatch) at Document.cpp:4306:32
    frame #40: 0x000000044bc4a066 WebCore`WebCore::FocusController::setFocusedElement(this=0x000060700001f7b0, element=0x000060c000086f80, newFocusedFrame={ origin = file://, url = about:blank, isMainFrame = 0, backForwardCacheState = NotInBackForwardCache }, direction=FocusDirectionNone) at FocusController.cpp:864:45
    frame #41: 0x000000044a55ea34 WebCore`WebCore::FrameSelection::setFocusedElementIfNeeded(this=0x00006120000568c0) at FrameSelection.cpp:2268:55
    frame #42: 0x000000044a55d3f6 WebCore`WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance(this=0x00006120000568c0, newSelectionPossiblyWithoutDirection=0x00007ffee3c22760, options={ size = 2 }, align=AlignCursorOnScrollIfNeeded, granularity=CharacterGranularity) at FrameSelection.cpp:385:9
    frame #43: 0x000000044a50705a WebCore`WebCore::FrameSelection::setSelection(this=0x00006120000568c0, selection=0x00007ffee3c22760, options={ size = 2 }, intent=AXTextStateChangeIntent @ 0x00007ffee3c22350, align=AlignCursorOnScrollIfNeeded, granularity=CharacterGranularity) at FrameSelection.cpp:406:10
    frame #44: 0x000000044a02892b WebCore`WebCore::Element::updateFocusAppearance(this=0x000060c000086e00, (null)=Restore, revealMode=Reveal) at Element.cpp:3064:32
    frame #45: 0x000000044a027877 WebCore`WebCore::Element::focus(this=0x000060c000086e00, restorePreviousSelection=true, direction=FocusDirectionNone) at Element.cpp:3040:1
    frame #46: 0x000000044537e196 WebCore`WebCore::jsHTMLElementPrototypeFunctionFocusBody(lexicalGlobalObject=0x000061f00003fee8, callFrame=0x00007ffee3c22f90, castedThis=0x000060e000062f88, throwScope=0x00007ffee3c22dc0) at JSHTMLElement.cpp:4090:10
    frame #47: 0x00000004451c216e WebCore`long long WebCore::IDLOperation&lt;WebCore::JSHTMLElement&gt;::call&lt;&amp;(lexicalGlobalObject=0x000061f00003fee8, callFrame=0x00007ffee3c22f90, operationName=&quot;focus&quot;)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*) at JSDOMOperation.h:53:16
    frame #48: 0x00000004451c1cc4 WebCore`WebCore::jsHTMLElementPrototypeFunctionFocus(lexicalGlobalObject=0x000061f00003fee8, callFrame=0x00007ffee3c22f90) at JSHTMLElement.cpp:4096:12
    frame #49: 0x00005e9a69801178
    frame #50: 0x0000000474896c3e JavaScriptCore`llint_entry at LowLevelInterpreter.asm:1045
    frame #51: 0x0000000474877562 JavaScriptCore`vmEntryToJavaScript at LowLevelInterpreter64.asm:296
    frame #52: 0x0000000476d8fd90 JavaScriptCore`JSC::JITCode::execute(this=0x00006040000e7290, vm=0x000062f00001c400, protoCallFrame=0x00007ffee3c23520) at JITCodeInlines.h:38:38
    frame #53: 0x0000000476d91107 JavaScriptCore`JSC::Interpreter::executeCall(this=0x00006020000157f0, lexicalGlobalObject=0x000061f000032ce8, function=0x000062d0001809c0, callData=0x00007ffee3c24460, thisValue=JSValue @ 0x00007ffee3c23340, args=0x00007ffee3c247a0) at Interpreter.cpp:921:31
    frame #54: 0x0000000477724160 JavaScriptCore`JSC::call(globalObject=0x000061f000032ce8, functionObject=JSValue @ 0x00007ffee3c23980, callData=0x00007ffee3c24460, thisValue=JSValue @ 0x00007ffee3c239a0, args=0x00007ffee3c247a0) at CallData.cpp:58:28
    frame #55: 0x0000000477724672 JavaScriptCore`JSC::call(globalObject=0x000061f000032ce8, functionObject=JSValue @ 0x00007ffee3c23b80, callData=0x00007ffee3c24460, thisValue=JSValue @ 0x00007ffee3c23ba0, args=0x00007ffee3c247a0, returnedException=0x00007ffee3c24720) at CallData.cpp:65:22
    frame #56: 0x000000047772531a JavaScriptCore`JSC::profiledCall(globalObject=0x000061f000032ce8, reason=Other, functionObject=JSValue @ 0x00007ffee3c23e80, callData=0x00007ffee3c24460, thisValue=JSValue @ 0x00007ffee3c23ea0, args=0x00007ffee3c247a0, returnedException=0x00007ffee3c24720) at CallData.cpp:86:12
    frame #57: 0x000000044919756e WebCore`WebCore::JSExecState::profiledCall(lexicalGlobalObject=0x000061f000032ce8, reason=Other, functionObject=JSValue @ 0x00007ffee3c24100, callData=0x00007ffee3c24460, thisValue=JSValue @ 0x00007ffee3c24120, args=0x00007ffee3c247a0, returnedException=0x00007ffee3c24720) at JSExecState.h:73:16
    frame #58: 0x00000004491e631e WebCore`WebCore::JSEventListener::handleEvent(this=0x00006060000ba020, scriptExecutionContext={ origin = file://, url = file:///Users/jacklee/browser2/OpenSource/LayoutTests/editing/selection/focus-iframe-removal-crash.html, inMainFrame = 1, backForwardCacheState = NotInBackForwardCache }, event=0x000060700003c930) at JSEventListener.cpp:179:22
    frame #59: 0x000000044a0db8cb WebCore`WebCore::EventTarget::innerInvokeEventListeners(this={ origin = file://, url = file:///Users/jacklee/browser2/OpenSource/LayoutTests/editing/selection/focus-iframe-removal-crash.html, inMainFrame = 1, backForwardCacheState = NotInBackForwardCache }, event=0x000060700003c930, listeners={ size = 1, capacity = 1 }, phase=Bubbling) at EventTarget.cpp:335:40
    frame #60: 0x000000044a0d20b4 WebCore`WebCore::EventTarget::fireEventListeners(this={ origin = file://, url = file:///Users/jacklee/browser2/OpenSource/LayoutTests/editing/selection/focus-iframe-removal-crash.html, inMainFrame = 1, backForwardCacheState = NotInBackForwardCache }, event=0x000060700003c930, phase=Bubbling) at EventTarget.cpp:267:9
    frame #61: 0x000000044a1db9e6 WebCore`WebCore::Node::handleLocalEvents(this={ origin = file://, url = file:///Users/jacklee/browser2/OpenSource/LayoutTests/editing/selection/focus-iframe-removal-crash.html, inMainFrame = 1, backForwardCacheState = NotInBackForwardCache }, event=0x000060700003c930, phase=Bubbling) at Node.cpp:2371:5
    frame #62: 0x000000044a0a89cf WebCore`WebCore::EventContext::handleLocalEvents(this=0x00006040000e6e90, event=0x000060700003c930, phase=Bubbling) const at EventContext.cpp:55:17
    frame #63: 0x000000044a0a9ebe WebCore`WebCore::dispatchEventInDOM(event=0x000060700003c930, path=0x00007ffee3c255c0) at EventDispatcher.cpp:100:22
    frame #64: 0x000000044a0a96fb WebCore`WebCore::EventDispatcher::dispatchEvent(node={ origin = file://, url = file:///Users/jacklee/browser2/OpenSource/LayoutTests/editing/selection/focus-iframe-removal-crash.html, inMainFrame = 1, backForwardCacheState = NotInBackForwardCache }, event=0x000060700003c930) at EventDispatcher.cpp:154:9
    frame #65: 0x000000044a1dba3d WebCore`WebCore::Node::dispatchEvent(this={ origin = file://, url = file:///Users/jacklee/browser2/OpenSource/LayoutTests/editing/selection/focus-iframe-removal-crash.html, inMainFrame = 1, backForwardCacheState = NotInBackForwardCache }, event=0x000060700003c930) at Node.cpp:2381:5
    frame #66: 0x0000000449e9c2ff WebCore`WebCore::Document::finishedParsing(this={ origin = file://, url = file:///Users/jacklee/browser2/OpenSource/LayoutTests/editing/selection/focus-iframe-removal-crash.html, inMainFrame = 1, backForwardCacheState = NotInBackForwardCache }) at Document.cpp:5821:5
    frame #67: 0x000000044aeab228 WebCore`WebCore::HTMLConstructionSite::finishedParsing(this=0x0000612000054ae0) at HTMLConstructionSite.cpp:419:16
    frame #68: 0x000000044af32c80 WebCore`WebCore::HTMLTreeBuilder::finished(this=0x0000612000054ac0) at HTMLTreeBuilder.cpp:2843:12
    frame #69: 0x000000044aeb9742 WebCore`WebCore::HTMLDocumentParser::end(this=0x000062500022b100) at HTMLDocumentParser.cpp:449:20
    frame #70: 0x000000044aeb5482 WebCore`WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd(this=0x000062500022b100) at HTMLDocumentParser.cpp:458:5
    frame #71: 0x000000044aeb50d2 WebCore`WebCore::HTMLDocumentParser::prepareToStopParsing(this=0x000062500022b100) at HTMLDocumentParser.cpp:153:5
    frame #72: 0x000000044aeb9861 WebCore`WebCore::HTMLDocumentParser::attemptToEnd(this=0x000062500022b100) at HTMLDocumentParser.cpp:470:5
    frame #73: 0x000000044aeb9999 WebCore`WebCore::HTMLDocumentParser::finish(this=0x000062500022b100) at HTMLDocumentParser.cpp:498:5
    frame #74: 0x000000044b713ccd WebCore`WebCore::DocumentWriter::end(this=0x000061f000031110) at DocumentWriter.cpp:288:15
    frame #75: 0x000000044b711abf WebCore`WebCore::DocumentLoader::finishedLoading(this=0x000061f000031080) at DocumentLoader.cpp:452:14
    frame #76: 0x000000044b710d76 WebCore`WebCore::DocumentLoader::notifyFinished(this=0x000061f000031080, resource=0x0000619000086b80) at DocumentLoader.cpp:396:9
    frame #77: 0x000000044ba3e169 WebCore`WebCore::CachedResource::checkNotify(this=0x0000619000086b80) at CachedResource.cpp:376:17
    frame #78: 0x000000044ba34948 WebCore`WebCore::CachedResource::finishLoading(this=0x0000619000086b80, (null)=0x00006060000a4180) at CachedResource.cpp:392:5
    frame #79: 0x000000044ba3713d WebCore`WebCore::CachedRawResource::finishLoading(this=0x0000619000086b80, data=0x00006060000a4180) at CachedRawResource.cpp:123:21
    frame #80: 0x000000044b939732 WebCore`WebCore::SubresourceLoader::didFinishLoading(this=0x000061a000019e80, networkLoadMetrics=0x00007ffee3c275e8) at SubresourceLoader.cpp:734:17
    frame #81: 0x00000004332d818a WebKit`WebKit::WebResourceLoader::didFinishResourceLoad(this=0x0000608000044820, networkLoadMetrics=0x00007ffee3c275e8) at WebResourceLoader.cpp:251:19
    frame #82: 0x00000004340f3b07 WebKit`void IPC::callMemberFunctionImpl&lt;WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&amp;), std::__1::tuple&lt;WebCore::NetworkLoadMetrics&gt;, 0ul&gt;(object=0x0000608000044820, function=b0 7a 2d 33 04 00 00 00 00 00 00 00 00 00 00 00, args=size=1, (null)=std::__1::index_sequence&lt;0UL&gt; @ 0x00007ffee3c273f8)(WebCore::NetworkLoadMetrics const&amp;), std::__1::tuple&lt;WebCore::NetworkLoadMetrics&gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul&gt;) at HandleMessage.h:41:5
    frame #83: 0x00000004340f37ee WebKit`void IPC::callMemberFunction&lt;WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&amp;), std::__1::tuple&lt;WebCore::NetworkLoadMetrics&gt;, std::__1::integer_sequence&lt;unsigned long, 0ul&gt; &gt;(args=size=1, object=0x0000608000044820, function=b0 7a 2d 33 04 00 00 00 00 00 00 00 00 00 00 00)(WebCore::NetworkLoadMetrics const&amp;)) at HandleMessage.h:47:5
    frame #84: 0x00000004340ed860 WebKit`void IPC::handleMessage&lt;Messages::WebResourceLoader::DidFinishResourceLoad, WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&amp;)&gt;(decoder=0x000060b0000503d0, object=0x0000608000044820, function=b0 7a 2d 33 04 00 00 00 00 00 00 00 00 00 00 00)(WebCore::NetworkLoadMetrics const&amp;)) at HandleMessage.h:114:5
    frame #85: 0x00000004340eaf5c WebKit`WebKit::WebResourceLoader::didReceiveWebResourceLoaderMessage(this=0x0000608000044820, connection=0x0000614000000e40, decoder=0x000060b0000503d0) at WebResourceLoaderMessageReceiver.cpp:70:9
    frame #86: 0x0000000433251575 WebKit`WebKit::NetworkProcessConnection::didReceiveMessage(this=0x000060800000a820, connection=0x0000614000000e40, decoder=0x000060b0000503d0) at NetworkProcessConnection.cpp:91:32
    frame #87: 0x000000043010a599 WebKit`IPC::Connection::dispatchMessage(this=0x0000614000000e40, decoder=0x000060b0000503d0) at Connection.cpp:1008:14
    frame #88: 0x000000043010bff2 WebKit`IPC::Connection::dispatchMessage(this=0x0000614000000e40, message=unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt; @ 0x00007ffee3c293a0) at Connection.cpp:1077:9
    frame #89: 0x000000043010e05d WebKit`IPC::Connection::dispatchOneIncomingMessage(this=0x0000614000000e40) at Connection.cpp:1146:5
    frame #90: 0x000000043015390e WebKit`IPC::Connection::enqueueIncomingMessage(this=0x00006020000451b8)::$_7::operator()() at Connection.cpp:985:28
    frame #91: 0x00000004301537ee WebKit`WTF::Detail::CallableWrapper&lt;IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_7, void&gt;::call(this=0x00006020000451b0) at Function.h:52:39
    frame #92: 0x00000004738291a5 JavaScriptCore`WTF::Function&lt;void ()&gt;::operator(this=0x00007ffee3c29520)() const at Function.h:84:35
    frame #93: 0x0000000473968315 JavaScriptCore`WTF::RunLoop::performWork(this=0x0000607000005ce0) at RunLoop.cpp:119:9
    frame #94: 0x0000000473969782 JavaScriptCore`WTF::RunLoop::performWork(context=0x0000607000005ce0) at RunLoopCF.cpp:38:37
    frame #95: 0x00007fff366f8f12 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #96: 0x00007fff366f8eb1 CoreFoundation`__CFRunLoopDoSource0 + 103
    frame #97: 0x00007fff366f8ccb CoreFoundation`__CFRunLoopDoSources0 + 209
    frame #98: 0x00007fff366f79fa CoreFoundation`__CFRunLoopRun + 927
    frame #99: 0x00007fff366f6ffe CoreFoundation`CFRunLoopRunSpecific + 462
    frame #100: 0x00007fff38d8b2a8 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
    frame #101: 0x00007fff38e3dd2f Foundation`-[NSRunLoop(NSRunLoop) run] + 76
    frame #102: 0x00007fff7071c51a libxpc.dylib`_xpc_objc_main.cold.4 + 49
    frame #103: 0x00007fff7071c460 libxpc.dylib`_xpc_objc_main + 559
    frame #104: 0x00007fff7071bf93 libxpc.dylib`xpc_main + 377
    frame #105: 0x00000004313e11a5 WebKit`WebKit::XPCServiceMain(argc=1, argv=0x00007ffee3c2aab8) at XPCServiceMain.mm:172:5
    frame #106: 0x0000000434271a4b WebKit`WKXPCServiceMain(argc=1, argv=0x00007ffee3c2aab8) at WKMain.mm:33:12
    frame #107: 0x000000010bfd5e22 com.apple.WebKit.WebContent.Development`main(argc=1, argv=0x00007ffee3c2aab8) at AuxiliaryProcessMain.cpp:30:12
    frame #108: 0x00007fff704cecc9 libdyld.dylib`start + 1
    frame #109: 0x00007fff704cecc9 libdyld.dylib`start + 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647283</commentid>
    <comment_count>65</comment_count>
      <attachid>398035</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-29 21:55:32 -0700</bug_when>
    <thetext>Created attachment 398035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647295</commentid>
    <comment_count>66</comment_count>
      <attachid>398038</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-29 22:57:05 -0700</bug_when>
    <thetext>Created attachment 398038
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647302</commentid>
    <comment_count>67</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-30 00:29:19 -0700</bug_when>
    <thetext>Two changes were made in this revision:
1. Check null frame() in FrameSelection::setSelectionWithoutUpdatingAppearance after setFocusedElementIfNeeded() is called and return early to avoid crashes cause by reentrancy that detaches document.  

2. Check null frame() before calling frame::selectionChangeCallbacksDisabled (iOS platform only). 

(In reply to Jack from comment #66)
&gt; Created attachment 398038 [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647402</commentid>
    <comment_count>68</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-30 10:05:48 -0700</bug_when>
    <thetext>Many thanks to Alan for spending extra time to further simplify the test case.

Also found is that testRunner.waitUntilDone() is required for printing the passing message because this case is timing sensitive.

New test case:
&lt;div style=&quot;width: 1px; height: 1px;&quot;&gt;&lt;/div&gt;&lt;div contentEditable=true&gt;&lt;object data=&quot;?&quot; onload=objectOnLoad()&gt;&lt;/object&gt;&lt;/div&gt;&lt;span&gt;text&lt;/span&gt;
&lt;script&gt;
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    document.getSelection().empty();
    document.execCommand(&quot;selectAll&quot;, false);

    function objectOnLoad() {
        document.execCommand(&quot;insertUnorderedList&quot;, false);
        document.execCommand(&quot;italic&quot;, false);
        document.body.innerHTML = &quot;&lt;p&gt; Tests inserting list followed by an edit command. The test passes if WebKit doesn&apos;t crash or hit an assertion.&lt;/p&gt;&quot;;
        testRunner.notifyDone();
    }
&lt;/script&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647426</commentid>
    <comment_count>69</comment_count>
      <attachid>398038</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-30 11:13:21 -0700</bug_when>
    <thetext>Comment on attachment 398038
Patch

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

&gt; Source/WebCore/ChangeLog:50
&gt; -        (WebCore::Document::prepareForDestruction):
&gt; +        (WebCore::Document::willBeRemovedFromFrame):
&gt;          (WebCore::m_undoManager): Deleted.
&gt; +        (WebCore::Document::prepareForDestruction): Deleted.

These seems like accidental changes to another ChangeLog.

&gt; Source/WebCore/editing/FrameSelection.cpp:159
&gt; +    , m_focused(document &amp;&amp; document-&gt;frame() &amp;&amp; document-&gt;frame()-&gt;page() &amp;&amp; document-&gt;page()-&gt;focusController().focusedFrame() == document-&gt;frame())

document-&gt;frame()-&gt;page() here can be document-&gt;page()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647442</commentid>
    <comment_count>70</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-30 11:32:54 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #69)
&gt; Comment on attachment 398038 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=398038&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:50
&gt; &gt; -        (WebCore::Document::prepareForDestruction):
&gt; &gt; +        (WebCore::Document::willBeRemovedFromFrame):
&gt; &gt;          (WebCore::m_undoManager): Deleted.
&gt; &gt; +        (WebCore::Document::prepareForDestruction): Deleted.
&gt; 
&gt; These seems like accidental changes to another ChangeLog.
Sorry for the confusion. The previous change log was stale because I forgot to add changed function in new revisions, so am trying to amend it here.

&gt; &gt; Source/WebCore/editing/FrameSelection.cpp:159
&gt; &gt; +    , m_focused(document &amp;&amp; document-&gt;frame() &amp;&amp; document-&gt;frame()-&gt;page() &amp;&amp; document-&gt;page()-&gt;focusController().focusedFrame() == document-&gt;frame())
&gt; 
&gt; document-&gt;frame()-&gt;page() here can be document-&gt;page()
Got it! Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647450</commentid>
    <comment_count>71</comment_count>
      <attachid>398072</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-04-30 11:40:40 -0700</bug_when>
    <thetext>Created attachment 398072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647949</commentid>
    <comment_count>72</comment_count>
      <attachid>398072</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-05-01 11:41:19 -0700</bug_when>
    <thetext>Comment on attachment 398072
Patch

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

Looks almost ready to land.

&gt; Source/WebCore/ChangeLog:60
&gt; -        (WebCore::Document::prepareForDestruction):
&gt; +        (WebCore::Document::willBeRemovedFromFrame):
&gt;          (WebCore::m_undoManager): Deleted.
&gt; +        (WebCore::Document::prepareForDestruction): Deleted.
&gt;          * dom/Document.h:
&gt;          (WebCore::Document::editor):
&gt;          (WebCore::Document::editor const):
&gt;          (WebCore::Document::selection):
&gt;          (WebCore::Document::selection const):
&gt; -        * dom/PositionIterator.cpp:
&gt; -        (WebCore::PositionIterator::isCandidate const):
&gt;          * editing/AlternativeTextController.cpp:
&gt;          (WebCore::AlternativeTextController::AlternativeTextController):
&gt;          (WebCore::AlternativeTextController::stopPendingCorrection):

I think you still need to revert this section, which edits a previous ChangeLog entry.

&gt; Source/WebCore/ChangeLog:193
&gt;          (WebCore::Editor::findString):
&gt;          (WebCore::Editor::countMatchesForText):
&gt;          (WebCore::Editor::respondToChangedSelection):
&gt; -        (WebCore::Editor::shouldDetectTelephoneNumbers):
&gt; +        (WebCore::Editor::shouldDetectTelephoneNumbers const):
&gt;          (WebCore::Editor::scanSelectionForTelephoneNumbers):
&gt;          (WebCore::Editor::editorUIUpdateTimerFired):
&gt;          (WebCore::Editor::selectionStartHasMarkerFor const):
&gt; -        (WebCore::candidateRangeForSelection):
&gt;          (WebCore::Editor::stringForCandidateRequest const):
&gt;          (WebCore::Editor::contextRangeForCandidateRequest const):
&gt;          (WebCore::Editor::fontAttributesAtSelectionStart const):

Ditto

&gt; Source/WebCore/ChangeLog:229
&gt;          (WebCore::FrameSelection::modifyMovingRight):
&gt;          (WebCore::FrameSelection::modifyMovingLeft):
&gt;          (WebCore::FrameSelection::modify):
&gt; -        (WebCore::FrameSelection::prepareForDestruction):
&gt; +        (WebCore::FrameSelection::willBeRemovedFromFrame):
&gt;          (WebCore::FrameSelection::absoluteCaretBounds):
&gt;          (WebCore::FrameSelection::recomputeCaretRect):
&gt;          (WebCore::FrameSelection::contains const):

Ditto

&gt; Source/WebCore/ChangeLog:252
&gt;          (WebCore::FrameSelection::updateAppearanceAfterLayoutOrStyleChange):
&gt;          (WebCore::FrameSelection::selectRangeOnElement):
&gt;          (WebCore::FrameSelection::setCaretBlinks):
&gt; +        (WebCore::FrameSelection::prepareForDestruction): Deleted.
&gt;          * editing/FrameSelection.h:
&gt;          * editing/InsertIntoTextNodeCommand.cpp:
&gt;          (WebCore::InsertIntoTextNodeCommand::doApply):

Ditto

&gt; Source/WebCore/ChangeLog:300
&gt;          * editing/TypingCommand.h:
&gt;          * editing/cocoa/EditorCocoa.mm:
&gt;          (WebCore::Editor::selectionInHTMLFormat):
&gt; +        (WebCore::selectionAsAttributedString):
&gt;          (WebCore::Editor::writeSelectionToPasteboard):
&gt;          (WebCore::Editor::writeSelection):
&gt;          (WebCore::Editor::selectionInWebArchiveFormat):

Ditto

&gt; Source/WebCore/ChangeLog:330
&gt;          * editing/win/EditorWin.cpp:
&gt;          (WebCore::Editor::pasteWithPasteboard):
&gt;          (WebCore::Editor::webContentFromPasteboard):
&gt; +        * history/CachedFrame.cpp:
&gt; +        (WebCore::CachedFrame::destroy):
&gt;          * loader/FrameLoader.cpp:
&gt;          (WebCore::FrameLoader::willTransitionToCommitted):
&gt;          (WebCore::FrameLoader::closeURL):

Ditto

&gt; Source/WebCore/ChangeLog:339
&gt;          (WebCore::FrameLoader::clear):
&gt;          * page/Frame.cpp:
&gt;          (WebCore::Frame::Frame):
&gt; +        (WebCore::Frame::setView):
&gt; +        (WebCore::Frame::setDocument):
&gt;          (WebCore::Frame::requestDOMPasteAccess):
&gt;          (WebCore::Frame::setPageAndTextZoomFactors):
&gt;          * page/Frame.h:

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648004</commentid>
    <comment_count>73</comment_count>
      <attachid>398222</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-05-01 13:01:55 -0700</bug_when>
    <thetext>Created attachment 398222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648020</commentid>
    <comment_count>74</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-05-01 13:20:18 -0700</bug_when>
    <thetext>Remove the amendment in change log.

(In reply to Jack from comment #73)
&gt; Created attachment 398222 [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648024</commentid>
    <comment_count>75</comment_count>
      <attachid>398222</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-05-01 13:27:48 -0700</bug_when>
    <thetext>Comment on attachment 398222
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648038</commentid>
    <comment_count>76</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-01 13:50:23 -0700</bug_when>
    <thetext>Committed r261018: &lt;https://trac.webkit.org/changeset/261018&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 398222.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648123</commentid>
    <comment_count>77</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-05-01 15:57:32 -0700</bug_when>
    <thetext>Change log is amended manually:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261032 268f45cc-cd09-0410-ab3c-d52691b4dbfc</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>390468</attachid>
            <date>2020-02-11 16:53:06 -0800</date>
            <delta_ts>2020-02-11 16:53:06 -0800</delta_ts>
            <desc>Test case</desc>
            <filename>test-case.html</filename>
            <type>text/html</type>
            <size>2885</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PHN0eWxlPgojaHRtbHZhcjAwMDA0IHsgZmxleC1mbG93OiBjb2x1bW4tcmV2ZXJzZSB3cmFwOyBt
YXJnaW46IGF1dG8gYXV0bzsgLXdlYmtpdC1wYWRkaW5nLWJlZm9yZTogMHB4OyAtd2Via2l0LWJv
cmRlci12ZXJ0aWNhbC1zcGFjaW5nOiAwcHg7IGxpc3Qtc3R5bGU6IG91dHNpZGU7IC1tcy10ZXh0
LWNvbWJpbmUtaG9yaXpvbnRhbDogYWxsOyBtc28tYmFja2dyb3VuZC1zb3VyY2U6IGF1dG87IC13
ZWJraXQtbG9naWNhbC13aWR0aDogMHB4OyAtd2Via2l0LW1hc2stYm94LWltYWdlLXJlcGVhdDog
c3RyZXRjaDsgZ3JpZC1jb2x1bW46IGF1dG8gLyBhdXRvOyAtd2Via2l0LWNvbHVtbi1ydWxlLWNv
bG9yOiBncmVlbjsgZmxleC1kaXJlY3Rpb246IHJvdzsgaGVpZ2h0OiAxY207IGJvcmRlci1sZWZ0
OiByZ2IoNzYsMjksMTg3KSBtZWRpdW0gc29saWQ7IG1zby1ib3JkZXItbGVmdC1hbHQ6IHNvbGlk
IGdyZWVuIC4wcHQ7IC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7IC13ZWJraXQtc2hhcGUt
b3V0c2lkZTogdXJsKCNodG1sdmFyMDAwMDYpOyAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdy
aXRlOyBib3JkZXItaW1hZ2Utb3V0c2V0OiAwIDAgMCAxOyBzdG9wLWNvbG9yOiB0cmFuc3BhcmVu
dCB9Cjwvc3R5bGU+CjxzY3JpcHQ+CmZ1bmN0aW9uIGZyZWVtZW1vcnkoKSB7Cn0KZnVuY3Rpb24g
anNmdXp6ZXIoKSB7CnRyeSB7IC8qIG5ld3Zhcnt2YXIwMDA0MDpTZWxlY3Rpb259ICovIHZhciB2
YXIwMDA0MCA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpOyB9IGNhdGNoKGUpIHsgfQp0cnkgeyB2
YXIwMDA0MC5yZW1vdmVBbGxSYW5nZXMoKTsgfSBjYXRjaChlKSB7IH0KdHJ5IHsgLyogbmV3dmFy
e3ZhcjAwMjc1OmJvb2xlYW59ICovIHZhciB2YXIwMDI3NSA9IGRvY3VtZW50LmV4ZWNDb21tYW5k
KCJzZWxlY3RBbGwiLCBmYWxzZSk7IH0gY2F0Y2goZSkgeyB9Cn0KZnVuY3Rpb24gZXZlbnRoYW5k
bGVyMSgpIHsKdHJ5IHsgLyogbmV3dmFye3ZhcjAwMDQ0OmJvb2xlYW59ICovIHZhciB2YXIwMDA0
NCA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRPcmRlcmVkTGlzdCIsIGZhbHNlKTsgfSBj
YXRjaChlKSB7IH0KdHJ5IHsgLyogbmV3dmFye3ZhcjAwMDk3OmJvb2xlYW59ICovIHZhciB2YXIw
MDA5NyA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjcmVhdGVMaW5rIiwgZmFsc2UsICIjZm9vIik7
IH0gY2F0Y2goZSkgeyB9Cn0KZnVuY3Rpb24gZXZlbnRoYW5kbGVyMigpIHsKfQpmdW5jdGlvbiBl
dmVudGhhbmRsZXIzKCkgewp9CmZ1bmN0aW9uIGV2ZW50aGFuZGxlcjQoKSB7Cn0KZnVuY3Rpb24g
ZXZlbnRoYW5kbGVyNSgpIHsKfQo8L3NjcmlwdD4KPGJvZHkgb25sb2FkPWpzZnV6emVyKCk+Cjxk
YXRhIGlkPSJodG1sdmFyMDAwMDIiIHZhbHVlPSJdPTZRMylCJzlcLHUiIG5vd3JhcD0ibm93cmFw
IiBtaW5sZW5ndGg9IjAiIGFiYnI9IjNVRz8vUnlqTjc4XXkmbHQ7MCIgZGVmZXI9ImRlZmVyIiBi
YXNlZnJlcXVlbmN5PSIwLjgxNTYzMTI2OTAxNSI+WkpuZ0UmYW1wOyZsdDt7JnF1b3Q7QVU8L2Nv
bW1hbmQ+Cjxmb3JtIGlkPSJodG1sdmFyMDAwMDQiIG9uc3VibWl0PSJldmVudGhhbmRsZXIxKCki
IGZvcm1hY3Rpb249ImV2ZW50aGFuZGxlcjIoKSIgb25jaGFuZ2U9ImV2ZW50aGFuZGxlcjUoKSIg
Y2xhc3M9ImNsYXNzOSIgYXV0b2NvbXBsZXRlPSJvZmYiIG11bHRpcGxlPSJtdWx0aXBsZSIgbW9k
ZT0ic2hvd2luZyIgY2hhcj0iQCIgcHJvbXB0PSJ2ZFB4dSZhbXA7cnFbbmxmKT80KyRPJGAiIHZs
aW5rPSJyZWQiPgo8b2JqZWN0IGlkPSJodG1sdmFyMDAwMDUiIG9udW5sb2FkPSJldmVudGhhbmRs
ZXIxKCkiIGRhdGE9Ij8iIG5hbWU9InYjLnNjO3FyJmd0O28iIG9ubG9hZD0iZXZlbnRoYW5kbGVy
MSgpIiB1c2VtYXA9IiNodG1sdmFyMDAwMDUiIG1pbmxlbmd0aD0iMCIgbG9vcGVuZD0iLTEiIGxp
c3Q9Imh0bWx2YXIwMDAwMyIgbGVmdD0iMCIgYWx0PSImYW1wO2slQE5oOiVSQiZxdW90O2IwRyUi
Pgo8L29iamVjdD4KPC9mb3JtPgo8ZGlhbG9nIGlkPSJodG1sdmFyMDAwMDgiIHN0eWxlPSItd2Vi
a2l0LW1hc2stc2l6ZTogMHB4IC0xcHg7IC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMnB4IDdw
eDsgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjAwODY1OTYxNzg4
MzgzLCAwLjAzMTk2MDEwODc2MzgsIDAuNTUyNDM3Mjc4NDc5LCAwLjE2NjAwNDE0OTk0KTsgc3Ry
b2tlOiA7IGJvcmRlci1sZWZ0OiAwZXggc29saWQgcmdiKDEwOCwxNzEsMTEpIiBvcGVuPSJ0cnVl
IiBjbGFzcz0iY2xhc3M2IiBzdHlsZT0iZmxleC1iYXNpczogMXB4OyAtd2Via2l0LWh5cGhlbnM6
IGF1dG87IGxpc3Qtc3R5bGU6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFR
QU1RQUFPUkhIT1ZTS3VkZk91bHJTT3AzV095RFp1NlFkdkNjaFBHb2xmTzBvL1hCcy9mTndmalow
ZnJsMy96eTcvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBa0FBQkFBTEFBQUFBQVFBQkFBQUFWVklDU09aR2xDUUFv
c0o2bXU3Zml5WmVLcU5LVG9RR0RzTThoQkFEZ1VYb0dBaXFoU3ZwNVFBblFLR0lnVWh3RlVZTENW
REZDcktVRTFsQmF2QVZpRklEbFRJbWJLQzVHbTJoQjBTbEJDQk1RaUIwVWpJUUE3KSBkaXNjIG91
dHNpZGU7IGNvbnRlbnQ6IGNvdW50ZXIoYywgbG93ZXItYWxwaGEpOyBvZmZzZXQtcGF0aDogaW5o
ZXJpdCIgdGFiaW5kZXg9IjAiIG1lbnU9Imh0bWx2YXIwMDAwNSIgcmlnaHQ9IjcyIiBtZXRob2Q9
InBvc3QiIHR5cGU9InZpZGVvL21wZWc7IGNvZGVjcz0nYXZjMS40RDQwMEMnIiBzcGVsbGNoZWNr
PSJ0cnVlIj49NSFkXz9ATCZhbXA7dE5HLzg8L2RpYWxvZz4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>392594</attachid>
            <date>2020-03-05 10:29:27 -0800</date>
            <delta_ts>2020-03-05 10:29:27 -0800</delta_ts>
            <desc>Another test case</desc>
            <filename>edit-command.html</filename>
            <type>text/html</type>
            <size>381</size>
            <attacher name="Ali Juma">ajuma</attacher>
            
              <data encoding="base64">PGJvZHkgdENGMSBjb250ZW50ZWRpdGFibGU+PGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6b251bmxv
YWQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZighdG9wLmNvbnRhaW5lcikgewogICAgICAgICAg
ICB0b3AuY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAg
ICAgIHRvcC5jb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhbWVFbGVtZW50LnBhcmVudE5vZGUpOwog
ICAgICAgIH0KfSI+PC9pZnJhbWU+PHNjcmlwdD4Kb25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICBk
b2N1bWVudC5leGVjQ29tbWFuZCgnU2VsZWN0QWxsJyk7CiAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgnSW5zZXJ0VW5vcmRlcmVkTGlzdCcpOwp9CiAgPC9zY3JpcHQ+
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396822</attachid>
            <date>2020-04-17 18:35:05 -0700</date>
            <delta_ts>2020-04-17 19:42:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200417183504.patch</filename>
            <type>text/plain</type>
            <size>191994</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uZjcwMWM1YTU4MzYzNjgwYmI2N2Q2ZDE4MjJhYTAx
Yzk4ZmVlNzEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1fdW5kb01h
bmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRp
dG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgICogZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVj
dEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVk
RWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpl
ZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJv
Y2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2
ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZl
KToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OlVOTEVTU19FTkFCTEVEKToK
KyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKToKKyAgICAgICAg
KiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
ZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudCk6CisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFu
Z2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6On5UZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rp
b25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YmVoYXZpb3IgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1M
Q3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhUTUxDb3B5KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRGVsZXRl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkU21hcnREZWxldGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRNTENv
cHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRNTEN1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6RWRpdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4
dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5z
ZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGVyZm9ybUN1dE9y
Q29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0QmFz
ZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpiYXNlV3JpdGlu
Z0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2V0Q29tcG9zaXRp
b25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRDb21w
b3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aWdub3Jl
U3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpsZWFyblNwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1t
YXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTcGVsbENoZWNraW5n
RW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RlZFRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRh
VHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0UGxh
Y2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1lbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6SWdub3JlU2VsZWN0aW9uQ2hh
bmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkb2N1bWVudCBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6Q29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29uc3QpOgorICAgICAgICAqIGVk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWx3YXlz
VXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlv
dXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1Nl
bGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1
cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpmb2N1c2Vk
T3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRTdG9w
QmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNob3VsZFNob3dCbG9j
a0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFy
YW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgor
ICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRD
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZl
cmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0
aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGlu
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrQW5k
Tm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5n
Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlv
bklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdERP
TVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4dFpv
b21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9UZXh0
SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdp
dGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBmaWd1cmUgaW50byB2aXN1YWxs
eSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjYzhlOGEz
MzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2ZDA2MTE2ZWQ2Zjg5ZmFiOTBh
M2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4Miw2ICs1
ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwg
dW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwgbV9vcmllbnRhdGlvbk5vdGlm
aWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBtX2lkZW50aWZpZXIoRG9jdW1l
bnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRvTWFuYWdlcihVbmRvTWFuYWdl
cjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigq
dGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0
aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lk
ZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0ZmQwMGUxNWI4OGQ3MjJlOTVh
OTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4NmExYjFlMWY1NDIxYmRiNzg2
YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiArMTE5LDcgQEAgY2xhc3MgRG9j
dW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRUaW1lbGluZTsKIGNsYXNzIERv
Y3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2NsYXNzIEVkaXRvcjsKIGNsYXNz
IEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIEV4dGVuc2lvblN0
eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZv
bnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEZy
YW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgRnVsbHNjcmVlbk1hbmFnZXI7
CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsxNTc4LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgeyBtX2hhc1Zp
c3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQogICAgIGJvb2wgaGFzVmlzdWFs
bHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc3VhbGx5Tm9u
RW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIG1f
ZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX2Vk
aXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVj
dGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1Y3Rpb25G
bGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEgPDwgMSB9
OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5zaWduZWQgPSBEZWZhdWx0RG9j
dW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKQEAgLTIxMTYsNiAr
MjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOwogCiAgICAgSGFzaE1hcDxF
bGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmllZEVsZW1lbnRzTWFwOworCisg
ICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5pcXVlUmVmPEZyYW1lU2VsZWN0
aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50VGFyZ2V0RWxlbWVudEZvckRv
Y3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2IzYWE2OWZjYjVhYzgxMWI0ZThj
NzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdkMDBiYmYxMjBjMDM3OWVmMDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVu
dGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcioKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1f
dGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKQotICAg
ICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiB9CiAKQEAg
LTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3Rv
cFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikK
IHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJl
Zm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9
PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQ5LDcgKzE0OSw3IEBAIGJv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25z
dAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxv
d2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewotICAgIHJldHVybiAhbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgcmV0dXJuICFtX2RvY3Vt
ZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKICAgICBpZiAo
bV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAKICAgICBpZiAobV9yYW5n
ZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7CiAgICAg
ICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRp
c21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAtMjIwLDEyICsyMjAsMTIgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBj
bGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCBj
b3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFt
ZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxl
Y3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3Bl
bGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
bV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgIFJlZlB0cjxG
cmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7CisgICAgbV9kb2N1bWVudC51cGRh
dGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxl
Y3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBt
YXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRv
Y29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0yMzYsMTIgKzIzNiwxMiBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgIG1faXNEaXNt
aXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNl
bGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9m
V29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKICAgICAgICAg
YXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5
cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0s
IGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigp
LCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRl
eHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVj
dGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFu
Z2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5n
UGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpKTsKICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCkt
PmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CisgICAgICAgIHRleHRDaGVj
a2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAg
IGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDIsNyArMzAyLDcg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29u
c3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZlID0g
bV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVy
RG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZG9jdW1lbnQg
IT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KCpyYW5nZVdpdGhBbHRlcm5h
dGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogCiBGbG9hdFJlY3QgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsK
KyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52aWV3KCk7CiAgICAgaWYgKCF2
aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRz
KHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuCiAK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhl
IGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwK
ICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRo
YXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8gdW5kZXNpcmVkIGF1dG9jb3Jy
ZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29u
ZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24KIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29t
cG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYgKGNvbW1hbmQtPmlzVG9wTGV2
ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtl
cnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBtX2RvY3Vt
ZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0
RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0zOTUsMTUgKzM5NSwxNSBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmco
RWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlu
a0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgYXV0byYgbWFy
a2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgYXV0byYgbWFy
a2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIEVkaXRv
ckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRpdG9yQ2xpZW50KCkKIHsKLSAg
ICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdlKCktPmVkaXRvckNsaWVudCgp
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdlKCkgPyAmbV9kb2N1bWVudC5w
YWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAogVGV4dENoZWNrZXJDbGllbnQq
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKQEAgLTQ3MSw3ICs0NzEs
NyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNw
YWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRPZlNlbGVjdGlvbiA9PSBw
cmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBw
cmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQo
KSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOwogICAgIFN0cmluZyBzdHJp
bmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOwogICAgIGlmIChzdHJpbmcu
aXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5n
Lmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00NzksMTIgKzQ3OSwxMiBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9y
RGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhpcyB3aGl0ZXNwYWNlIHRvIGlu
ZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlvbiBmb2xsb3dpbmcgdGhpcwog
ICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVzIHRoZSBzYW1lIG9yaWdpbmFs
IHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAvLyB3b24ndCBhdXRvY29ycmVj
dCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5hZGRNYXJrZXIo
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJl
Y3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKKyAg
ICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdG
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewotICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2Vy
cygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1f
ZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250cm9sbGVyLmhhc01hcmtlcnMo
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKICAg
ICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pCiAg
ICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlv
bihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxhY2VkLCByZXN1bHQucmVwbGFj
ZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUCiAKICAg
ICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuc3RhcnRQ
b3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVn
aW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3Rl
clBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3Np
dGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKQEAgLTUyMCw3ICs1MjAs
NyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5k
T2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZv
cihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBlbmRPZldvcmRQb3NpdGlvbi5j
b250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2Zy
YW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIu
ZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3Vt
ZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgp
KTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlKTsKICAgICBp
ZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTgs
NyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJr
ZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAogQWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQoKQog
ewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUucGFnZSgpLT5hbHRlcm5hdGl2
ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKSAm
JiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRD
bGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0ZXJuYXRpdmVU
ZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBt
YXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwKIAog
ICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgc2lu
Y2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0aGUgRE9NLCBzdWNoIHRoYXQg
dGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gaXMgbm8gbG9u
Z2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5NTI2CiAgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9IHJlc29sdmVDaGFyYWN0ZXJM
b2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHModHJlZVNjb3BlUm9vdCksIHBh
cmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhFbmRD
b250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50KG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29u
dGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBkYXRlZFBhcmFncmFwaEVuZENv
bnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byByZXBsYWNlbWVu
dFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29u
dGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rp
b24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoLCBhbHRlcm5h
dGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAgYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAgICB0YXJnZXQgPSB0cmlnZ2Vy
aW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJn
ZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICAgICAgdGFyZ2V0
ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9jdW1lbnQpOwogICAgIGlmICgh
dGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGV2ZW50ID0gVGV4dEV2
ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93UHJveHkoKSwgdGV4dCwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVG
b3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93UHJveHkoKSwgdGV4dCwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdn
ZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwpAQCAtNjUz
LDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRp
Y3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRl
cm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBh
dXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1dG8mIGVkaXRvciA9IG1fZG9j
dW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5n
ZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRl
cm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZiMjA3ZWU4NzEwMWQ4M2EyM2Jk
OTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3OTFjZjgyMzFiOTA2MzNjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
b21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRWRpdENvbW1hbmQ7
CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3MgRWRpdG9yQ2xpZW50OwogY2xh
c3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwogY2xhc3MgVGV4dENoZWNrZXJD
bGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1lJiBmcmFt
ZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9KQorICAgIGV4cGxpY2l0IEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KSBVTkxFU1NfRU5BQkxF
RCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQgc3RhcnRBbHRlcm5hdGl2ZVRl
eHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19FTkFCTEVEKHsgfSkKQEAgLTE0
NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZlVGV4dENsaWVudCogYWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERv
Y3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVTU19FTkFCTEVECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDE0ZTNj
Nzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3ZDFiOTY1MjQ2NDIwZDExODI2
NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwxNyBAQCB2b2lkIEVkaXRDb21t
YW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRoZSBjb21wb3NpdGlvbiB3aWxs
IGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFzIGluIDxyZGFyOi8vcHJvYmxl
bS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhpcyBpbiAtW1dlYkhUTUxWaWV3
IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQgdGhlIHBob25lCiAgICAgLy8g
Z29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jYW5jZWxDb21wb3NpdGlv
bigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENvbXBvc2l0aW9uKCk7CiAjZW5k
aWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFwcGx5RWRpdGluZygqdGhpcykp
CisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAgICAgICAgIG1fY29tbWFuZHNb
aSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0b3IoKS51bmFwcGxpZWRFZGl0
aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0
aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQog
ICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9y
VW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0yNTgsMTMg
KzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnJlYXBwbHkoKQogICAgIC8v
IGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVhdGlvbiBvZiBWaXNpYmxlUG9z
aXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxSZWFwcGx5RWRpdGluZygq
dGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmco
KnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8mIGNvbW1hbmQgOiBtX2Nv
bW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5y
ZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6On5Db21wb3Np
dGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OndpbGxBcHBseUNv
bW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmco
KnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAgIHJldHVybiBkb2N1bWVudCgp
LmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdz
KCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseSgpCkBAIC0zNzgsMTMg
KzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseSgpCiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7Ci0gICAgZnJhbWUoKS5lZGl0
b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBs
aWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlz
RWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0byBmaXJzdFJhbmdlID0gZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byBmaXJz
dFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7
CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xNDY4LDcg
KzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIC8vIEZJWE1FICg1MDk4OTMx
KTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJXZWJWaWV3SW5zZXJ0QWN0aW9u
TW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhlcmUuCiAKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7Ci0g
ICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5n
U2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBkZWxldGVTZWxlY3Rpb24oZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBF
cXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpKTsKQEAgLTE1MDQsNyArMTUw
NCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgIG9wdGlvbnMuYWRkKFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUo
ZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVkaXRvcigpLm1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVudCgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
IAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1wdHkgcGFyYWdyYXBoLCByZXN0
b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBoIHRvIHRoZSBuZXcgZW1wdHkg
cGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBhcmFncmFwaCA9IGVuZGluZ1Nl
bGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUzYzM5NzExNjM1Yzg1YjE3ZDJk
ZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4NzJhY2I4OGJlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBA
IC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5n
U3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5nIHN0eWxlIHdhcyBwcmV2aW91
c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBwcmV2aW91cwogICAgIC8vIHBv
c2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIgdGhhdCBzdHlsZSBhcyB3ZWxs
LgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2Rvd25zdHJl
YW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5
bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQwLDcgKzc0MCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKCkKICAgICAKICAgICBhdXRv
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3Zl
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZE9mUGFyYWdy
YXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwog
ICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG1l
cmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZE1vdmVS
YW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVSZXBsYWNlZC5wdHIoKSkpCisg
ICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRl
ckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xk
ZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRv
bid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpCiAgICAgLy8gSW4gdGhpcyBj
YXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRo
ZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywKICAgICAvLyBidXQsIGlmIHdl
IGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0
eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8gcHJlc2VydmVUeXBpbmdTdHls
ZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBp
bmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2V0VHlwaW5n
U3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX3JlcGxhY2UpIHsK
ICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAgaWYgKHRleHRDb250cm9sICYm
IHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBmcmFtZSgpLmVkaXRvcigpLnRl
eHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9s
KTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIgbWFrZSB0aGUgc2VsZWN0aW9u
IHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxhY2VXaGl0ZVNwYWNlID0gdHJ1
ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFuY2VX
aGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2VzSW5TZWN1cmVGaWVsZCgpKSB7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAgICAgICAgVGV4dCYgdGV4dE5v
ZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyArOTU0LDcgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxjdWxhdGVUeXBpbmdTdHlsZUFm
dGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAg
ICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3Io
KS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdp
bmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1f
ZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rpb24oKS5pc0RpcmVjdGlvbmFs
KCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUyY2Y3ODU1NTliYzg3NmM4ODQ2
MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUyYjhmNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAi
RWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgpAQCAt
MTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1
bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKQogewotICAgIEFTU0VSVChk
b2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihtX2RvY3VtZW50LT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgc2V0U3RhcnRpbmdTZWxlY3Rp
b24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdT
ZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKICAgICA6
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50LmZyYW1lKCkpOwog
ICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKTsKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRpdENvbW1hbmQ6On5FZGl0Q29t
bWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5kOjpmcmFtZSgpCi17Ci0gICAg
QVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJuICpkb2N1bWVudCgpLmZyYW1l
KCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJhbWUoKSBjb25zdAotewotICAg
IEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFt
ZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4LDExICsxNTMsNyBAQCBzdGF0
aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBvc2l0aW9uSWZQb3NzaWJsZShF
ZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5kOjppc0VkaXRpbmdUZXh0QXJl
YU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZy
YW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29u
dGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1fZG9jdW1lbnQtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOwogICAgIGlmICghY29udGFp
bmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3ICsxOTgsNyBAQCB2b2lkIEVk
aXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBl
IHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogfQogCiB2b2lkIEVk
aXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBl
IHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRleCBkZWJjZmYwMjQ1ZWRmMGRl
ZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJjOGJkNTY5MGYxMTM1YzEwZDAw
MGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCkBAIC0zOCw3ICsz
OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3MgRnJhbWU7CiAKIFN0cmluZyBp
bnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9uKTsKIApAQCAtNjQsOCArNjMs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1hbmQoRG9jdW1lbnQmLCBFZGl0
QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAgIEVkaXRDb21tYW5kKERvY3Vt
ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsK
IAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAgIEZyYW1lJiBmcmFtZSgpOwog
ICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7
IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAg
Q29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJlZmE5NTFmZjUwYTZmYWQzNjk0
ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJjY2QwNTk1MzU1NWFhMjJiMjZm
ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTg2OSw3ICs4NjksNyBAQCBi
b29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkKIAogUmVmPEhUTUxFbGVtZW50
PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2Vw
YXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRvcigpLmRlZmF1bHRQYXJhZ3Jh
cGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXY6
CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBj
YXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0ODdjNzEwZWIzMGVlNTkyMGJk
NThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQzMTZhNTJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2LDcgKzE2ODYsNyBAQCBTdHls
ZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4oKnN0eWxlLT5zdHlsZSgpLCBj
b21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogCiAgICAg
cmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0g
ICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCku
c2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1
bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAgICAgaWYgKCFzaG91bGRTdHls
ZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpkb2N1bWVudCwgKm11dGFibGVT
dHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0U2l6ZSgpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJmNjNjMDdhOWEwOWUzNzliZjE5
MzhkYzU4YTIuLmEzOGIxZTAwNDZlY2E4NmQ5ZTBhNjMzN2I4ZTA0YmI1MDNlZWQ5MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMsOCBAQCBzdGF0aWMgU3RyaW5n
IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9uKEVkaXRpbmdTdHlsZSYgc3R5
bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1YmxpYyBEZWxldGVTZWxlY3Rp
b25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21tYW5kKERvY3VtZW50JiBkb2N1
bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRyPEZyYW1l
PiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQm
KTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCBvdmVy
cmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0aW9uIENsZWFyVGV4dENvbW1h
bmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBFZGl0QWN0aW9uOjpEZWxldGU7
CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRy
PEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoRG9j
dW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkp
CisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29tcG9zaXRpb24gc3RhdGUuCi0g
ICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1lbnQuZWRpdG9yKCkuY2xlYXIo
KTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENv
bW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBv
bGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBkb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRvIGNsZWFyQ29tbWFuZCA9IGFk
b3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkpOwogICAgIGNsZWFyQ29tbWFu
ZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKICAgICBjbGVhckNvbW1hbmQt
PmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lkIENsZWFyVGV4dENvbW1hbmQ6
OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKIAotVGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRnJhbWUmIGZyYW1lLCBP
cHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQor
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9jdW1l
bnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rp
b24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCisgICAgOiBt
X2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi0g
ICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFtZS5lZGl0b3IoKS5pZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhk
b2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZChmcmFtZS5z
ZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkpCisgICAgLCBtX2FwcGVhcmFu
Y2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBp
ZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVw
ZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFi
bGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCi0gICAgICAgIGZyYW1lLmVk
aXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAgICAgIGRvY3VtZW50
LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CiAKICAgICBpZiAodGVt
cG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9uVG9SZXN0b3JlID0gZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2VsZWN0aW9uVG9SZXN0b3JlID0g
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIHNldFNlbGVjdGlvbih0
ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMjM2LDEyICsyMzYsMTIg
QEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCkK
IAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNl
bGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxTZWxlY3Rpb24gPSBtX29wdGlv
bnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNlbGVjdGlvbiA/IEVkaXRvcjo6
UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6Tm87Ci0gICAg
ICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMobV93YXNJZ25v
cmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CisgICAgICAgIG1fZG9jdW1l
bnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVj
dGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpF
bmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0
VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsK
KyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJs
ZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNlbmRpZgogfQogCkBAIC0yNTAs
MTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6c2V0U2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAgICBhdXRvIG9wdGlvbnMgPSBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKTsKICAgICBpZiAobV9v
cHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKQogICAgICAg
ICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7Ci0gICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9k
b2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CiB9
CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQgdGhlIHNlbGVjdGlvbiBvdXRz
aWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNlIHRoZSB0YXJnZXQgY29udHJv
bCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlvbi4KIFZpc2libGVTZWxlY3Rp
b24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkKIHsKLSAgICBhdXRv
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byBz
ZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICgh
ZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAgLy8gSWYgdGhlIHRhcmdldCBp
cyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBvdXRzaWRlIG9m
IGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBAIFZpc2libGVTZWxlY3Rpb24g
RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkKIC8vIEZ1bmN0aW9uIGNv
bnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNrIHdoZW4gUGFnZSBvciBTZXR0
aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9yIEVkaXRvcjo6YmVoYXZpb3Io
KSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3IobV9mcmFtZS5zZXR0aW5ncygp
LmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVkaXRpbmdCZWhhdmlvcihtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgpKTsKIH0KIAogRWRpdG9yQ2xp
ZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAg
ICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAgIHJldHVybiBudWxscHRyOwog
fQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6OmhhbmRsZVRleHRFdmVudChUZXh0
RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
OworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHkoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAogZW51bSBjbGFzcyBDbGlwYm9h
cmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRpYyBib29sIGRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBDbGlwYm9hcmRFdmVudEtpbmQK
IAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZl
bnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50S2luZDo6QmVmb3JlQ3V0KTsK
QEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogCiBib29sIEVk
aXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJv
bVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9yZUNvcHkpOwogfQpAQCAtNDg0
LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25zdAogewogICAgIGlmIChp
bWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVybiBz
ZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0K
IAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkpCisg
ICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3Vw
cHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBAIGJvb2wgRWRpdG9yOjpjYW5Q
YXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUoKSBjb25zdAogewotICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFu
Z2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCkBAIC01MjQsNyAr
NTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRlKCkKIHsKICAgICBpZiAoYmVo
YXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFu
dWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgp
ID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6OnNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJl
Y3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGcKICAg
ICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0FjdGlvbikgewogICAgICAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1bWVudCgpLCBjYW5TbWFydENv
cHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxldGUgOiAwLCBncmFudWxhcml0
eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsK
QEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZwogCiB2b2lkIEVkaXRv
cjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05v
bmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCks
IHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGVkaXRpbmdBY3Rpb24pLT5h
cHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAKIHZv
aWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFu
ZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSht
X2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoY29uc3QgU3Ry
aW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBAIC02NjEsNyArNjYxLDcgQEAg
Ym9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdt
ZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50
IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
IG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5k
bGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxl
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODksMTkgQEAgdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5n
U2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5n
T3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBl
ZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAgICAgICAgIFN0cmluZyB0ZXh0
ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29t
bWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgpKTsKLSAgICAgICAgcmVwbGFj
ZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGlu
Z0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwgdGV4dCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFY
VGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVu
YXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCiAgICAgaWYgKEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBF
ZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBjb21tYW5kLT5kb2N1
bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRp
b24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVJbnNl
cnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBj
b21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRU
ZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVj
dFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2Uo
KQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
IH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QK
QEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2Uq
IHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIHsgICAKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29w
eSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50
KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDdXQp
OwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiAKIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdl
LCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLm1h
aW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAm
JiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKKyAgICBpZiAobV9kb2N1bWVu
dC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZy
b21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hv
dWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAgLTc4MiwxNyArNzgyLDE3IEBA
IHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICBOb2Rl
KiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVh
bSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAg
Tm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCku
dXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoZW5jbG9zaW5nQmxvY2so
c3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
OwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgxMiwx
MiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIAogVHJp
U3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
LCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Cisg
ICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJp
U3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewot
ICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKTsKLSAgICAgICAgYXV0byog
ZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwg
dWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOwogICAgICAg
ICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAg
ICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAgLTgyNywxMiArODI3LDEyIEBA
IFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKIAog
VHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKLSAgICAgICAgaWYgKGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewor
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRy
aVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsK
LSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZyk7Ci0gICAgICAgIGF1dG8q
IGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlmIChtX2RvY3VtZW50LnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFn
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9sVGFnKTsKICAgICAg
ICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBAIC04NzIsNyArODcyLDcgQEAg
Ym9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIAogUmVmUHRyPE5v
ZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogewotICAgIGlmICghY2Fu
RWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFj
YW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3QgPSBJbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQdHI8Tm9kZT4gRWRpdG9yOjpp
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5
KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNo
bHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCZk
b2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjpp
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0
UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVk
aXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9y
ZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0
b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKCkKIAogdm9pZCBFZGl0b3I6
OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHko
KSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hs
eSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmRlY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3ICs5MzIsNyBAQCBFbGVtZW50
KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRUYXJnZXRGcm9tKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBmaW5kRXZlbnRUYXJnZXRGcm9t
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8
RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgaWYg
KCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9T
ZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0g
aW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5n
IGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24o
KnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAg
IFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgIWRpc3BhdGNo
QmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBAQCB2b2lkIEVkaXRvcjo6YXBw
bHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNsaWVudCgpLT5kaWRBcHBseVN0
eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkQXBwbHlTdHls
ZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRjaElucHV0RXZlbnQoKmVsZW1l
bnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0KQEAgLTk4NCwxMyArOTg1LDEz
IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNl
bGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRp
bmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5w
dXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5bGUsIGVkaXRpbmdBY3Rpb24p
OwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCplbGVt
ZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihT
dHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisg
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAgLTEw
MTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVmPEVk
aXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNpbmNl
IG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgp
LT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9u
cygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkp
KQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRl
ck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3Jh
cGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZQog
ICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHls
ZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9
CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBlZGl0
aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxl
QXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKICAgICAgICAgcmV0dXJuIGVk
aXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBFZGl0aW5nU3R5bGU6
OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZTdHlsZShtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uU3Rh
cnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKLSAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNl
bGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCisgICAgUmVmUHRy
PEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxl
Y3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLAogICAgICAgICBw
cm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBpZiAoIXNlbGVj
dGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5n
KENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZjb21tYW5kKTsKIAogICAgICAg
ICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkKLSAgICAgICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAgICAgLy8gQ29tbWFuZCB3
aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkgaW4gdGhlIGNhc2Ugb2YgdHlw
aW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQoKSA9PSAmY29tbWFuZCkKQEAg
LTEyMDAsMTYgKzEyMDEsMTggQEAgdm9pZCBFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcoRWRpdENv
bW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9yKEZyYW1lJiBmcmFtZSkKLSAg
ICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1bWVudCYgZG9jdW1lbnQpCisg
ICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFtZSgqbV9kb2N1bWVudC5mcmFt
ZSgpKQogICAgICwgbV9raWxsUmluZyhtYWtlVW5pcXVlPFBBTDo6S2lsbFJpbmc+KCkpCi0gICAg
LCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4oZnJhbWUpKQotICAgICwg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcj4oZnJhbWUpKQorICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENo
ZWNrZXI+KCpkb2N1bWVudC5mcmFtZSgpKSkKKyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGRvY3VtZW50KSkKICAg
ICAsIG1fZWRpdG9yVUlVcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVU
aW1lckZpcmVkKQogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgLCBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0
ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycykK
ICNlbmRpZgogeworCiB9CiAKIEVkaXRvcjo6fkVkaXRvcigpID0gZGVmYXVsdDsKQEAgLTEyMjAs
NyArMTIyMyw3IEBAIHZvaWQgRWRpdG9yOjpjbGVhcigpCiAgICAgaWYgKG1fY29tcG9zaXRpb25O
b2RlKSB7CiAgICAgICAgIG1fY29tcG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYg
KEVkaXRvckNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjbGll
bnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+
ZGlzY2FyZGVkQ29tcG9zaXRpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICB9CiAgICAgbV9j
dXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0
aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwpAQCAtMTIzOCwxMiArMTI0MSwxMiBAQCB2b2lkIEVkaXRv
cjo6Y2xlYXIoKQogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQsIFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUpCiB7
Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQo
dGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3VtZW50
LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdn
ZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JD
b25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1f
ZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2
ZW50SW5wdXRDb21wb3NpdGlvbik7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRD
b21wb3NpdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRp
b25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAzLDEwICsxMzA2
LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBj
b2RlIHNob3VsZCBjb25kaXRpb25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRoZXIg
dGhlIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNldCBm
b3IgdGhlIG5ld2x5IGZvY3VzZWQgZnJhbWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkgJiYg
Y2xpZW50KCktPnNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+
cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVj
dGlvbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1
cnJlbnRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEz
MTksMTAgKzEzMjAsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYg
KCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5z
ZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9F
ZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJv
b2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
PmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNB
cHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAw
KTsKQEAgLTEzMzksMTAgKzEzNDAsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNl
cGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNl
cnRMaW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJl
dCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxl
T3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0Fw
cGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlw
aW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDYs
NyArMTQwNyw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNw
ZWNpZmllciBhY3Rpb24pCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKHRydWUpOwogICAgIH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9z
aW5nVGV4dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpCiAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0
ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JE
ZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5v
dFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGlt
YWdlRWxlbWVudCA9IG51bGxwdHI7CkBAIC0xNDI1LDcgKzE0MjYsNyBAQCB2b2lkIEVkaXRvcjo6
cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAg
ICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJk
OjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2Fu
U21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFU
cmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUo
KS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1f
ZG9jdW1lbi5mcmFtZSgpLCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNl
bmRpZgogICAgICAgICB9CiAgICAgfQpAQCAtMTQzNCwxMCArMTQzNSwxMCBAQCB2b2lkIEVkaXRv
cjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgIGlm
IChhY3Rpb24gPT0gQ3V0QWN0aW9uKSB7CiAgICAgICAgIFN0cmluZyB0ZXh0OwogICAgICAgICBp
ZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHRl
eHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHRleHQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIEVkaXRBY3Rpb246OkN1dCk7CiAgICAg
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICAg
ICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dCh0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VO
b3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CiAgICAgfQogfQogCkBAIC0xNDU0LDcgKzE0NTUsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGUo
UGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICAgICAgcmV0dXJuOwogICAgIHVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBSZXNvdXJjZUNhY2hlVmFs
aWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IoZG9jdW1lbnQoKS5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3Rl
V2l0aFBhc3RlYm9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
IH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBh
c3RlYm9hcmQpOwpAQCAtMTQ3OSw3ICsxNDgwLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNRdW90
YXRpb24oKQogICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNl
KTsKICAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHBy
ZXNzb3IoZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKICAgICBhdXRvIHBhc3Rl
Ym9hcmQgPSBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKTsKLSAgICBpZiAobV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZC5nZXQo
KSwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQsIFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlv
biB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZCgq
cGFzdGVib2FyZCk7CkBAIC0xNjE3LDcgKzE2MTgsNyBAQCB2b2lkIEVkaXRvcjo6cmVuZGVyTGF5
ZXJEaWRTY3JvbGwoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChtX2ltYWdlRWxl
bWVudHNUb0xvYWRCZWZvcmVSZXZlYWxpbmdTZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIHN0YXJ0Q29udGFpbmVyID0gbWFrZVJlZlB0cihtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpKTsKKyAgICBhdXRv
IHN0YXJ0Q29udGFpbmVyID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAoIXN0YXJ0Q29udGFpbmVy
KQogICAgICAgICByZXR1cm47CiAKQEAgLTE4NTEsOCArMTg1Miw4IEBAIHZvaWQgRWRpdG9yOjp0
b2dnbGVVbmRlcmxpbmUoKQogdm9pZCBFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdy
aXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgaWYgKGluU2FtZVBhcmFncmFwaChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVFbmQo
KSkgJiYgCi0gICAgICAgIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA9
PSBkaXJlY3Rpb24pCisgICAgaWYgKGluU2FtZVBhcmFncmFwaChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnZpc2libGVFbmQoKSkKKyAgICAgICAgJiYgYmFzZVdyaXRpbmdEaXJlY3Rpb25G
b3JTZWxlY3Rpb25TdGFydCgpID09IGRpcmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgICAgIApAQCAtMTg4Miw3ICsxODgzLDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6
OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIGF1
dG8gcmVzdWx0ID0gV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7CiAKLSAgICBQb3NpdGlv
biBwb3MgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcG9zID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgIE5vZGUq
IG5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0xOTE3LDcgKzE5MTgsNyBAQCB2b2lkIEVkaXRvcjo6c2VsZWN0Q29t
cG9zaXRpb24oKQogICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU3ODE+CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb247CiAgICAgc2VsZWN0
aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5l
bmRQb3NpdGlvbigpKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxl
Y3Rpb24sIHsgfSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2Vs
ZWN0aW9uLCB7IH0pOwogfQogCiB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0aW9uKCkKQEAg
LTE5NTIsMjggKzE5NTMsMjggQEAgdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIHRleHQpCiAKIGNsYXNzIFNldENvbXBvc2l0aW9uU2NvcGUgewogcHVibGljOgot
ICAgIFNldENvbXBvc2l0aW9uU2NvcGUoRnJhbWUmIGZyYW1lKQotICAgICAgICA6IG1fZnJhbWUo
ZnJhbWUpCi0gICAgICAgICwgbV90eXBpbmdHZXN0dXJlSW5kaWNhdG9yKGZyYW1lKQorICAgIFNl
dENvbXBvc2l0aW9uU2NvcGUoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgICAgICA6IG1fZG9jdW1l
bnQoUmVmUHRyKCZkb2N1bWVudCkpCisgICAgICAgICwgbV90eXBpbmdHZXN0dXJlSW5kaWNhdG9y
KCpkb2N1bWVudC5mcmFtZSgpKQogICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0
SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9y
KCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKICAgICB9CiAKICAgICB+U2V0Q29t
cG9zaXRpb25TY29wZSgpCiAgICAgewotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKLSAgICAgICAgaWYgKGF1dG8qIGVkaXRvckNsaWVu
dCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBtX2RvY3VtZW50LT5lZGl0
b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKKyAgICAgICAgaWYgKGF1dG8q
IGVkaXRvckNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICAg
ICAgZWRpdG9yQ2xpZW50LT5kaWRVcGRhdGVDb21wb3NpdGlvbigpOwogICAgIH0KIAotICAgIFJl
ZjxGcmFtZT4gbV9mcmFtZTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAg
VXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IgbV90eXBpbmdHZXN0dXJlSW5kaWNhdG9yOwogfTsK
IAogdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1vZGUgPT0gQ29uZmlybUNvbXBvc2l0
aW9uIHx8IG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pOwotICAgIFNldENvbXBvc2l0aW9uU2Nv
cGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
IHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICBpZiAobW9kZSA9PSBDYW5j
ZWxDb21wb3NpdGlvbikKICAgICAgICAgQVNTRVJUKHRleHQgPT0gZW1wdHlTdHJpbmcoKSk7CkBA
IC0xOTg0LDcgKzE5ODUsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3Ry
aW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKICAgICBtX2N1c3RvbUNvbXBvc2l0
aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRz
LmNsZWFyKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gQWx3YXlzIGRlbGV0ZSB0aGUgY3VycmVudCBjb21wb3NpdGlvbiBiZWZvcmUgaW5zZXJ0
aW5nIHRoZSBmaW5hbGl6ZWQgY29tcG9zaXRpb24gdGV4dCBpZiB3ZSdyZSBjb25maXJtaW5nIG91
ciBjb21wb3NpdGlvbi4KQEAgLTIwMDAsMTMgKzIwMDEsMTMgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAK
ICAgICBpZiAobW9kZSA9PSBDYW5jZWxDb21wb3NpdGlvbikgewogICAgICAgICAvLyBBbiBvcGVu
IHR5cGluZyBjb21tYW5kIHRoYXQgZGlzYWdyZWVzIGFib3V0IGN1cnJlbnQgc2VsZWN0aW9uIHdv
dWxkIGNhdXNlIGlzc3VlcyB3aXRoIHR5cGluZyBsYXRlciBvbi4KLSAgICAgICAgVHlwaW5nQ29t
bWFuZDo6Y2xvc2VUeXBpbmcoJm1fZnJhbWUpOworICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9z
ZVR5cGluZyhtX2RvY3VtZW50KTsKICAgICB9CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGlu
ZT4mIHVuZGVybGluZXMsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvbkhpZ2hsaWdodD4mIGhpZ2hs
aWdodHMsIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCBzZWxlY3Rpb25FbmQpCiB7
Ci0gICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZnJhbWUpOwor
ICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2RvY3VtZW50KTsK
IAogICAgIC8vIFVwZGF0ZXMgc3R5bGVzIGJlZm9yZSBzZXR0aW5nIHNlbGVjdGlvbiBmb3IgY29t
cG9zaXRpb24gdG8gcHJldmVudAogICAgIC8vIGluc2VydGluZyB0aGUgcHJldmlvdXMgY29tcG9z
aXRpb24gdGV4dCBpbnRvIHRleHQgbm9kZXMgb2RkbHkuCkBAIC0yMDE1LDcgKzIwMTYsNyBAQCB2
b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogCiAgICAgc2VsZWN0Q29tcG9zaXRpb24oKTsKIAotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgb3JpZ2lu
YWxUZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CkBAIC0yMDIzLDEwICsyMDI0LDEwIEBAIHZvaWQgRWRp
dG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21w
b3NpdGlvblVuZGVybGluCiAgICAgaWYgKGlzU3RhcnRpbmdUb1JlY29tcG9zZUV4aXN0aW5nUmFu
Z2UpIHsKICAgICAgICAgLy8gV2UgcGFzcyBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25G
aW5hbCBoZXJlIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlIHJlbW92aW5nIGNvbXBvc2l0aW9uIHRl
eHQgdGhhdCBoYXMgYmVlbiBmaW5hbGl6ZWQuCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZVNlbGVjdGlvbihkb2N1bWVudCgpLCAwLCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25G
aW5hbCk7Ci0gICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAg
ICAgICAgICAvLyBJZiBkZWxldGlvbiB3YXMgcHJldmVudGVkLCB0aGVuIHdlIG5lZWQgdG8gY29s
bGFwc2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgZW5kIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHRleHQg
d2lsbCBub3QgYmUgcmVjb21wb3NlZC4KLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHsgY3VycmVudFNlbGVjdGlvbi5lbmQoKSwgY3VycmVudFNlbGVjdGlvbi5l
bmQoKSB9KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHsgY3VycmVudFNlbGVjdGlvbi5lbmQoKSwgY3VycmVudFNlbGVjdGlvbi5lbmQoKSB9KTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMjA4Miw4ICsyMDgzLDggQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KICAgICAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1bWVudCgpLCB0ZXh0
LCBUeXBpbmdDb21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQgfCBUeXBpbmdDb21tYW5kOjpQcmV2
ZW50U3BlbGxDaGVja2luZywgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uUGVuZGluZyk7
CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9zaXRpb24gbm93
LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5iYXNlKCkuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQb3NpdGlvbiBiYXNl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgp
OworICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmV4dGVudCgpOwogICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICAgICAgdW5zaWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKTsKICAgICAgICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNh
dGVkTm9kZSgpOwpAQCAtMjEwOSw3ICsyMTEwLDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4K
ICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4oYmFzZU9mZnNldCArIHNlbGVj
dGlvblN0YXJ0LCBleHRlbnRPZmZzZXQpOwogICAgICAgICAgICAgdW5zaWduZWQgZW5kID0gc3Rk
OjptaW4oc3RkOjptYXgoc3RhcnQsIGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25FbmQpLCBleHRlbnRP
ZmZzZXQpOwogICAgICAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShi
YXNlTm9kZS0+ZG9jdW1lbnQoKSwgYmFzZU5vZGUsIHN0YXJ0LCBiYXNlTm9kZSwgZW5kKTsKLSAg
ICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJh
bmdlLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
Ok5vKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShzZWxlY3RlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6Ok5vKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEyMyw3ICsyMTI0LDcg
QEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICBpZiAoIWNsaWVudCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7CiAKQEAgLTIxMzksNyArMjE0MCw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkK
ICAgICAgICAgCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVzZSAibGVhcm4iIGJ1
dHRvbiBvbiAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24ndCBjYWxsIHRoaXMg
ZnVuY3Rpb24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2VycyBhcm91bmQgdGhl
IGxlYXJuZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4KIAotICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCiAg
ICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKQEAgLTIxNTIsMTQgKzIxNTMsMTUgQEAgdm9p
ZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmcoKQogCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiB7Ci0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0aW9uKG1fZnJhbWUpOwotCisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVu
dChtX2RvY3VtZW50KTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwor
ICAgIAogICAgIC8vIFRoZSBiYXNpYyBhcHByb2FjaCBpcyB0byBzZWFyY2ggaW4gdHdvIHBoYXNl
cyAtIGZyb20gdGhlIHNlbGVjdGlvbiBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZG9jLCBhbmQKICAg
ICAvLyB0aGVuIHdlIHdyYXAgYW5kIHNlYXJjaCBmcm9tIHRoZSBkb2Mgc3RhcnQgdG8gKGFwcHJv
eGltYXRlbHkpIHdoZXJlIHdlIHN0YXJ0ZWQuCiAgICAgCiAgICAgLy8gU3RhcnQgYXQgdGhlIGVu
ZCBvZiB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5n
IGF0IHRoZSBzZWxlY3Rpb24gZW5kIG1ha2VzCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxs
aW5nIiBjb21tYW5kcyB3b3JrLgotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIFJlZjxSYW5nZT4g
c3BlbGxpbmdTZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKIAogICAg
IGJvb2wgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTIzMDgsOCArMjMxMCw4IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBj
b25mdXNlZCB3aXRoIGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFw
aAogICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgq
Z3JhbW1hclNlYXJjaFJhbmdlLCB7IGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWls
LnJhbmdlLmxvY2F0aW9uLCBncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0aCB9KTsKLSAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFt
bWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVM
VF9BRkZJTklUWSkpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbigpOwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIzMjAs
OCArMjMyMiw4IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBz
dGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUg
cmVkIHNxdWlnZ2xlIGxhdGVyLgogICAgICAgICAKICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1Jh
bmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3Bl
bGxpbmdPZmZzZXQsIG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpIH0pOwotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFu
Z2UsIERPV05TVFJFQU0pKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxl
Y3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihtaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAg
ICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVk
V29yZCk7CiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGlu
Z1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjMzNSw3ICsyMzM3LDcgQEAg
U3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2Vk
Tm9kZSkgY29uc3QKICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkg
fHwgIWNsaWNrZWROb2RlIHx8ICFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGNsaWNrZWROb2Rl
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg5LDcgKzIzOTEsNyBAQCBTdHJp
bmcgRWRpdG9yOjptaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9y
Ojppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5H
KQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNs
aWVudCgpLCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQwNCw3ICsyNDA2LDcgQEAg
VmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkKSBjb25zdAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAo
Y2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQs
IFN0cmluZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAg
ICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBn
dWVzc2VzOwogfQogCkBAIC0yNDEyLDcgKzI0MTQsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6
Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJv
bwogewogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZTsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGlu
Z1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CiAgICAgICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkp
OwogICAgICAgICAgICAgd29yZFNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRH
cmFudWxhcml0eSk7CkBAIC0yNDcyLDcgKzI0NzQsOCBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0
aQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KQogewotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50
KG1fZG9jdW1lbnQpOworICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CiAK
ICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjU5NCwxOSArMjU5NywxOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5n
c0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAg
IC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3Nw
ZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlz
RW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbigqbWlzc3Bl
bGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgaWYgKCFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAg
ICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
IHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNl
cnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCku
c2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJl
Y3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0
QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8s
IFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAKICAgICAgICAgLy8gUmVz
ZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAgICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5
KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkpCkBAIC0yNjc4LDcgKzI2ODEsNyBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5n
RW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNr
aW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hl
Y2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvciht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUo
KSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpA
QCAtMjcyNiw3ICsyNzI5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAocGFy
YWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgYXN5
bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CisgICAgYm9vbCBhc3luY2hy
b25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAogICAgIC8vIEluIGFzeW5j
aHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRl
bmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2lu
Z1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7CkBAIC0yNzQxLDcg
KzI3NDQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0KIAogICAgIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRl
eHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJl
c3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9m
UGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2
ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
ICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdHMp
OwogfQogCkBAIC0yNzg3LDcgKzI3OTAsOCBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVj
a2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYQogCiB2
b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAg
IFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3Rl
Y3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOworICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUo
bV9mcmFtZSk7CiAKICAgICBhdXRvIHRleHRDaGVja2luZ09wdGlvbnMgPSByZXF1ZXN0LmRhdGEo
KS5jaGVja2luZ1R5cGVzKCk7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChy
ZXF1ZXN0LmNoZWNraW5nUmFuZ2UoKSwgcmVxdWVzdC5hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdl
KCksICZyZXF1ZXN0LnBhcmFncmFwaFJhbmdlKCkpOwpAQCAtMjgxMSw5ICsyODE1LDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICBib29sIGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFw
aEJvdW5kYXJpZXMgPSBmYWxzZTsKIAogICAgIGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQg
fHwgc2hvdWxkTWFya1NwZWxsaW5nIHx8IHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbikgewotICAg
ICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkg
PT0gVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVT
ZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNh
dmUgdGhlIGNhcmV0IHBvc2l0aW9uIHNvIHdlIGNhbiByZXN0b3JlIGl0IGxhdGVyIGlmIG5lZWRl
ZAotICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCk7CisgICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9u
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICAgICAgICAg
IHNlbGVjdGlvbk9mZnNldCA9IHBhcmFncmFwaC5vZmZzZXRUbyhjYXJldFBvc2l0aW9uKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5n
ZSA9IHRydWU7CiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiAoc2VsZWN0
aW9uT2Zmc2V0ID4gcGFyYWdyYXBoLnRleHQoKS5sZW5ndGgoKSB8fCBwYXJhZ3JhcGgudGV4dCgp
W3NlbGVjdGlvbk9mZnNldCAtIDFdID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjg5NSwxMyAr
Mjg5OSwxMyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVj
a1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvUmVwbGFjZShyYW5nZVRvUmVwbGFj
ZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFj
ZSkpCisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSB7Ci0gICAgICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNl
KTsKKyAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihz
ZWxlY3Rpb25Ub1JlcGxhY2UpOwogICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCkBAIC0yOTEwLDcgKzI5MTQs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVs
bGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdl
VG9SZXBsYWNlLCByZXBsYWNlbWVudCwgeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0p
OwogCiAgICAgICAgICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQo
KS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoRWxl
bWVudCogcm9vdCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxl
RWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcm9vdCA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24ocm9vdCwgQVhPYmpl
Y3RDYWNoZTo6QVhBdXRvY29ycmVjdGlvbk9jY3VyZWQpOwogICAgICAgICAgICAgICAgIH0KIApA
QCAtMjk0MCwxMyArMjk0NCwxMyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29u
c3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICBl
eHRlbmRlZFBhcmFncmFwaC5leHBhbmRSYW5nZVRvTmV4dEVuZCgpOwogICAgICAgICBpZiAocmVz
dG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlICYmIHNlbGVjdGlvbk9mZnNldCA8PSBleHRlbmRlZFBh
cmFncmFwaC5yYW5nZUxlbmd0aCgpKSB7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdl
ID0gZXh0ZW5kZWRQYXJhZ3JhcGguc3VicmFuZ2UoeyAwLCBzZWxlY3Rpb25PZmZzZXQgfSk7Ci0g
ICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVUbyhzZWxlY3Rpb25SYW5nZS0+ZW5k
UG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLm1vdmVUbyhzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAg
ICAgICAgICAgICBpZiAoYWRqdXN0U2VsZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcykKLSAg
ICAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsK
KyAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFy
aXR5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMgZm9y
IGFueSByZWFzb24sIHRoZSBmYWxsYmFjayBpcyB0byBnbyBvbmUgcG9zaXRpb24gYmV5b25kIHRo
ZSBsYXN0IHJlcGxhY2VtZW50Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVU
byhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKLSAgICAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMwMjMsOCArMzAyNyw4IEBA
IHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29s
IGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgLy8gT2YgY291cnNlLCBpZiBjdXJyZW50IHNl
bGVjdGlvbiBpcyBhIHJhbmdlLCB3ZSBwb3RlbnRpYWxseSB3aWxsIGVkaXQgdHdvIHdvcmRzIHRo
YXQgZmFsbCBvbiB0aGUgYm91bmRhcmllcyBvZgogICAgIC8vIHNlbGVjdGlvbiwgYW5kIHJlbW92
ZSB3b3JkcyBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gYm91bmRhcmllcy4KICAgICAvLwotICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CisgICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0T2ZTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0
YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICBpZiAoc3RhcnRPZlNlbGVjdGlvbi5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZpcnN0IHdvcmQgaXMgdGhlIHdvcmQg
dGhhdCBlbmRzIGFmdGVyIG9yIG9uIHRoZSBzdGFydCBvZiBzZWxlY3Rpb24uCkBAIC0zMDk2LDEx
ICszMTAwLDcgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24o
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHIKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewotICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsK
LSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1l
ID0gbV9kb2N1bWVudC5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQpAQCAtMzEx
Nyw3ICszMTE3LDcgQEAgdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09w
ZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWUKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9k
ZTo6UmV2ZWFsOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKHJldmVh
bE1vZGUsIGFsaWdubWVudCwgcmV2ZWFsRXh0ZW50T3B0aW9uKTsKKyAgICBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KGJvb2wgaWdub3JlLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rp
b24pCkBAIC0zMTI5LDcgKzMxMjksNyBAQCB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0aW9u
Q2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gRklYTUU6IFNob3VsZCBzdXBwcmVzcyBzZWxlY3Rp
b24gY2hhbmdlIG5vdGlmaWNhdGlvbnMgZHVyaW5nIGEgY29tcG9zaXRpb24gY2hhbmdlIDxodHRw
czovL3dlYmtpdC5vcmcvYi8zODgzMD4gCiAgICAgaWYgKCFpZ25vcmUpCi0gICAgICAgIHJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9
KTsKKyAgICAgICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCB7IH0pOwogI2VuZGlmCiAgICAgaWYgKCFpZ25vcmUgJiYgc2hvdWxk
UmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24gPT0gUmV2ZWFsU2VsZWN0aW9uOjpZZXMpCiAgICAgICAg
IHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9FZGdlSWZOZWVkZWQsIFJldmVhbEV4dGVudCk7CkBAIC0zMTUyLDcgKzMxNTIsNyBAQCBi
b29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0
YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aQogewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBpZiAoc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzE3NSw3ICszMTc1LDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAg
aWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTMy
MDAsMTAgKzMyMDAsMTAgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAgU3RyaW5nIHRy
YW5zcG9zZWQgPSB0ZXh0LnJpZ2h0KDEpICsgdGV4dC5sZWZ0KDEpOwogCiAgICAgLy8gU2VsZWN0
IHRoZSB0d28gY2hhcmFjdGVycy4KLSAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKLSAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigp
LnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgIGlmIChuZXdTZWxlY3Rp
b24gIT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICBpZiAo
IW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlv
bikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgfQogCiAgICAgLy8gSW5zZXJ0IHRoZSB0
cmFuc3Bvc2VkIGNoYXJhY3RlcnMuCkBAIC0zMjU1LDcgKzMyNTUsOCBAQCB2b2lkIEVkaXRvcjo6
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpCiAKIHZvaWQgRWRpdG9yOjpjaGFuZ2VT
ZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9u
LCBPcHRpb25TZXQ8RnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucykK
IHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50
PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3Rl
ZEZyYW1lKG1fZnJhbWUpOwogCiAgICAgLy8gSWYgdGhlIG5ldyBzZWxlY3Rpb24gaXMgb3JwaGFu
ZWQsIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKG5ld1NlbGVjdGlv
bi5zdGFydCgpLmlzT3JwaGFuKCkgfHwgbmV3U2VsZWN0aW9uLmVuZCgpLmlzT3JwaGFuKCkpCkBA
IC0zMjY1LDkgKzMyNjYsOSBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21t
YW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgTwogICAgIC8vIGJlY2F1
c2UgdGhlcmUgaXMgd29yayB0aGF0IGl0IG11c3QgZG8gaW4gdGhpcyBzaXR1YXRpb24uCiAgICAg
Ly8gVGhlIG9sZCBzZWxlY3Rpb24gY2FuIGJlIGludmFsaWQgaGVyZSBhbmQgY2FsbGluZyBzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY2FuIHByb2R1Y2Ugc29tZSBzdHJhbmdlIGNhbGxzLgogICAgIC8v
IFNlZSA8cmRhcjovL3Byb2JsZW0vNTcyOTMxNT4gU29tZSBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlIGNvbnRhaW4gUmFuZ2VzIGZvciBzZWxlY3Rpb25zIHRoYXQgYXJlIG5vIGxvbmdlciB2
YWxpZAotICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdTZWxl
Y3Rpb24gPT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0
aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKKyAgICBib29sIHNlbGVjdGlv
bkRpZE5vdENoYW5nZURPTVBvc2l0aW9uID0gbmV3U2VsZWN0aW9uID09IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBv
c2l0aW9uIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5l
d1NlbGVjdGlvbikpCisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CiAKICAgICAvLyBTb21lIGVkaXRpbmcgb3BlcmF0aW9u
cyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB2aXN1YWxseSB3aXRob3V0IGFmZmVjdGluZyBpdHMgcG9z
aXRpb24gd2l0aGluIHRoZSBET00uCiAgICAgLy8gRm9yIGV4YW1wbGUgd2hlbiB5b3UgcHJlc3Mg
cmV0dXJuIGluIHRoZSBmb2xsb3dpbmcgKHRoZSBjYXJldCBpcyBtYXJrZWQgYnkgXik6CkBAIC0z
MjgyLDEzICszMjgzLDEzIEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1h
bmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgICAgIHJldHVy
bjsKICNlbmRpZgogICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiAmJiBj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1f
ZnJhbWUpOworICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2Rv
Y3VtZW50LmZyYW1lKCkpOwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25z
dAogewogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVm
YXVsdEJlaGF2aW9yOwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3Nz
U2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygp
LnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAgIGJlaGF2
aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBzZWxlY3Rl
ZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzI5Niw3ICszMjk3LDcgQEAgU3RyaW5nIEVkaXRvcjo6
c2VsZWN0ZWRUZXh0KCkgY29uc3QKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dEZvckRhdGFU
cmFuc2ZlcigpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBU
ZXh0SXRlcmF0b3JFbWl0c0ltYWdlQWx0VGV4dDsKLSAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygp
LnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgp
KQogICAgICAgICBiZWhhdmlvciB8PSBUZXh0SXRlcmF0b3JUcmF2ZXJzZXNGbGF0VHJlZTsKICAg
ICByZXR1cm4gc2VsZWN0ZWRUZXh0KGJlaGF2aW9yKTsKIH0KQEAgLTMzMDQsNyArMzMwNSw3IEBA
IFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0CiBTdHJp
bmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNv
bnN0CiB7CiAgICAgLy8gV2UgcmVtb3ZlICdcMCcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJl
IG5vdCB2aXNpYmx5IHJlbmRlcmVkIHRvIHRoZSB1c2VyLgotICAgIGF1dG8mIHNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBhdXRvIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgYXV0byBlbmQgPSBzZWxlY3Rpb24uZW5kKCk7CiAgICAgaWYg
KHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgpIHx8IGVu
ZC5pc09ycGhhbigpKQpAQCAtMzMxNCw3ICszMzE1LDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0
ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKSBjb25zdAogCiBSZWZQdHI8VGV4
dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSB8
fCAhbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCB7IHRoaXMtPmRvY3VtZW50
KCkgfTsKQEAgLTMzMjIsNyArMzMyMyw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50
PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAg
Ly8gRklYTUU6IFdyaXRlIGluIHRlcm1zIG9mIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQo
KS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzQ0Pi4K
ICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoZmFsc2UpOwogCi0gICAgYXV0byBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRv
IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMzMwLDcgKzMzMzEs
NyBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxh
Y2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAgIHJhbmdlLT5pbnNlcnROb2RlKHBsYWNl
aG9sZGVyLmNvcHlSZWYoKSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiB7
IHBvc2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRlci5wdHIoKSksIHBvc2l0aW9uQWZ0ZXJOb2Rl
KHBsYWNlaG9sZGVyLnB0cigpKSB9OwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKFVzZXJUcmlnZ2VyZWQpKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiAKICAgICByZXR1cm4gcGxhY2Vob2xkZXI7CiB9CkBAIC0z
MzUwLDggKzMzNTEsOCBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQ
bGFjZWhvbGRlckVsZW1lbnQmIHBsYWNlaG9sZGVyKQogICAgIHBsYWNlaG9sZGVyLnJlbW92ZSgp
OwogCiAgICAgLy8gVG8gbWF0Y2ggdGhlIExlZ2FjeSBXZWJLaXQgaW1wbGVtZW50YXRpb24sIHNl
dCB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgdG8gYmUgYmVmb3JlIHdoZXJlIHRoZSBwbGFjZWhv
bGRlciB1c2UgdG8gYmUuCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5k
QWN0aXZlKCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFi
bGVFbGVtZW50KQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVM
VF9BRkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMo
VXNlclRyaWdnZXJlZCkpOworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzRm9jdXNl
ZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IHNhdmVkUm9vdEVk
aXRhYmxlRWxlbWVudCkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbiB7IHNhdmVkUG9zaXRpb25CZWZvcmVQbGFjZWhvbGRlciwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkgfSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25P
cHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNl
Q2FyZXRXaWR0aChJbnRSZWN0JiByZWN0KQpAQCAtMzQwMyw3ICszNDA0LDcgQEAgSW50UmVjdCBF
ZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIGJvb2wgRWRpdG9y
OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0
aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkp
CisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50
KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwpAQCAtMzQxMiwxNyArMzQxMywxNyBA
QCBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVgogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBp
bmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7
CiAgICAgaWYgKHN0eWxlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVh
clR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxh
dGUgdGhlIGN1cnJlbnQgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5
cGluZ1N0eWxlOwotICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHls
ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKICAgICAgICAgdHlwaW5n
U3R5bGUgPSBleGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CiAgICAgZWxzZQogICAgICAgICB0
eXBpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgdHlwaW5nU3R5bGUtPm92
ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICB0eXBpbmdTdHlsZS0+b3Zl
cnJpZGVUeXBpbmdTdHlsZUF0KHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gSGFuZGxlIGJs
b2NrIHN0eWxlcywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAg
ICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gdHlwaW5nU3R5bGUtPmV4dHJhY3RB
bmRSZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKQEAgLTM0MzAsNyArMzQzMSw3IEBAIHZvaWQgRWRp
dG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0CiAgICAgICAgIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1l
bnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CiAKICAgICAv
LyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHls
ZSkpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJv
cGVydGllcyYgcHJvcGVydGllcywgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ4OSwx
OSArMzQ5MCwyMCBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50
KCkgY29uc3QKIAogYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IEZpbmRPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJh
bWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7Cisg
ICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIAotICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0
YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwogCiAgICAgaWYg
KCFyZXN1bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05T
VFJFQU0pKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVBTSkpOwogCiAgICAgaWYgKCEob3B0aW9u
cy5jb250YWlucyhEb05vdFJldmVhbFNlbGVjdGlvbikpKQotICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnJldmVhbFNlbGVjdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNTk4LDcgKzM2
MDAsNyBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5n
JiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogICAgIGlmIChyYW5nZSkgewogICAgICAg
ICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0gJmRvY3VtZW50KCkpCiAgICAgICAgICAg
ICBzZWFyY2hSYW5nZSA9IHJhbmdlOwotICAgICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFuZ2Uo
bV9mcmFtZSwgKnJhbmdlKSkKKyAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdlKCptX2Rv
Y3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgaWYgKCFzZWFyY2hSYW5nZSkKQEAgLTM2NjgsNyArMzY3MCw3IEBAIHZvaWQgRWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25T
ZXQ8RnJhbWVTCiAjZW5kaWYKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCkt
PnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOworICAgICAgICBjbGllbnQoKS0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogCiAjaWYgRU5B
QkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBpZiAoc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpKQpAQCAtMzY5MSw4ICszNjkz
LDYgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMKIAogYm9vbCBFZGl0b3I6OnNob3VsZERldGVj
dFRlbGVwaG9uZU51bWJlcnMoKQogewotICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuaXNUZWxlcGhvbmVOdW1i
ZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1cHBvcnRl
ZCgpOwogfQogCkBAIC0zNzA1LDkgKzM3MDUsOSBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlv
bkZvclRlbGVwaG9uZU51bWJlcnMoKQogCiAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IG1hcmtl
ZFJhbmdlczsKIAotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1fZnJhbWUu
c2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWZyYW1lU2VsZWN0aW9uLmlzUmFuZ2UoKSkgewot
ICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBpZiAoYXV0
byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2VydmljZXNP
dmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyOSw3ICszNzI5LDcgQEAgdm9pZCBFZGl0
b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBSZWZQdHI8UmFuZ2U+
IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwog
CiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9m
cmFtZS5wYWdlKCkpCisgICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkp
CiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zNzQyLDcgKzM3NDIsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9u
ZU51bWJlcnMoKQogICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5h
cHBlbmQocmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdl
KCkpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgcGFn
ZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFu
Z2VzQ2hhbmdlZCgpOwogfQogCkBAIC0zODAxLDkgKzM4MDEsOSBAQCB2b2lkIEVkaXRvcjo6ZWRp
dG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGphY2VudFdvcmRzOwog
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGVkU2VudGVuY2U7Ci0gICAgICAgIGJv
b2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxl
ZCgpOwotICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKLSAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBuZXdTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFy
dCgpKTsKKyAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykgewor
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRP
ZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5ld1N0YXJ0
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICNlbHNlCkBAIC0zODU2LDcgKzM4NTYsNyBAQCB2
b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoIW1fZWRpdG9y
VUlVcGRhdGVUaW1lcldhc1RyaWdnZXJlZEJ5RGljdGF0aW9uKQogICAgICAgICBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
KTsKIAotICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAjaWYgRU5BQkxFKEFUVEFD
SE1FTlRfRUxFTUVOVCkKICAgICBub3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRhdGVzKCk7CkBA
IC0zODgzLDcgKzM4ODMsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSog
bm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25z
dAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9kZSogbm9k
ZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzk1MCwxMCArMzk1MCwxMCBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5n
VHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9v
dAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiBj
YW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCitzdGF0aWMgUmVmUHRyPFJh
bmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VG
cm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBk
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uLmlz
Q2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkgOiBkb2N1
bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiBzdGF0aWMgYm9vbCBj
YW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bikKQEAgLTM5NjcsOCArMzk2Nyw4IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFj
ZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcgRWRpdG9y
OjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0
ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRlUmFuZ2VG
b3JTZWxlY3Rpb24obV9kb2N1bWVudCk7CiAgICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5VHlwZWRT
dHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQogICAgICAgICBy
ZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsKIApAQCAtMzk3
Nyw3ICszOTc3LDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgp
IGNvbnN0CiAgICAgCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlk
YXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7CiB9CiAK
QEAgLTQwNDQsNyArNDA0NCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0
ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBGb250QXR0cmlidXRlcyBhdHRyaWJ1
dGVzOwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAgYXV0byogc3R5bGUg
PSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOworICAgIGF1
dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1lKCksIG5v
ZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBpZiAobm9kZVRvUmVtb3Zl
KQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKQEAgLTQwODUsNyArNDA4NSw3
IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0
KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXR0cmlidXRlcy50ZXh0TGlz
dHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlcihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF0dHJpYnV0ZXMudGV4dExp
c3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIAogICAgIHN3aXRjaCAoc3R5
bGUtPnRleHRBbGlnbigpKSB7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKQEAgLTQx
MTEsNyArNDExMSw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNl
bGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB0
eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgp
KTsKKyAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnR5cGluZ1N0eWxlKCkpOwogICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdTdHlsZS0+
c3R5bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpAQCAtNDE5
OSwxMiArNDE5OSw4IEBAIHZvaWQgRWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRh
dGVzKCkKICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiByZW1vdmVkQXR0YWNobWVudElkZW50
aWZpZXJzKQogICAgICAgICBjbGllbnQoKS0+ZGlkUmVtb3ZlQXR0YWNobWVudFdpdGhJZGVudGlm
aWVyKGlkZW50aWZpZXIpOwogCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9yIChhdXRv
JiBpZGVudGlmaWVyIDogaW5zZXJ0ZWRBdHRhY2htZW50SWRlbnRpZmllcnMpIHsKLSAgICAgICAg
aWYgKGF1dG8gYXR0YWNobWVudCA9IGRvY3VtZW50LT5hdHRhY2htZW50Rm9ySWRlbnRpZmllcihp
ZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IG1fZG9jdW1lbnQuYXR0
YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCiAgICAgICAgICAgICBjbGllbnQoKS0+
ZGlkSW5zZXJ0QXR0YWNobWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXIsIGF0dGFjaG1lbnQt
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyKSwgYXR0
YWNobWVudC0+aGFzRW5jbG9zaW5nSW1hZ2UoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDIyNyw3ICs0MjIzLDcgQEAgdm9pZCBFZGl0b3I6
Omluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBPcHRpb25hbDx1aW50
NjRfdD4mJiBmaWwKIAogdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRD
aGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKLSAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSA9IHRy
dWU7CiAKQEAgLTQyNDYsNyArNDI0Miw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENh
bmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKIGJvb2wgRWRp
dG9yOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgmbV9mcmFtZSk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9kb2N1bWVudC5mcmFtZSgpKTsKIH0K
IAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIo
Y29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKQEAgLTQyNjIsMTMgKzQyNTgsNyBAQCB2b2lk
IEVkaXRvcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2ZWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5n
JiBhbHRlcm5hdGl2ZVN0cmluZwogdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFi
bGVkKCkKIHsKICAgICBtX292ZXJ3cml0ZU1vZGVFbmFibGVkID0gIW1fb3ZlcndyaXRlTW9kZUVu
YWJsZWQ7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tDdXJzb3Io
bV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7Ci19Ci0KLURvY3VtZW50JiBFZGl0b3I6OmRvY3VtZW50
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9mcmFtZS5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4g
Km1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNob3Vs
ZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAogUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQpAQCAtNDMyMSw5ICs0MzExLDkg
QEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxl
Rm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCi0gICAgaWYg
KCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmICghbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAg
ICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVU
b1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5
bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1lKCksIG5vZGVUb1JlbW92ZSk7IC8v
IHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7
CiAgICAgICAgIGlmIChzdHlsZSkgewpAQCAtNDMzNSwxMSArNDMyNSwxMSBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9kZSogc3Rh
cnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBz
dGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlm
ICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDM3MSw3ICs0MzYx
LDcgQEAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0RWRpdGFibGVJbWFn
ZSgpCiAKIGJvb2wgRWRpdG9yOjpjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9uZUltYWdlcygpIGNv
bnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJ
blBhc3N3b3JkRmllbGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggYWQ5ZWRh
MjYxOGM5YTg4MGJlY2JiMWNlNGQ2OGJiNTliODljMjBjMC4uYTYwZWVlOGEyY2Y4YWRkMzYwZTZm
MmQ5ZTBjNWY4NTUwYTNlNmZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0
QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFdyaXRlckRh
dGEuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKQEAgLTExOSwxMyArMTIwLDEzIEBAIGVu
dW0gY2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uIDogdWludDhfdCB7CiAKIGNsYXNzIFRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgVGVt
cG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4g
PSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9jdW1lbnQm
LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9uU2V0PFRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIH5UZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7Cisg
ICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb24+IG1fb3B0aW9uczsKICAgICBib29sIG1fd2FzSWdub3JpbmdTZWxlY3Rp
b25DaGFuZ2VzOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzcsNyArMTM4LDcgQEAg
cHJpdmF0ZToKIGNsYXNzIElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlIHsKIHB1YmxpYzoK
ICAgICBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZShGcmFtZSYgZnJhbWUpCi0gICAgICAg
IDogbV9zZWxlY3Rpb25DaGFuZ2UoZnJhbWUsIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQorICAgICAgICA6IG1fc2VsZWN0aW9u
Q2hhbmdlKCpmcmFtZS5kb2N1bWVudCgpLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKICAgICB7CiAgICAgfQogCkBAIC0xNTAs
NyArMTUxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEVkaXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRWRpdG9yKEZyYW1lJik7CisgICAgZXhw
bGljaXQgRWRpdG9yKERvY3VtZW50Jik7CiAgICAgfkVkaXRvcigpOwogCiAgICAgZW51bSBjbGFz
cyBQYXN0ZU9wdGlvbiA6IHVpbnQ4X3QgewpAQCAtMjcxLDcgKzI3Miw3IEBAIHB1YmxpYzoKICAg
ICBjbGFzcyBDb21tYW5kIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIENv
bW1hbmQoKTsKLSAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBGcmFtZSYpOworICAgICAgICBDb21tYW5kKGNvbnN0IEVkaXRv
ckludGVybmFsQ29tbWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIERvY3VtZW50Jik7CiAKICAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVy
ID0gU3RyaW5nKCksIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQgPSBudWxscHRyKSBjb25zdDsKICAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQp
IGNvbnN0OwpAQCAtMjg4LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgogICAgICAg
ICBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIG1fY29tbWFuZCB7IG51bGxwdHIgfTsKICAg
ICAgICAgRWRpdG9yQ29tbWFuZFNvdXJjZSBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRyPERvY3Vt
ZW50PiBtX2RvY3VtZW50OwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAgICAgfTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kIGNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSk7IC8vIENvbW1hbmQgc291cmNlIGlzIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZy4K
QEAgLTU2Nyw3ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYpOwogCiBwcml2YXRlOgot
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0OworICAgIERvY3VtZW50JiBkb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAogICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2Uo
UmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQmKTsKQEAgLTYxOCw2ICs2MjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAorICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogICAgIEZyYW1l
JiBtX2ZyYW1lOwogICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENv
bW1hbmQ7CiAgICAgUmVmUHRyPFRleHQ+IG1fY29tcG9zaXRpb25Ob2RlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOWRiYTcwNjlhZDE0MjhjZGMzYjkwZmI2
YzA0NzFmYWExMGZiOGM0NC4uYmQ1MTgwZWI0MDBlYTc5MjE1MWI2Zjc5OGI2MGVjYjhjZmZkYWVh
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xMTA5LDYg
KzExMDksNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU3VwZXJzY3JpcHQoRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLAogCiBzdGF0aWMgYm9vbCBleGVjdXRl
U3dhcFdpdGhNYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBj
b25zdCBTdHJpbmcmKQogeworICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVjdGlvbihmcmFtZS5k
b2N1bWVudCgpKTsKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKTsKICAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKQEAgLTE4MzYsMTIgKzE4MzcsMTIgQEAgc3RhdGljIGNvbnN0IEVkaXRvckludGVybmFs
Q29tbWFuZCogaW50ZXJuYWxDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiAKIEVk
aXRvcjo6Q29tbWFuZCBFZGl0b3I6OmNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkK
IHsKLSAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBDb21t
YW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZnJhbWUpOworICAgIHJldHVybiBDb21tYW5kKGlu
dGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZywg
bV9kb2N1bWVudCk7CiB9CiAKIEVkaXRvcjo6Q29tbWFuZCBFZGl0b3I6OmNvbW1hbmQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UpCiB7Ci0gICAg
cmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgc291cmNlLCBtX2Zy
YW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBz
b3VyY2UsIG1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Y29tbWFuZElzU3VwcG9ydGVk
RnJvbU1lbnVPcktleUJpbmRpbmcoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKQEAgLTE4NTMs
MTIgKzE4NTQsMTMgQEAgRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKCkKIHsKIH0KIAotRWRpdG9y
OjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEZyYW1lJiBmcmFtZSkKK0VkaXRvcjo6Q29tbWFu
ZDo6Q29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1hbmQsIEVkaXRvckNv
bW1hbmRTb3VyY2Ugc291cmNlLCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX2NvbW1hbmQo
Y29tbWFuZCkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fZnJhbWUoY29tbWFuZCA/
ICZmcmFtZSA6IG51bGxwdHIpCisgICAgLCBtX2RvY3VtZW50KGNvbW1hbmQgPyAmZG9jdW1lbnQg
OiBudWxscHRyKQorICAgICwgbV9mcmFtZShjb21tYW5kID8gZG9jdW1lbnQuZnJhbWUoKSA6IG51
bGxwdHIpCiB7Ci0gICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1fZnJhbWUpOworICAgIEFTU0VSVChj
b21tYW5kIHx8ICFtX2RvY3VtZW50KTsKIH0KIAogYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1
dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNvbnN0
CkBAIC0xODY4LDkgKzE4NzAsOSBAQCBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25z
dCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgYwogICAgICAgICBp
ZiAoIWFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGF1dG8gZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAg
IGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBp
ZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSBkb2N1bWVudCkKKworICAgIG1fZG9jdW1lbnQtPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIGlmIChtX2RvY3VtZW50
LT5mcmFtZSgpICE9IG1fZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biBtX2NvbW1hbmQtPmV4ZWN1dGUoKm1fZnJhbWUsIHRyaWdnZXJpbmdFdmVudCwgbV9zb3VyY2Us
IHBhcmFtZXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmlu
ZGV4IDQ1MTZlNTA2NTA3MmZmNTFjM2M5MDFiNzg1MjQ1M2ZiZmE5N2IzNTkuLjViMDdhMzRmMDg5
NjVhNGZmOGFlOGM5NmUzMjhiODk2MzJlOTA0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xMzksMTMgKzEzOSwxNCBAQCBJbnRSZWN0IERyYWdDYXJl
dENvbnRyb2xsZXI6OmVkaXRhYmxlRWxlbWVudFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKSBj
b25zdAogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRBbHdh
eXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihGcmFtZSogZnJhbWUpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50
KQogewotICAgIHJldHVybiAhZnJhbWUgfHwgZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7CisgICAgcmV0dXJuIGRvY3VtZW50
LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25h
bCgpOwogfQogCi1GcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQot
ICAgIDogbV9mcmFtZShmcmFtZSkKK0ZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1
bWVudCogZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFt
ZShkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAgICAgLCBtX2dyYW51bGFy
aXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhUX0NBUkVUKQpAQCAtMTU2
LDcgKzE1Nyw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUp
CiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAsIG1fY2FyZXRQYWludCh0
cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2Zv
Y3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1fZm9jdXNlZChtX2ZyYW1l
ICYmIG1fZG9jdW1lbnQtPnBhZ2UoKSAmJiBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRGcmFtZSgpID09IG1fZnJhbWUpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9j
a0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAg
ICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFs
c2UpCkBAIC0xNjUsMTQgKzE2NiwxNCBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24o
RnJhbWUqIGZyYW1lKQogICAgICwgbV9jYXJldEJsaW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAg
aWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlm
IChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKIH0KIAogRWxlbWVudCogRnJh
bWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0
CiB7CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0
aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsK
IH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
cG9zLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFs
aWduKQpAQCAtMjg0LDcgKzI4NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlv
bkJ5TW91c2VJZkRpZmZlcmVudChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBwYXNzCiAgICAgRW5k
UG9pbnRzQWRqdXN0bWVudE1vZGUgZW5kcG9pbnRzQWRqdXN0bWVudE1vZGUpCiB7CiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBwYXNzZWROZXdTZWxlY3Rpb247Ci0gICAgYm9v
bCBpc0RpcmVjdGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9m
cmFtZSkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsKKyAgICBib29sIGlzRGlyZWN0
aW9uYWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8
fCBuZXdTZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJh
c2UgPSBtX29yaWdpbmFsQmFzZS5pc05vdE51bGwoKSA/IG1fb3JpZ2luYWxCYXNlIDogbmV3U2Vs
ZWN0aW9uLnZpc2libGVCYXNlKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld0Jhc2UgPSBiYXNl
OwpAQCAtMzIyLDcgKzMyMyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldp
dGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgYm9vbCBz
aG91bGRDbGVhclR5cGluZ1N0eWxlID0gb3B0aW9ucy5jb250YWlucyhDbGVhclR5cGluZ1N0eWxl
KTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uUG9z
c2libHlXaXRob3V0RGlyZWN0aW9uOwotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25h
bFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxT
ZWxlY3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlv
bmFsKHRydWUpOwogCiAgICAgaWYgKCFtX2ZyYW1lKSB7CkBAIC0zMzQsNyArMzM1LDcgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2Zy
YW1lIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3VtZW50KiBu
ZXdTZWxlY3Rpb25Eb2N1bWVudCA9IG5ld1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQoKSkgewog
ICAgICAgICBpZiAoUmVmUHRyPEZyYW1lPiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1NlbGVjdGlv
bkRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUg
IT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1bWVudCgp
KSB7CisgICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdT
ZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2RvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgbmV3U2Vs
ZWN0aW9uRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlv
bnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7CiAgICAg
ICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGR1cmluZyB0aGUgYWJvdmUgc2V0IHNl
bGVjdGlvbiwgdGhpcyBGcmFtZVNlbGVjdGlvbiBoYXMgYmVlbiBtb2RpZmllZCBieQogICAgICAg
ICAgICAgICAgIC8vIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkLCBi
dXQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZCBzaW5jZQpAQCAtMzQ5LDcg
KzM1MCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGlu
Z0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgbV9ncmFudWxhcml0eSA9IGdy
YW51bGFyaXR5OwogCiAgICAgaWYgKGNsb3NlVHlwaW5nKQotICAgICAgICBUeXBpbmdDb21tYW5k
OjpjbG9zZVR5cGluZyhtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcoKm1fZG9jdW1lbnQpOwogCiAgICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAg
ICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsKQEAgLTM1Nyw3ICszNTgsNyBAQCBib29sIEZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2li
bGVTZWxlY3RpbwogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rp
b247CiAgICAgYm9vbCBkaWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2Vs
ZWN0aW9uOwogICAgIGlmIChkaWRNdXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVk
aXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9y
KCkuc2VsZWN0aW9uV2lsbENoYW5nZSgpOwogCiAgICAgbV9zZWxlY3Rpb24gPSBuZXdTZWxlY3Rp
b247CiAKQEAgLTM3MSwyMSArMzcyLDIxIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKIAogICAgIGlmICghbmV3U2VsZWN0aW9uLmlzTm9u
ZSgpICYmICEob3B0aW9ucyAmIERvTm90U2V0Rm9jdXMpKSB7Ci0gICAgICAgIGF1dG8qIG9sZEZv
Y3VzZWRFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAg
ICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVu
dCgpOwogICAgICAgICBzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCk7CiAgICAgICAgIC8vIEZJ
WE1FOiBTaG91bGQgbm90IGJlIG5lZWRlZC4KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50
KCktPmZvY3VzZWRFbGVtZW50KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCi0gICAgICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIGlmICht
X2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAg
ICAgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIH0KIAogICAgIC8v
IEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZp
Z2F0aW9uLgogICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkgdGhlIHZlcnRpY2FsIGFycm93
IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCiAgICAgbV94UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgIHNl
bGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7Ci0gICAgbV9mcmFtZS0+
ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMp
OworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xk
U2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0
aW9uLWFwaS8jc2VsZWN0aW9uY2hhbmdlLWV2ZW50CiAgICAgLy8gRklYTUU6IFNwZWMgZG9lc24n
dCBzcGVjaWZ5IHdoaWNoIHRhc2sgc291cmNlIHRvIHVzZS4KLSAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9u
LCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6
OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgbV9kb2N1bWVu
dC0+cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwg
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpD
YW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0zOTYsMTAgKzM5Nyw2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAg
aWYgKCFzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0
aW9ucywgYWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQot
ICAgICAgICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9N
YWluRnJhbWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVh
bFNlbGVjdGlvbikKQEAgLTQxMSwyNyArNDA4LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNl
dFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxT
CiAgICAgbV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2Vs
ZWN0aW9uVXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxl
UmVjYWxjKCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52
aWV3KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAg
ICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmxheW91dENvbnRleHQoKS5pc0xheW91dFBl
bmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9u
KGludGVudCk7CiAKICAgICBpZiAob3B0aW9ucyAmIElzVXNlclRyaWdnZXJlZCkgewotICAgICAg
ICBpZiAoYXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAg
IGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAg
ICAgICAgIGNsaWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAg
ICB9CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKEZyYW1lJiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJF
VCkKLSAgICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKICNlbHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgp
OworICAgIGRvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00
NDEsNyArNDM4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRh
dGUoUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9k
ZSA9PSBSZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVj
dGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5k
aW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1f
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9k
b2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNl
bGVjdGlvbigpOwogfQogCkBAIC00NTcsNyArNDU0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBp
bnQKICAgICBpZiAobV9zZWxlY3Rpb25SZXZlYWxNb2RlICE9IFNlbGVjdGlvblJldmVhbE1vZGU6
OkRvTm90UmV2ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnbm1lbnQ7CiAKLSAg
ICAgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25X
aGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkp
CiAgICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVu
UmV2ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyA6
IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVh
bGluZ1NlbGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXMgOiBTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CkBAIC00NzEsNyArNDY4LDcgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRl
Q2hhbmdlSW50ZW50JiBpbnQKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3Rv
cnNGb3JTZWxlY3Rpb24oKQogewogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElP
TikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5z
Y2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3
ICs3MDAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxh
dGZvcm0oYm9vbCBpc0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBw
b2ludCB0byB0aGUgc2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAg
ICAvLyB0byB3aGljaCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0
aGlzIGNhbiBiZSBjaGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCku
Ci0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRB
bHdheXNFeHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1
bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVu
ZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2ludCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rp
b24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpOwogCiAgICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MjAs
NyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQ
bGF0Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRpbwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24p
OwogCi0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91
bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgeworICAgIGlmIChtX2RvY3VtZW50ICYmIG1f
ZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1Jp
Z2h0KCkpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3Zpbmcg
cmlnaHQsIHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVydGhlciBhbmQgdGhlbiBt
b3ZlIG9uZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBzZW1hbnRpY3Mgb2YgcHJl
dmlvdXNXb3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRoZQpAQCAtODU1LDcgKzg1
Miw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQo
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxl
UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnJp
Z2h0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29y
ZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9
IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VX
aGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0
ID0gbV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVu
dFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsK
ICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1Nw
YWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEw
NzYsNyArMTA3Myw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92
aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpLmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmlu
Z1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92
aW5nUmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlv
biBjdXJyZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpOwogICAgICAgICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwg
c2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkp
CkBAIC0xMzYyLDcgKzEzNTksNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVy
YXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYg
dXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZnJhbWUgJiYgQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYg
IWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVu
dCAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIG5v
dGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5
cGVTZWxlY3Rpb25Cb3VuZGFyeSwgdGV4dFNlbGVjdGlvbldpdGhEaXJlY3Rpb25BbmRHcmFudWxh
cml0eShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMTM3NCw4ICsxMzcxLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVB
bHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAg
ICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9
PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAobV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7
Ci0gICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCkt
PmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAg
ICAgICBjYWNoZS0+c2V0VGV4dFNlbGVjdGlvbkludGVudCh0ZXh0U2VsZWN0aW9uSW50ZW50KGFs
dGVyLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSk7CiAgICAgfQogCkBAIC0xMzg0LDcgKzEzODEs
NyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVj
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgIC8vIE5vdGU6IHRoZSBTVEFSVCBwb3Np
dGlvbiB0eXBlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQgd291bGQgYmUK
ICAgICAvLyB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHR5cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9z
Rm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gc2V0LgogICAgIExheW91dFVuaXQgeCA9IGxpbmVE
aXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9z
ZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVj
dGlvbihtX2ZyYW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVj
dGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9u
KG1fZG9jdW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgc3dpdGNo
IChhbHRlcikgewogICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6CkBAIC0xMzk0LDcgKzEzOTEsNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAgICAgIGlmICghbV9zZWxlY3Rpb24uaXND
YXJldCgpCiAgICAgICAgICAgICAmJiAoZ3JhbnVsYXJpdHkgPT0gV29yZEdyYW51bGFyaXR5IHx8
IGdyYW51bGFyaXR5ID09IFBhcmFncmFwaEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IExp
bmVHcmFudWxhcml0eSkKLSAgICAgICAgICAgICYmIG1fZnJhbWUgJiYgIW1fZnJhbWUtPmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2Fy
ZXQoKSkgeworICAgICAgICAgICAgJiYgbV9kb2N1bWVudCAmJiAhbV9kb2N1bWVudC0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJl
dCgpKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIHNlbGVjdGlvbiBnbyBhY3Jvc3Mg
dGhlIGJhc2UgcG9zaXRpb24gZGlyZWN0bHkuIE5lZWRlZCB0byBtYXRjaCBtYWMKICAgICAgICAg
ICAgIC8vIGJlaGF2aW9yIHdoZW4sIGZvciBpbnN0YW5jZSwgd29yZC1zZWxlY3RpbmcgYmFja3dh
cmRzIHN0YXJ0aW5nIHdpdGggdGhlIGNhcmV0IGluCiAgICAgICAgICAgICAvLyB0aGUgbWlkZGxl
IG9mIGEgd29yZCBhbmQgdGhlbiB3b3JkLXNlbGVjdGluZyBmb3J3YXJkLCBsZWF2aW5nIHRoZSBj
YXJldCBpbiB0aGUKQEAgLTE0MDcsNyArMTQwNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1v
ZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
CiAKICAgICAgICAgLy8gU3RhbmRhcmQgTWFjIGJlaGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEg
Ym91bmRhcnkgaXMgZ3JvdyB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCiAg
ICAgICAgIC8vIGJhc2UgaW4gcGxhY2UgYW5kIG1vdmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5T
VGV4dFZpZXcuCi0gICAgICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnko
KSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQor
ICAgICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwg
bV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAg
ICAgICAgIHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpOwpAQCAtMTUxNyw3ICsxNTE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlv
bjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBW
ZXJ0aWMKICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBt
X2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVjdGlvbi5z
ZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJh
bWUpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElz
RGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dCkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTE1NzUsNyArMTU3Miw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0
cnVjdGlvbigpCiAgICAgbV9jYXJldEJsaW5rVGltZXIuc3RvcCgpOwogI2VuZGlmCiAKLSAgICBp
ZiAoYXV0byogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChhdXRv
KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rp
b24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAgc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5n
QXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25z
KCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpA
QCAtMTY1NSw5ICsxNjUyLDkgQEAgc3RhdGljIGJvb2wgaXNOb25PcnBoYW5lZENhcmV0KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6
YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCkKIHsKLSAgICBpZiAoIW1fZnJh
bWUpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAg
IHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKKyAgICB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAgICAg
cmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAgICAgaWYgKGluc2lkZUZpeGVkKQogICAgICAgICAqaW5z
aWRlRml4ZWQgPSBtX2NhcmV0SW5zaWRlUG9zaXRpb25GaXhlZDsKQEAgLTE2NzUsMTAgKzE2NzIs
MTAgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICBpZiAo
IXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAg
RnJhbWVWaWV3KiB2ID0gbV9kb2N1bWVudC0+dmlldygpOwogICAgIGlmICghdikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xNjkwLDcgKzE2ODcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgICAgICAgICAgY2xlYXJDYXJldFJlY3QoKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0ID0g
bV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRS
ZWN0KG1fZnJhbWUtPmRvY3VtZW50KCksIHZpc2libGVTdGFydCkpIHsKKyAgICAgICAgICAgIGlm
ICh1cGRhdGVDYXJldFJlY3QobV9kb2N1bWVudCwgdmlzaWJsZVN0YXJ0KSkgewogICAgICAgICAg
ICAgICAgIGNhcmV0Tm9kZSA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgICAgICAgICAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5ID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KQEAgLTE3MTUsNyArMTcxMiw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJM
RShURVhUX0NBUkVUKQotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+cmVuZGVyVmlldygpKSB7CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3Vt
ZW50LT5yZW5kZXJWaWV3KCkpIHsKICAgICAgICAgYm9vbCBwcmV2aW91c09yTmV3Q2FyZXROb2Rl
SXNDb250ZW50RWRpdGFibGUgPSBtX3NlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICht
X3ByZXZpb3VzQ2FyZXROb2RlICYmIG1fcHJldmlvdXNDYXJldE5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCkpOwogICAgICAgICBpZiAoc2hvdWxkUmVwYWludENhcmV0KHZpZXcsIHByZXZpb3VzT3JO
ZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSkpIHsKICAgICAgICAgICAgIGlmIChtX3ByZXZp
b3VzQ2FyZXROb2RlKQpAQCAtMTg5NCwxMiArMTg5MSwxMSBAQCBib29sIEZyYW1lU2VsZWN0aW9u
Ojpjb250YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgaWYgKCFpc1Jh
bmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBhdXRvKiBkb2N1bWVudCA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKKyAgICBpZiAoIW1fZG9j
dW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdChwb2ludCk7Ci0gICAgZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVz
dWx0KTsKKyAgICBtX2RvY3VtZW50LT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7
CiAgICAgTm9kZSogaW5uZXJOb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogICAgIGlmICghaW5u
ZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE5NjgsOSArMTk2NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxl
bWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2Vs
ZWN0QWxsKCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
OwotCi0gICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1l
bnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRF
bGVtZW50KCk7CiAgICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkp
IHsKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MU2VsZWN0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KTsKICAgICAgICAgaWYgKHNlbGVjdEVs
ZW1lbnQuY2FuU2VsZWN0QWxsKCkpIHsKQEAgLTIwMDAsOCArMTk5NCw4IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgICAgIGlmIChyb290KQogICAgICAgICAgICAgc2Vs
ZWN0U3RhcnRUYXJnZXQgPSByb290LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgICAgICAg
IHNlbGVjdFN0YXJ0VGFyZ2V0ID0gZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CisgICAgICAg
ICAgICByb290ID0gbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgICAgICBz
ZWxlY3RTdGFydFRhcmdldCA9IG1fZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKCFyb290KQpAQCAtMjA1OCw5ICsyMDUyLDkgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZp
bml0eSwgU2hvdWxkQ2wKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRl
Q2hhbmdlZCgpCiB7CiAgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0
aXZlKCk7Ci0gICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCgqbV9mcmFtZS0+ZG9jdW1lbnQoKSk7
CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAKLSAgICBkb2N1
bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKIAogI2lmIFVTRShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0IGJsaW5r
aW5nIChibGlua3MgfCBkb2VzIG5vdCBibGluaykKQEAgLTIwNzEsNyArMjA2NSw3IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVj
YXVzZSBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAgIC8v
IFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZy
YW1lIGlzIGFjdGl2ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29s
b3JzIHdlcmUgcGFpbnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5y
ZW5kZXJWaWV3KCkpCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8v
IENhcmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KQEAgLTIwODIsNyArMjA3Niw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAg
Ly8gQmVjYXVzZSBTdHlsZTo6UmVzb2x2ZXI6OmNoZWNrT25lU2VsZWN0b3IoKSBhbmQKICAgICAv
LyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwg
d2UgaGF2ZSB0bwogICAgIC8vIHVwZGF0ZSBzdHlsZSBhbmQgdGhlbWUgc3RhdGUgdGhhdCBkZXBl
bmRlZCBvbiB0aG9zZS4KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5mb2N1
c2VkRWxlbWVudCgpKSB7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvY3VtZW50LT5m
b2N1c2VkRWxlbWVudCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5y
ZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zdHlsZSgp
Lmhhc0FwcGVhcmFuY2UoKSkKQEAgLTIxMDcsMTMgKzIxMDEsMTMgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6c2V0Rm9jdXNlZChib29sIGZsYWcpCiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OmlzRm9j
dXNlZEFuZEFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2ZyYW1l
LT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgp
OworICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9kb2N1bWVudC0+cGFnZSgpICYmIG1fZG9jdW1l
bnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKIH0KIAogI2lmIEVOQUJM
RShURVhUX0NBUkVUKQotaW5saW5lIHN0YXRpYyBib29sIHNob3VsZFN0b3BCbGlua2luZ0R1ZVRv
VHlwaW5nQ29tbWFuZChGcmFtZSogZnJhbWUpCitpbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3Rv
cEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICBy
ZXR1cm4gZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpICYmIGZyYW1lLT5lZGl0b3Io
KS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpICYmIGRvY3VtZW50LT5lZGl0
b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKIH0KICNl
bmRpZgogCkBAIC0yMTMyLDEyICsyMTI2LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0
ZUFwcGVhcmFuY2UoKQogICAgIGJvb2wgcGFpbnRCbG9ja0N1cnNvciA9IG1fc2hvdWxkU2hvd0Js
b2NrQ3Vyc29yICYmIG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiAhaXNMb2dpY2FsRW5kT2ZMaW5l
KG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2VkT3JD
bGVhcmVkID0gcmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAKLSAgICBib29sIGNhcmV0QnJvd3Npbmcg
PSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgYm9vbCBj
YXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxl
ZCgpOwogICAgIGJvb2wgc2hvdWxkQmxpbmsgPSAhcGFpbnRCbG9ja0N1cnNvciAmJiBjYXJldElz
VmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxl
KCkgfHwgY2FyZXRCcm93c2luZyk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3Ag
dGhlIGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8vIGJsYWNrIGNh
cmV0IGluIHRoZSBuZXcgbG9jYXRpb24uCi0gICAgaWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFy
ZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFu
ZChtX2ZyYW1lKSkKKyAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxk
QmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZG9jdW1lbnQp
KQogICAgICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAKICAgICAvLyBTdGFydCBibGlu
a2luZyB3aXRoIGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYgd2UncmUK
QEAgLTIxNTMsNyArMjE0Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFu
Y2UoKQogICAgIH0KICNlbmRpZgogCi0gICAgUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOworICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5k
ZXJWaWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMDIsOCAr
MjE5Niw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eShDYXJldFZp
c2liaWxpdHkgdmlzaWJpbGl0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCB0cmlnZ2VyIGEgc3luY2hyb25vdXMgbGF5b3V0IGhlcmUuCi0gICAgaWYgKG1f
ZnJhbWUpCi0gICAgICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCpt
X2ZyYW1lKTsKKyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlV
cGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FS
RVQpCiAgICAgaWYgKG1fY2FyZXRQYWludCkgewpAQCAtMjI0NywxMCArMjI0MSwxMCBAQCB2b2lk
IEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBpZiAoaXNO
b25lKCkgfHwgIWlzRm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGNhcmV0
QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Cisg
ICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7CiAgICAgICAgIGlmIChFbGVt
ZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9uLmJhc2UoKSkp
IHsKLSAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9j
dXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJh
bWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2MiwxNiAr
MjI1NiwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVk
KCkKICAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUu
IFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwogICAgICAgICAgICAg
Ly8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0
aGlzIHRpbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkgJiYg
IWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLT5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJhbWUp
OworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCku
c2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnRP
clNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQtPnNl
dEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogICAgIH0KIAogICAgIGlmIChjYXJldEJyb3dzaW5n
KQotICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRF
bGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKKyAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFtZSk7CiB9
CiAKIHZvaWQgRHJhZ0NhcmV0Q29udHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUqIGZyYW1l
LCBHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpIGNvbnN0CkBAIC0yMzAwLDE2ICsyMjk0LDE2IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNh
bGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0
dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVk
aXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7CiB9CiAKIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9u
Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAog
ewotICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAg
ICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0
aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlv
dXRPclN0eWxlKCptX2RvY3VtZW50KTsKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9kb2N1bWVu
dC0+cmVuZGVyVmlldygpOwogICAgIGlmICghcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIApAQCAtMjMyNSwxNCArMjMxOSwxNCBAQCBGbG9hdFJlY3QgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxl
Q29udAogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5n
bGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0IHRl
eHRSZWN0SGVpZ2h0KSBjb25zdAogewotICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCkpCisgICAgaWYgKCFtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0
ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6Okxl
Z2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0
ID0gbV9kb2N1bWVudC0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6
OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwogICAgIGZvciAoYXV0byYgcmVjdCA6IGJv
dW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UsIHRleHRS
ZWN0SGVpZ2h0ID09IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkpKSB7CiAg
ICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2aXNpYmxl
Q29udGVudFJlY3QpOwogICAgICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKQpA
QCAtMjM2NCw3ICsyMzU4LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZvcm0o
RWxlbWVudCogc3RhcnQpCiBIVE1MRm9ybUVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpjdXJyZW50
Rm9ybSgpIGNvbnN0CiB7CiAgICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFjdGl2
ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzLgotICAg
IEVsZW1lbnQqIHN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsK
KyAgICBFbGVtZW50KiBzdGFydCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAg
aWYgKCFzdGFydCkKICAgICAgICAgc3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmVsZW1lbnQo
KTsKICAgICBpZiAoIXN0YXJ0KQpAQCAtMjQwNyw4ICsyNDAxLDggQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29u
c3QgU2Nyb2wKICAgICAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0
LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxk
QWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogICAgICAgICAgICAgICAgIGxheWVy
LT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAg
ICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+cGFn
ZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLmNsaWVu
dCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNl
bGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAjZWxzZQpAQCAtMjQyNiwxNyArMjQyMCwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiAgICAgLy8gUHV0IGEgY2FyZXQgaW5zaWRlIHRoZSBib2R5
IGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZWRpdGFibGUgKGVpdGhlciB0aGUKICAgICAvLyBlbnRp
cmUgV2ViVmlldyBpcyBlZGl0YWJsZSBvciBkZXNpZ25Nb2RlIGlzIG9uIGZvciB0aGlzIGRvY3Vt
ZW50KS4KIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFt
ZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGlmICghaXNOb25lKCkg
fHwgIShkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQorICAg
IGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC0+aGFzRWRpdGFi
bGVTdHlsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAg
IGlmICghZG9jdW1lbnQgfHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxl
UG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpKSB8
fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQgfHwg
IShpc05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rp
b24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpKSB8fCAhbV9kb2N1bWVudC0+aGFz
RWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIGlmIChhdXRv
KiBib2R5ID0gZG9jdW1lbnQtPmJvZHkoKSkKKyAgICBpZiAoYXV0byogYm9keSA9IG1fZG9jdW1l
bnQtPmJvZHkoKSkKICAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKQEAgLTI0NDYs
NyArMjQzOSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCiAgICAgaWYgKG1fZnJhbWUtPnNl
bGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
I2VuZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlv
bihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFs
c2UpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZh
bHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgpCkBA
IC0yNDY0LDcgKzI0NTcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93Qmxv
Y2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRTaG93
QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5kb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBtX2Rv
Y3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIHVw
ZGF0ZUFwcGVhcmFuY2UoKTsKIH0KQEAgLTI0ODgsNyArMjQ4MSw3IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKCkKIAogdm9pZCBGcmFtZVNlbGVjdGlv
bjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpCiB7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgIGlmIChhdXRv
KiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgY2xpZW50
LT51cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNoYW5nZWQoKTsKIAog
ICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CkBAIC0yNzIzLDcgKzI3MTYsNyBAQCBSZWZQ
dHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlv
bihpbnQgYW1vdW50KSBjb25zdAogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9u
RWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQog
ewotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5j
cmVhdGVSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2RvY3VtZW50
LT5jcmVhdGVSYW5nZSgpOwogICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydChub2RlLCBsb2NhdGlv
bik7CiAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZChub2RlLCBsb2NhdGlvbiArIGxlbmd0aCk7CiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRS
YW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOwpAQCAtMjkwNCw3ICsyODk3LDcgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcykKICAgICBpZiAo
bV9jYXJldEJsaW5rcyA9PSBjYXJldEJsaW5rcykKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJM
RShURVhUX0NBUkVUKQotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOyAKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAobV9jYXJldFBhaW50KSB7CiAgICAgICAg
IG1fY2FyZXRQYWludCA9IGZhbHNlOyAKICAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVjdCgpOyAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBlNmE3MDhiMDU0ZjU5
YjMwYmZiNTdlZmRmZTMyY2FlZDE2NWEwNTA4Li41YWFmOWEwODliM2IxOWRmYTAxMGVkMDcwOWQ0
MmRlZWFlMGI1ZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBA
IC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3B0aW9uczsKICAgICB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSBu
dWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihEb2N1
bWVudCogPSBudWxscHRyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0
YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwogICAgICAKQEAgLTMzOCw2ICsz
MzgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBkaXNwYXRjaFNlbGVjdFN0YXJ0KCk7CiAKKyAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91
dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA3MzA3
NmRlMWI3OWI5ZjA5ZmY5ZjMxMjdhODNlNWIwODNkNTc4NTkzLi42NjAxZGI4ZmNiNGUzN2Y0YWRi
MjBhZjE3ODJlMjIxMjRjZjEzYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChSZWY8VGV4dD4m
JiBub2RlLCB1bnNpZ25lZAogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBw
bHkoKQogewotICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGZyYW1lKCkuc2V0dGluZ3Mo
KS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CisgICAgYm9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0g
ZG9jdW1lbnQoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0VuYWJsZWQoKTsKICAgICBpZiAocGFz
c3dvcmRFY2hvRW5hYmxlZCkKICAgICAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXggMTc2ZDhmMDg5YWY1MDI2NmRkODk4ZmE5Nzc0
Zjk3NDFkYjM5OWRmYi4uMjczNTVlNjZmYjg5ZDU1NDJjZDZhOWJlYTg4ZTJjMjYyZjUwNzgzYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQu
Y3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0Fw
cGx5KCkKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBz
dHlsZS4KIAotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJhbWUoKS5z
ZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGlu
Z1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOwogCiAgICAgaWYg
KHR5cGluZ1N0eWxlICYmICF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEFw
cGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGluc2VydGVkIGxpbmUgYnJlYWssIHNvIHRoYXQg
aWYgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAppbmRleCBlOTEzMWY2ZmJmMzJkODYzMDUwYWExZWYyMDhlNWI0ZjQ0MDQ5YjZhLi4x
YmIwZDA1Mjg3MGM0NTEzNjk5NDcxOWQwZWMwNjViM2VkMDk2ZDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZv
aWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBhbnl0aGluZyBvdGhl
ciB0aGFuIE5vU2VsZWN0aW9uLiBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGEg
cmVhbCBlbmRpbmdTZWxlY3Rpb24sIHNvIGJhaWwgb3V0LgogICAgICAgICBpZiAoZW5kaW5nU2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChm
cmFtZSgpLmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgeworICAgIH0gZWxzZSBp
ZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKICAgICAg
ICAgaWYgKHBlcmZvcm1PdmVyd3JpdGUobV90ZXh0LCBtX3NlbGVjdEluc2VydGVkVGV4dCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgSW5zZXJ0
VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIHNldEVuZGluZ1NlbGVjdGlvbldpdGhvdXRWYWxp
ZGF0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAogICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KLSAgICBpZiAoUmVmUHRyPEVkaXRp
bmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkp
IHsKKyAgICBpZiAoUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpIHsKICAgICAgICAgdHlwaW5nU3R5bGUtPnByZXBh
cmVUb0FwcGx5QXQoZW5kUG9zaXRpb24sIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVXcml0aW5nRGly
ZWN0aW9uKTsKICAgICAgICAgaWYgKCF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICAg
ICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5kZXggNTQ2MGI3
NWNhYmQyM2RkNTVhZDkzOWQwMTRiNTgyOTJlZDlkNGVhMi4uNjhlMDgzNTJhNGMxMGQ4NjhiZjFl
NDY5YmY3NWM5NTZkMTNmMDU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lk
IFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX3Jhbmdl
VG9CZVJlcGxhY2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0
aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCisgICAgaWYgKCFkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWNoYXJhY3RlckNvdW50KCptX3JhbmdlVG9CZVJlcGxhY2Vk
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKaW5kZXggNTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRhMjFjOTkxNzAyZjY1ZTc4Ny4uNDk2
OTkxOWQ5MWExMTQ5NWMyOThjOTJhNzY2NzI2YjkyZTE2OTUwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTExODEsNyAr
MTE4MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAog
ICAgIC8vIEZJWE1FOiBDYW4gdGhpcyB3YWl0IHVudGlsIGFmdGVyIHRoZSBvcGVyYXRpb24gaGFz
IGJlZW4gcGVyZm9ybWVkPyAgVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCiAgICAgLy8gYW55IHdv
cmsgcGVyZm9ybWVkIGFmdGVyIHRoaXMgdGhhdCBxdWVyaWVzIG9yIHVzZXMgdGhlIHR5cGluZyBz
dHlsZS4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKIAogICAgIC8vIFdlIGRv
bid0IHdhbnQgdGhlIGRlc3RpbmF0aW9uIHRvIGVuZCB1cCBpbnNpZGUgbm9kZXMgdGhhdCB3ZXJl
bid0IHNlbGVjdGVkLiAgVG8gYXZvaWQgdGhhdCwgd2UgbW92ZSB0aGUKICAgICAvLyBwb3NpdGlv
biBmb3J3YXJkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZpc2libGUgcG9zaXRpb24gc28gd2UncmUg
c3RpbGwgYXQgdGhlIHNhbWUgdmlzaWJsZSBsb2NhdGlvbiwgYnV0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBjMDY1YzAyY2ExM2ZkMjUx
NzBkNmIyMWIxZjg5OGU5YmE3OWJlNjM4Li4wZGQyNmE4MWU5MGI2Nzg3NGMzMzVjZWYxMjEwN2Uy
MTRiZGZkODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29t
bWFuZC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgU2V0U2VsZWN0aW9uQ29tbWFuZDo6U2V0U2VsZWN0
aW9uQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGkKIAogdm9p
ZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gZnJhbWUoKS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rpb24uc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQpICYmICFtX3NlbGVjdGlvblRvU2V0
LmlzTm9uZU9yT3JwaGFuZWQoKSkgewogICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1f
c2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgU2V0U2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9V
bmFwcGx5KCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUoKS5zZWxl
Y3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rpb24uc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHN0YXJ0
aW5nU2VsZWN0aW9uKCkpICYmICFzdGFydGluZ1NlbGVjdGlvbigpLmlzTm9uZU9yT3JwaGFuZWQo
KSkKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBt
X29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggOTllOGYxNTg4OGVhZTkzZjNkNjhlMDRkODllZmY1NzU2
NDZiYzM3OS4uNTkyMDg0NTM1MWVhNDAzYjhjODczNDNhZGE3NmI3NDM2M2RmMDVkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkb1VuYXBwbHkoKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2hhc0JlZW5VbmRvbmUpIHsKLSAgICAgICAgICAg
IGZyYW1lKCkuZWRpdG9yKCkudW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKCksIG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwg
bV9jb3JyZWN0ZWQsIG1fY29ycmVjdGlvbik7CiAgICAgICAgICAgICBtX2hhc0JlZW5VbmRvbmUg
PSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX2NvcnJlY3RlZC5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigp
LnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQpKQorICAgIGlm
ICghZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rp
b25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9CZUNvcnJl
Y3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFt
ZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA1YTZjNTNjMDM4MzcwY2ZiMGEzOGFiMGRhNGY1
NjE4ZmJhYmIyNWFlLi4xNTVmODkyMWIzY2I4NGE3ZTFhYTBmNTljYTk5NDcwM2JhNWQxZWI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTE2MywxMyArMTYz
LDEwIEBAIFR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBF
VHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29t
cG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudC5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBpZiAoIWZyYW1lLT5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpCisgICAgaWYgKCFkb2N1bWVudC5zZWxlY3Rpb24oKS5pc1Jhbmdl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFz
dFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpm
cmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5k
ID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElz
QXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRp
b25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRT
aG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcp
OwpAQCAtMTgzLDggKzE4MCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9u
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tCiB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9w
dGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBpZiAoZ3JhbnVsYXJp
dHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7Ci0gICAgICAgICAgICB1cGRhdGVTZWxlY3Rp
b25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgp
LCBkb2N1bWVudC5mcmFtZSgpKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
ZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21D
dXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudCk7CiAgICAg
ICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYg
SXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29t
cG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50
U3BlbGxDaGVja2luZyk7CkBAIC0xOTksMTAgKzE5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
ZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4
dEdyCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50
JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkp
CiB7CiAgICAgLy8gRklYTUU6IEZvcndhcmQgZGVsZXRlIGluIFRleHRFZGl0IGFwcGVhcnMgdG8g
b3BlbiBhbmQgY2xvc2UgYSBuZXcgdHlwaW5nIGNvbW1hbmQuCi0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29t
bWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgewot
ICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlv
bihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZnJhbWUpOworICAgICAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklm
RGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRv
Y3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0
aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAg
ICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0
aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTIxNCwxMCArMjEwLDkgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQs
IE9wdGlvbnMgb3B0aW9ucywKICAgICBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEZv
cndhcmREZWxldGVLZXksIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMsIGdyYW51bGFyaXR5KS0+YXBw
bHkoKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVu
dEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRG
cm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
VmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gdHlwaW5nQ29tbWFuZC0+
ZW5kaW5nU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI3LDMxICsyMjIsMjUg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJy
ZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25zIG9wdGlv
bnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb24pCiB7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAgICAgaWYgKCF0ZXh0
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jk
c0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOworICAgICAgICBk
b2N1bWVudC5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhp
c1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKICAgICAKLSAgICBpbnNlcnRUZXh0KGRvY3VtZW50
LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBvc2l0
aW9uKTsKKyAgICBpbnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCiAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IG5lZWQgdG8gdGFrZSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uIEl0IHNob3VsZCBi
ZSBpZGVudGljYWwgdG8gRnJhbWVTZWxlY3Rpb24ncyBjdXJyZW50IHNlbGVjdGlvbi4KIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBP
cHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQogewot
ICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VSVChm
cmFtZSk7Ci0KICAgICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQgKHRl
eHQgJXMpIiwgdGV4dC51dGY4KCkuZGF0YSgpKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gY3Vy
cmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKIAogICAgIFN0cmluZyBuZXdUZXh0ID0gZGlzcGF0Y2hCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCh0ZXh0LCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGNvbXBvc2l0aW9uVHlwZSA9PSBU
ZXh0Q29tcG9zaXRpb25QZW5kaW5nKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHN0YXJ0aW5nIGFu
ZCBlbmRpbmcgc2VsZWN0aW9uIGFwcHJvcHJpYXRlbHkgaWYgd2UgYXJlIHVzaW5nIGEgc2VsZWN0
aW9uCiAgICAgLy8gdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24u
ICBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgY2hhbmdlIEVkaXRDb21tYW5kCiAgICAgLy8gdG8g
ZGVhbCB3aXRoIGN1c3RvbSBzZWxlY3Rpb25zIGluIGEgZ2VuZXJhbCB3YXkgdGhhdCBjYW4gYmUg
dXNlZCBieSBhbGwgb2YgdGhlIGNvbW1hbmRzLgotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFu
ZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlw
aW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdD
b21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkp
IHsKICAgICAgICAgaWYgKGxhc3RUeXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKSAhPSBz
ZWxlY3Rpb25Gb3JJbnNlcnRpb24pIHsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5z
ZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNlcnRpb24pOwogICAgICAgICAgICAg
bGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNlcnRp
b24pOwpAQCAtMjY2LDEyICsyNTUsMTIgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMKICAgICB9
CiAKICAgICBhdXRvIGNtZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgSW5zZXJ0
VGV4dCwgbmV3VGV4dCwgb3B0aW9ucywgY29tcG9zaXRpb25UeXBlKTsKLSAgICBhcHBseVRleHRJ
bnNlcnRpb25Db21tYW5kKGZyYW1lLmdldCgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvckluc2Vy
dGlvbiwgY3VycmVudFNlbGVjdGlvbik7CisgICAgYXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZChk
b2N1bWVudC5mcmFtZSgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvckluc2VydGlvbiwgY3VycmVu
dFNlbGVjdGlvbik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKERv
Y3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAgIGlmIChSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxP
cGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNB
dXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAtMjg0
LDcgKzI3Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKERvY3VtZW50
JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7Cisg
ICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBp
bmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKGZhbHNlKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKTsKQEAgLTI5Niw3ICsyODUsNyBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChE
b2N1bWVudCYgZG9jdW1lbnQpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChS
ZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFu
ZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0
aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRv
Y29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0
b3IpOwpAQCAtMzA3LDkgKzI5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zCiAgICAgVHlw
aW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IsIGVt
cHR5U3RyaW5nKCksIG9wdGlvbnMpLT5hcHBseSgpOwogfQogCi1SZWZQdHI8VHlwaW5nQ29tbWFu
ZD4gVHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhG
cmFtZSYgZnJhbWUpCitSZWZQdHI8VHlwaW5nQ29tbWFuZD4gVHlwaW5nQ29tbWFuZDo6bGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS5l
ZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKKyAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1h
bmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGRvY3VtZW50LmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgp
OwogICAgIGlmICghbGFzdEVkaXRDb21tYW5kIHx8ICFsYXN0RWRpdENvbW1hbmQtPmlzVHlwaW5n
Q29tbWFuZCgpIHx8ICFzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5k
LmdldCgpKS0+aXNPcGVuRm9yTW9yZVR5cGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApAQCAtMzIxLDE2ICszMTAsMTYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjpzaG91bGREZWZlcldp
bGxBcHBseUNvbW1hbmRVbnRpbEFkZGluZ1R5cGluZ0NvbW1hbmQoKSBjb25zdAogICAgIHJldHVy
biAhbV9pc0hhbmRsaW5nSW5pdGlhbFR5cGluZ0NvbW1hbmQgfHwgZWRpdEFjdGlvbklzRGVsZXRl
QnlUeXBpbmcoZWRpdGluZ0FjdGlvbigpKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjpjbG9z
ZVR5cGluZyhGcmFtZSogZnJhbWUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJh
bWUpKQorICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkKICAgICAgICAg
bGFzdFR5cGluZ0NvbW1hbmQtPmNsb3NlVHlwaW5nKCk7CiB9CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotdm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJy
ZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFz
dEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCiB7Ci0g
ICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBp
bmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlmIChSZWZQdHI8
VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0RW5kaW5nU2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRFbmRpbmdTZWxlY3Rpb25Pbkxhc3RJbnNlcnRDb21tYW5kKG5ld1NlbGVjdGlvbik7
CiAgICAgfQpAQCAtNDM2LDE5ICs0MjUsMTcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkaWRBcHBs
eUNvbW1hbmQoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwotCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlmICghZnJhbWUuZWRpdG9y
KCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUu
ZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAm
JiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCi0gICAg
ICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVk
KCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50
RW5hYmxlZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0
b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCku
ZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQor
ICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZnJhbWUuZWRpdG9yKCku
aXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCisgICAgaWYgKGRvY3VtZW50KCkuZWRpdG9y
KCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVybjsKICNlbHNl
Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAvLyBUYWtlIGEgbG9v
ayBhdCB0aGUgc2VsZWN0aW9uIHRoYXQgcmVzdWx0cyBhZnRlciB0eXBpbmcgYW5kIGRldGVybWlu
ZSB3aGV0aGVyIHdlIG5lZWQgdG8gc3BlbGxjaGVjay4gCkBAIC00NjYsOSArNDUzLDkgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1h
bmQgY29tbWFuZFR5cGUpCiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2aW91c1dvcmQ7
CiAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6
Okluc2VydFRleHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0TGluZUJy
ZWFrIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFy
YXRvciB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQpKQogICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJldmlvdXNX
b3JkID0gcGxhaW5UZXh0KCpyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBm
cmFtZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGlu
Z1NlbGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3Jk
KHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0
VGV4dCkKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlU
aW1lcigpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZl
VGV4dFVJVGltZXIoKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlwZSk7
CiAgICAgICAgIC8vIElmIHRoaXMgYnVnIGdldHMgZml4ZWQsIHRoaXMgUExBVEZPUk0oSU9TX0ZB
TUlMWSkgY29kZSBjb3VsZCBiZSByZW1vdmVkOgpAQCAtNDgzLDcgKzQ3MCw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNv
bW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDEgPSBzdGFydE9mV29yZChwcmV2
aW91cywgc3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMiA9IHN0YXJ0
T2ZXb3JkKHN0YXJ0LCBzdGFydFdvcmRTaWRlKTsKICAgICAgICAgaWYgKHAxICE9IHAyKQotICAg
ICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3Jk
KHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2UpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVj
dGlvbigpLCBmYWxzZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgfQog
fQpAQCAtNDk3LDI2ICs0ODQsMjYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlwaW5n
VG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEcKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBpZiAoIXJhbmdlIHx8IGlzRWRpdGluZ1RleHRBcmVhT3JUZXh0
SW5wdXQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGlu
ZygqdGhpcywgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkp
OworICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0
aGlzLCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CiAK
LSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB7IDEs
IFN0YXRpY1JhbmdlOjpjcmVhdGUoKnJhbmdlKSB9KTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5l
ZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUo
KnJhbmdlKSB9KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNv
bW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZykKIHsKLSAgICBG
cmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9y
KGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKICAgICB1cGRhdGVQcmVzZXJ2ZXNUeXBpbmdTdHlsZShj
b21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGZy
YW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVkaXRv
cigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICAgICAvLyBTaW5jZSB0aGUgc3BlbGxjaGVja2lu
ZyBjb2RlIG1heSBhbHNvIHBlcmZvcm0gY29ycmVjdGlvbnMgYW5kIG90aGVyIHJlcGxhY2VtZW50
cywgaXQgc2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgdHlwaW5nIGNoYW5nZXMuCiAgICAgaWYgKCFt
X3Nob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKQogICAgICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0
ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAjZWxzZQogICAgIC8vIFRoZSBv
bGQgc3BlbGxjaGVja2luZyBjb2RlIHJlcXVpcmVzIHRoYXQgY2hlY2tpbmcgYmUgZG9uZSBmaXJz
dCwgdG8gcHJldmVudCBpc3N1ZXMgbGlrZSB0aGF0IGluIDY4NjQwNzIsIHdoZXJlIDxkb2Vzbid0
PiBpcyBtYXJrZWQgYXMgbWlzc3BlbGxlZC4KICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBp
bmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7Ci0gICAgZnJhbWUuZWRpdG9yKCkuYXBwbGll
ZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmco
KnRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTUzNSw5ICs1MjIsOSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KGNvbnN0IFN0cmluZyAmdGV4dCwg
Ym9vbCBzZQogewogICAgIExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZCAlcCBpbnNlcnRUZXh0
QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSAodGV4dCAlcywgc2VsZWN0SW5zZXJ0ZWRUZXh0ICVkKSIs
IHRoaXMsIHRleHQudXRmOCgpLmRhdGEoKSwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKIAotICAgIEFj
Y2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0
KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFRleHQodGV4
dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsIHRleHQs
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCkt
PnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsK
IH0KIApAQCAtNTUwLDkgKzUzNyw2IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1
bldpdGhvdXROZXdsaW5lcyhjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0CiAgICAgICAg
IG1fY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvbk5vbmUgPyBJbnNlcnRUZXh0Q29t
bWFuZDo6UmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMgOiBJbnNlcnRUZXh0
Q29tbWFuZDo6UmViYWxhbmNlQWxsV2hpdGVzcGFjZXMsIEVkaXRBY3Rpb246OlR5cGluZ0luc2Vy
dFRleHQpOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RGTW92ZShjb21tYW5kKSwg
ZW5kaW5nU2VsZWN0aW9uKCkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsK
LSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5D
b21tYW5kKEluc2VydFRleHQpOwogfQogCkBAIC01NjUsMTcgKzU0OSwxNCBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydExpbmVCcmVhaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVu
dCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0
TGluZUJyZWFrKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWtBbmRO
b3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJl
cGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICBpbnNlcnRMaW5lQnJlYWsoKTsKLSAgICByZXBsYWNlZFRleHQucG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RD
YWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVU
eXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNv
bXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFj
ZWRSYW5nZSgpKTsKIH0KIApAQCAtNTg4LDE3ICs1NjksMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQoKSwgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNlcnRQYXJh
Z3JhcGgpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3IpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBh
cmFncmFwaFNlcGFyYXRvckFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vzc2li
aWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFncmFwaFNlcGFy
YXRvcigpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5n
LCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVk
QnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC02MTUsMTcg
KzU5MywxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcklu
UXVvdGVkQ29udGVudCgpCiAgICAgfQogICAgICAgICAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotCi0gICAg
RnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rvcihm
cmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNlcGFy
YXRvckluUXVvdGVkQ29udGVudCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7
Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBs
YWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZp
Y2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBl
VHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBj
b21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxh
Y2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTY1MiwxMCArNjI3LDkgQEAgYm9vbCBUeXBpbmdDb21tYW5k
OjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2ls
bFJpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJh
bWU+IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1l
bnQoKS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jk
c0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0
ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25BZnRlclVuZG87CkBAIC03NTQsMTQgKzcyOCwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRl
bGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFk
ZAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0
ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihz
ZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8
fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9u
VG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKCF3aWxsQWRkVHlwaW5n
VG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRvRGVs
ZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRBZGRU
b0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNl
bGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJp
bmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9y
KCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwog
CiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxs
IHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91
bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTg2MSw3ICs4MzQsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwg
IWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0
ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEZvcndh
cmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFu
Z2UoKSkpCkBAIC04NzEsNyArODQ0LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVs
ZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxl
dGUpOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwor
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9u
VG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2Vy
dGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAgIC8vIG1ha2UgdW5kbyBzZWxlY3Qgd2hhdCB3YXMg
ZGVsZXRlZAogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkFmdGVyVW5kbyk7CiAg
ICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0
ZSwgbV9zbWFydERlbGV0ZSwgLyogbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSovIHRydWUsIC8qIHJl
cGxhY2UqLyBmYWxzZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzLCAvKnNhbml0aXplTWFya3Vw
Ki8gdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCmluZGV4IDc2ZTVm
OTliZjkyNTM4NTc1Y2FhMzg3NmJiOWI2YjU1NGI5ZmI3NWMuLjg5NmJmMGJkMTVkYmUzZDQ4MTg0
ODk1ZjY0M2YxYzg2OWQ1OGViNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5oCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRMaW5l
QnJlYWsoRG9jdW1lbnQmLCBPcHRpb25zKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3IoRG9jdW1lbnQmLCBPcHRpb25zKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMg
dm9pZCBjbG9zZVR5cGluZyhGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKERv
Y3VtZW50Jik7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgdm9pZCBlbnN1
cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhG
cmFtZSosIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBlbnN1cmVM
YXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1
bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICNlbmRpZgogCiAgICAgdm9pZCBpbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQpOwpAQCAt
MTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc09wZW5Gb3JNb3JlVHlwaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGVuRm9yTW9yZVR5cGluZzsgfQogICAgIHZvaWQgY2xvc2VUeXBp
bmcoKSB7IG1fb3BlbkZvck1vcmVUeXBpbmcgPSBmYWxzZTsgfQogCi0gICAgc3RhdGljIFJlZlB0
cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZy
YW1lJik7CisgICAgc3RhdGljIFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZElmU3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50Jik7CiAKICAgICB2b2lkIGRvQXBwbHkoKSBm
aW5hbDsKICAgICBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0IGZpbmFsOwpAQCAtMTIyLDcg
KzEyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRFdmVudERh
dGFUcmFuc2ZlcigpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNCZWZvcmVJbnB1dEV2ZW50Q2Fu
Y2VsYWJsZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9u
SWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwgRnJhbWUqKTsK
KyAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBEb2N1bWVudCYpOwogCiAgICAgdm9pZCB1cGRhdGVQcmVz
ZXJ2ZXNUeXBpbmdTdHlsZShFVHlwaW5nQ29tbWFuZCk7CiAgICAgYm9vbCB3aWxsQWRkVHlwaW5n
VG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCwgVGV4dEdyYW51bGFyaXR5LCBjb25zdCBTdHJp
bmcmID0gZW1wdHlTdHJpbmcoKSwgUmVmUHRyPFJhbmdlPiYmID0gbnVsbHB0cik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggZjJhMmQ1MmFjNWFiZjRlNGYxMzEx
M2NhMjVkMWIyMGExNzM4ZmE2OS4uNTM4NDliNGVhZTE4ODhjMmZkOTQ4Y2MyODYyNjk3NmU3NDFi
ZmYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMzg5LDcg
KzM4OSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJp
bmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAvLyBoYXZlIGEgc3RhbGUgc2VsZWN0aW9uLgog
dm9pZCBFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9w
ZW5Gb3JNb3JlVHlwaW5nKCkKIHsKLSAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENv
bW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygmbV9mcmFtZSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJl
TGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcobV9k
b2N1bWVudCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4
IGM3MTZkNzI4MGY0NjJjYjU2NzM3NTdiNGJhNGUzYjI0YWJlZThkZTAuLmEyNjczNDViZTU0NmVl
N2Y0NjExOWQ4MzJjOGRlMTkxNmE4YWVjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcApAQCAtNTQxLDExICs1NDEsMTQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcCgpCiB2
b2lkIEZyYW1lTG9hZGVyOjp3aWxsVHJhbnNpdGlvblRvQ29tbWl0dGVkKCkKIHsKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZnJhbWUgaXMgc3RpbGwgZnVsbHkgaW4gcGxh
Y2UgKG5vdCBjYWNoZWQsIG5vdCBkZXRhY2hlZCksIGJ1dCB3aWxsIGJlIHJlcGxhY2VkLgorICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5lZGl0b3IoKS5oYXNDb21w
b3NpdGlvbigpKSB7CisgICAgaWYgKGRvY3VtZW50LT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigp
KSB7CiAgICAgICAgIC8vIFRoZSB0ZXh0IHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gRE9NLCBzbyBp
dCdzIGJldHRlciB0byBjb25maXJtIHRoYW4gdG8gY2FuY2VsIHRoZSBjb21wb3NpdGlvbi4KLSAg
ICAgICAgbV9mcmFtZS5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKLSAgICAgICAgaWYg
KEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS5lZGl0b3IoKS5jbGllbnQoKSkg
eworICAgICAgICBkb2N1bWVudC0+ZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAg
ICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCA9IGRvY3VtZW50LT5lZGl0b3IoKS5j
bGllbnQoKSkgewogICAgICAgICAgICAgZWRpdG9yQ2xpZW50LT5yZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKCZtX2ZyYW1lKTsKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+ZGlzY2FyZGVkQ29t
cG9zaXRpb24oJm1fZnJhbWUpOwogICAgICAgICB9CkBAIC01NjcsOCArNTcwLDYgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogICAgIH0KIAogICAgIHN0b3BMb2FkaW5nKHVubG9hZEV2
ZW50UG9saWN5KTsKLSAgICAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVy
YXRpb25zKCk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQpAQCAtNTgwLDcg
KzU4MSw2IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQogICAgIH0KIAogICAgIG1f
ZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLmNhbmNlbCgpOwotICAgIG1fZnJhbWUuZWRpdG9y
KCkuY2xlYXJMYXN0RWRpdENvbW1hbmQoKTsKIAogICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwog
ICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSBmYWxzZTsKQEAgLTY0Myw4ICs2NDMsNiBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQ2xlYXJXaW5kb3dOYW1lKGNvbnN0IEZyYW1lJiBmcmFt
ZSwgY29uc3QgRG9jdW1lbnQmIG5ldwogCiB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVu
dCogbmV3RG9jdW1lbnQsIGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sIGNsZWFyU2Ny
aXB0T2JqZWN0cywgYm9vbCBjbGVhckZyYW1lVmlldywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
aGFuZGxlRE9NV2luZG93Q3JlYXRpb24pCiB7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhcigp
OwotCiAgICAgYm9vbCBuZWVkZWRDbGVhciA9IG1fbmVlZHNDbGVhcjsKICAgICBtX25lZWRzQ2xl
YXIgPSBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzODVlMzdhNmQwYzkwZTYzM2Ez
YjdiNDI4NzJjNjE2ZTM4MDg2NDI2Li4yOTA3YjQ4NWI5NGM2NmFjNTA2ODVjOTlkYzE1ZGQ1ZWVl
ZmZjZDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMTU2LDggKzE1Niw2IEBAIEZyYW1lOjpG
cmFtZShQYWdlJiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5p
cXVlUmVmPEZyYW1lTG9hCiAgICAgLCBtX25hdmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJl
ZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigqdGhpcykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25l
ckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdChtYWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+
KCp0aGlzKSkKLSAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCi0g
ICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKICAg
ICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI+KCp0aGlzKSkKICAgICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0
b3IodGhpcykpCiAgICAgLCBtX3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRo
aXMpKQpAQCAtNTU0LDcgKzU1Miw3IEBAIGJvb2wgRnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2Vz
cygpCiAgICAgY2FzZSBET01QYXN0ZUFjY2Vzc1BvbGljeTo6RGVuaWVkOgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgY2FzZSBET01QYXN0ZUFjY2Vzc1BvbGljeTo6Tm90UmVxdWVzdGVkWWV0
OiB7Ci0gICAgICAgIGF1dG8qIGNsaWVudCA9IG1fZWRpdG9yLT5jbGllbnQoKTsKKyAgICAgICAg
YXV0byogY2xpZW50ID0gZWRpdG9yKCkuY2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05MzcsNyArOTM1LDcgQEAgdm9pZCBGcmFt
ZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQg
dGV4dFpvb21GYWN0b3IKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2VkaXRvci0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOworICAgIGVkaXRv
cigpLmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKIAogICAgIC8vIFJlc3BlY3Qg
U1ZHcyB6b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9j
dW1lbnRzLgogICAgIC8vIEZJWE1FOiBIb3cgdG8gaGFuZGxlIGNvbXBvdW5kIGRvY3VtZW50cyAr
IHpvb21BbmRQYW49ImRpc2FibGVkIj8gTmVlZHMgU1ZHIFdHIGNsYXJpZmljYXRpb24uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKaW5kZXggM2Q0M2E5NGJlYTk1NTZjOThkYzc0MjNhYjdlYWQ5YTkyYTUyYzZmZS4u
MDkzMmE4M2NiNjc0ZjZmOGM5NjExZWQ5ZjY5OTlkMTdiNjJkMTUzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
aApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWJzdHJhY3RGcmFtZS5oIgogI2luY2x1
ZGUgIkFkanVzdFZpZXdTaXplT3JOb3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkZyYW1lSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUg
IlBhZ2VJZGVudGlmaWVyLmgiCkBAIC0xNjMsMTQgKzE2NCwxNCBAQCBwdWJsaWM6CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CiAgICAgRnJhbWVWaWV3KiB2aWV3KCkgY29uc3Q7CiAK
LSAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9Ci0gICAgY29uc3QgRWRp
dG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEVkaXRvciYgZWRp
dG9yKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0KKyAgICBjb25zdCBFZGl0b3Im
IGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9CiAgICAgRXZl
bnRIYW5kbGVyJiBldmVudEhhbmRsZXIoKSB7IHJldHVybiBtX2V2ZW50SGFuZGxlcjsgfQogICAg
IGNvbnN0IEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4gbV9ldmVu
dEhhbmRsZXI7IH0KICAgICBGcmFtZUxvYWRlciYgbG9hZGVyKCkgY29uc3Q7CiAgICAgTmF2aWdh
dGlvblNjaGVkdWxlciYgbmF2aWdhdGlvblNjaGVkdWxlcigpIGNvbnN0OwotICAgIEZyYW1lU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQotICAgIGNvbnN0IEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQor
ICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxl
Y3Rpb24oKTsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgp
IGNvbnN0OwogICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGFuaW1hdGlvbigpIHsgcmV0dXJu
IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXImIGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQpA
QCAtMzM4LDggKzMzOSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsK
IAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlxdWVS
ZWY8RWRpdG9yPiBtX2VkaXRvcjsKLSAgICBVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+IG1fc2Vs
ZWN0aW9uOwogICAgIFVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlv
bkNvbnRyb2xsZXI7CiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCBlYjAyZjhlYzQ0ZDkzYWQ3YTZjYjk1MWY2OTcwNmZj
NGQ2ZjgwZTBlLi4zZWVlNDJmZjBjZDFlNzNjZjAxYjI5NWU5OGQyODU0ZTliYjdjZmRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTY4LDIxICs2OCwxNiBAQCBSZWY8
VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JE
YXRhJiBkYXRhKQogCiBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9u
cywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbiwgRmxvYXRTaXplIG1hcmdpbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSByYW5nZS5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBSZWY8RG9jdW1lbnQ+IGRvY3Vt
ZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOwogCi0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rvcigq
ZnJhbWUpOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24g
PSBkb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgT3B0aW9uU2V0PFRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uczsKICAgICB0ZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkRvTm90
U2V0Rm9jdXMpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgdGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKTsKICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VVcGRhdGVzKTsKICNlbmRpZgotICAgIFRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoKmZyYW1lLCB7IFNpbXBsZVJhbmdl
IHsgcmFuZ2UgfSB9LCB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zKTsKKyAgICBUZW1wb3JhcnlT
ZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKGRvY3VtZW50LCB7IFNpbXBsZVJhbmdlIHsg
cmFuZ2UgfSB9LCB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zKTsKIAogICAgIFRleHRJbmRpY2F0
b3JEYXRhIGRhdGE7CiAKQEAgLTkxLDcgKzg2LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQK
IAogICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZy
YW5nZSwgb2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogCi0gICAgaWYg
KCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNh
dGVzQ3VycmVudFNlbGVjdGlvbikpCisgICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEs
ICpkb2N1bWVudC0+ZnJhbWUoKSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVj
dGlvbikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0
b3I6OmNyZWF0ZShkYXRhKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396826</attachid>
            <date>2020-04-17 19:43:47 -0700</date>
            <delta_ts>2020-04-18 15:14:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200417194346.patch</filename>
            <type>text/plain</type>
            <size>192760</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uZjcwMWM1YTU4MzYzNjgwYmI2N2Q2ZDE4MjJhYTAx
Yzk4ZmVlNzEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1fdW5kb01h
bmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRp
dG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgICogZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3Jy
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVj
dEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVk
RWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpl
ZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJv
Y2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2
ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZl
KToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OlVOTEVTU19FTkFCTEVEKToK
KyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKToKKyAgICAgICAg
KiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
ZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudCk6CisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFu
Z2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6On5UZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rp
b25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YmVoYXZpb3IgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1M
Q3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhUTUxDb3B5KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRGVsZXRl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkU21hcnREZWxldGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRNTENv
cHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRNTEN1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6RWRpdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4
dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5z
ZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGVyZm9ybUN1dE9y
Q29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0QmFz
ZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpiYXNlV3JpdGlu
Z0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2V0Q29tcG9zaXRp
b25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRDb21w
b3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aWdub3Jl
U3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpsZWFyblNwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1t
YXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTcGVsbENoZWNraW5n
RW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxl
Y3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RlZFRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRh
VHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0UGxh
Y2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1lbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6SWdub3JlU2VsZWN0aW9uQ2hh
bmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkb2N1bWVudCBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6Q29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29uc3QpOgorICAgICAgICAqIGVk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWx3YXlz
VXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlv
dXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1Nl
bGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1
cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpmb2N1c2Vk
T3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRTdG9w
QmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNob3VsZFNob3dCbG9j
a0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFy
YW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgor
ICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRD
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZl
cmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0
aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGlu
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrQW5k
Tm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5n
Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlv
bklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdERP
TVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4dFpv
b21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9UZXh0
SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdp
dGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBmaWd1cmUgaW50byB2aXN1YWxs
eSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjYzhlOGEz
MzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2ZDA2MTE2ZWQ2Zjg5ZmFiOTBh
M2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4Miw2ICs1
ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwg
dW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwgbV9vcmllbnRhdGlvbk5vdGlm
aWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBtX2lkZW50aWZpZXIoRG9jdW1l
bnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRvTWFuYWdlcihVbmRvTWFuYWdl
cjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigq
dGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0
aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lk
ZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0ZmQwMGUxNWI4OGQ3MjJlOTVh
OTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4NmExYjFlMWY1NDIxYmRiNzg2
YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiArMTE5LDcgQEAgY2xhc3MgRG9j
dW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRUaW1lbGluZTsKIGNsYXNzIERv
Y3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2NsYXNzIEVkaXRvcjsKIGNsYXNz
IEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIEV4dGVuc2lvblN0
eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZv
bnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEZy
YW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgRnVsbHNjcmVlbk1hbmFnZXI7
CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsxNTc4LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgeyBtX2hhc1Zp
c3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQogICAgIGJvb2wgaGFzVmlzdWFs
bHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc3VhbGx5Tm9u
RW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIG1f
ZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX2Vk
aXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVj
dGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1Y3Rpb25G
bGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEgPDwgMSB9
OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5zaWduZWQgPSBEZWZhdWx0RG9j
dW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKQEAgLTIxMTYsNiAr
MjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOwogCiAgICAgSGFzaE1hcDxF
bGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmllZEVsZW1lbnRzTWFwOworCisg
ICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5pcXVlUmVmPEZyYW1lU2VsZWN0
aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50VGFyZ2V0RWxlbWVudEZvckRv
Y3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2IzYWE2OWZjYjVhYzgxMWI0ZThj
NzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdkMDBiYmYxMjBjMDM3OWVmMDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVu
dGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcioKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1f
dGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKQotICAg
ICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiB9CiAKQEAg
LTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3Rv
cFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikK
IHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJl
Zm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9
PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQ5LDcgKzE0OSw3IEBAIGJv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25z
dAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxv
d2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewotICAgIHJldHVybiAhbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgcmV0dXJuICFtX2RvY3Vt
ZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKICAgICBpZiAo
bV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAKICAgICBpZiAobV9yYW5n
ZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7CiAgICAg
ICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRp
c21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAtMjIwLDEyICsyMjAsMTIgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBj
bGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCBj
b3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFt
ZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxl
Y3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3Bl
bGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
bV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgIFJlZlB0cjxG
cmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7CisgICAgbV9kb2N1bWVudC51cGRh
dGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxl
Y3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBt
YXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRv
Y29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0yMzYsMTIgKzIzNiwxMiBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgIG1faXNEaXNt
aXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNl
bGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9m
V29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKICAgICAgICAg
YXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5
cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0s
IGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigp
LCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRl
eHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVj
dGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFu
Z2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5n
UGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpKTsKICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCkt
PmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CisgICAgICAgIHRleHRDaGVj
a2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAg
IGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDIsNyArMzAyLDcg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29u
c3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZlID0g
bV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVy
RG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZG9jdW1lbnQg
IT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KCpyYW5nZVdpdGhBbHRlcm5h
dGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogCiBGbG9hdFJlY3QgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsK
KyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52aWV3KCk7CiAgICAgaWYgKCF2
aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRz
KHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuCiAK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhl
IGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwK
ICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRo
YXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8gdW5kZXNpcmVkIGF1dG9jb3Jy
ZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29u
ZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24KIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29t
cG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYgKGNvbW1hbmQtPmlzVG9wTGV2
ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtl
cnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBtX2RvY3Vt
ZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5k
aWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0
RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0zOTUsMTUgKzM5NSwxNSBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmco
RWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlu
a0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgYXV0byYgbWFy
a2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgYXV0byYgbWFy
a2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFya2VyKHJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIEVkaXRv
ckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRpdG9yQ2xpZW50KCkKIHsKLSAg
ICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdlKCktPmVkaXRvckNsaWVudCgp
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdlKCkgPyAmbV9kb2N1bWVudC5w
YWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAogVGV4dENoZWNrZXJDbGllbnQq
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKQEAgLTQ3MSw3ICs0NzEs
NyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNw
YWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRPZlNlbGVjdGlvbiA9PSBw
cmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBw
cmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQo
KSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOwogICAgIFN0cmluZyBzdHJp
bmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOwogICAgIGlmIChzdHJpbmcu
aXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5n
Lmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00NzksMTIgKzQ3OSwxMiBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9y
RGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhpcyB3aGl0ZXNwYWNlIHRvIGlu
ZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlvbiBmb2xsb3dpbmcgdGhpcwog
ICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVzIHRoZSBzYW1lIG9yaWdpbmFs
IHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAvLyB3b24ndCBhdXRvY29ycmVj
dCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5hZGRNYXJrZXIo
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJl
Y3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKKyAg
ICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdG
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewotICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2Vy
cygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1f
ZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250cm9sbGVyLmhhc01hcmtlcnMo
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKICAg
ICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pCiAg
ICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlv
bihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxhY2VkLCByZXN1bHQucmVwbGFj
ZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUCiAKICAg
ICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuc3RhcnRQ
b3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVn
aW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3Rl
clBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3Np
dGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKQEAgLTUyMCw3ICs1MjAs
NyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5k
T2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZv
cihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBlbmRPZldvcmRQb3NpdGlvbi5j
b250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2Zy
YW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIu
ZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3Vt
ZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgp
KTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlKTsKICAgICBp
ZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTgs
NyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJr
ZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAogQWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQoKQog
ewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUucGFnZSgpLT5hbHRlcm5hdGl2
ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKSAm
JiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRD
bGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0ZXJuYXRpdmVU
ZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBt
YXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwKIAog
ICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgc2lu
Y2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0aGUgRE9NLCBzdWNoIHRoYXQg
dGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gaXMgbm8gbG9u
Z2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5NTI2CiAgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9IHJlc29sdmVDaGFyYWN0ZXJM
b2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHModHJlZVNjb3BlUm9vdCksIHBh
cmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhFbmRD
b250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50KG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29u
dGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBkYXRlZFBhcmFncmFwaEVuZENv
bnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byByZXBsYWNlbWVu
dFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29u
dGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rp
b24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoLCBhbHRlcm5h
dGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAgYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAgICB0YXJnZXQgPSB0cmlnZ2Vy
aW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJn
ZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICAgICAgdGFyZ2V0
ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9jdW1lbnQpOwogICAgIGlmICgh
dGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGV2ZW50ID0gVGV4dEV2
ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93UHJveHkoKSwgdGV4dCwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVG
b3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93UHJveHkoKSwgdGV4dCwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdn
ZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwpAQCAtNjUz
LDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRp
Y3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRl
cm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBh
dXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1dG8mIGVkaXRvciA9IG1fZG9j
dW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5n
ZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRl
cm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZiMjA3ZWU4NzEwMWQ4M2EyM2Jk
OTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3OTFjZjgyMzFiOTA2MzNjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
b21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRWRpdENvbW1hbmQ7
CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3MgRWRpdG9yQ2xpZW50OwogY2xh
c3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwogY2xhc3MgVGV4dENoZWNrZXJD
bGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1lJiBmcmFt
ZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9KQorICAgIGV4cGxpY2l0IEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KSBVTkxFU1NfRU5BQkxF
RCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQgc3RhcnRBbHRlcm5hdGl2ZVRl
eHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19FTkFCTEVEKHsgfSkKQEAgLTE0
NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZlVGV4dENsaWVudCogYWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERv
Y3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVTU19FTkFCTEVECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDE0ZTNj
Nzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3ZDFiOTY1MjQ2NDIwZDExODI2
NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwxNyBAQCB2b2lkIEVkaXRDb21t
YW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRoZSBjb21wb3NpdGlvbiB3aWxs
IGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFzIGluIDxyZGFyOi8vcHJvYmxl
bS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhpcyBpbiAtW1dlYkhUTUxWaWV3
IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQgdGhlIHBob25lCiAgICAgLy8g
Z29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jYW5jZWxDb21wb3NpdGlv
bigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENvbXBvc2l0aW9uKCk7CiAjZW5k
aWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFwcGx5RWRpdGluZygqdGhpcykp
CisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAgICAgICAgIG1fY29tbWFuZHNb
aSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0b3IoKS51bmFwcGxpZWRFZGl0
aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0
aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQog
ICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9y
VW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0yNTgsMTMg
KzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnJlYXBwbHkoKQogICAgIC8v
IGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVhdGlvbiBvZiBWaXNpYmxlUG9z
aXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxSZWFwcGx5RWRpdGluZygq
dGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmco
KnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8mIGNvbW1hbmQgOiBtX2Nv
bW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5y
ZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6On5Db21wb3Np
dGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OndpbGxBcHBseUNv
bW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmco
KnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAgIHJldHVybiBkb2N1bWVudCgp
LmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdz
KCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseSgpCkBAIC0zNzgsMTMg
KzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseSgpCiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7Ci0gICAgZnJhbWUoKS5lZGl0
b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBs
aWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlz
RWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0byBmaXJzdFJhbmdlID0gZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byBmaXJz
dFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7
CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xNDY4LDcg
KzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIC8vIEZJWE1FICg1MDk4OTMx
KTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJXZWJWaWV3SW5zZXJ0QWN0aW9u
TW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhlcmUuCiAKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7Ci0g
ICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5n
U2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBkZWxldGVTZWxlY3Rpb24oZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBF
cXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpKTsKQEAgLTE1MDQsNyArMTUw
NCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgIG9wdGlvbnMuYWRkKFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUo
ZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVkaXRvcigpLm1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVudCgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
IAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1wdHkgcGFyYWdyYXBoLCByZXN0
b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBoIHRvIHRoZSBuZXcgZW1wdHkg
cGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBhcmFncmFwaCA9IGVuZGluZ1Nl
bGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUzYzM5NzExNjM1Yzg1YjE3ZDJk
ZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4NzJhY2I4OGJlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBA
IC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5n
U3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5nIHN0eWxlIHdhcyBwcmV2aW91
c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBwcmV2aW91cwogICAgIC8vIHBv
c2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIgdGhhdCBzdHlsZSBhcyB3ZWxs
LgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2Rvd25zdHJl
YW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5
bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQwLDcgKzc0MCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKCkKICAgICAKICAgICBhdXRv
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3Zl
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZE9mUGFyYWdy
YXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwog
ICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG1l
cmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZE1vdmVS
YW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVSZXBsYWNlZC5wdHIoKSkpCisg
ICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRl
ckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xk
ZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRv
bid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpCiAgICAgLy8gSW4gdGhpcyBj
YXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRo
ZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywKICAgICAvLyBidXQsIGlmIHdl
IGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0
eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8gcHJlc2VydmVUeXBpbmdTdHls
ZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBp
bmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2V0VHlwaW5n
U3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX3JlcGxhY2UpIHsK
ICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAgaWYgKHRleHRDb250cm9sICYm
IHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBmcmFtZSgpLmVkaXRvcigpLnRl
eHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9s
KTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIgbWFrZSB0aGUgc2VsZWN0aW9u
IHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxhY2VXaGl0ZVNwYWNlID0gdHJ1
ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFuY2VX
aGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2VzSW5TZWN1cmVGaWVsZCgpKSB7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAgICAgICAgVGV4dCYgdGV4dE5v
ZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyArOTU0LDcgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxjdWxhdGVUeXBpbmdTdHlsZUFm
dGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAg
ICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3Io
KS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdp
bmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1f
ZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rpb24oKS5pc0RpcmVjdGlvbmFs
KCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUyY2Y3ODU1NTliYzg3NmM4ODQ2
MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUyYjhmNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAi
RWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgpAQCAt
MTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1
bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKQogewotICAgIEFTU0VSVChk
b2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihtX2RvY3VtZW50LT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgc2V0U3RhcnRpbmdTZWxlY3Rp
b24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdT
ZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKICAgICA6
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50LmZyYW1lKCkpOwog
ICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKTsKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRpdENvbW1hbmQ6On5FZGl0Q29t
bWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5kOjpmcmFtZSgpCi17Ci0gICAg
QVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJuICpkb2N1bWVudCgpLmZyYW1l
KCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJhbWUoKSBjb25zdAotewotICAg
IEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFt
ZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4LDExICsxNTMsNyBAQCBzdGF0
aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBvc2l0aW9uSWZQb3NzaWJsZShF
ZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5kOjppc0VkaXRpbmdUZXh0QXJl
YU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZy
YW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29u
dGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1fZG9jdW1lbnQtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOwogICAgIGlmICghY29udGFp
bmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3ICsxOTgsNyBAQCB2b2lkIEVk
aXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBl
IHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogfQogCiB2b2lkIEVk
aXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBl
IHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRleCBkZWJjZmYwMjQ1ZWRmMGRl
ZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJjOGJkNTY5MGYxMTM1YzEwZDAw
MGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCkBAIC0zOCw3ICsz
OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3MgRnJhbWU7CiAKIFN0cmluZyBp
bnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9uKTsKIApAQCAtNjQsOCArNjMs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1hbmQoRG9jdW1lbnQmLCBFZGl0
QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAgIEVkaXRDb21tYW5kKERvY3Vt
ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsK
IAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAgIEZyYW1lJiBmcmFtZSgpOwog
ICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7
IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAg
Q29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJlZmE5NTFmZjUwYTZmYWQzNjk0
ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJjY2QwNTk1MzU1NWFhMjJiMjZm
ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTg2OSw3ICs4NjksNyBAQCBi
b29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkKIAogUmVmPEhUTUxFbGVtZW50
PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2Vw
YXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRvcigpLmRlZmF1bHRQYXJhZ3Jh
cGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXY6
CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBj
YXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0ODdjNzEwZWIzMGVlNTkyMGJk
NThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQzMTZhNTJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2LDcgKzE2ODYsNyBAQCBTdHls
ZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4oKnN0eWxlLT5zdHlsZSgpLCBj
b21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogCiAgICAg
cmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0g
ICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCku
c2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1
bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAgICAgaWYgKCFzaG91bGRTdHls
ZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpkb2N1bWVudCwgKm11dGFibGVT
dHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0U2l6ZSgpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJmNjNjMDdhOWEwOWUzNzliZjE5
MzhkYzU4YTIuLjU1NjhiMGE1N2VmZmQ4OTUwNGZhNGRhZWViNzZiNTUzZTkwMWZhYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMsOCBAQCBzdGF0aWMgU3RyaW5n
IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9uKEVkaXRpbmdTdHlsZSYgc3R5
bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1YmxpYyBEZWxldGVTZWxlY3Rp
b25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21tYW5kKERvY3VtZW50JiBkb2N1
bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRyPEZyYW1l
PiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQm
KTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCBvdmVy
cmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0aW9uIENsZWFyVGV4dENvbW1h
bmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBFZGl0QWN0aW9uOjpEZWxldGU7
CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRy
PEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoRG9j
dW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkp
CisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29tcG9zaXRpb24gc3RhdGUuCi0g
ICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1lbnQuZWRpdG9yKCkuY2xlYXIo
KTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENv
bW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBv
bGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBkb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRvIGNsZWFyQ29tbWFuZCA9IGFk
b3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkpOwogICAgIGNsZWFyQ29tbWFu
ZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKICAgICBjbGVhckNvbW1hbmQt
PmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lkIENsZWFyVGV4dENvbW1hbmQ6
OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKIAotVGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRnJhbWUmIGZyYW1lLCBP
cHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQor
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9jdW1l
bnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rp
b24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCisgICAgOiBt
X2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi0g
ICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFtZS5lZGl0b3IoKS5pZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhk
b2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZChmcmFtZS5z
ZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkpCisgICAgLCBtX2FwcGVhcmFu
Y2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBp
ZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVw
ZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFi
bGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCi0gICAgICAgIGZyYW1lLmVk
aXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAgICAgIGRvY3VtZW50
LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CiAKICAgICBpZiAodGVt
cG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9uVG9SZXN0b3JlID0gZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2VsZWN0aW9uVG9SZXN0b3JlID0g
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIHNldFNlbGVjdGlvbih0
ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMjM2LDEyICsyMzYsMTIg
QEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCkK
IAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNl
bGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxTZWxlY3Rpb24gPSBtX29wdGlv
bnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNlbGVjdGlvbiA/IEVkaXRvcjo6
UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6Tm87Ci0gICAg
ICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMobV93YXNJZ25v
cmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CisgICAgICAgIG1fZG9jdW1l
bnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVj
dGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpF
bmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0
VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsK
KyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJs
ZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNlbmRpZgogfQogCkBAIC0yNTAs
MTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6c2V0U2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAgICBhdXRvIG9wdGlvbnMgPSBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKTsKICAgICBpZiAobV9v
cHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKQogICAgICAg
ICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7Ci0gICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9k
b2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CiB9
CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQgdGhlIHNlbGVjdGlvbiBvdXRz
aWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNlIHRoZSB0YXJnZXQgY29udHJv
bCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlvbi4KIFZpc2libGVTZWxlY3Rp
b24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkKIHsKLSAgICBhdXRv
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byBz
ZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICgh
ZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAgLy8gSWYgdGhlIHRhcmdldCBp
cyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBvdXRzaWRlIG9m
IGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBAIFZpc2libGVTZWxlY3Rpb24g
RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVudCkKIC8vIEZ1bmN0aW9uIGNv
bnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNrIHdoZW4gUGFnZSBvciBTZXR0
aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9yIEVkaXRvcjo6YmVoYXZpb3Io
KSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3IobV9mcmFtZS5zZXR0aW5ncygp
LmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVkaXRpbmdCZWhhdmlvcihtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgpKTsKIH0KIAogRWRpdG9yQ2xp
ZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAg
ICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAgIHJldHVybiBudWxscHRyOwog
fQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6OmhhbmRsZVRleHRFdmVudChUZXh0
RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
OworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHkoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAogZW51bSBjbGFzcyBDbGlwYm9h
cmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRpYyBib29sIGRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBDbGlwYm9hcmRFdmVudEtpbmQK
IAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZl
bnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50S2luZDo6QmVmb3JlQ3V0KTsK
QEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogCiBib29sIEVk
aXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJv
bVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9yZUNvcHkpOwogfQpAQCAtNDg0
LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25zdAogewogICAgIGlmIChp
bWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVybiBz
ZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0K
IAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkpCisg
ICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3Vw
cHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBAIGJvb2wgRWRpdG9yOjpjYW5Q
YXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUoKSBjb25zdAogewotICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFu
Z2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCkBAIC01MjQsNyAr
NTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRlKCkKIHsKICAgICBpZiAoYmVo
YXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFu
dWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgp
ID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6OnNtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJl
Y3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGcKICAg
ICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0FjdGlvbikgewogICAgICAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1bWVudCgpLCBjYW5TbWFydENv
cHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxldGUgOiAwLCBncmFudWxhcml0
eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsK
QEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZwogCiB2b2lkIEVkaXRv
cjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05v
bmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCks
IHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGVkaXRpbmdBY3Rpb24pLT5h
cHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAKIHZv
aWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFu
ZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSht
X2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoY29uc3QgU3Ry
aW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBAIC02NjEsNyArNjYxLDcgQEAg
Ym9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdt
ZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50
IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxl
IG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5k
bGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxl
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODksMTkgQEAgdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5n
U2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5n
T3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBl
ZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAgICAgICAgIFN0cmluZyB0ZXh0
ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29t
bWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgpKTsKLSAgICAgICAgcmVwbGFj
ZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGlu
Z0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwgdGV4dCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFY
VGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVu
YXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCiAgICAgaWYgKEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBF
ZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBjb21tYW5kLT5kb2N1
bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRp
b24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVJbnNl
cnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBj
b21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRU
ZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVj
dFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2Uo
KQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
IH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QK
QEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2Uq
IHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIHsgICAKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29w
eSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50
KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDdXQp
OwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiAKIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJhbmdl
LCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLm1h
aW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAm
JiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKKyAgICBpZiAobV9kb2N1bWVu
dC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZy
b21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hv
dWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAgLTc4MiwxNyArNzgyLDE3IEBA
IHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICBOb2Rl
KiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVh
bSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAg
Tm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCku
dXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoZW5jbG9zaW5nQmxvY2so
c3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
OwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgxMiwx
MiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIAogVHJp
U3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
LCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Cisg
ICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJp
U3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewot
ICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKTsKLSAgICAgICAgYXV0byog
ZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwg
dWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOwogICAgICAg
ICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAg
ICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAgLTgyNywxMiArODI3LDEyIEBA
IFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKIAog
VHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKLSAgICAgICAgaWYgKGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewor
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRy
aVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsK
LSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZyk7Ci0gICAgICAgIGF1dG8q
IGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlmIChtX2RvY3VtZW50LnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFn
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9sVGFnKTsKICAgICAg
ICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBAIC04NzIsNyArODcyLDcgQEAg
Ym9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIAogUmVmUHRyPE5v
ZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogewotICAgIGlmICghY2Fu
RWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFj
YW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3QgPSBJbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQdHI8Tm9kZT4gRWRpdG9yOjpp
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5
KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNo
bHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCZk
b2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjpp
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0
UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVk
aXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9y
ZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0
b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKCkKIAogdm9pZCBFZGl0b3I6
OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHko
KSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hs
eSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmRlY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3ICs5MzIsNyBAQCBFbGVtZW50
KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRUYXJnZXRGcm9tKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBmaW5kRXZlbnRUYXJnZXRGcm9t
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8
RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgaWYg
KCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9T
ZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0g
aW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5n
IGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24o
KnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAg
IFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgIWRpc3BhdGNo
QmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBAQCB2b2lkIEVkaXRvcjo6YXBw
bHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNsaWVudCgpLT5kaWRBcHBseVN0
eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkQXBwbHlTdHls
ZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRjaElucHV0RXZlbnQoKmVsZW1l
bnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0KQEAgLTk4NCwxMyArOTg1LDEz
IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNl
bGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRp
bmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5w
dXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5bGUsIGVkaXRpbmdBY3Rpb24p
OwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCplbGVt
ZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihT
dHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisg
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAgLTEw
MTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVmPEVk
aXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNpbmNl
IG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgp
LT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9u
cygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkp
KQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRl
ck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3Jh
cGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZQog
ICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHls
ZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9
CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBlZGl0
aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxl
QXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKICAgICAgICAgcmV0dXJuIGVk
aXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBFZGl0aW5nU3R5bGU6
OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZTdHlsZShtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uU3Rh
cnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKLSAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNl
bGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCisgICAgUmVmUHRy
PEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxl
Y3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLAogICAgICAgICBw
cm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBpZiAoIXNlbGVj
dGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5n
KENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZjb21tYW5kKTsKIAogICAgICAg
ICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkKLSAgICAgICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAgICAgLy8gQ29tbWFuZCB3
aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkgaW4gdGhlIGNhc2Ugb2YgdHlw
aW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQoKSA9PSAmY29tbWFuZCkKQEAg
LTEyMDAsMTYgKzEyMDEsMTggQEAgdm9pZCBFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcoRWRpdENv
bW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9yKEZyYW1lJiBmcmFtZSkKLSAg
ICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1bWVudCYgZG9jdW1lbnQpCisg
ICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFtZSgqbV9kb2N1bWVudC5mcmFt
ZSgpKQogICAgICwgbV9raWxsUmluZyhtYWtlVW5pcXVlPFBBTDo6S2lsbFJpbmc+KCkpCi0gICAg
LCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4oZnJhbWUpKQotICAgICwg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcj4oZnJhbWUpKQorICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENo
ZWNrZXI+KCpkb2N1bWVudC5mcmFtZSgpKSkKKyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGRvY3VtZW50KSkKICAg
ICAsIG1fZWRpdG9yVUlVcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVU
aW1lckZpcmVkKQogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgLCBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0
ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycykK
ICNlbmRpZgogeworCiB9CiAKIEVkaXRvcjo6fkVkaXRvcigpID0gZGVmYXVsdDsKQEAgLTEyMjAs
NyArMTIyMyw3IEBAIHZvaWQgRWRpdG9yOjpjbGVhcigpCiAgICAgaWYgKG1fY29tcG9zaXRpb25O
b2RlKSB7CiAgICAgICAgIG1fY29tcG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYg
KEVkaXRvckNsaWVudCogY2xpZW50ID0gdGhpcy0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjbGll
bnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+
ZGlzY2FyZGVkQ29tcG9zaXRpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICB9CiAgICAgbV9j
dXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0
aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwpAQCAtMTIzOCwxMiArMTI0MSwxMiBAQCB2b2lkIEVkaXRv
cjo6Y2xlYXIoKQogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQsIFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUpCiB7
Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQo
dGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3VtZW50
LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdn
ZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JD
b25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1f
ZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2
ZW50SW5wdXRDb21wb3NpdGlvbik7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRD
b21wb3NpdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRp
b25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAzLDEwICsxMzA2
LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBj
b2RlIHNob3VsZCBjb25kaXRpb25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRoZXIg
dGhlIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNldCBm
b3IgdGhlIG5ld2x5IGZvY3VzZWQgZnJhbWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkgJiYg
Y2xpZW50KCktPnNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+
cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVj
dGlvbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1
cnJlbnRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEz
MTksMTAgKzEzMjAsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYg
KCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5z
ZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9F
ZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJv
b2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
PmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNB
cHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAw
KTsKQEAgLTEzMzksMTAgKzEzNDAsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNl
cGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNl
cnRMaW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJl
dCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxl
T3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0Fw
cGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlw
aW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDYs
NyArMTQwNyw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNw
ZWNpZmllciBhY3Rpb24pCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKHRydWUpOwogICAgIH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9z
aW5nVGV4dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpCiAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0
ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JE
ZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5v
dFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGlt
YWdlRWxlbWVudCA9IG51bGxwdHI7CkBAIC0xNDI1LDcgKzE0MjYsNyBAQCB2b2lkIEVkaXRvcjo6
cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAg
ICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJk
OjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2Fu
U21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFU
cmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUo
KS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1f
ZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAj
ZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTE0MzQsMTAgKzE0MzUsMTAgQEAgdm9pZCBFZGl0
b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBp
ZiAoYWN0aW9uID09IEN1dEFjdGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAg
aWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0
ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhT
bWFydERlbGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAg
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAg
ICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwogICAgIH0KIH0KIApAQCAtMTQ1NCw3ICsxNDU1LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3Rl
KFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJr
ZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZh
bGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVk
UmVzb3VyY2VMb2FkZXIoKSk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0
ZVdpdGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4
dCB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChw
YXN0ZWJvYXJkKTsKQEAgLTE0NzksNyArMTQ4MCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVv
dGF0aW9uKCkKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxz
ZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBw
cmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0
ZWJvYXJkID0gUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0
KCksIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRp
b24gfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQo
KnBhc3RlYm9hcmQpOwpAQCAtMTYxNyw3ICsxNjE4LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxh
eWVyRGlkU2Nyb2xsKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVs
ZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5l
cikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODUxLDggKzE4NTIsOCBAQCB2b2lkIEVkaXRvcjo6
dG9nZ2xlVW5kZXJsaW5lKCkKIHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihX
cml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5k
KCkpICYmIAotICAgICAgICBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkg
PT0gZGlyZWN0aW9uKQorICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9u
Rm9yU2VsZWN0aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogICAgICAgICAKQEAgLTE4ODIsNyArMTg4Myw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9y
OjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBh
dXRvIHJlc3VsdCA9IFdyaXRpbmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRp
b24gcG9zID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2Rl
KiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtMTkxNyw3ICsxOTE4LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENv
bXBvc2l0aW9uKCkKICAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVj
dGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+
ZW5kUG9zaXRpb24oKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2Vs
ZWN0aW9uLCB7IH0pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNl
bGVjdGlvbiwgeyB9KTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBA
IC0xOTUyLDI4ICsxOTUzLDI4IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJiB0ZXh0KQogCiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoK
LSAgICBTZXRDb21wb3NpdGlvblNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1l
KGZyYW1lKQotICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBT
ZXRDb21wb3NpdGlvblNjb3BlKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3Vt
ZW50KFJlZlB0cigmZG9jdW1lbnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRv
cigqZG9jdW1lbnQuZnJhbWUoKSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNl
dElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRv
cigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENv
bXBvc2l0aW9uU2NvcGUoKQogICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGll
bnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRp
dG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRv
KiBlZGl0b3JDbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAg
ICAgIGVkaXRvckNsaWVudC0+ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBS
ZWY8RnJhbWU+IG1fZnJhbWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAg
IFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07
CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENv
bXBvc2l0aW9uTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3Np
dGlvbiB8fCBtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNj
b3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29w
ZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2Fu
Y2VsQ29tcG9zaXRpb24pCiAgICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpA
QCAtMTk4NCw3ICsxOTg1LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0
cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3Np
dGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0
cy5jbGVhcigpOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAg
aWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2Vy
dGluZyB0aGUgZmluYWxpemVkIGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBv
dXIgY29tcG9zaXRpb24uCkBAIC0yMDAwLDEzICsyMDAxLDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRD
b21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQog
CiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3Bl
biB0eXBpbmcgY29tbWFuZCB0aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3
b3VsZCBjYXVzZSBpc3N1ZXMgd2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0Nv
bW1hbmQ6OmNsb3NlVHlwaW5nKCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xv
c2VUeXBpbmcobV9kb2N1bWVudCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9z
aXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxp
bmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdo
bGlnaHRzLCB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQog
ewotICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsK
KyAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7
CiAKICAgICAvLyBVcGRhdGVzIHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNv
bXBvc2l0aW9uIHRvIHByZXZlbnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBv
c2l0aW9uIHRleHQgaW50byB0ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNSw3ICsyMDE2LDcgQEAg
dm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdp
bmFsVGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjAyMywxMCArMjAyNCwxMCBAQCB2b2lkIEVk
aXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29t
cG9zaXRpb25VbmRlcmxpbgogICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1Jh
bmdlKSB7CiAgICAgICAgIC8vIFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9u
RmluYWwgaGVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0
ZXh0IHRoYXQgaGFzIGJlZW4gZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxl
dGVTZWxlY3Rpb24oZG9jdW1lbnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9u
RmluYWwpOwotICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9u
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAgICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAg
ICAgICAgICAgLy8gSWYgZGVsZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNv
bGxhcHNlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0
IHdpbGwgbm90IGJlIHJlY29tcG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24u
ZW5kKCkgfSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTIwODIsOCArMjA4Myw4IEBAIHZvaWQgRWRpdG9yOjpzZXRD
b21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4
dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJl
dmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcp
OwogCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5v
dy4KLSAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFz
ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0o
KTsKKyAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgICAgIHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVj
YXRlZE5vZGUoKTsKQEAgLTIxMDksNyArMjExMCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGlu
CiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxl
Y3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0
ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
YmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0g
ICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRS
YW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpObyk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3Vs
ZENsb3NlVHlwaW5nOjpObyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjMsNyArMjEyNCw3
IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOwogCkBAIC0yMTM5LDcgKzIxNDAsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygp
CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBPbiBNYWMgT1MgWCwgd2hlbiB1c2UgImxlYXJuIiBi
dXR0b24gb24gIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBwYW5lbCwgd2UgZG9uJ3QgY2FsbCB0aGlz
IGZ1bmN0aW9uLiBJdCBzaG91bGQgcmVtb3ZlIG1pc3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5kIHRo
ZSBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQog
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTUyLDE0ICsyMTUzLDE1IEBAIHZv
aWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKIAogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRN
aXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdGlvbihtX2ZyYW1lKTsKLQorICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1l
bnQobV9kb2N1bWVudCk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsK
KyAgICAKICAgICAvLyBUaGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFz
ZXMgLSBmcm9tIHRoZSBzZWxlY3Rpb24gZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCiAg
ICAgLy8gdGhlbiB3ZSB3cmFwIGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHBy
b3hpbWF0ZWx5KSB3aGVyZSB3ZSBzdGFydGVkLgogICAgIAogICAgIC8vIFN0YXJ0IGF0IHRoZSBl
bmQgb2YgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIHRvIGVkZ2Ugb2YgZG9jdW1lbnQuICBTdGFydGlu
ZyBhdCB0aGUgc2VsZWN0aW9uIGVuZCBtYWtlcwogICAgIC8vIHJlcGVhdGVkICJjaGVjayBzcGVs
bGluZyIgY29tbWFuZHMgd29yay4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBSZWY8UmFuZ2U+
IHNwZWxsaW5nU2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CiAKICAg
ICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gZmFsc2U7CkBAIC0yMzA4LDggKzIzMTAsOCBA
QCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRSA0ODU5MTkwOiBUaGlzIGdldHMg
Y29uZnVzZWQgd2l0aCBkb3VibGVkIHB1bmN0dWF0aW9uIGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3Jh
cGgKICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
KmdyYW1tYXJTZWFyY2hSYW5nZSwgeyBncmFtbWFyUGhyYXNlT2Zmc2V0ICsgZ3JhbW1hckRldGFp
bC5yYW5nZS5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5yYW5nZS5sZW5ndGggfSk7Ci0gICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3Jh
bW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkpKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxl
Y3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiAgICAgICAg
IGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpHcmFtbWFyLCBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CkBAIC0yMzIw
LDggKzIzMjIsOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wg
c3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIC8vIGEgbWFya2VyIHNvIHdlIGRyYXcgdGhl
IHJlZCBzcXVpZ2dsZSBsYXRlci4KICAgICAgICAgCiAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdS
YW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShzcGVsbGluZ1NlYXJjaFJhbmdlLCB7IG1pc3Nw
ZWxsaW5nT2Zmc2V0LCBtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSB9KTsKLSAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtaXNzcGVsbGluZ1Jh
bmdlLCBET1dOU1RSRUFNKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2Vs
ZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOworICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAKICAgICAg
ICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxl
ZFdvcmQpOwogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxp
bmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKQEAgLTIzMzUsNyArMjMzNyw3IEBA
IFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tl
ZE5vZGUpIGNvbnN0CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
IHx8ICFjbGlja2VkTm9kZSB8fCAhaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihjbGlja2VkTm9k
ZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBzZWxlY3Rpb24uaXNOb25l
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMjM4OSw3ICsyMzkxLDcgQEAgU3Ry
aW5nIEVkaXRvcjo6bWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpIGNvbnN0CiBib29sIEVkaXRv
cjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkKIHsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lO
RykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSB8fCAhY2xpZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKCpj
bGllbnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsKQEAgLTI0MDQsNyArMjQwNiw3IEBA
IFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCkgY29uc3QKIAogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CiAgICAgaWYg
KGNsaWVudCgpKQotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3Jk
LCBTdHJpbmcoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7Cisg
ICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmluZygpLCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKICAgICByZXR1cm4g
Z3Vlc3NlczsKIH0KIApAQCAtMjQxMiw3ICsyNDE0LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbChib29sJiBtaXNzcGVsbGVkLCBi
b28KIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CiAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAg
ICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxp
bmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiB3b3JkU2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgp
KTsKICAgICAgICAgICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3Jk
R3JhbnVsYXJpdHkpOwpAQCAtMjQ3Miw3ICsyNDc0LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVj
dGkKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25z
dCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCkKIHsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVu
dChtX2RvY3VtZW50KTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwog
CiAgICAgaWYgKHBsYXRmb3JtRHJpdmVuVGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI1OTQsMTkgKzI1OTcsMTkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAg
ICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCByZXBsYWNlIHRoZSBtaXNz
cGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgogICAgIGlmICghYXV0b2NvcnJlY3RlZFN0cmluZy5p
c0VtcHR5KCkpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKm1pc3Nw
ZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGlmICghbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAg
ICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KSB7CisgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAg
ICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
bik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1fZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigp
LnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG1fZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3Jy
ZWN0ZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRp
dEFjdGlvbjo6SW5zZXJ0KTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5v
LCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogCiAgICAgICAgIC8vIFJl
c2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsK
LSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKICAgICB9CiAKICAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpKQpAQCAtMjY3OCw3ICsyNjgxLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2lu
Z0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKIAogYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVj
a2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCku
ZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOwogfQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
QEAgLTI3MjYsNyArMjcyOSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgaWYgKHBh
cmFncmFwaFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGFz
eW5jaHJvbm91cyA9IG1fZnJhbWUuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsOworICAgIGJvb2wgYXN5bmNo
cm9ub3VzID0gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CiAKICAgICAvLyBJbiBhc3lu
Y2hyb25vdXMgbW9kZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgtd2lkZSBzZW50
ZW5jZS4KICAgICBjb25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVUZXh0Q2hlY2tp
bmdUeXBlTWFzayhlZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlvbnMpOwpAQCAtMjc0MSw3
ICsyNzQ0LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICB9CiAKICAgICBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0
ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCBy
ZXN1bHRzLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjaGVja1RleHRP
ZlBhcmFncmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29s
dmVkT3B0aW9ucywgcmVzdWx0cywgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CiAgICAgbWFya0FuZFJlcGxhY2VGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpLCByZXN1bHRz
KTsKIH0KIApAQCAtMjc4Nyw3ICsyNzkwLDggQEAgc3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hl
Y2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1BhcmEKIAog
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAg
ICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90
ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1l
KG1fZnJhbWUpOwogCiAgICAgYXV0byB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRh
KCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgo
cmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5n
ZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKQEAgLTI4MTEsOSArMjgxNSw5IEBAIHZv
aWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3Jh
cGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50
IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAg
ICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgp
ID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxl
U2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBz
YXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVk
ZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAg
ICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVs
ZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFu
Z2UgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVj
dGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQo
KVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTUsMTMg
KzI4OTksMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hl
Y2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxh
Y2UsIERPV05TVFJFQU0pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFt
X2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxh
Y2UpKQorICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAg
ICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFj
ZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
c2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3ICsyOTE0
LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3Bl
bGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5n
ZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9
KTsKIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50
KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2Jq
ZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAK
QEAgLTI5NDAsMTMgKzI5NDQsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNv
bnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAg
ZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJl
c3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQ
YXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5n
ZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwot
ICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVu
ZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwog
ICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0g
ICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246
OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7
CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxl
Y3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxh
cml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZv
ciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0
aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3Zl
VG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUs
IERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnko
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMDIzLDggKzMwMjcsOCBA
QCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9v
bCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBz
ZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0
aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1v
dmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlv
biBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24u
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3Jk
IHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5Niwx
MSArMzEwMCw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9u
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRp
dG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7
Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFt
ZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKQEAgLTMx
MTcsNyArMzExNyw3IEBAIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdP
cGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsK
IAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1v
ZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZl
YWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24ocmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxF
eHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0
aW9uKQpAQCAtMzEyOSw3ICszMTI5LDcgQEAgdm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0
aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAogICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsg
fSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNlbmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3Vs
ZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAg
ICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwpAQCAtMzE1Miw3ICszMTUyLDcgQEAg
Ym9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25T
dGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsKICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTMxNzUsNyArMzE3NSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAg
IGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0z
MjAwLDEwICszMjAwLDEwIEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0
cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVj
dCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0
aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYg
KCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUg
dHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAtMzI1NSw3ICszMjU1LDggQEAgdm9pZCBFZGl0b3I6
OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdl
U2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlv
biwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMp
CiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVu
dD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0
ZWRGcmFtZShtX2ZyYW1lKTsKIAogICAgIC8vIElmIHRoZSBuZXcgc2VsZWN0aW9uIGlzIG9ycGhh
bmVkLCB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChuZXdTZWxlY3Rp
b24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQoKS5pc09ycGhhbigpKQpA
QCAtMzI2NSw5ICszMjY2LDkgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29t
bWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAvLyBiZWNh
dXNlIHRoZXJlIGlzIHdvcmsgdGhhdCBpdCBtdXN0IGRvIGluIHRoaXMgc2l0dWF0aW9uLgogICAg
IC8vIFRoZSBvbGQgc2VsZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhlcmUgYW5kIGNhbGxpbmcgc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3RyYW5nZSBjYWxscy4KICAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU3MjkzMTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZSBjb250YWluIFJhbmdlcyBmb3Igc2VsZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIg
dmFsaWQKLSAgICBib29sIHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uID0gbmV3U2Vs
ZWN0aW9uID09IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVj
dGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgYm9vbCBzZWxlY3Rp
b25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Q
b3NpdGlvbiB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pKQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOwogCiAgICAgLy8gU29tZSBlZGl0aW5nIG9wZXJhdGlv
bnMgY2hhbmdlIHRoZSBzZWxlY3Rpb24gdmlzdWFsbHkgd2l0aG91dCBhZmZlY3RpbmcgaXRzIHBv
c2l0aW9uIHdpdGhpbiB0aGUgRE9NLgogICAgIC8vIEZvciBleGFtcGxlIHdoZW4geW91IHByZXNz
IHJldHVybiBpbiB0aGUgZm9sbG93aW5nICh0aGUgY2FyZXQgaXMgbWFya2VkIGJ5IF4pOgpAQCAt
MzI4MiwxMyArMzI4MywxMyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21t
YW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgTwogICAgICAgICByZXR1
cm47CiAjZW5kaWYKICAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gJiYg
Y2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZt
X2ZyYW1lKTsKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9k
b2N1bWVudC5mcmFtZSgpKTsKIH0KIAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KCkgY29u
c3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvckRl
ZmF1bHRCZWhhdmlvcjsKLSAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9z
c1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQogICAgICAgICBiZWhh
dmlvciB8PSBUZXh0SXRlcmF0b3JUcmF2ZXJzZXNGbGF0VHJlZTsKICAgICByZXR1cm4gc2VsZWN0
ZWRUZXh0KGJlaGF2aW9yKTsKIH0KQEAgLTMyOTYsNyArMzI5Nyw3IEBAIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRh
VHJhbnNmZXIoKSBjb25zdAogewogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yID0g
VGV4dEl0ZXJhdG9yRW1pdHNJbWFnZUFsdFRleHQ7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAg
ICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMzA0LDcgKzMzMDUsNyBA
QCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25zdAogU3Ry
aW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKSBj
b25zdAogewogICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFy
ZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KLSAgICBhdXRvJiBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgYXV0byBzdGFydCA9IHNl
bGVjdGlvbi5zdGFydCgpOwogICAgIGF1dG8gZW5kID0gc2VsZWN0aW9uLmVuZCgpOwogICAgIGlm
IChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwoKSB8fCBl
bmQuaXNPcnBoYW4oKSkKQEAgLTMzMTQsNyArMzMxNSw3IEBAIFN0cmluZyBFZGl0b3I6OnNlbGVj
dGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIAogUmVmUHRyPFRl
eHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkg
fHwgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQgeyB0aGlzLT5kb2N1bWVu
dCgpIH07CkBAIC0zMzIyLDcgKzMzMjMsNyBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVu
dD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAg
IC8vIEZJWE1FOiBXcml0ZSBpbiB0ZXJtcyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
KCkuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc0ND4u
CiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAgIGF1dG8g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0
byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzMzMCw3ICszMzMx
LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBs
YWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICByYW5nZS0+aW5zZXJ0Tm9kZShwbGFj
ZWhvbGRlci5jb3B5UmVmKCkpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24g
eyBwb3NpdGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIucHRyKCkpLCBwb3NpdGlvbkFmdGVyTm9k
ZShwbGFjZWhvbGRlci5wdHIoKSkgfTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9w
dGlvbnMoVXNlclRyaWdnZXJlZCkpOwogCiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyOwogfQpAQCAt
MzM1MCw4ICszMzUxLDggQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVRleHRQbGFjZWhvbGRlcihUZXh0
UGxhY2Vob2xkZXJFbGVtZW50JiBwbGFjZWhvbGRlcikKICAgICBwbGFjZWhvbGRlci5yZW1vdmUo
KTsKIAogICAgIC8vIFRvIG1hdGNoIHRoZSBMZWdhY3kgV2ViS2l0IGltcGxlbWVudGF0aW9uLCBz
ZXQgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHRvIGJlIGJlZm9yZSB3aGVyZSB0aGUgcGxhY2Vo
b2xkZXIgdXNlIHRvIGJlLgotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFu
ZEFjdGl2ZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IHNhdmVkUm9vdEVkaXRh
YmxlRWxlbWVudCkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbiB7IHNhdmVkUG9zaXRpb25CZWZvcmVQbGFjZWhvbGRlciwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkgfSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25z
KFVzZXJUcmlnZ2VyZWQpKTsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0ZvY3Vz
ZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RF
ZGl0YWJsZUVsZW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNF
TF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9u
T3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsYXBz
ZUNhcmV0V2lkdGgoSW50UmVjdCYgcmVjdCkKQEAgLTM0MDMsNyArMzQwNCw3IEBAIEludFJlY3Qg
RWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiBib29sIEVkaXRv
cjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgp
KQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgcmV0dXJuIGNsaWVu
dCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKQEAgLTM0MTIsMTcgKzM0MTMsMTcg
QEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlw
aW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQog
ewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xl
YXJUeXBpbmdTdHlsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0
eXBpbmdTdHlsZTsKLSAgICBpZiAoYXV0byBleGlzdGluZ1R5cGluZ1N0eWxlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQorICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5
bGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHR5cGlu
Z1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHlsZS0+Y29weSgpOwogICAgIGVsc2UKICAgICAgICAg
dHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwotICAgIHR5cGluZ1N0eWxlLT5v
dmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgdHlwaW5nU3R5bGUtPm92
ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRsZSBi
bG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAg
ICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxvY2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRyYWN0
QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0zNDMwLDcgKzM0MzEsNyBAQCB2b2lkIEVk
aXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdAogICAgICAgICBBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3Vt
ZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwogCiAgICAg
Ly8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKKyAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5
bGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVBy
b3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0ODks
MTkgKzM0OTAsMjAgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVu
dCgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2Zy
YW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwor
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CiAKLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmco
dGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKIAogICAgIGlm
ICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBET1dO
U1RSRUFNKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKIAogICAgIGlmICghKG9wdGlv
bnMuY29udGFpbnMoRG9Ob3RSZXZlYWxTZWxlY3Rpb24pKSkKLSAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5yZXZlYWxTZWxlY3Rpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU5OCw3ICsz
NjAwLDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICBpZiAocmFuZ2UpIHsKICAgICAg
ICAgaWYgKCZyYW5nZS0+b3duZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQogICAgICAgICAg
ICAgc2VhcmNoUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdl
KG1fZnJhbWUsICpyYW5nZSkpCisgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZSgqbV9k
b2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIGlmICghc2VhcmNoUmFuZ2UpCkBAIC0zNjY4LDcgKzM2NzAsNyBAQCB2b2lkIEVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9u
U2V0PEZyYW1lUwogI2VuZGlmCiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgp
LT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xpZW50KCkt
PnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKIAogI2lmIEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgaWYgKHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSkKQEAgLTM2OTEsOCArMzY5
Myw2IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZXRl
Y3RUZWxlcGhvbmVOdW1iZXJzKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVt
YmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0
ZWQoKTsKIH0KIApAQCAtMzcwNSw5ICszNzA1LDkgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rp
b25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBtYXJr
ZWRSYW5nZXM7CiAKLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1JhbmdlKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgaWYgKGF1
dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MjksNyArMzcyOSw3IEBAIHZvaWQgRWRp
dG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRyPFJhbmdl
PiBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsK
IAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1f
ZnJhbWUucGFnZSgpKQorICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgp
KQogICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVk
VGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzc0Miw3ICszNzQyLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhv
bmVOdW1iZXJzKCkKICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMu
YXBwZW5kKHJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFn
ZSgpKQorICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgIHBh
Z2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJh
bmdlc0NoYW5nZWQoKTsKIH0KIApAQCAtMzgwMSw5ICszODAxLDkgQEAgdm9pZCBFZGl0b3I6OmVk
aXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRXb3JkczsK
ICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwotICAgICAgICBi
b29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJs
ZWQoKTsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9z
aXRpb24gbmV3U3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKSk7CisgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQuc2V0dGluZ3Mo
KS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsK
KyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICAgICAgICAgIG5ld0FkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0
T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdTdGFy
dCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAjZWxzZQpAQCAtMzg1Niw3ICszODU2LDcgQEAg
dm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2VkaXRv
clVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbikKICAgICAgICAgbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlv
bik7CiAKLSAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVOQUJMRShBVFRB
Q0hNRU5UX0VMRU1FTlQpCiAgICAgbm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygpOwpA
QCAtMzg4Myw3ICszODgzLDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUq
IG5vZGUpCiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29u
c3QKIHsKLSAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIE5vZGUqIG5v
ZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTM5NTAsMTAgKzM5NTAsMTAgQEAgT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJv
b3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4g
Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQorc3RhdGljIFJlZlB0cjxS
YW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewot
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdl
RnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0g
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5p
c0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZG9j
dW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogc3RhdGljIGJvb2wg
Y2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pCkBAIC0zOTY3LDggKzM5NjcsOCBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxh
Y2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRv
cjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRh
dGVSYW5nZUZvclNlbGVjdGlvbihtX2ZyYW1lKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdl
Rm9yU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVk
U3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKICAgICAgICAg
cmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAKQEAgLTM5
NzcsNyArMzk3Nyw3IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3Qo
KSBjb25zdAogICAgIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogfQog
CkBAIC00MDQ0LDcgKzQwNDQsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0cmli
dXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAgICBh
dXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1JlbW92
ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDg1LDcgKzQwODUs
NyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4dExp
c3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRM
aXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2ggKHN0
eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBAIC00
MTExLDcgKzQxMTEsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8g
dHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUo
KSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUt
PnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTQx
OTksMTIgKzQxOTksOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBk
YXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJZGVu
dGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRlbnRp
ZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAoYXV0
byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAgICAg
IGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZpZXIo
aWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50LmF0
dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50KCkt
PmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2htZW50
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciksIGF0
dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyMjcsNyArNDIyMyw3IEBAIHZvaWQgRWRpdG9y
OjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8dWlu
dDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0
Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0
cnVlOwogCkBAIC00MjQ2LDcgKzQyNDIsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29sIEVk
aXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVybiBX
ZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2Vy
KGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjYyLDEzICs0MjU4LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0cmlu
ZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5h
YmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1vZGVF
bmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29y
KG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVu
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJu
ICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTaG91
bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQzMjEsOSArNDMxMSw5
IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBs
ZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAgIGlm
ICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAg
ICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2Rl
VG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAv
LyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRy
OwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMzUsMTEgKzQzMjUsMTEgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUqIHN0
YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9kZSog
c3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBp
ZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQzNzEsNyArNDM2
MSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omluc2VydEVkaXRhYmxlSW1h
Z2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMoKSBj
b25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlz
SW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGFkOWVk
YTI2MThjOWE4ODBiZWNiYjFjZTRkNjhiYjU5Yjg5YzIwYzAuLmE2MGVlZThhMmNmOGFkZDM2MGU2
ZjJkOWUwYzVmODU1MGEzZTZmZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkVkaXRvckluc2Vy
dEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRXcml0ZXJE
YXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTksMTMgKzEyMCwxMyBAQCBl
bnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4X3QgewogCiBjbGFzcyBU
ZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+
ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiA9IHsg
fSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3VtZW50
JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VGVt
cG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZyYW1lPiBtX2ZyYW1lOwor
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRpb25TZXQ8VGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dhc0lnbm9yaW5nU2VsZWN0
aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTM3LDcgKzEzOCw3IEBA
IHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSB7CiBwdWJsaWM6
CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUmIGZyYW1lKQotICAgICAg
ICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNlbGVj
dGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgOiBtX3NlbGVjdGlv
bkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewogICAgIH0KIApAQCAtMTUw
LDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihGcmFtZSYpOworICAgIGV4
cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsKIAogICAgIGVudW0gY2xh
c3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIsNyBAQCBwdWJsaWM6CiAg
ICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBD
b21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0
b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBEb2N1bWVudCYpOwogCiAg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRl
ciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikgY29uc3Q7CiAg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dlcmluZ0V2ZW50
KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQgeyBudWxscHRyIH07CiAg
ICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAgICAgIFJlZlB0cjxEb2N1
bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwogICAgIH07
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcu
CkBAIC01NjcsNyArNTY5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQmKTsKIAogcHJpdmF0ZToK
LSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29sIGNhbkRlbGV0ZVJhbmdl
KFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkJik7CkBAIC02MTgsNiArNjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJik7CiAKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBGcmFt
ZSYgbV9mcmFtZTsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1fbGFzdEVkaXRD
b21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2RjM2I5MGZi
NmMwNDcxZmFhMTBmYjhjNDQuLmJkNTE4MGViNDAwZWE3OTIxNTFiNmY3OThiNjBlY2I4Y2ZmZGFl
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTEwOSw2
ICsxMTA5LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwKIAogc3RhdGljIGJvb2wgZXhlY3V0
ZVN3YXBXaXRoTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKIHsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rpb24oZnJhbWUu
ZG9jdW1lbnQoKSk7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCk7CiAgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CkBAIC0xODM2LDEyICsxODM3LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJbnRlcm5h
bENvbW1hbmQqIGludGVybmFsQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogCiBF
ZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUp
CiB7Ci0gICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29t
bWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChp
bnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcs
IG1fZG9jdW1lbnQpOwogfQogCiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZE5hbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewotICAg
IHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9m
cmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwg
c291cmNlLCBtX2RvY3VtZW50KTsKIH0KIAogYm9vbCBFZGl0b3I6OmNvbW1hbmRJc1N1cHBvcnRl
ZEZyb21NZW51T3JLZXlCaW5kaW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCkBAIC0xODUz
LDEyICsxODU0LDEzIEBAIEVkaXRvcjo6Q29tbWFuZDo6Q29tbWFuZCgpCiB7CiB9CiAKLUVkaXRv
cjo6Q29tbWFuZDo6Q29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1hbmQs
IEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBGcmFtZSYgZnJhbWUpCitFZGl0b3I6OkNvbW1h
bmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jb21tYW5k
KGNvbW1hbmQpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1hbmQg
PyAmZnJhbWUgOiBudWxscHRyKQorICAgICwgbV9kb2N1bWVudChjb21tYW5kID8gJmRvY3VtZW50
IDogbnVsbHB0cikKKyAgICAsIG1fZnJhbWUoY29tbWFuZCA/IGRvY3VtZW50LmZyYW1lKCkgOiBu
dWxscHRyKQogewotICAgIEFTU0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKKyAgICBBU1NFUlQo
Y29tbWFuZCB8fCAhbV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVj
dXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjb25z
dApAQCAtMTg2OCw5ICsxODcwLDkgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUoY29u
c3QgU3RyaW5nJiBwYXJhbWV0ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGMKICAgICAgICAg
aWYgKCFhbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAg
ICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAg
aWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQpCisKKyAgICBtX2RvY3VtZW50LT51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAobV9kb2N1bWVu
dC0+ZnJhbWUoKSAhPSBtX2ZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gbV9jb21tYW5kLT5leGVjdXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQsIG1fc291cmNl
LCBwYXJhbWV0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApp
bmRleCA0NTE2ZTUwNjUwNzJmZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li4yNjhiOTdmYTM1
M2Q1MzUzZWUxNTI4OGNhYTk2YjhjMTllYThlOTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTM5LDEzICsxMzksMTQgQEAgSW50UmVjdCBEcmFnQ2Fy
ZXRDb250cm9sbGVyOjplZGl0YWJsZUVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCkg
Y29uc3QKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3
YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQorc3RhdGljIGlubGluZSBi
b29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKLSAgICByZXR1cm4gIWZyYW1lIHx8IGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNo
b3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgpOworICAgIHJldHVybiAhZG9jdW1l
bnQgfHwgZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rp
b25Bc0RpcmVjdGlvbmFsKCk7CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihG
cmFtZSogZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorRnJhbWVTZWxlY3Rpb246OkZyYW1l
U2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQp
CisgICAgLCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAg
ICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFy
cm93TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0
eSkKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Niw3ICsxNTcsNyBAQCBGcmFtZVNlbGVj
dGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJvdW5k
c0RpcnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJs
aW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5w
YWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkg
PT0gZnJhbWUpCisgICAgLCBtX2ZvY3VzZWQobV9mcmFtZSAmJiBtX2RvY3VtZW50LT5wYWdlKCkg
JiYgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9
PSBtX2ZyYW1lKQogICAgICwgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBt
X3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUoZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29y
T25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjYsMTQg
QEAgRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1f
Y2FyZXRCbGlua3ModHJ1ZSkKICNlbmRpZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJl
Y3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGly
ZWN0aW9uYWwodHJ1ZSk7CiB9CiAKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFi
bGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHNlbGVj
dGlvblJvb3QgPSBtX3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgcmV0dXJu
IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCk7CisgICAgcmV0dXJuIHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290
IDogbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgRVVzZXJUcmlnZ2VyZWQgdXNl
clRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbikKQEAgLTI4NCw3ICsyODUsNyBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25CeU1vdXNlSWZEaWZmZXJlbnQoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgcGFzcwogICAgIEVuZFBvaW50c0FkanVzdG1lbnRNb2RlIGVu
ZHBvaW50c0FkanVzdG1lbnRNb2RlKQogewogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0
aW9uID0gcGFzc2VkTmV3U2VsZWN0aW9uOwotICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3Vs
ZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IG5ld1NlbGVjdGlvbi5p
c0RpcmVjdGlvbmFsKCk7CisgICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hvdWxkQWx3YXlzVXNl
RGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0
aW9uYWwoKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBiYXNlID0gbV9vcmlnaW5hbEJhc2UuaXNO
b3ROdWxsKCkgPyBtX29yaWdpbmFsQmFzZSA6IG5ld1NlbGVjdGlvbi52aXNpYmxlQmFzZSgpOwog
ICAgIFZpc2libGVQb3NpdGlvbiBuZXdCYXNlID0gYmFzZTsKQEAgLTMyMiw3ICszMjMsNyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNl
KGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGJvb2wgc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSA9
IG9wdGlvbnMuY29udGFpbnMoQ2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0
aW9uIG5ld1NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvblBvc3NpYmx5V2l0aG91dERpcmVjdGlvbjsK
LSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkpCisg
ICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpKQog
ICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKIAogICAgIGlmICgh
bV9mcmFtZSkgewpAQCAtMzM0LDcgKzMzNSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAg
ICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGludG8gYW4g
aW5maW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBu
ZXdTZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFt
ZT4gbmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewot
ICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0
aW9uRG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKG5l
d1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9k
b2N1bWVudCkgewogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUlu
dGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9z
c2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMgRnJhbWVTZWxl
Y3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBzZWxlY3RGcmFt
ZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNlbGVjdGlvbiBp
cyBubyBsb25nZXIgdmFsaWQgc2luY2UKQEAgLTM0OSw3ICszNTAsNyBAQCBib29sIEZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2li
bGVTZWxlY3RpbwogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKIAogICAgIGlmIChj
bG9zZVR5cGluZykKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9mcmFtZSk7
CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKCptX2RvY3VtZW50KTsKIAogICAg
IGlmIChzaG91bGRDbGVhclR5cGluZ1N0eWxlKQogICAgICAgICBjbGVhclR5cGluZ1N0eWxlKCk7
CkBAIC0zNTcsNyArMzU4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0
aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBWaXNpYmxl
U2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwogICAgIGJvb2wgZGlkTXV0YXRl
U2VsZWN0aW9uID0gb2xkU2VsZWN0aW9uICE9IG5ld1NlbGVjdGlvbjsKICAgICBpZiAoZGlkTXV0
YXRlU2VsZWN0aW9uKQotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hh
bmdlKCk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2Uo
KTsKIAogICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogCkBAIC0zNzEsMjEgKzM3Miwy
MSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBl
YXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRl
KCk7CiAKICAgICBpZiAoIW5ld1NlbGVjdGlvbi5pc05vbmUoKSAmJiAhKG9wdGlvbnMgJiBEb05v
dFNldEZvY3VzKSkgewotICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CisgICAgICAgIGF1dG8qIG9sZEZvY3VzZWRF
bGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICAgICAgc2V0Rm9jdXNl
ZEVsZW1lbnRJZk5lZWRlZCgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBiZSBuZWVk
ZWQuCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpICE9
IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBk
YXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1l
bnQoKSAhPSBvbGRGb2N1c2VkRWxlbWVudCkKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKICAgICB9CiAKICAgICAvLyBBbHdheXMgY2xlYXIgdGhlIHggcG9z
aXRpb24gdXNlZCBmb3IgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbi4KICAgICAvLyBJdCB3aWxs
IGJlIHJlc3RvcmVkIGJ5IHRoZSB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uIGNvZGUgaWYgbmVj
ZXNzYXJ5LgogICAgIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gTm9YUG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb24oKTsKICAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVu
dElmRnVsbHlTZWxlY3RlZCgpOwotICAgIG1fZnJhbWUtPmVkaXRvcigpLnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0
b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CiAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlvbi1hcGkvI3NlbGVjdGlvbmNoYW5n
ZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNrIHNv
dXJjZSB0byB1c2UuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cXVldWVUYXNrVG9EaXNwYXRj
aEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9jdW1lbnQtPnF1ZXVlVGFza1RvRGlzcGF0Y2hF
dmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6Tm8pKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzk2LDEwICszOTcs
NiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8UwogICAgIGlmICghc2V0U2VsZWN0aW9uV2l0aG91
dFVwZGF0aW5nQXBwZWFyYW5jZShzZWxlY3Rpb24sIG9wdGlvbnMsIGFsaWduLCBncmFudWxhcml0
eSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKG9wdGlvbnMgJiBSZXZlYWxTZWxlY3Rpb25VcFRvTWFpbkZyYW1lKQogICAgICAgICBtX3Nl
bGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZy
YW1lOwogICAgIGVsc2UgaWYgKG9wdGlvbnMgJiBSZXZlYWxTZWxlY3Rpb24pCkBAIC00MTEsMjcg
KzQwOCwyNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8UwogICAgIG1fc2VsZWN0aW9uUmV2ZWFs
SW50ZW50ID0gaW50ZW50OwogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7CiAK
LSAgICBpZiAoZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQorICAgIGlmIChtX2Rv
Y3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNhbGMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1bWVudC0+dmlldygpOworICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbV9kb2N1bWVudC0+dmlldygpOwogICAgIGlmIChmcmFtZVZpZXcgJiYgZnJh
bWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQpOwogCiAgICAgaWYgKG9w
dGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbV9k
b2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgICAgICBjbGllbnQtPmRpZEVuZFVz
ZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZShGcmFtZSYgZnJhbWUpCitzdGF0
aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZShEb2N1bWVudCYg
ZG9jdW1lbnQpCiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgZnJhbWUuZG9jdW1lbnQo
KS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQu
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAjZWxzZQotICAgIGZyYW1l
LmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBkb2N1bWVudC51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CiAjZW5kaWYKIH0KIApAQCAtNDQxLDcgKzQzOCw3IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKFJldmVhbFNlbGVjdGlvbkFmdGVy
VXBkYXRlIHJldmVhbE1vCiAgICAgaWYgKHJldmVhbE1vZGUgPT0gUmV2ZWFsU2VsZWN0aW9uQWZ0
ZXJVcGRhdGU6OkZvcmNlZCkKICAgICAgICAgbV9zZWxlY3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0
aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsOwogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRy
dWU7Ci0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkK
ICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKIH0KIApAQCAtNDU3
LDcgKzQ1NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlv
bihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50CiAgICAgaWYgKG1fc2VsZWN0aW9u
UmV2ZWFsTW9kZSAhPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpEb05vdFJldmVhbCkgewogICAgICAg
ICBTY3JvbGxBbGlnbm1lbnQgYWxpZ25tZW50OwogCi0gICAgICAgIGlmIChtX2ZyYW1lLT5lZGl0
b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQo
KSkKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2Vu
dGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQogICAgICAgICAgICAgYWxpZ25tZW50
ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVjdGlvbiA/IFNj
cm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
Q2VudGVySWZOZWVkZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFsaWdubWVudCA9IG1f
YWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24gPyBTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlm
TmVlZGVkOwpAQCAtNDcxLDcgKzQ2OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFu
ZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50CiB2b2lk
IEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKCkKIHsKICNp
ZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIG1fZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1i
ZXJzKCk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2NhblNlbGVjdGlvbkZvclRlbGVwaG9u
ZU51bWJlcnMoKTsKICNlbmRpZgogfQogCkBAIC03MDMsNyArNzAwLDcgQEAgVmlzaWJsZVBvc2l0
aW9uIEZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkg
Y29uc3QKICAgICAvLyBiYXNlL2V4dGVudCBhbHdheXMgcG9pbnQgdG8gdGhlIHNhbWUgbm9kZXMg
YXMgc3RhcnQvZW5kLCBidXQgd2hpY2ggcG9pbnRzCiAgICAgLy8gdG8gd2hpY2ggZGVwZW5kcyBv
biB0aGUgdmFsdWUgb2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhpcyBjYW4gYmUgY2hhbmdlZAogICAg
IC8vIHRvIGp1c3QgcmV0dXJuIG1fc2VsLmV4dGVudCgpLgotICAgIGlmIChtX2ZyYW1lICYmIG1f
ZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJv
bUV4dGVudEVuZHBvaW50KCkpCisgICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRp
dG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5k
cG9pbnQoKSkKICAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBtX3Nl
bGVjdGlvbi52aXNpYmxlRW5kKCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKIAogICAg
IHJldHVybiBpc0dldFN0YXJ0ID8gbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgOiBtX3NlbGVj
dGlvbi52aXNpYmxlRW5kKCk7CkBAIC03MjMsNyArNzIwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZy
YW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0oY29uc3QgVmlzaWJsZVBv
c2l0aW8KIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0g
bmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKIAotICAgIGlmIChtX2ZyYW1lICYm
IG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1Jp
Z2h0KCkpIHsKKyAgICBpZiAobV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhh
dmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpKSB7CiAgICAgICAgIC8vIElu
IG9yZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3ZSBhZHZhbmNlIG9uZQog
ICAgICAgICAvLyB3b3JkIGZ1cnRoZXIgYW5kIHRoZW4gbW92ZSBvbmUgd29yZCBiYWNrLiBHaXZl
biB0aGUKICAgICAgICAgLy8gc2VtYW50aWNzIG9mIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgdGhp
cyB3aWxsIHB1dCB1cyBhdCB0aGUKQEAgLTg1NSw3ICs4NTIsNyBAQCBWaXNpYmxlUG9zaXRpb24g
RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSwgYgogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4
dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5yaWdodCh0cnVlLCByZWFjaGVkQm91bmRh
cnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eTogewotICAgICAg
ICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1fZnJhbWUtPmVk
aXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CisgICAg
ICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQgJiYgbV9kb2N1
bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVjdGlvbi5l
eHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IHJpZ2h0V29y
ZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAg
ICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMDc2LDcgKzEwNzMsNyBAQCBWaXNpYmxl
UG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBibwogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2Vs
ZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5sZWZ0KHRydWUsIHJlYWNo
ZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7
Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9m
cmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudCAm
JiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3Zp
bmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKG1fc2Vs
ZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgcG9zID0g
bGVmdFdvcmRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmln
aHQpOwogICAgICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTM2Miw3ICsxMzU5LDcgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25E
aXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYg
KHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRy
aWdnZXJlZCAmJiBtX2ZyYW1lICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVk
KCkpIHsKKyAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdn
ZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkgewogICAgICAgICBub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2Vs
ZWN0aW9uQ2hhbmdlKHsgQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uQm91bmRhcnksIHRl
eHRTZWxlY3Rpb25XaXRoRGlyZWN0aW9uQW5kR3JhbnVsYXJpdHkoZGlyZWN0aW9uLCBncmFudWxh
cml0eSkgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEzNzQsOCArMTM3MSw4
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGlmICghd2FzUmFuZ2UgJiYgYWx0
ZXIgPT0gQWx0ZXJhdGlvbk1vdmUgJiYgcG9zaXRpb24gPT0gb3JpZ2luYWxTdGFydFBvc2l0aW9u
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZnJhbWUgJiYgQVhPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSkKKyAgICBpZiAobV9kb2N1bWVudCAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpKSB7CisgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQt
PmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldFRleHRTZWxl
Y3Rpb25JbnRlbnQodGV4dFNlbGVjdGlvbkludGVudChhbHRlciwgZGlyZWN0aW9uLCBncmFudWxh
cml0eSkpOwogICAgIH0KIApAQCAtMTM4NCw3ICsxMzgxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlv
bjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
LCBUZXgKICAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkg
YmVjYXVzZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBw
b3NpdGlvbiB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uIHNldC4KICAgICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0Rp
cmVjdGlvbk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9u
YWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIg
PT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChz
aG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9
PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAogICAgIHN3aXRjaCAoYWx0ZXIpIHsKICAgICBjYXNlIEFs
dGVyYXRpb25Nb3ZlOgpAQCAtMTM5NCw3ICsxMzkxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBU
ZXgKIAogICAgICAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKQogICAgICAgICAgICAgJiYg
KGdyYW51bGFyaXR5ID09IFdvcmRHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3Jh
cGhHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBMaW5lR3JhbnVsYXJpdHkpCi0gICAgICAg
ICAgICAmJiBtX2ZyYW1lICYmICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4
dGVuZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKKyAgICAgICAgICAgICYm
IG1fZG9jdW1lbnQgJiYgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0
ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkgewogICAgICAgICAgICAgLy8g
RG9uJ3QgbGV0IHRoZSBzZWxlY3Rpb24gZ28gYWNyb3NzIHRoZSBiYXNlIHBvc2l0aW9uIGRpcmVj
dGx5LiBOZWVkZWQgdG8gbWF0Y2ggbWFjCiAgICAgICAgICAgICAvLyBiZWhhdmlvciB3aGVuLCBm
b3IgaW5zdGFuY2UsIHdvcmQtc2VsZWN0aW5nIGJhY2t3YXJkcyBzdGFydGluZyB3aXRoIHRoZSBj
YXJldCBpbgogICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiBhIHdvcmQgYW5kIHRoZW4gd29y
ZC1zZWxlY3RpbmcgZm9yd2FyZCwgbGVhdmluZyB0aGUgY2FyZXQgaW4gdGhlCkBAIC0xNDA3LDcg
KzE0MDQsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIs
IFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAgICAgIC8vIFN0YW5kYXJk
IE1hYyBiZWhhdmlvciB3aGVuIGV4dGVuZGluZyB0byBhIGJvdW5kYXJ5IGlzIGdyb3cgdGhlIHNl
bGVjdGlvbiByYXRoZXIgdGhhbiBsZWF2aW5nIHRoZQogICAgICAgICAvLyBiYXNlIGluIHBsYWNl
IGFuZCBtb3ZpbmcgdGhlIGV4dGVudC4gTWF0Y2hlcyBOU1RleHRWaWV3LgotICAgICAgICBpZiAo
IW1fZnJhbWUgfHwgIW1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jv
d1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJl
dCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50
IHx8ICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dTZWxl
Y3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSB8
fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCiAgICAgICAgICAgICBzZXRFeHRlbnQocG9zaXRp
b24sIHVzZXJUcmlnZ2VyZWQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFRleHREaXJl
Y3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKQEAgLTE1
MTcsNyArMTUxNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBh
bHRlciwgdW5zaWduZWQgdmVydGljYWxEaXN0YW5jZSwgVmVydGljCiAgICAgaWYgKHVzZXJUcmln
Z2VyZWQgPT0gVXNlclRyaWdnZXJlZCkKICAgICAgICAgbV9ncmFudWxhcml0eSA9IENoYXJhY3Rl
ckdyYW51bGFyaXR5OwogCi0gICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0
aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5
c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRp
b25FeHRlbmQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNTc1LDcgKzE1NzIsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgIG1fY2FyZXRC
bGlua1RpbWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1l
LT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQtPnJl
bmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsK
IAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVj
dGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xs
SWZOZWVkZWQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKQEAgLTE2NTUsOSArMTY1Miw5IEBAIHN0
YXRpYyBib29sIGlzTm9uT3JwaGFuZWRDYXJldChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24pCiAKIEludFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9v
bCogaW5zaWRlRml4ZWQpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9kb2N1bWVu
dCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0
aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGlu
Z0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOwogICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOwog
ICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAgICAgKmluc2lkZUZpeGVkID0gbV9jYXJldEluc2lk
ZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjc1LDEwICsxNjcyLDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rp
b246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgaWYgKCFzaG91bGRVcGRhdGVDYXJldFJlY3Qo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICgh
bV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRnJhbWVWaWV3KiB2ID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIEZyYW1lVmlldyogdiA9IG1fZG9jdW1l
bnQtPnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTY5
MCw3ICsxNjg3LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkK
ICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2ZyYW1lLT5kb2N1bWVudCgp
LCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KG1fZG9j
dW1lbnQsIHZpc2libGVTdGFydCkpIHsKICAgICAgICAgICAgICAgICBjYXJldE5vZGUgPSB2aXNp
YmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAgICAg
ICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNzE1
LDcgKzE3MTIsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBpZiAo
UmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkgewor
ICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CiAg
ICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0gbV9z
ZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAmJiBt
X3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYgKHNo
b3VsZFJlcGFpbnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRp
dGFibGUpKSB7CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKQEAgLTE4OTQs
MTIgKzE4OTEsMTEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50KSBjb25zdAogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwot
ICAgIGlmICghZG9jdW1lbnQpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOwotICAgIGRvY3Vt
ZW50LT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7CisgICAgbV9kb2N1bWVudC0+
aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9
IHJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTY4LDkgKzE5NjQsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxl
Y3RlZCgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiB7Ci0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgIEVsZW1lbnQqIGZvY3Vz
ZWRFbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CisgICAgRWxlbWVudCogZm9j
dXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmIChpczxI
VE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAgICAgIEhUTUxTZWxlY3RF
bGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpmb2N1
c2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LmNhblNlbGVjdEFsbCgpKSB7
CkBAIC0yMDAwLDggKzE5OTQsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQog
ICAgICAgICBpZiAocm9vdCkKICAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gcm9vdC0+
c2hhZG93SG9zdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJvb3QgPSBkb2N1bWVu
dC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IGRv
Y3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOworICAgICAgICAgICAgcm9vdCA9IG1fZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBtX2Rv
Y3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghcm9v
dCkKQEAgLTIwNTgsOSArMjA1Miw5IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotICAgIFJlZjxEb2N1bWVu
dD4gZG9jdW1lbnQoKm1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxEb2N1bWVudD4g
cHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKKyAgICBtX2RvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICNpZiBVU0Uo
VUlLSVRfRURJVElORykKICAgICAvLyBDYXJldCBibGlua2luZyAoYmxpbmtzIHwgZG9lcyBub3Qg
YmxpbmspCkBAIC0yMDcxLDcgKzIwNjUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2Vk
T3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgIC8vIEJlY2F1c2UgUmVuZGVyT2JqZWN0OjpzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBhbmQKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8g
d2UgaGF2ZSB0byB1cGRhdGUgcGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCi0gICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgIGlmIChS
ZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3
LT5zZWxlY3Rpb24oKS5yZXBhaW50KCk7CiAKICAgICAvLyBDYXJldCBhcHBlYXJzIGluIHRoZSBh
Y3RpdmUgZnJhbWUuCkBAIC0yMDgyLDcgKzIwNzYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgIC8vIEJlY2F1c2UgU3R5bGU6OlJlc29s
dmVyOjpjaGVja09uZVNlbGVjdG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyVGhlbWU6OmlzRm9jdXNl
ZCgpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsIHdlIGhhdmUgdG8KICAgICAvLyB1cGRh
dGUgc3R5bGUgYW5kIHRoZW1lIHN0YXRlIHRoYXQgZGVwZW5kZWQgb24gdGhvc2UuCi0gICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSkgeworICAgIGlm
IChFbGVtZW50KiBlbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSkgewogICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCkBAIC0y
MTA3LDEzICsyMTAxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWQoYm9vbCBm
bGFnKQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9mb2N1c2Vk
ICYmIG1fZG9jdW1lbnQtPnBhZ2UoKSAmJiBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmlzQWN0aXZlKCk7CiB9CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLWlubGluZSBz
dGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRnJhbWUqIGZy
YW1lKQoraW5saW5lIHN0YXRpYyBib29sIHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29t
bWFuZChEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5s
YXN0RWRpdENvbW1hbmQoKSAmJiBmcmFtZS0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCktPnNo
b3VsZFN0b3BDYXJldEJsaW5raW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5s
YXN0RWRpdENvbW1hbmQoKSAmJiBkb2N1bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkt
PnNob3VsZFN0b3BDYXJldEJsaW5raW5nKCk7CiB9CiAjZW5kaWYKIApAQCAtMjEzMiwxMiArMjEy
NiwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICBib29s
IHBhaW50QmxvY2tDdXJzb3IgPSBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciAmJiBtX3NlbGVjdGlv
bi5pc0NhcmV0KCkgJiYgIWlzTG9naWNhbEVuZE9mTGluZShtX3NlbGVjdGlvbi52aXNpYmxlRW5k
KCkpOwogICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCA9IHJlY29tcHV0ZUNhcmV0
UmVjdCgpOwogCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5j
YXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1l
bnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNob3VsZEJs
aW5rID0gIXBhaW50QmxvY2tDdXJzb3IgJiYgY2FyZXRJc1Zpc2libGUoKSAmJiBpc0NhcmV0KCkg
JiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwog
CiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBzbyB3ZSBj
YW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxvY2F0aW9u
LgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBz
aG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9mcmFtZSkpCisgICAgaWYgKGNh
cmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlu
a2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChtX2RvY3VtZW50KSkKICAgICAgICAgbV9jYXJldEJsaW5r
VGltZXIuc3RvcCgpOwogCiAgICAgLy8gU3RhcnQgYmxpbmtpbmcgd2l0aCBhIGJsYWNrIGNhcmV0
LiBCZSBzdXJlIG5vdCB0byByZXN0YXJ0IGlmIHdlJ3JlCkBAIC0yMTUzLDcgKzIxNDcsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICB9CiAjZW5kaWYKIAot
ICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlmICghdmll
dykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAyLDggKzIxOTYsOCBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dlciBhIHN5
bmNocm9ub3VzIGxheW91dCBoZXJlLgotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICB1cGRhdGVT
ZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgaWYgKG1fZG9j
dW1lbnQpCisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCpt
X2RvY3VtZW50KTsKIAogI2lmIEVOQUJMRShURVhUX0NBUkVUKQogICAgIGlmIChtX2NhcmV0UGFp
bnQpIHsKQEAgLTIyNDcsMTAgKzIyNDEsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9j
dXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgaWYgKGlzTm9uZSgpIHx8ICFpc0ZvY3VzZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBpZiAo
Y2FyZXRCcm93c2luZykgewogICAgICAgICBpZiAoRWxlbWVudCogYW5jaG9yID0gZW5jbG9zaW5n
QW5jaG9yRWxlbWVudChtX3NlbGVjdGlvbi5iYXNlKCkpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1l
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1f
ZnJhbWUpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KQEAgLTIyNjIsMTYgKzIyNTYsMTYgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgICAgICAgICAvLyBzbyBh
ZGQgdGhlICFpc0ZyYW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0
dGVyIHdheSB0byBtYWtlIHRoaXMKICAgICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxvbmcgdGVy
bSwgYnV0IHRoaXMgaXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0aW1lLgogICAgICAgICAgICAg
aWYgKHRhcmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQp
KSB7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBtX2Rv
Y3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdl
dCwgKm1fZnJhbWUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwog
ICAgICAgICB9Ci0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50
KG51bGxwdHIpOworICAgICAgICBtX2RvY3VtZW50LT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRy
KTsKICAgICB9CiAKICAgICBpZiAoY2FyZXRCcm93c2luZykKLSAgICAgICAgbV9mcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFt
ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9j
dXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOwogfQogCiB2b2lkIERyYWdDYXJldENvbnRy
b2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0JiBwLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0
KSBjb25zdApAQCAtMjMwMCwxNiArMjI5NCwxNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91
bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwog
ICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5j
bGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxk
RGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCiBG
bG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29u
dGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRv
Y3VtZW50KCkpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgpOwogCi0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJh
bWUpOwotICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsK
KyAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7
CisgICAgYXV0byogcmVuZGVyVmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBp
ZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKQEAgLTIzMjUs
MTQgKzIzMTksMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMo
Q2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnQKIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0UmVjdEhlaWdodCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmICghbV9kb2N1bWVu
dC0+cmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gdG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIHZpc2libGVDb250ZW50UmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVS
ZWN0KTsKKyAgICBhdXRvIHZpc2libGVDb250ZW50UmVjdCA9IG1fZG9jdW1lbnQtPnZpZXcoKS0+
dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2li
bGVSZWN0KTsKICAgICBmb3IgKGF1dG8mIHJlY3QgOiBib3VuZGluZ0JveGVzKFJlbmRlck9iamVj
dDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlLCB0ZXh0UmVjdEhlaWdodCA9PSBUZXh0UmVjdGFu
Z2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpKSkgewogICAgICAgICBhdXRvIGludGVyc2VjdGlv
blJlY3QgPSBpbnRlcnNlY3Rpb24ocmVjdCwgdmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAg
aWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHkoKSkKQEAgLTIzNjQsNyArMjM1OCw3IEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKEVsZW1lbnQqIHN0YXJ0KQogSFRNTEZv
cm1FbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6Y3VycmVudEZvcm0oKSBjb25zdAogewogICAgIC8v
IFN0YXJ0IGxvb2tpbmcgZWl0aGVyIGF0IHRoZSBhY3RpdmUgKGZpcnN0IHJlc3BvbmRlcikgbm9k
ZSwgb3Igd2hlcmUgdGhlIHNlbGVjdGlvbiBpcy4KLSAgICBFbGVtZW50KiBzdGFydCA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CisgICAgRWxlbWVudCogc3RhcnQgPSBt
X2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHN0
YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKQEAg
LTI0MDcsOCArMjQwMSw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihT
ZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFs
TW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxp
bmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVj
dGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1l
KCptX2ZyYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKQEAgLTI0MjYsMTcg
KzI0MjAsMTYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQog
ICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlz
IGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUg
b3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVudCkuCiAKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRh
YmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKCFp
c05vbmUoKSB8fCAhKG1fZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dz
aW5nKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWRvY3VtZW50IHx8ICEoaXNO
b25lKCkgfHwgaXNTdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0
YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkgfHwgIWRvY3VtZW50LT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9m
RG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpKSkgfHwgIW1fZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50LT5ib2R5
KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5KCkpCiAgICAgICAgIHNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShi
b2R5KSwgRE9XTlNUUkVBTSkpOwogfQogCkBAIC0yNDQ2LDcgKzI0MzksNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uKQogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2Zy
YW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVj
dGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gbV9kb2N1
bWVudC0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxl
Y3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CiB9CiAKIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OmRpc3BhdGNoU2VsZWN0U3RhcnQoKQpAQCAtMjQ2NCw3ICsyNDU3LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKGJvb2wgc2hvdWxkU2hv
d0Jsb2NrQ3Vyc29yKQogewogICAgIG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yID0gc2hvdWxkU2hv
d0Jsb2NrQ3Vyc29yOwogCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiB9CkBA
IC0yNDg4LDcgKzI0ODEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjphcHBlYXJhbmNlVXBkYXRl
VGltZXJGaXJlZCgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRl
ckxheW91dE9yU3R5bGVDaGFuZ2UoKQogewotICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2ZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICBpZiAoYXV0byogY2xpZW50ID0gbV9kb2N1bWVudC0+
ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+dXBkYXRlRWRpdG9yU3RhdGVBZnRl
ckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKCk7CiAKICAgICBzZXRDYXJldFJlY3ROZWVkc1Vw
ZGF0ZSgpOwpAQCAtMjcyMyw3ICsyNzE2LDcgQEAgUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlv
bjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJl
c3VsdFJhbmdlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlUmFuZ2UoKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9kb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKICAgICBy
ZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRpb24pOwogICAgIHJlc3VsdFJhbmdlLT5z
ZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5ndGgpOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklO
SVRZKTsKQEAgLTI5MDQsNyArMjg5Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0
QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MpCiAgICAgaWYgKG1fY2FyZXRCbGlua3MgPT0gY2FyZXRC
bGlua3MpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsg
CisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CiAgICAgaWYgKG1fY2FyZXRQYWludCkgewogICAgICAgICBtX2NhcmV0UGFpbnQgPSBmYWxzZTsg
CiAgICAgICAgIGludmFsaWRhdGVDYXJldFJlY3QoKTsgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVh
MDUwOC4uNWFhZjlhMDg5YjNiMTlkZmEwMTBlZDA3MDlkNDJkZWVhZTBiNWViMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
ZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9F
WFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqID0gbnVsbHB0cik7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVs
ZW1lbnQoKSBjb25zdDsKICAgICAgCkBAIC0zMzgsNiArMzM4LDcgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBMYXlvdXRVbml0IG1feFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggNzMwNzZkZTFiNzliOWYwOWZmOWYzMTI3YTgz
ZTViMDgzZDU3ODU5My4uNjYwMWRiOGZjYjRlMzdmNGFkYjIwYWYxNzgyZTIyMTI0Y2YxM2JkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Oklu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQKIAogdm9p
ZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBib29sIHBhc3N3
b3JkRWNob0VuYWJsZWQgPSBmcmFtZSgpLnNldHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgp
OworICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGRvY3VtZW50KCkuc2V0dGluZ3MoKS5w
YXNzd29yZEVjaG9FbmFibGVkKCk7CiAgICAgaWYgKHBhc3N3b3JkRWNob0VuYWJsZWQpCiAgICAg
ICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3Bw
CmluZGV4IDE3NmQ4ZjA4OWFmNTAyNjZkZDg5OGZhOTc3NGY5NzQxZGIzOTlkZmIuLjI3MzU1ZTY2
ZmI4OWQ1NTQyY2Q2YTliZWE4OGUyYzI2MmY1MDc4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBA
IHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAvLyBIYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCiAKLSAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUo
KTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKIAogICAgIGlmICh0eXBpbmdTdHlsZSAmJiAhdHlwaW5n
U3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBcHBseSB0aGUgdHlwaW5nIHN0eWxlIHRv
IHRoZSBpbnNlcnRlZCBsaW5lIGJyZWFrLCBzbyB0aGF0IGlmIHRoZSBzZWxlY3Rpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggZTkxMzFmNmZi
ZjMyZDg2MzA1MGFhMWVmMjA4ZTViNGY0NDA0OWI2YS4uMWJiMGQwNTI4NzBjNDUxMzY5OTQ3MTlk
MGVjMDY1YjNlZDA5NmQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0
Q29tbWFuZC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgLy8gYW55dGhpbmcgb3RoZXIgdGhhbiBOb1NlbGVjdGlvbi4gVGhl
IHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhIHJlYWwgZW5kaW5nU2VsZWN0aW9uLCBz
byBiYWlsIG91dC4KICAgICAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZnJhbWUoKS5lZGl0b3IoKS5pc092ZXJ3
cml0ZU1vZGVFbmFibGVkKCkpIHsKKyAgICB9IGVsc2UgaWYgKGRvY3VtZW50KCkuZWRpdG9yKCku
aXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChwZXJmb3JtT3ZlcndyaXRl
KG1fdGV4dCwgbV9zZWxlY3RJbnNlcnRlZFRleHQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KCkK
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb25XaXRob3V0VmFsaWRhdGlvbihzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbik7CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0
eXBpbmcgc3R5bGUuCi0gICAgaWYgKFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0g
ZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7CisgICAgaWYgKFJlZlB0cjxFZGl0
aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHls
ZSgpKSB7CiAgICAgICAgIHR5cGluZ1N0eWxlLT5wcmVwYXJlVG9BcHBseUF0KGVuZFBvc2l0aW9u
LCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CiAgICAgICAgIGlmICgh
dHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5
bGUuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDU0NjBiNzVjYWJkMjNkZDU1YWQ5MzlkMDE0YjU4
MjkyZWQ5ZDRlYTIuLjY4ZTA4MzUyYTRjMTBkODY4YmYxZTQ2OWJmNzVjOTU2ZDEzZjA1OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBSZXBsYWNlUmFuZ2VXaXRoVGV4dENv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9yYW5nZVRvQmVSZXBsYWNlZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihzZWxlY3Rpb24pKQorICAgIGlmICghZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFj
aGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNlZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDUyNzhkYjk1YmRm
NTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcuLjQ5Njk5MTlkOTFhMTE0OTVjMjk4YzkyYTc2
NjcyNmI5MmUxNjk1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMTgxLDcgKzExODEsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBGSVhNRTogQ2FuIHRoaXMg
d2FpdCB1bnRpbCBhZnRlciB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZD8gIFRoZXJl
IGRvZXNuJ3Qgc2VlbSB0byBiZQogICAgIC8vIGFueSB3b3JrIHBlcmZvcm1lZCBhZnRlciB0aGlz
IHRoYXQgcXVlcmllcyBvciB1c2VzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgZnJhbWUoKS5zZWxl
Y3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5j
bGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBkZXN0aW5hdGlv
biB0byBlbmQgdXAgaW5zaWRlIG5vZGVzIHRoYXQgd2VyZW4ndCBzZWxlY3RlZC4gIFRvIGF2b2lk
IHRoYXQsIHdlIG1vdmUgdGhlCiAgICAgLy8gcG9zaXRpb24gZm9yd2FyZCB3aXRob3V0IGNoYW5n
aW5nIHRoZSB2aXNpYmxlIHBvc2l0aW9uIHNvIHdlJ3JlIHN0aWxsIGF0IHRoZSBzYW1lIHZpc2li
bGUgbG9jYXRpb24sIGJ1dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRT
ZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9u
Q29tbWFuZC5jcHAKaW5kZXggYzA2NWMwMmNhMTNmZDI1MTcwZDZiMjFiMWY4OThlOWJhNzliZTYz
OC4uMGRkMjZhODFlOTBiNjc4NzRjMzM1Y2VmMTIxMDdlMjE0YmRmZDg2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00MCw3ICs0MCw3
IEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpCiAKIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCkuc2Vs
ZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3Nl
bGVjdGlvblRvU2V0KSAmJiAhbV9zZWxlY3Rpb25Ub1NldC5pc05vbmVPck9ycGhhbmVkKCkpIHsK
ICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvblRvU2V0LCBtX29wdGlv
bnMpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCkuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2Vs
ZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpKSAmJiAhc3Rh
cnRpbmdTZWxlY3Rpb24oKS5pc05vbmVPck9ycGhhbmVkKCkpCiAgICAgICAgIHNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9vcHRpb25zKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4
IDk5ZThmMTU4ODhlYWU5M2YzZDY4ZTA0ZDg5ZWZmNTc1NjQ2YmMzNzkuLjU5MjA4NDUzNTFlYTQw
M2I4Yzg3MzQzYWRhNzZiNzQzNjNkZjA1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApAQCAtNjUsNyArNjUsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlm
ICghbV9oYXNCZWVuVW5kb25lKSB7Ci0gICAgICAgICAgICBmcmFtZSgpLmVkaXRvcigpLnVuYXBw
bGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwgbV9j
b3JyZWN0aW9uKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudW5hcHBsaWVkU3Bl
bGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rp
b24pOwogICAgICAgICAgICAgbV9oYXNCZWVuVW5kb25lID0gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoKQogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
bV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNldFNlbGVjdGlvbkNv
bW1hbmQ6OmNyZWF0ZShtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVj
dGlvblRyaWdnZXJlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAK
aW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRmNTYxOGZiYWJiMjVhZS4uZjMxMjhkN2Vh
NTdkNTY3NjM5MThhMzEzYWI3N2I2NjQ5ZTViNjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNjMsMTMgKzE2MywxMCBAQCBUeXBpbmdDb21tYW5kOjpU
eXBpbmdDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5
cGUsIGNvbgogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCYg
ZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlv
blR5cGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NF
UlQoZnJhbWUpOwotCi0gICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQorICAg
IGlmICghZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0
cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZT
dGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShjb21wb3NpdGlvblR5cGUp
OwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tp
bmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTE4Myw4ICsxODAsOCBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIE9w
dGlvbnMgb3B0aW9ucywgVGV4dENvbQogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFy
aXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1h
bmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFt
ZSgpKSkgewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVu
dFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgeworICAgICAgICAg
ICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlw
aW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1h
bmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9z
aXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRQcmV2
ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcpOwpAQCAtMTk5
LDEwICsxOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1l
bnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcgogdm9pZCBUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0
aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIC8vIEZJWE1FOiBGb3J3
YXJkIGRlbGV0ZSBpbiBUZXh0RWRpdCBhcHBlYXJzIHRvIG9wZW4gYW5kIGNsb3NlIGEgbmV3IHR5
cGluZyBjb21tYW5kLgotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAg
aWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5KSB7Ci0gICAgICAgIGlmIChS
ZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFu
ZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVj
dGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0
KCksIGZyYW1lKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQp
KSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudCk7CiAgICAgICAgICAgICBs
YXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29t
cGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25U
eXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVj
a2luZyk7CkBAIC0yMTQsMTAgKzIxMCw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERl
bGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsCiAgICAg
VHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBGb3J3YXJkRGVsZXRlS2V5LCBlbXB0eVN0
cmluZygpLCBvcHRpb25zLCBncmFudWxhcml0eSktPmFwcGx5KCk7CiB9CiAKLXZvaWQgVHlwaW5n
Q29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihU
eXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBGcmFtZSogZnJhbWUpCit2b2lkIFR5cGluZ0Nv
bW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlw
aW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIEFT
U0VSVChmcmFtZSk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChj
dXJyZW50U2VsZWN0aW9uID09IHR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTIyNywzMSArMjIyLDI1IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21t
YW5kCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBl
IGNvbXBvc2l0aW9uKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0g
ICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGZy
YW1lLT5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1Nw
YWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKKyAgICAgICAgZG9jdW1lbnQuZWRpdG9yKCkudXBkYXRl
TWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBd
KSk7CiAgICAgCi0gICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3NpdGlvbik7CisgICAgaW5zZXJ0VGV4dChk
b2N1bWVudCwgdGV4dCwgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9wdGlvbnMs
IGNvbXBvc2l0aW9uKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZG4ndCBuZWVkIHRvIHRha2Ug
c2VsZWN0aW9uRm9ySW5zZXJ0aW9uLiBJdCBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIEZyYW1lU2Vs
ZWN0aW9uJ3MgY3VycmVudCBzZWxlY3Rpb24uCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2VydGlvbiwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29t
cG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAgICAgTE9HKEVkaXRp
bmcsICJUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0ICh0ZXh0ICVzKSIsIHRleHQudXRmOCgpLmRh
dGEoKSk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2Vs
ZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBTdHJpbmcg
bmV3VGV4dCA9IGRpc3BhdGNoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQodGV4dCwgc2VsZWN0aW9u
Rm9ySW5zZXJ0aW9uLCBjb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBvc2l0aW9uUGVuZGluZyk7
CiAgICAgCiAgICAgLy8gU2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHNlbGVjdGlvbiBhcHBy
b3ByaWF0ZWx5IGlmIHdlIGFyZSB1c2luZyBhIHNlbGVjdGlvbgogICAgIC8vIHRoYXQgaXMgZGlm
ZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSW4gdGhlIGZ1dHVyZSwgd2Ugc2hv
dWxkIGNoYW5nZSBFZGl0Q29tbWFuZAogICAgIC8vIHRvIGRlYWwgd2l0aCBjdXN0b20gc2VsZWN0
aW9ucyBpbiBhIGdlbmVyYWwgd2F5IHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsIG9mIHRoZSBjb21t
YW5kcy4KLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0g
bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChsYXN0VHlw
aW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkgIT0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKSB7
CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2Vs
ZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRF
bmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKQEAgLTI2NiwxMiArMjU1LDEy
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzCiAgICAgfQogCiAgICAgYXV0byBjbWQgPSBUeXBp
bmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEluc2VydFRleHQsIG5ld1RleHQsIG9wdGlvbnMs
IGNvbXBvc2l0aW9uVHlwZSk7Ci0gICAgYXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZChmcmFtZS5n
ZXQoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJlbnRTZWxlY3Rpb24p
OworICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQoZG9jdW1lbnQuZnJhbWUoKSwgY21kLmdl
dCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJlbnRTZWxlY3Rpb24pOwogfQogCiB2b2lk
IFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlv
bnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdD
b21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQu
ZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsK
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9z
aXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9ucyAmIFJldGFp
bkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTI4NCw3ICsyNzMsNyBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0
aW9ucykKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1
b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9y
VHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRv
Y29tcGxldGlvbihmYWxzZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3Np
dGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KCk7CkBAIC0yOTYsNyArMjg1LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogCiB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYgZG9j
dW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+
IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
ZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhk
b2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRp
b24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0
aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTMwNyw5ICsyOTYsOSBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYg
ZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucwogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yLCBlbXB0eVN0cmluZygpLCBvcHRpb25zKS0+
YXBwbHkoKTsKIH0KIAotUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmIGZyYW1lKQorUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0
Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0gZnJhbWUuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5k
KCk7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENvbW1hbmQgPSBk
b2N1bWVudC5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAoIWxhc3RFZGl0Q29t
bWFuZCB8fCAhbGFzdEVkaXRDb21tYW5kLT5pc1R5cGluZ0NvbW1hbmQoKSB8fCAhc3RhdGljX2Nh
c3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmlzT3BlbkZvck1vcmVU
eXBpbmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMyMSwxNiArMzEwLDE2IEBA
IGJvb2wgVHlwaW5nQ29tbWFuZDo6c2hvdWxkRGVmZXJXaWxsQXBwbHlDb21tYW5kVW50aWxBZGRp
bmdUeXBpbmdDb21tYW5kKCkgY29uc3QKICAgICByZXR1cm4gIW1faXNIYW5kbGluZ0luaXRpYWxU
eXBpbmdDb21tYW5kIHx8IGVkaXRBY3Rpb25Jc0RlbGV0ZUJ5VHlwaW5nKGVkaXRpbmdBY3Rpb24o
KSk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRnJhbWUqIGZyYW1lKQor
dm9pZCBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBp
bmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkKKyAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZyhkb2N1bWVudCkpCiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5jbG9z
ZVR5cGluZygpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgVHlwaW5nQ29t
bWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1v
cmVUeXBpbmcoRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24pCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRT
ZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9y
VHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVu
dCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9u
T25MYXN0SW5zZXJ0Q29tbWFuZChuZXdTZWxlY3Rpb24pOwogICAgIH0KQEAgLTQzNiwxOSArNDI1
LDE3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKCkKIAogdm9pZCBUeXBp
bmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29t
bWFuZFR5cGUpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLQogI2lmIFBM
QVRGT1JNKE1BQykKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljUXVv
dGVTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0
b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUuZWRpdG9yKCku
aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5l
ZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKSkKKyAgICBpZiAoIWRv
Y3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQorICAg
ICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
RW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljTGlu
a0RldGVjdGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1
dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCku
ZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGZyYW1lLmVkaXRvcigpLmlzSGFuZGxpbmdBY2NlcHRlZENhbmRp
ZGF0ZSgpKQorICAgIGlmIChkb2N1bWVudCgpLmVkaXRvcigpLmlzSGFuZGxpbmdBY2NlcHRlZENh
bmRpZGF0ZSgpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZnJhbWUuZWRpdG9y
KCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3VtZW50
KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCiAgICAgLy8gVGFrZSBhIGxvb2sgYXQgdGhlIHNlbGVjdGlvbiB0aGF0
IHJlc3VsdHMgYWZ0ZXIgdHlwaW5nIGFuZCBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIHNw
ZWxsY2hlY2suIApAQCAtNDY2LDkgKzQ1Myw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAg
ICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAgICAgaWYgKHJhbmdl
ICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0IHx8IGNvbW1hbmRU
eXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21tYW5kVHlwZSA9PSBU
eXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29tbWFuZFR5cGUgPT0g
VHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSkK
ICAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dCgqcmFuZ2Up
LnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVk
UHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigp
Lm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCks
ICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNv
bW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQpCi0gICAgICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50KCkuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAjZWxzZQog
ICAgICAgICBVTlVTRURfUEFSQU0oY29tbWFuZFR5cGUpOwogICAgICAgICAvLyBJZiB0aGlzIGJ1
ZyBnZXRzIGZpeGVkLCB0aGlzIFBMQVRGT1JNKElPU19GQU1JTFkpIGNvZGUgY291bGQgYmUgcmVt
b3ZlZDoKQEAgLTQ4Myw3ICs0NzAsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQocHJldmlvdXMsIHN0YXJ0V29yZFNpZGUpOwog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgc3RhcnRXb3Jk
U2lkZSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigp
Lm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCks
IGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5n
c0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2UpOwogI2VuZGlm
IC8vICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIH0KIH0KQEAgLTQ5NywyNiArNDg0LDI2IEBA
IGJvb2wgVHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0Nv
bW1hbmQgY29tbWFuZFR5cGUsIFRleHRHCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYg
KCFyYW5nZSB8fCBpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpCi0gICAgICAgIHJldHVy
biBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogCi0gICAgcmV0dXJuIGZyYW1lKCkuZWRp
dG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpy
YW5nZSkgfSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGlu
ZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpyYW5nZSkgfSk7CiB9CiAKIHZvaWQg
VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kIGNv
bW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJh
bWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwog
CiAgICAgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGlu
Zyk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRp
dGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhp
cyk7CiAgICAgLy8gU2luY2UgdGhlIHNwZWxsY2hlY2tpbmcgY29kZSBtYXkgYWxzbyBwZXJmb3Jt
IGNvcnJlY3Rpb25zIGFuZCBvdGhlciByZXBsYWNlbWVudHMsIGl0IHNob3VsZCBoYXBwZW4gYWZ0
ZXIgdGhlIHR5cGluZyBjaGFuZ2VzLgogICAgIGlmICghbV9zaG91bGRQcmV2ZW50U3BlbGxDaGVj
a2luZykKICAgICAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRUeXBlRm9y
QWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAvLyBUaGUgb2xkIHNwZWxsY2hlY2tpbmcgY29kZSBy
ZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRvbmUgZmlyc3QsIHRvIHByZXZlbnQgaXNzdWVzIGxp
a2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8ZG9lc24ndD4gaXMgbWFya2VkIGFzIG1pc3NwZWxs
ZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRU
eXBpbmcpOwotICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBk
b2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICNlbmRpZgogfQogCkBA
IC01MzUsOSArNTIyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5
QWNjZXNzaWJpbGl0eShjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2UKIHsKICAgICBMT0coRWRp
dGluZywgIlR5cGluZ0NvbW1hbmQgJXAgaW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkg
KHRleHQgJXMsIHNlbGVjdEluc2VydGVkVGV4dCAlZCkiLCB0aGlzLCB0ZXh0LnV0ZjgoKS5kYXRh
KCksIHNlbGVjdEluc2VydGVkVGV4dCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0
IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nl
c3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRUZXh0KHRleHQsIHNlbGVjdEluc2VydGVkVGV4dCk7
Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsIHRleHQs
IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENh
Y2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCB0ZXh0LCBkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBw
bHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTU1MCw5ICs1MzcsNiBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoY29uc3Qg
U3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAogICAgICAgICBtX2NvbXBvc2l0aW9uVHlwZSA9PSBU
ZXh0Q29tcG9zaXRpb25Ob25lID8gSW5zZXJ0VGV4dENvbW1hbmQ6OlJlYmFsYW5jZUxlYWRpbmdB
bmRUcmFpbGluZ1doaXRlc3BhY2VzIDogSW5zZXJ0VGV4dENvbW1hbmQ6OlJlYmFsYW5jZUFsbFdo
aXRlc3BhY2VzLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNlcnRUZXh0KTsKIAogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCksIGVuZGluZ1NlbGVjdGlvbigpKTsKLQot
ICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRUZXh0KTsKIH0K
IApAQCAtNTY1LDE3ICs1NDksMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJl
YWsoKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNl
cnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotCi0gICAgRnJhbWUmIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAg
ICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydExpbmVCcmVhayk7CiB9CiAKIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7
Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBs
YWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0
TGluZUJyZWFrKCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVU
eXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURl
bGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTU4
OCwxNyArNTY5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGZhbHNlLCBm
YWxzZSwgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0UGFyYWdyYXBoKSk7Ci0KLSAgICBGcmFtZSYg
ZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsK
ICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3Rp
ZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxh
Y2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3NpYmls
aXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKLSAgICByZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VO
b3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRp
dFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQu
cmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNjE1LDE3ICs1OTMsMTQgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoKQogICAgIH0K
ICAgICAgICAgCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtCbG9ja3F1b3RlQ29t
bWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVk
VG9PcGVuQ29tbWFuZChJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBs
YWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwor
ICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudCgpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZp
Y2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBl
VHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBs
YWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1lbnQo
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VE
ZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC02
NTIsMTAgKzYyNyw5IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFrZUVkaXRhYmxlUm9vdEVtcHR5
KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGRUb0tpbGxSaW5nKQogewotICAgIEZyYW1lJiBm
cmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwor
ICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKLSAgICBm
cmFtZS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxz
ZSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVs
ZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwpAQCAtNzQ4LDIw
ICs3MjIsMjAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIGJ1ZzoKICAgICAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzQ2NTM3NTU+IFVJS2l0IHRleHQgd2lkZ2V0cyBzaG91bGQgdXNlIFdlYktp
dCBlZGl0aW5nIEFQSSB0byBtYW5pcHVsYXRlIHRleHQKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICAgICAgY2xvc2VUeXBpbmco
JmZyYW1lKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgICAgICBjbG9zZVR5cGluZyhkb2N1bWVudCgpKTsKICNlbmRp
ZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0
ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihz
ZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8
fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9u
VG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKCF3aWxsQWRkVHlwaW5n
VG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRvRGVs
ZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRBZGRU
b0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNl
bGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJp
bmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9y
KCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwog
CiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxs
IHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91
bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTg1NSwxMyArODI4LDEzIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtl
eVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxk
IHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNs
b3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQo
KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0
aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5p
c0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF3aWxsQWRk
VHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBz
ZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQpAQCAtODcxLDcgKzg0NCw3IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZv
ckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxS
aW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlv
blRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNl
cnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hZGRS
YW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBt
YWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlv
bihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tz
QWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxF
bGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaAppbmRleCA3NmU1Zjk5YmY5MjUzODU3NWNhYTM4NzZiYjliNmI1NTRiOWZi
NzVjLi44OTZiZjBiZDE1ZGJlM2Q0ODE4NDg5NWY2NDNmMWM4NjlkNThlYjc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaApAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERvY3VtZW50JiwgT3B0aW9ucyk7CiAgICAg
c3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiwgT3B0aW9ucyk7
CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KERvY3VtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRnJhbWUqKTsKKyAgICBz
dGF0aWMgdm9pZCBjbG9zZVR5cGluZyhEb2N1bWVudCYpOwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVj
dGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7
CisgICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlv
bklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7
CiAjZW5kaWYKIAogICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wg
c2VsZWN0SW5zZXJ0ZWRUZXh0KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgaXNPcGVuRm9yTW9yZVR5cGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkZvck1vcmVUeXBp
bmc7IH0KICAgICB2b2lkIGNsb3NlVHlwaW5nKCkgeyBtX29wZW5Gb3JNb3JlVHlwaW5nID0gZmFs
c2U7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1h
bmRJZlN0aWxsT3BlbkZvclR5cGluZyhGcmFtZSYpOworICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYp
OwogCiAgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAgICAgYm9vbCBpc1R5cGluZ0NvbW1hbmQo
KSBjb25zdCBmaW5hbDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxE
YXRhVHJhbnNmZXI+IGlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSBjb25zdCBmaW5hbDsKICAgICBi
b29sIGlzQmVmb3JlSW5wdXRFdmVudENhbmNlbGFibGUoKSBjb25zdCBmaW5hbDsKIAotICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZCosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9u
SWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwgRG9jdW1lbnQm
KTsKIAogICAgIHZvaWQgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoRVR5cGluZ0NvbW1hbmQp
OwogICAgIGJvb2wgd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQsIFRl
eHRHcmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiA9IGVtcHR5U3RyaW5nKCksIFJlZlB0cjxSYW5n
ZT4mJiA9IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3Mv
RWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmlu
ZGV4IGYyYTJkNTJhYzVhYmY0ZTRmMTMxMTNjYTI1ZDFiMjBhMTczOGZhNjkuLjUzODQ5YjRlYWUx
ODg4YzJmZDk0OGNjMjg2MjY5NzZlNzQxYmZmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9FZGl0b3JJT1MubW0KQEAgLTM4OSw3ICszODksNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFz
Q2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogLy8g
aGF2ZSBhIHN0YWxlIHNlbGVjdGlvbi4KIHZvaWQgRWRpdG9yOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygpCiB7Ci0gICAgVHlwaW5n
Q29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZv
ck1vcmVUeXBpbmcoJm1fZnJhbWUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwor
ICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rp
b25JZk9wZW5Gb3JNb3JlVHlwaW5nKG1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBjNzE2ZDcyODBmNDYyY2I1NjczNzU3YjRiYTRlM2Iy
NGFiZWU4ZGUwLi5hMjY3MzQ1YmU1NDZlZTdmNDYxMTlkODMyYzhkZTE5MTZhOGFlY2NkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTU0MSwxMSArNTQxLDE0IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogdm9pZCBGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25U
b0NvbW1pdHRlZCgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGZy
YW1lIGlzIHN0aWxsIGZ1bGx5IGluIHBsYWNlIChub3QgY2FjaGVkLCBub3QgZGV0YWNoZWQpLCBi
dXQgd2lsbCBiZSByZXBsYWNlZC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgeworICAgIGlmIChkb2N1bWVudC0+
ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAvLyBUaGUgdGV4dCB3YXMgYWxy
ZWFkeSBwcmVzZW50IGluIERPTSwgc28gaXQncyBiZXR0ZXIgdG8gY29uZmlybSB0aGFuIHRvIGNh
bmNlbCB0aGUgY29tcG9zaXRpb24uCi0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkuY29uZmlybUNv
bXBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCA9IG1f
ZnJhbWUuZWRpdG9yKCkuY2xpZW50KCkpIHsKKyAgICAgICAgZG9jdW1lbnQtPmVkaXRvcigpLmNv
bmZpcm1Db21wb3NpdGlvbigpOworICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGll
bnQgPSBkb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpIHsKICAgICAgICAgICAgIGVkaXRvckNs
aWVudC0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CiAgICAgICAgICAgICBl
ZGl0b3JDbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1lKTsKICAgICAgICAgfQpA
QCAtNTY3LDggKzU3MCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsb3NlVVJMKCkKICAgICB9CiAK
ICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGljeSk7Ci0gICAgCi0gICAgbV9mcmFtZS5l
ZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogfQogCiBib29sIEZyYW1lTG9hZGVy
OjpkaWRPcGVuVVJMKCkKQEAgLTU4MCw3ICs1ODEsNiBAQCBib29sIEZyYW1lTG9hZGVyOjpkaWRP
cGVuVVJMKCkKICAgICB9CiAKICAgICBtX2ZyYW1lLm5hdmlnYXRpb25TY2hlZHVsZXIoKS5jYW5j
ZWwoKTsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CiAKICAg
ICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0gZmFs
c2U7CkBAIC02NDMsOCArNjQzLDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZENsZWFyV2lu
ZG93TmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IERvY3VtZW50JiBuZXcKIAogdm9pZCBG
cmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFyV2luZG93
UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvb2wgY2xlYXJGcmFtZVZpZXcs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZURPTVdpbmRvd0NyZWF0aW9uKQogewotICAg
IG1fZnJhbWUuZWRpdG9yKCkuY2xlYXIoKTsKLQogICAgIGJvb2wgbmVlZGVkQ2xlYXIgPSBtX25l
ZWRzQ2xlYXI7CiAgICAgbV9uZWVkc0NsZWFyID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
aW5kZXggMzg1ZTM3YTZkMGM5MGU2MzNhM2I3YjQyODcyYzYxNmUzODA4NjQyNi4uMjkwN2I0ODVi
OTRjNjZhYzUwNjg1Yzk5ZGMxNWRkNWVlZWZmY2QwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAg
LTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAgICwgbV9uYXZpZ2F0
aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxlcj4oKnRoaXMpKQog
ICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9zY3JpcHQobWFrZVVu
aXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2VkaXRvcihtYWtlVW5p
cXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rpb24obWFrZVVuaXF1ZVJlZjxG
cmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIobWFrZVVu
aXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigqdGhpcykpCiAgICAgLCBtX3BhZ2Vab29t
RmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV90ZXh0Wm9vbUZhY3Rv
cihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTU1NCw3ICs1NTIsNyBAQCBib29sIEZy
YW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xp
Y3k6OkRlbmllZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRE9NUGFzdGVBY2Nl
c3NQb2xpY3k6Ok5vdFJlcXVlc3RlZFlldDogewotICAgICAgICBhdXRvKiBjbGllbnQgPSBtX2Vk
aXRvci0+Y2xpZW50KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9IGVkaXRvcigpLmNsaWVudCgp
OwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
OTM3LDcgKzkzNSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxv
YXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYgKCFkb2N1bWVu
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxBc0lnbm9yZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25v
cmVkKCk7CiAKICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJsZWQiIHByb3Bl
cnR5IGluIHN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTogSG93IHRvIGhh
bmRsZSBjb21wb3VuZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/IE5lZWRzIFNW
RyBXRyBjbGFyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDNkNDNhOTRiZWE5NTU2Yzk4
ZGM3NDIzYWI3ZWFkOWE5MmE1MmM2ZmUuLjA5MzJhODNjYjY3NGY2ZjhjOTYxMWVkOWY2OTk5ZDE3
YjYyZDE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IkFic3RyYWN0RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgpAQCAtMTYzLDE0ICsx
NjQsMTQgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwogICAgIEZy
YW1lVmlldyogdmlldygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBt
X2VkaXRvcjsgfQotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9l
ZGl0b3I7IH0KKyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRv
cigpOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBkb2N1bWVu
dCgpLT5lZGl0b3IoKTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgeyByZXR1
cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgRnJhbWVMb2FkZXImIGxv
YWRlcigpIGNvbnN0OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXImIG5hdmlnYXRpb25TY2hlZHVs
ZXIoKSBjb25zdDsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9z
ZWxlY3Rpb247IH0KLSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkg
eyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAgICBjb25zdCBGcmFtZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7
IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBDU1NBbmltYXRpb25Db250cm9s
bGVyJiBhbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KICAgICBj
b25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzksNiBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxl
cj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7Ci0gICAgVW5pcXVl
UmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBVbmlxdWVSZWY8Q1NTQW5pbWF0
aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5BQkxFKERBVEFf
REVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggZWIwMmY4
ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZS4uM2VlZTQyZmYwY2QxZTczY2YwMWIy
OTVlOThkMjg1NGU5YmI3Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0
SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3Bw
CkBAIC02OCwyMSArNjgsMTYgQEAgUmVmPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKIAogUmVmUHRyPFRleHRJbmRpY2F0
b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRl
eHRJbmRpY2F0b3JPcHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCiB7Ci0gICAg
RnJhbWUqIGZyYW1lID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZyYW1lKCk7
CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKTsKIAotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQotICAgIFZpc2libGVTZWxlY3Rpb24g
b2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2li
bGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IHRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9y
YXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKTsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBk
YXRlcyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hh
bmdlKCpmcmFtZSwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZShk
b2N1bWVudCwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOwogCkBAIC05MSw3ICs4Niw3IEBA
IFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29u
c3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAKICAgICBib29sIGluZGljYXRlc0N1cnJlbnRTZWxl
Y3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJh
bWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQorICAgIGlmICgh
aW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZG9jdW1lbnQtPmZyYW1lKCksIHJhbmdlLCBtYXJn
aW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396864</attachid>
            <date>2020-04-18 15:14:25 -0700</date>
            <delta_ts>2020-04-20 17:39:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200418151424.patch</filename>
            <type>text/plain</type>
            <size>196261</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2
ZDA2MTE2ZWQ2Zjg5ZmFiOTBhM2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0
ZmQwMGUxNWI4OGQ3MjJlOTVhOTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4
NmExYjFlMWY1NDIxYmRiNzg2YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRU
aW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
IGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZvbnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFz
cyBGcmFtZTsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
RnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsx
NTc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21D
b250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVk
aXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBj
b25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFj
ZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5z
aWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3Mg
PSAwKTsKQEAgLTIxMTYsNiArMjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmll
ZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2Iz
YWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdk
MDBiYmYxMjBjMDM3OWVmMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJv
b2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAo
Y3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNz
cGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAt
MjIwLDEyICsyMjAsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50
Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0y
MzYsMTIgKzIzNiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2Vs
ZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAs
IHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJh
Z3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7
CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0
LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdn
ZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAo
IXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcg
PSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIg
bW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywg
d2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29y
cmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8g
dW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVs
IHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYg
KGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3Jp
Z2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29t
bWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRp
dG9yQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdl
KCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdl
KCkgPyAmbV9kb2N1bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAog
VGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChl
bmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OwogICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Up
OwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00
NzksMTIgKzQ3OSwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VyQ29udHJvbGxlciA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250
cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxh
Y2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUCiAKICAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICgh
c2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBl
bmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NTgsNyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAog
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5h
dGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUu
cGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgp
LT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0
aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5
NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9
IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
dHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRl
ZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldElu
UGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAg
Ym9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAg
ICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAg
dGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9j
dW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0g
VGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwpAQCAtNjUzLDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1
dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZi
MjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3
OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3Mg
RWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9
KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19F
TkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZl
VGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVT
U19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3
ZDFiOTY1MjQ2NDIwZDExODI2NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwx
NyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRo
ZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFz
IGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhp
cyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQg
dGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3Io
KS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFw
cGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAg
ICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51
bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246
OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndp
bGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsK
IAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigp
LndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0
byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
IC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhl
cmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
LCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBk
ZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgp
KTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
KyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVu
ZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1w
dHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBo
IHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBh
cmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUz
YzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4
NzJhY2I4OGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5n
IHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBw
cmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQw
LDcgKzc0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVS
ZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQu
cHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2ls
bCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgp
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0
VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAg
aWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBm
cmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIg
bWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxh
Y2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICgh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAg
ICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyAr
OTU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUy
Y2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUy
YjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9u
KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5k
OjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJu
ICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0
aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4
LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5k
Ojppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
OwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3
ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRl
eCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJj
OGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9u
KTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1h
bmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAg
IEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAg
IEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJl
ZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJj
Y2QwNTk1MzU1NWFhMjJiMjZmZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTg2OSw3ICs4NjksNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkK
IAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRv
cigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQz
MTZhNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAg
ICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpk
b2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJm
NjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLmFmZmQxNWFmM2EwZDVlZTM2YTI2ZDY5NzJmNWE0
MTlkMmIzNjM1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMs
OCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1
YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHko
Y29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0
aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBF
ZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29t
cG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1l
bnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJl
ZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRv
IGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkp
OwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
ICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lk
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJh
bWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxl
Y3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9u
PiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFt
ZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkp
CisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9w
dGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMp
Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9u
VG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2Vs
ZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAg
ICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxT
ZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNl
bGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNl
bGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBk
YXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBk
YXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNl
bmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAg
ICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05v
dFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwg
b3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQg
dGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNl
IHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlv
bi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAg
Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVu
dCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNr
IHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9y
IEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3Io
bV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgp
KTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAog
ZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRp
YyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBD
bGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQo
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9y
ZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBj
b25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBh
c3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRl
KCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0
b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0Fj
dGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1
bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxl
dGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJp
dHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wg
c21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFj
dGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4
dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRS
ZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODks
MTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9M
b2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgp
KTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAg
ICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRl
eHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRC
eVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKQEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
b3B5KCkKIHsgICAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBF
ZGl0b3I6OnRyeURIVE1MQ29weSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNw
YXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJv
YXJkRXZlbnRLaW5kOjpDdXQpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewot
ICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElu
cHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkK
KyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRT
dXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAg
LTc4MiwxNyArNzgyLDE3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBp
ZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxMiwxMiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0
aW9uKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFn
KTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSwgdWxUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2Rl
ID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAg
LTgyNywxMiArODI3LDEyIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlz
dFN0YXRlKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIG9sVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04NzIsNyArODcyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlz
dCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7
Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4g
bmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBA
IFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkKIAogdm9pZCBFZGl0b3I6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRU
YXJnZXRGcm9tKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBm
aW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
fQogCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0
aW5nU3R5bGVBbmRBY3Rpb24oKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFt
ZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNs
aWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRj
aElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0K
QEAgLTk4NCwxMyArOTg1LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5w
dXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlu
cHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZv
cmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0
IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNv
bHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0
cigpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5n
QWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rp
b25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNT
dHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+
dHJpU3RhdGVPZlN0eWxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZT
dHlsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAogICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZj
b21tYW5kKTsKIAogICAgICAgICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAg
ICAgICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkg
aW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQo
KSA9PSAmY29tbWFuZCkKQEAgLTEyMDAsMTYgKzEyMDEsMTggQEAgdm9pZCBFZGl0b3I6OnJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9y
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1
bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFt
ZSgqZG9jdW1lbnQuZnJhbWUoKSkKICAgICAsIG1fa2lsbFJpbmcobWFrZVVuaXF1ZTxQQUw6Oktp
bGxSaW5nPigpKQotICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+
KGZyYW1lKSkKLSAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5pcXVlPEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGZyYW1lKSkKKyAgICAsIG1fc3BlbGxDaGVja2VyKG1h
a2VVbmlxdWU8U3BlbGxDaGVja2VyPihkb2N1bWVudCkpCisgICAgLCBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPihkb2N1bWVu
dCkpCiAgICAgLCBtX2VkaXRvclVJVXBkYXRlVGltZXIoKnRoaXMsICZFZGl0b3I6OmVkaXRvclVJ
VXBkYXRlVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04p
ICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICwgbV90ZWxlcGhvbmVOdW1iZXJEZXRlY3Rp
b25VcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51
bWJlcnMpCiAjZW5kaWYKIHsKKwogfQogCiBFZGl0b3I6On5FZGl0b3IoKSA9IGRlZmF1bHQ7CkBA
IC0xMjIwLDcgKzEyMjMsNyBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogICAgIGlmIChtX2NvbXBv
c2l0aW9uTm9kZSkgewogICAgICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChFZGl0b3JDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNsaWVudCgpKQotICAgICAgICAg
ICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CisgICAgICAgICAgICBj
bGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgfQog
ICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21D
b21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKQEAgLTEyMzgsMTIgKzEyNDEsMTIgQEAgdm9p
ZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRU
eXBlKQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1
dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKKyAgICByZXR1cm4gbV9k
b2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0
LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlwZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRU
ZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIHJl
dHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAs
IFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVu
dElucHV0Q29tcG9zaXRpb24pOwogfQogCiBib29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYg
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAtMTMwMywx
MCArMTMwNiw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgICAgICAgICAvLyB0aGVu
IHRoaXMgY29kZSBzaG91bGQgY29uZGl0aW9uYWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlvbiBvbiB3
aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgYml0CiAgICAgICAgICAgICAvLyBp
cyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1c2VkIGZyYW1lLgogICAgICAgICAgICAgaWYgKGNsaWVu
dCgpICYmIGNsaWVudCgpLT5zaG91bGRSZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRp
b24oKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZWRpdGVk
RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJl
bnRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5y
ZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMzE5LDEwICsxMzIwLDEwIEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQog
ICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZElu
c2VydFRleHQoIlxuIiwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgYm9vbCBh
bGlnblRvRWRnZSA9IGlzRW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNhcmV0KTsK
ICAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwog
ICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhkb2N1bWVudCgpLCBhdXRvY29ycmVj
dGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yIDogMCk7CkBAIC0xMzM5LDEwICsxMzQwLDEwIEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1
cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwg
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBWaXNpYmxlUG9zaXRp
b24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
OworICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgYm9vbCBhbGlnblRvRWRnZSA9IGlzRW5kT2ZF
ZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNhcmV0KTsKICAgICBib29sIGF1dG9jb3JyZWN0
aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3Jy
ZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcihkb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGll
ZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CkBA
IC0xNDA2LDcgKzE0MDcsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JB
Y3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyh0cnVlKTsKICAgICB9CiAKLSAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgaWYg
KGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCkpKQogICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUo
KS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCksIGNhblNtYXJ0
Q29weU9yRGVsZXRlKCkgPyBQYXN0ZWJvYXJkOjpDYW5TbWFydFJlcGxhY2UgOiBQYXN0ZWJvYXJk
OjpDYW5ub3RTbWFydFJlcGxhY2UpOwogICAgIGVsc2UgewogICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZUVsZW1lbnQgPSBudWxscHRyOwpAQCAtMTQyNSw3ICsxNDI2LDcgQEAgdm9pZCBF
ZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAg
ICAgICAgICAgIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgLy8gRklYTUU6IERlbGV0ZSBh
ZnRlciA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAgICAgUGFz
dGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rp
b24sIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUsIEluY2x1ZGVJbWFnZUFsdFRleHRG
b3JEYXRhVHJhbnNmZXIpOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRl
KCksICptX2RvY3VtZW50LmZyYW1lKCksIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNm
ZXIpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CkBAIC0xNDM0LDEwICsxNDM1LDEwIEBAIHZv
aWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24p
CiAgICAgaWYgKGFjdGlvbiA9PSBDdXRBY3Rpb24pIHsKICAgICAgICAgU3RyaW5nIHRleHQ7CiAg
ICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAg
ICAgICAgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlv
blJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBkZWxldGVTZWxlY3Rp
b25XaXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgRWRpdEFjdGlvbjo6Q3V0
KTsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0g
ICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgcG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dCh0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTE0NTQsNyArMTQ1NSw3IEBAIHZvaWQgRWRpdG9y
OjpwYXN0ZShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAgICAgICByZXR1cm47CiAgICAgdXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIFJlc291cmNl
Q2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgp
LmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAg
ICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQ
bGFpblRleHQgfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3Rl
Ym9hcmQocGFzdGVib2FyZCk7CkBAIC0xNDc5LDcgKzE0ODAsNyBAQCB2b2lkIEVkaXRvcjo6cGFz
dGVBc1F1b3RhdGlvbigpCiAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoZmFsc2UpOwogICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0
aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgIGF1
dG8gcGFzdGVib2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZChwYXN0ZWJv
YXJkLmdldCgpLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCwgUGFzdGVPcHRpb246OkFz
UXVvdGF0aW9uIH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKCpwYXN0ZWJvYXJkKTsKQEAgLTE2MTcsNyArMTYxOCw3IEBAIHZvaWQgRWRpdG9yOjpy
ZW5kZXJMYXllckRpZFNjcm9sbChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKG1f
aW1hZ2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCkpOwor
ICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCkpOwogICAgIGlmICghc3RhcnRD
b250YWluZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg1MSw4ICsxODUyLDggQEAgdm9pZCBF
ZGl0b3I6OnRvZ2dsZVVuZGVybGluZSgpCiB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJl
Y3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudmlzaWJsZVN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKSAmJiAKLSAgICAgICAgYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25T
dGFydCgpID09IGRpcmVjdGlvbikKKyAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKQorICAgICAgICAmJiBiYXNlV3JpdGluZ0Rp
cmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAjZW5kaWYKICAgICAgICAgCkBAIC0xODgyLDcgKzE4ODMsNyBAQCBXcml0aW5nRGlyZWN0aW9u
IEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7
CiAgICAgYXV0byByZXN1bHQgPSBXcml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9SaWdodDsKIAotICAg
IFBvc2l0aW9uIHBvcyA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwb3MgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CiAg
ICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5MTcsNyArMTkxOCw3IEBAIHZvaWQgRWRpdG9yOjpz
ZWxlY3RDb21wb3NpdGlvbigpCiAgICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTc4MT4KICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAg
ICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
cmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHNlbGVjdGlvbiwgeyB9KTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihzZWxlY3Rpb24sIHsgfSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRp
b24oKQpAQCAtMTk1MiwyOCArMTk1MywyOCBAQCB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCkKIAogY2xhc3MgU2V0Q29tcG9zaXRpb25TY29wZSB7CiBw
dWJsaWM6Ci0gICAgU2V0Q29tcG9zaXRpb25TY29wZShGcmFtZSYgZnJhbWUpCi0gICAgICAgIDog
bV9mcmFtZShmcmFtZSkKLSAgICAgICAgLCBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3IoZnJhbWUp
CisgICAgU2V0Q29tcG9zaXRpb25TY29wZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgICAgIDog
bV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50KSkKKyAgICAgICAgLCBtX3R5cGluZ0dlc3R1cmVJ
bmRpY2F0b3IoKmRvY3VtZW50LmZyYW1lKCkpCiAgICAgewotICAgICAgICBtX2ZyYW1lLT5lZGl0
b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOworICAgICAgICBtX2RvY3VtZW50
LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwogICAgIH0KIAogICAg
IH5TZXRDb21wb3NpdGlvblNjb3BlKCkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigp
LnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwotICAgICAgICBpZiAoYXV0byogZWRp
dG9yQ2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIG1fZG9jdW1l
bnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOworICAgICAgICBp
ZiAoYXV0byogZWRpdG9yQ2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAg
ICAgICAgICAgICBlZGl0b3JDbGllbnQtPmRpZFVwZGF0ZUNvbXBvc2l0aW9uKCk7CiAgICAgfQog
Ci0gICAgUmVmPEZyYW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVu
dDsKICAgICBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvciBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0
b3I7CiB9OwogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0
LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobW9kZSA9PSBDb25maXJt
Q29tcG9zaXRpb24gfHwgbW9kZSA9PSBDYW5jZWxDb21wb3NpdGlvbik7Ci0gICAgU2V0Q29tcG9z
aXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZnJhbWUpOworICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2RvY3VtZW50KTsKIAogICAgIGlmIChtb2Rl
ID09IENhbmNlbENvbXBvc2l0aW9uKQogICAgICAgICBBU1NFUlQodGV4dCA9PSBlbXB0eVN0cmlu
ZygpKTsKQEAgLTE5ODQsNyArMTk4NSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihj
b25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogICAgIG1fY3VzdG9t
Q29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhp
Z2hsaWdodHMuY2xlYXIoKTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgp
KQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBBbHdheXMgZGVsZXRlIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGJlZm9y
ZSBpbnNlcnRpbmcgdGhlIGZpbmFsaXplZCBjb21wb3NpdGlvbiB0ZXh0IGlmIHdlJ3JlIGNvbmZp
cm1pbmcgb3VyIGNvbXBvc2l0aW9uLgpAQCAtMjAwMCwxMyArMjAwMSwxMyBAQCB2b2lkIEVkaXRv
cjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUg
bW9kZSkKIAogICAgIGlmIChtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKSB7CiAgICAgICAgIC8v
IEFuIG9wZW4gdHlwaW5nIGNvbW1hbmQgdGhhdCBkaXNhZ3JlZXMgYWJvdXQgY3VycmVudCBzZWxl
Y3Rpb24gd291bGQgY2F1c2UgaXNzdWVzIHdpdGggdHlwaW5nIGxhdGVyIG9uLgotICAgICAgICBU
eXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygmbV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1h
bmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQpOwogICAgIH0KIH0KIAogdm9pZCBFZGl0b3I6OnNl
dENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9u
VW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uSGlnaGxpZ2h0
PiYgaGlnaGxpZ2h0cywgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCkKIHsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9m
cmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9j
dW1lbnQpOwogCiAgICAgLy8gVXBkYXRlcyBzdHlsZXMgYmVmb3JlIHNldHRpbmcgc2VsZWN0aW9u
IGZvciBjb21wb3NpdGlvbiB0byBwcmV2ZW50CiAgICAgLy8gaW5zZXJ0aW5nIHRoZSBwcmV2aW91
cyBjb21wb3NpdGlvbiB0ZXh0IGludG8gdGV4dCBub2RlcyBvZGRseS4KQEAgLTIwMTUsNyArMjAx
Niw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAKICAgICBzZWxlY3RDb21wb3NpdGlvbigp
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBvcmlnaW5hbFRleHQgPSBzZWxlY3RlZFRleHQoKTsKQEAgLTIwMjMsMTAgKzIwMjQsMTAgQEAg
dm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICBpZiAoaXNTdGFydGluZ1RvUmVjb21wb3NlRXhp
c3RpbmdSYW5nZSkgewogICAgICAgICAvLyBXZSBwYXNzIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21w
b3NpdGlvbkZpbmFsIGhlcmUgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgcmVtb3ZpbmcgY29tcG9z
aXRpb24gdGV4dCB0aGF0IGhhcyBiZWVuIGZpbmFsaXplZC4KICAgICAgICAgVHlwaW5nQ29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKGRvY3VtZW50KCksIDAsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21w
b3NpdGlvbkZpbmFsKTsKLSAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKICAgICAgICAgICAgIC8vIElmIGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWQsIHRoZW4gd2UgbmVl
ZCB0byBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBlbmQgc28gdGhhdCB0aGUgb3JpZ2lu
YWwgdGV4dCB3aWxsIG5vdCBiZSByZWNvbXBvc2VkLgotICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBjdXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJyZW50U2Vs
ZWN0aW9uLmVuZCgpIH0pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oeyBjdXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJyZW50U2VsZWN0aW9uLmVuZCgp
IH0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDgyLDggKzIwODMsOCBAQCB2b2lkIEVkaXRv
cjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbgogICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50
KCksIHRleHQsIFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dCB8IFR5cGluZ0NvbW1h
bmQ6OlByZXZlbnRTcGVsbENoZWNraW5nLCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25Q
ZW5kaW5nKTsKIAogICAgICAgICAvLyBGaW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBjb21wb3Np
dGlvbiBub3cuCi0gICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmJhc2UoKS5kb3duc3RyZWFtKCk7Ci0gICAgICAgIFBvc2l0aW9uIGV4dGVudCA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZXh0ZW50KCk7CisgICAgICAgIFBvc2l0
aW9uIGJhc2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2UoKS5kb3du
c3RyZWFtKCk7CisgICAgICAgIFBvc2l0aW9uIGV4dGVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZXh0ZW50KCk7CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5k
ZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBiYXNlT2Zmc2V0ID0gYmFzZS5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICBOb2RlKiBleHRlbnROb2RlID0gZXh0ZW50
LmRlcHJlY2F0ZWROb2RlKCk7CkBAIC0yMTA5LDcgKzIxMTAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25V
bmRlcmxpbgogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0
ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBl
bmQgPSBzdGQ6Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCks
IGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBl
bmQpOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNl
bGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6Tm8pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTIzLDcg
KzIxMjQsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmICghY2xpZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKIApAQCAtMjEzOSw3ICsyMTQwLDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3Bl
bGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJs
ZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNh
bGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFy
b3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRS
YW5nZSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0
ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIApAQCAtMjE1MiwxNCArMjE1Mywx
NSBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAKIHZvaWQgRWRpdG9yOjphZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKIHsKLSAgICBSZWY8
RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7Ci0KKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3Rl
ZERvY3VtZW50KG1fZG9jdW1lbnQpOworICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9m
cmFtZSk7CisgICAgCiAgICAgLy8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0
d28gcGhhc2VzIC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2Ms
IGFuZAogICAgIC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0
byAoYXBwcm94aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBh
dCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAg
U3RhcnRpbmcgYXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hl
Y2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVm
PFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkp
OwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsy
MzEwLDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhp
cyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEg
cGFyYWdyYXBoCiAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3Rl
clJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1t
YXJEZXRhaWwucmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxp
bmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwog
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpA
QCAtMjMyMCw4ICsyMzIyLDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBk
cmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3Nw
ZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwg
eyBtaXNzcGVsbGluZ09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3Bl
bGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJl
dmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAg
CiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1p
c3NwZWxsZWRXb3JkKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1p
c3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIz
MzcsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUq
IGNsaWNrZWROb2RlKSBjb25zdAogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xp
Y2tlZE5vZGUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9u
LmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM5MSw3
IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9v
bCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJf
Q0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNs
aWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hl
bHBlcigqY2xpZW50KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0
MDYsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwog
ICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0Zvcldv
cmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNz
ZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJp
bmcoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAg
cmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyArMjQxNCw3IEBAIFZlY3RvcjxTdHJpbmc+
IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3Bl
bGxlZCwgYm9vCiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxv
d1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9u
LmJhc2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoV29yZEdyYW51bGFyaXR5KTsKQEAgLTI0NzIsNyArMjQ3NCw4IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3Zp
bmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dv
cmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVm
PEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVk
RG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2Zy
YW1lKTsKIAogICAgIGlmIChwbGF0Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTk0LDE5ICsyNTk3LDE5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3Rh
cnQsCiAgICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0
aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KICAgICBpZiAoIWF1dG9jb3JyZWN0ZWRT
dHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KCptaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKTsKLSAgICAgICAgaWYgKG5ld1NlbGVjdGlv
biAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpZiAo
IW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikp
CisgICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
bik7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2ZyYW1lLmVkaXRvcigpLnNo
b3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudC5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChh
dXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6
Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkucmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2Vt
ZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIAogICAgICAg
ICAvLyBSZXNldCB0aGUgY2hhcmV0IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KLSAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5l
bmQoKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJk
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgfQogCiAgICAgaWYgKCFpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKSkKQEAgLTI2NzgsNyArMjY4MSw3IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqIG5vZGUpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjppc1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3IobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKIH0KIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpCkBAIC0yNzI2LDcgKzI3MjksNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAg
IGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ym9vbCBhc3luY2hyb25vdXMgPSBtX2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKKyAgICBib29s
IGFzeW5jaHJvbm91cyA9IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsOwogCiAgICAgLy8g
SW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlvbmFsbHkgY2hlY2sgcGFyYWdyYXBoLXdp
ZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlVGV4
dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0Q2hlY2tpbmdPcHRpb25zKTsKQEAg
LTI3NDEsNyArMjc0NCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgfQogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVkT3B0
aW9ucywgcmVzdWx0cywgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgp
LCByZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNlRm9yKHJlcXVlc3QucmVsZWFzZU5vbk51bGwoKSwg
cmVzdWx0cyk7CiB9CiAKQEAgLTI3ODcsNyArMjc5MCw4IEBAIHN0YXRpYyB2b2lkIGNvcnJlY3RT
cGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQ
YXJhCiAKIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMp
CiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVu
dD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgLy8gUmVmPEZyYW1lPiBwcm90
ZWN0ZWRGcmFtZShtX2ZyYW1lKTsgLy8gY2F1c2luZyBjcmFzaCBpbiBTcGVsbENoZWNrZXI6OmRp
ZENoZWNrU3VjY2VlZAogCiAgICAgYXV0byB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5k
YXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3Jh
cGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKQEAgLTI4MTEsOSArMjgxNSw5IEBA
IHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJh
Z3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2Vt
ZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsK
LSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlw
ZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNp
YmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0
byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBu
ZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3Np
dGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAg
ICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbiku
cmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJD
aGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNl
bGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRl
eHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTUs
MTMgKzI4OTksMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxs
Q2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1Jl
cGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAh
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1Jl
cGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2Up
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykgewotICAgICAg
ICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVw
bGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3ICsy
OTE0LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0
U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCBy
YW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0
aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFY
T2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsKICAgICAgICAgICAgICAgICB9
CiAKQEAgLTI5NDAsMTMgKzI5NDQsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9y
KGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAg
ICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAgaWYg
KHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5k
ZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25S
YW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0p
OwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0p
OwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMp
Ci0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rp
b246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFu
dWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxz
IGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9u
ZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5t
b3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAg
ICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1v
dmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMDIzLDggKzMwMjcs
OCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmco
Ym9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVu
dCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3Jk
cyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCBy
ZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rp
b24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3
b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5
NiwxMSArMzEwMCw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0
aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4g
RWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2lu
dCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0g
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBm
cmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKQEAg
LTMxMTcsNyArMzExNyw3IEBAIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihy
ZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24ocmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZl
YWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hh
bmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2Vs
ZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI5LDcgQEAgdm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2Vs
ZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAogICAgIGlmICghaWdub3JlKQotICAgICAgICBy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNlbmRpZgogICAgIGlmICghaWdub3JlICYmIHNo
b3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAg
ICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50
OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwpAQCAtMzE1Miw3ICszMTUyLDcg
QEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rp
b25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsKICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2Rl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTMxNzUsNyArMzE3NSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQog
ICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0zMjAwLDEwICszMjAwLDEwIEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmlu
ZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNl
bGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rp
b24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2Vs
ZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAg
aWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIH0KIAogICAgIC8vIEluc2VydCB0
aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAtMzI1NSw3ICszMjU1LDggQEAgdm9pZCBFZGl0
b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hh
bmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVj
dGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlv
bnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1
bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgUmVmPEZyYW1lPiBwcm90
ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIAogICAgIC8vIElmIHRoZSBuZXcgc2VsZWN0aW9uIGlzIG9y
cGhhbmVkLCB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChuZXdTZWxl
Y3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQoKS5pc09ycGhhbigp
KQpAQCAtMzI2NSw5ICszMjY2LDkgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVy
Q29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAvLyBi
ZWNhdXNlIHRoZXJlIGlzIHdvcmsgdGhhdCBpdCBtdXN0IGRvIGluIHRoaXMgc2l0dWF0aW9uLgog
ICAgIC8vIFRoZSBvbGQgc2VsZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhlcmUgYW5kIGNhbGxpbmcg
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3RyYW5nZSBjYWxscy4KICAg
ICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU3MjkzMTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZSBjb250YWluIFJhbmdlcyBmb3Igc2VsZWN0aW9ucyB0aGF0IGFyZSBubyBsb25n
ZXIgdmFsaWQKLSAgICBib29sIHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uID0gbmV3
U2VsZWN0aW9uID09IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNl
bGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgYm9vbCBzZWxl
Y3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VE
T01Qb3NpdGlvbiB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pKQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOwogCiAgICAgLy8gU29tZSBlZGl0aW5nIG9wZXJh
dGlvbnMgY2hhbmdlIHRoZSBzZWxlY3Rpb24gdmlzdWFsbHkgd2l0aG91dCBhZmZlY3RpbmcgaXRz
IHBvc2l0aW9uIHdpdGhpbiB0aGUgRE9NLgogICAgIC8vIEZvciBleGFtcGxlIHdoZW4geW91IHBy
ZXNzIHJldHVybiBpbiB0aGUgZm9sbG93aW5nICh0aGUgY2FyZXQgaXMgbWFya2VkIGJ5IF4pOgpA
QCAtMzI4MiwxMyArMzI4MywxMyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJD
b21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgTwogICAgICAgICBy
ZXR1cm47CiAjZW5kaWYKICAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24g
JiYgY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KCZtX2ZyYW1lKTsKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
bV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckRlZmF1bHRCZWhhdmlvcjsKLSAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2V0dGlu
Z3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQogICAgICAgICBi
ZWhhdmlvciB8PSBUZXh0SXRlcmF0b3JUcmF2ZXJzZXNGbGF0VHJlZTsKICAgICByZXR1cm4gc2Vs
ZWN0ZWRUZXh0KGJlaGF2aW9yKTsKIH0KQEAgLTMyOTYsNyArMzI5Nyw3IEBAIFN0cmluZyBFZGl0
b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRGb3JE
YXRhVHJhbnNmZXIoKSBjb25zdAogewogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9y
ID0gVGV4dEl0ZXJhdG9yRW1pdHNJbWFnZUFsdFRleHQ7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGlu
Z3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJs
ZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7
CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMzA0LDcgKzMzMDUs
NyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25zdAog
U3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9y
KSBjb25zdAogewogICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5
IGFyZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KLSAgICBhdXRvJiBzZWxlY3Rp
b24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgYXV0byBzdGFydCA9
IHNlbGVjdGlvbi5zdGFydCgpOwogICAgIGF1dG8gZW5kID0gc2VsZWN0aW9uLmVuZCgpOwogICAg
IGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwoKSB8
fCBlbmQuaXNPcnBoYW4oKSkKQEAgLTMzMTQsNyArMzMxNSw3IEBAIFN0cmluZyBFZGl0b3I6OnNl
bGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIAogUmVmUHRy
PFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNv
bnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25l
KCkgfHwgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQgeyB0aGlzLT5kb2N1
bWVudCgpIH07CkBAIC0zMzIyLDcgKzMzMjMsNyBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxl
bWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQog
ICAgIC8vIEZJWE1FOiBXcml0ZSBpbiB0ZXJtcyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KCkuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc0
ND4uCiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAgIGF1
dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
YXV0byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzMzMCw3ICsz
MzMxLDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4
dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICByYW5nZS0+aW5zZXJ0Tm9kZShw
bGFjZWhvbGRlci5jb3B5UmVmKCkpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rp
b24geyBwb3NpdGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIucHRyKCkpLCBwb3NpdGlvbkFmdGVy
Tm9kZShwbGFjZWhvbGRlci5wdHIoKSkgfTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9u
T3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlv
bk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogCiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyOwogfQpA
QCAtMzM1MCw4ICszMzUxLDggQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVRleHRQbGFjZWhvbGRlcihU
ZXh0UGxhY2Vob2xkZXJFbGVtZW50JiBwbGFjZWhvbGRlcikKICAgICBwbGFjZWhvbGRlci5yZW1v
dmUoKTsKIAogICAgIC8vIFRvIG1hdGNoIHRoZSBMZWdhY3kgV2ViS2l0IGltcGxlbWVudGF0aW9u
LCBzZXQgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHRvIGJlIGJlZm9yZSB3aGVyZSB0aGUgcGxh
Y2Vob2xkZXIgdXNlIHRvIGJlLgotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzRm9jdXNl
ZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IHNhdmVkUm9vdEVk
aXRhYmxlRWxlbWVudCkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbiB7IHNhdmVkUG9zaXRpb25CZWZvcmVQbGFjZWhvbGRlciwgU0VMX0RF
RkFVTFRfQUZGSU5JVFkgfSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKFVzZXJUcmlnZ2VyZWQpKTsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0Zv
Y3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJv
b3RFZGl0YWJsZUVsZW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIs
IFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xs
YXBzZUNhcmV0V2lkdGgoSW50UmVjdCYgcmVjdCkKQEAgLTM0MDMsNyArMzQwNCw3IEBAIEludFJl
Y3QgRWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiBib29sIEVk
aXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkg
YWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxl
ZCgpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNr
c0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgcmV0dXJuIGNs
aWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKQEAgLTM0MTIsMTcgKzM0MTMs
MTcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQogewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
Y2xlYXJUeXBpbmdTdHlsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiB0eXBpbmdTdHlsZTsKLSAgICBpZiAoYXV0byBleGlzdGluZ1R5cGluZ1N0eWxlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQorICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5n
U3R5bGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHR5
cGluZ1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHlsZS0+Y29weSgpOwogICAgIGVsc2UKICAgICAg
ICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwotICAgIHR5cGluZ1N0eWxl
LT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgdHlwaW5nU3R5bGUt
Pm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRs
ZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUu
CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxvY2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRy
YWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0zNDMwLDcgKzM0MzEsNyBAQCB2b2lk
IEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdAogICAgICAgICBBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwogCiAg
ICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsK
KyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5n
U3R5bGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHls
ZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0
ODksMTkgKzM0OTAsMjAgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxl
bWVudCgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbiht
X2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQp
OworICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CiAKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJp
bmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKIAogICAg
IGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBE
T1dOU1RSRUFNKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKIAogICAgIGlmICghKG9w
dGlvbnMuY29udGFpbnMoRG9Ob3RSZXZlYWxTZWxlY3Rpb24pKSkKLSAgICAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU5OCw3
ICszNjAwLDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICBpZiAocmFuZ2UpIHsKICAg
ICAgICAgaWYgKCZyYW5nZS0+b3duZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQogICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJh
bmdlKG1fZnJhbWUsICpyYW5nZSkpCisgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZSgq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGlmICghc2VhcmNoUmFuZ2UpCkBAIC0zNjY4LDcgKzM2NzAsNyBAQCB2b2lkIEVkaXRv
cjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0
aW9uU2V0PEZyYW1lUwogI2VuZGlmCiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVu
dCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xpZW50
KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKIAogI2lm
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgaWYgKHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSkKQEAgLTM2OTEsOCAr
MzY5Myw2IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRE
ZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVsZXBob25l
TnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBw
b3J0ZWQoKTsKIH0KIApAQCAtMzcwNSw5ICszNzA1LDkgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxl
Y3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBt
YXJrZWRSYW5nZXM7CiAKLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgaWYg
KGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5n
ZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MjksNyArMzcyOSw3IEBAIHZvaWQg
RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRyPFJh
bmdlPiBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9
IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFn
ZSgpKQogICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVj
dGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzc0Miw3ICszNzQyLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxl
cGhvbmVOdW1iZXJzKCkKICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5n
ZXMuYXBwZW5kKHJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpKQorICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAg
IHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJl
clJhbmdlc0NoYW5nZWQoKTsKIH0KIApAQCAtMzgwMSw5ICszODAxLDkgQEAgdm9pZCBFZGl0b3I6
OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRXb3Jk
czsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwotICAgICAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0Vu
YWJsZWQoKTsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gbmV3U3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKSk7CisgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQuc2V0dGlu
Z3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Npbmcp
IHsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICAgICAgICAgIG5ld0FkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0
YXJ0T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdT
dGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAjZWxzZQpAQCAtMzg1Niw3ICszODU2LDcg
QEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2Vk
aXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbikKICAgICAgICAgbV9hbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVj
dGlvbik7CiAKLSAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBk
YXRlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVOQUJMRShB
VFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgbm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygp
OwpAQCAtMzg4Myw3ICszODgzLDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5v
ZGUqIG5vZGUpCiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0aCkg
Y29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIE5vZGUq
IG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTM5NTAsMTAgKzM5NTAsMTAgQEAgT3B0aW9uU2V0PFRleHRDaGVj
a2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUm
IHJvb3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5n
ZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQorc3RhdGljIFJlZlB0
cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQog
ewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlv
bi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDog
ZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogc3RhdGljIGJv
b2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24pCkBAIC0zOTY3LDggKzM5NjcsOCBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJl
cGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVk
aXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5k
aWRhdGVSYW5nZUZvclNlbGVjdGlvbihtX2ZyYW1lKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJh
bmdlRm9yU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5
cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKICAgICAg
ICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAKQEAg
LTM5NzcsNyArMzk3Nyw3IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdAogICAgIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNh
bmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwog
fQogCkBAIC00MDQ0LDcgKzQwNDQsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRy
aWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0
cmlidXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0
eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAg
ICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgp
LCBub2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1Jl
bW92ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDg1LDcgKzQw
ODUsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25T
dGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4
dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRl
eHRMaXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2gg
KHN0eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBA
IC00MTExLDcgKzQxMTEsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVz
QXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1
dG8gdHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5
bGUoKSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5
bGUtPnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgp
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5F
ZmZlY3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAg
LTQxOTksMTIgKzQxOTksOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50
VXBkYXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJ
ZGVudGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRl
bnRpZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1
bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAo
YXV0byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAg
ICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZp
ZXIoaWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50
LmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50
KCktPmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2ht
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciks
IGF0dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyMjcsNyArNDIyMyw3IEBAIHZvaWQgRWRp
dG9yOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8
dWludDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShU
ZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUg
PSB0cnVlOwogCkBAIC00MjQ2LDcgKzQyNDIsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0
ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29s
IEVkaXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVy
biBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7
CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFy
a2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjYyLDEzICs0MjU4LDcgQEAg
dm9pZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0
cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2Rl
RW5hYmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1v
ZGVFbmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vy
c29yKG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1
bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0
dXJuICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
aG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0
cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQzMjEsOSArNDMx
MSw5IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0
aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAg
IGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsK
LSAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUp
OyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxs
cHRyOwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMzUsMTEgKzQzMjUsMTEgQEAgY29uc3Qg
Rm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNv
bnN0CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUq
IHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9k
ZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24o
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQzNzEsNyAr
NDM2MSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omluc2VydEVkaXRhYmxl
SW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMo
KSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9u
LmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGFk
OWVkYTI2MThjOWE4ODBiZWNiYjFjZTRkNjhiYjU5Yjg5YzIwYzAuLmE2MGVlZThhMmNmOGFkZDM2
MGU2ZjJkOWUwYzVmODU1MGEzZTZmZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkVkaXRvcklu
c2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRXcml0
ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTksMTMgKzEyMCwxMyBA
QCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4X3QgewogCiBjbGFz
cyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JU
IFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rp
b24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiA9
IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3Vt
ZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNl
dDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZyYW1lPiBtX2ZyYW1l
OworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRpb25TZXQ8VGVtcG9y
YXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dhc0lnbm9yaW5nU2Vs
ZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTM3LDcgKzEzOCw3
IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSB7CiBwdWJs
aWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUmIGZyYW1lKQotICAg
ICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgOiBtX3NlbGVj
dGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewogICAgIH0KIApAQCAt
MTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihGcmFtZSYpOworICAg
IGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsKIAogICAgIGVudW0g
Y2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIsNyBAQCBwdWJsaWM6
CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBXRUJDT1JFX0VYUE9S
VCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5k
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29tbWFuZChjb25zdCBF
ZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBEb2N1bWVudCYpOwog
CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFt
ZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikgY29uc3Q7
CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dlcmluZ0V2
ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQgeyBudWxscHRyIH07
CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAgICAgIFJlZlB0cjxE
b2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwogICAg
IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRp
bmcuCkBAIC01NjcsNyArNTY5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQmKTsKIAogcHJpdmF0
ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29sIGNhbkRlbGV0ZVJh
bmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJik7CkBAIC02MTgsNiArNjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBG
cmFtZSYgbV9mcmFtZTsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1fbGFzdEVk
aXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2RjM2I5
MGZiNmMwNDcxZmFhMTBmYjhjNDQuLmJkNTE4MGViNDAwZWE3OTIxNTFiNmY3OThiNjBlY2I4Y2Zm
ZGFlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTEw
OSw2ICsxMTA5LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwKIAogc3RhdGljIGJvb2wgZXhl
Y3V0ZVN3YXBXaXRoTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSwgY29uc3QgU3RyaW5nJikKIHsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rpb24oZnJh
bWUuZG9jdW1lbnQoKSk7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCk7CiAgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CkBAIC0xODM2LDEyICsxODM3LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJbnRl
cm5hbENvbW1hbmQqIGludGVybmFsQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQog
CiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUpCiB7Ci0gICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwg
Q29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFu
ZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRp
bmcsIG1fZG9jdW1lbnQpOwogfQogCiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewot
ICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwg
bV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1l
KSwgc291cmNlLCBtX2RvY3VtZW50KTsKIH0KIAogYm9vbCBFZGl0b3I6OmNvbW1hbmRJc1N1cHBv
cnRlZEZyb21NZW51T3JLZXlCaW5kaW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCkBAIC0x
ODUzLDEyICsxODU0LDEzIEBAIEVkaXRvcjo6Q29tbWFuZDo6Q29tbWFuZCgpCiB7CiB9CiAKLUVk
aXRvcjo6Q29tbWFuZDo6Q29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1h
bmQsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBGcmFtZSYgZnJhbWUpCitFZGl0b3I6OkNv
bW1hbmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0
b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jb21t
YW5kKGNvbW1hbmQpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1h
bmQgPyAmZnJhbWUgOiBudWxscHRyKQorICAgICwgbV9kb2N1bWVudChjb21tYW5kID8gJmRvY3Vt
ZW50IDogbnVsbHB0cikKKyAgICAsIG1fZnJhbWUoY29tbWFuZCA/IGRvY3VtZW50LmZyYW1lKCkg
OiBudWxscHRyKQogewotICAgIEFTU0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKKyAgICBBU1NF
UlQoY29tbWFuZCB8fCAhbV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpl
eGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBj
b25zdApAQCAtMTg2OCw5ICsxODcwLDkgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUo
Y29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGMKICAgICAg
ICAgaWYgKCFhbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsK
LSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0g
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQpCisKKyAgICBtX2RvY3VtZW50
LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAobV9kb2N1
bWVudC0+ZnJhbWUoKSAhPSBtX2ZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gbV9jb21tYW5kLT5leGVjdXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQsIG1fc291
cmNlLCBwYXJhbWV0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAppbmRleCA0NTE2ZTUwNjUwNzJmZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li4wYjc0MmM1
NTBlNDA4ZTBhODc1MDMyOTM5ZGY1MGM0MDZkOTA1ZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTM5LDEzICsxMzksMTQgQEAgSW50UmVjdCBEcmFn
Q2FyZXRDb250cm9sbGVyOjplZGl0YWJsZUVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
KCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxk
QWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQorc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1
bWVudCkKIHsKLSAgICByZXR1cm4gIWZyYW1lIHx8IGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigp
LnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgpOworICAgIHJldHVybiAhZG9j
dW1lbnQgfHwgZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxl
Y3Rpb25Bc0RpcmVjdGlvbmFsKCk7CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlv
bihGcmFtZSogZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorRnJhbWVTZWxlY3Rpb246OkZy
YW1lU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCisgICAgLCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIp
CiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxh
cml0eSkKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Niw3ICsxNTcsNyBAQCBGcmFtZVNl
bGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJv
dW5kc0RpcnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1l
LT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1l
KCkgPT0gZnJhbWUpCisgICAgLCBtX2ZvY3VzZWQobV9mcmFtZSAmJiBtX2RvY3VtZW50LT5wYWdl
KCkgJiYgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUo
KSA9PSBtX2ZyYW1lKQogICAgICwgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAg
LCBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUoZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vy
c29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjYs
MTcgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAs
IG1fY2FyZXRCbGlua3ModHJ1ZSkKICNlbmRpZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VE
aXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGly
ZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElz
RGlyZWN0aW9uYWwodHJ1ZSk7CisgICAgCisgICAgaWYgKG1fZm9jdXNlZCkKKyAgICAgICAgZm9j
dXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCk7CiB9CiAKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9u
Ojpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVs
ZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBtX3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7
Ci0gICAgcmV0dXJuIHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgcmV0dXJuIHNlbGVjdGlvblJvb3QgPyBz
ZWxlY3Rpb25Sb290IDogbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiB9CiAKIHZvaWQg
RnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgRVVzZXJU
cmlnZ2VyZWQgdXNlclRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbikKQEAgLTI4
NCw3ICsyODgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25CeU1vdXNlSWZE
aWZmZXJlbnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcGFzcwogICAgIEVuZFBvaW50c0FkanVz
dG1lbnRNb2RlIGVuZHBvaW50c0FkanVzdG1lbnRNb2RlKQogewogICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0aW9uID0gcGFzc2VkTmV3U2VsZWN0aW9uOwotICAgIGJvb2wgaXNEaXJlY3Rp
b25hbCA9IHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IG5l
d1NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCk7CisgICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgbmV3U2VsZWN0
aW9uLmlzRGlyZWN0aW9uYWwoKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBiYXNlID0gbV9vcmln
aW5hbEJhc2UuaXNOb3ROdWxsKCkgPyBtX29yaWdpbmFsQmFzZSA6IG5ld1NlbGVjdGlvbi52aXNp
YmxlQmFzZSgpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXdCYXNlID0gYmFzZTsKQEAgLTMyMiw3
ICszMjYsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGJvb2wgc2hvdWxkQ2xlYXJU
eXBpbmdTdHlsZSA9IG9wdGlvbnMuY29udGFpbnMoQ2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvblBvc3NpYmx5V2l0aG91
dERpcmVjdGlvbjsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24o
bV9mcmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1f
ZG9jdW1lbnQpKQogICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsK
IAogICAgIGlmICghbV9mcmFtZSkgewpAQCAtMzM0LDcgKzMzOCw3IEBAIGJvb2wgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvCiAgICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4g
Z2V0IGludG8gYW4gaW5maW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9u
RG9jdW1lbnQgPSBuZXdTZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYg
KFJlZlB0cjxGcmFtZT4gbmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+
ZnJhbWUoKSkgewotICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUg
JiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9j
dW1lbnQgIT0gbV9kb2N1bWVudCkgewogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRT
dGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAg
IC8vIEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRo
aXMgRnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAv
LyBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhl
IHNlbGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKQEAgLTM0OSw3ICszNTMsNyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNl
KGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsK
IAogICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcobV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKCptX2RvY3Vt
ZW50KTsKIAogICAgIGlmIChzaG91bGRDbGVhclR5cGluZ1N0eWxlKQogICAgICAgICBjbGVhclR5
cGluZ1N0eWxlKCk7CkBAIC0zNTcsNyArMzYxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8K
ICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwogICAgIGJv
b2wgZGlkTXV0YXRlU2VsZWN0aW9uID0gb2xkU2VsZWN0aW9uICE9IG5ld1NlbGVjdGlvbjsKICAg
ICBpZiAoZGlkTXV0YXRlU2VsZWN0aW9uKQotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZWxl
Y3Rpb25XaWxsQ2hhbmdlKCk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNlbGVjdGlv
bldpbGxDaGFuZ2UoKTsKIAogICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogCkBAIC0z
NzEsMjEgKzM3NSwyMSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0
VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIHNldENhcmV0UmVj
dE5lZWRzVXBkYXRlKCk7CiAKICAgICBpZiAoIW5ld1NlbGVjdGlvbi5pc05vbmUoKSAmJiAhKG9w
dGlvbnMgJiBEb05vdFNldEZvY3VzKSkgewotICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxlbWVu
dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CisgICAgICAgIGF1dG8q
IG9sZEZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICAg
ICAgc2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IG5vdCBiZSBuZWVkZWQuCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2Vk
RWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC0+
Zm9jdXNlZEVsZW1lbnQoKSAhPSBvbGRGb2N1c2VkRWxlbWVudCkKKyAgICAgICAgICAgIG1fZG9j
dW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICB9CiAKICAgICAvLyBBbHdheXMgY2xl
YXIgdGhlIHggcG9zaXRpb24gdXNlZCBmb3IgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbi4KICAg
ICAvLyBJdCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHRoZSB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9u
IGNvZGUgaWYgbmVjZXNzYXJ5LgogICAgIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9u
ID0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKTsKICAgICBzZWxlY3RGcmFtZUVs
ZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwotICAgIG1fZnJhbWUtPmVkaXRvcigpLnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwg
b3B0aW9ucyk7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlvbi1hcGkvI3Nl
bGVjdGlvbmNoYW5nZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qgc3BlY2lmeSB3
aGljaCB0YXNrIHNvdXJjZSB0byB1c2UuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cXVldWVU
YXNrVG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6
Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9jdW1lbnQtPnF1ZXVlVGFz
a1RvRGlzcGF0Y2hFdmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpO
bywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
Mzk2LDEwICs0MDAsNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8UwogICAgIGlmICghc2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShzZWxlY3Rpb24sIG9wdGlvbnMsIGFsaWdu
LCBncmFudWxhcml0eSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKG9wdGlvbnMgJiBSZXZlYWxTZWxlY3Rpb25VcFRvTWFpbkZyYW1lKQog
ICAgICAgICBtX3NlbGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZl
YWxVcFRvTWFpbkZyYW1lOwogICAgIGVsc2UgaWYgKG9wdGlvbnMgJiBSZXZlYWxTZWxlY3Rpb24p
CkBAIC00MTEsMjcgKzQxMSwyNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8UwogICAgIG1fc2Vs
ZWN0aW9uUmV2ZWFsSW50ZW50ID0gaW50ZW50OwogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0
ZSA9IHRydWU7CiAKLSAgICBpZiAoZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQor
ICAgIGlmIChtX2RvY3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNhbGMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1bWVudC0+dmlldygpOworICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9kb2N1bWVudC0+dmlldygpOwogICAgIGlmIChmcmFt
ZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQpOwog
CiAgICAgaWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1dG8q
IGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0byog
Y2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgICAgICBjbGll
bnQtPmRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCk7CiAgICAgfQogfQogCi1z
dGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZShGcmFtZSYg
ZnJhbWUpCitzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHls
ZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgZnJh
bWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Cisg
ICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAjZWxz
ZQotICAgIGZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBkb2N1
bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAjZW5kaWYKIH0KIApAQCAtNDQxLDcgKzQ0MSw3
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKFJldmVhbFNl
bGVjdGlvbkFmdGVyVXBkYXRlIHJldmVhbE1vCiAgICAgaWYgKHJldmVhbE1vZGUgPT0gUmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJVcGRhdGU6OkZvcmNlZCkKICAgICAgICAgbV9zZWxlY3Rpb25SZXZlYWxN
b2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsOwogICAgIG1fcGVuZGluZ1NlbGVjdGlv
blVwZGF0ZSA9IHRydWU7Ci0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJl
bmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsK
IH0KIApAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFuZFJl
dmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50CiAgICAgaWYg
KG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSAhPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpEb05vdFJldmVh
bCkgewogICAgICAgICBTY3JvbGxBbGlnbm1lbnQgYWxpZ25tZW50OwogCi0gICAgICAgIGlmICht
X2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlv
bklzUmV2ZWFsZWQoKSkKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQogICAgICAgICAg
ICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFs
aWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rp
b24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvRWRnZUlmTmVlZGVkOwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dCYgaW50CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0
aW9uKCkKIHsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIG1fZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2NhblNlbGVjdGlv
bkZvclRlbGVwaG9uZU51bWJlcnMoKTsKICNlbmRpZgogfQogCkBAIC03MDMsNyArNzAzLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wg
aXNHZXRTdGFydCkgY29uc3QKICAgICAvLyBiYXNlL2V4dGVudCBhbHdheXMgcG9pbnQgdG8gdGhl
IHNhbWUgbm9kZXMgYXMgc3RhcnQvZW5kLCBidXQgd2hpY2ggcG9pbnRzCiAgICAgLy8gdG8gd2hp
Y2ggZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhpcyBjYW4gYmUg
Y2hhbmdlZAogICAgIC8vIHRvIGp1c3QgcmV0dXJuIG1fc2VsLmV4dGVudCgpLgotICAgIGlmICht
X2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5k
U2VsZWN0aW9uRnJvbUV4dGVudEVuZHBvaW50KCkpCisgICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9k
b2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRTZWxlY3Rpb25G
cm9tRXh0ZW50RW5kcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQmFzZUZp
cnN0KCkgPyBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKTsKIAogICAgIHJldHVybiBpc0dldFN0YXJ0ID8gbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCk7CkBAIC03MjMsNyArNzIzLDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0oY29u
c3QgVmlzaWJsZVBvc2l0aW8KIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlckN1
cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKIAotICAgIGlm
IChtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNl
V2hlbk1vdmluZ1JpZ2h0KCkpIHsKKyAgICBpZiAobV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5l
ZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpKSB7CiAg
ICAgICAgIC8vIEluIG9yZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3ZSBh
ZHZhbmNlIG9uZQogICAgICAgICAvLyB3b3JkIGZ1cnRoZXIgYW5kIHRoZW4gbW92ZSBvbmUgd29y
ZCBiYWNrLiBHaXZlbiB0aGUKICAgICAgICAgLy8gc2VtYW50aWNzIG9mIHByZXZpb3VzV29yZFBv
c2l0aW9uKCkgdGhpcyB3aWxsIHB1dCB1cyBhdCB0aGUKQEAgLTg1NSw3ICs4NTUsNyBAQCBWaXNp
YmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYgogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1f
c2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5yaWdodCh0cnVlLCBy
ZWFjaGVkQm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0
eTogewotICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYm
IG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1Jp
Z2h0KCk7CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1l
bnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVu
TW92aW5nUmlnaHQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbiht
X3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBv
cyA9IHJpZ2h0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5Nb3Zp
bmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMDc2LDcgKzEwNzYs
NyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBibwogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBv
c2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5sZWZ0
KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdy
YW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVu
TW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0g
bV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBT
cGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBv
c2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAg
ICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VX
aGVuTW92aW5nUmlnaHQpOwogICAgICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTM2Miw3
ICsxMzYyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVy
LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJUcmlnZ2Vy
ZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2ZyYW1lICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkpIHsKKyAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkg
JiYgdXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZG9jdW1lbnQgJiYgQVhPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewogICAgICAgICBub3RpZnlBY2Nlc3Np
YmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKHsgQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9u
Qm91bmRhcnksIHRleHRTZWxlY3Rpb25XaXRoRGlyZWN0aW9uQW5kR3JhbnVsYXJpdHkoZGlyZWN0
aW9uLCBncmFudWxhcml0eSkgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEz
NzQsOCArMTM3NCw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBh
bHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGlmICghd2Fz
UmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUgJiYgcG9zaXRpb24gPT0gb3JpZ2luYWxT
dGFydFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZnJh
bWUgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBp
ZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSkKKyAgICBpZiAobV9kb2N1bWVudCAmJiBBWE9iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9
IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUt
PnNldFRleHRTZWxlY3Rpb25JbnRlbnQodGV4dFNlbGVjdGlvbkludGVudChhbHRlciwgZGlyZWN0
aW9uLCBncmFudWxhcml0eSkpOwogICAgIH0KIApAQCAtMTM4NCw3ICsxMzg0LDcgQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rp
b24gZGlyZWN0aW9uLCBUZXgKICAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBp
cyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhl
IHJlcXVlc3RlZCBwb3NpdGlvbiB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uIHNldC4KICAgICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9p
bnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNl
dElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFt
ZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNE
aXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50
KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAogICAgIHN3aXRjaCAoYWx0ZXIpIHsK
ICAgICBjYXNlIEFsdGVyYXRpb25Nb3ZlOgpAQCAtMTM5NCw3ICsxMzk0LDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uLCBUZXgKIAogICAgICAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKQogICAg
ICAgICAgICAgJiYgKGdyYW51bGFyaXR5ID09IFdvcmRHcmFudWxhcml0eSB8fCBncmFudWxhcml0
eSA9PSBQYXJhZ3JhcGhHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBMaW5lR3JhbnVsYXJp
dHkpCi0gICAgICAgICAgICAmJiBtX2ZyYW1lICYmICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlv
cigpLnNob3VsZEV4dGVuZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKKyAg
ICAgICAgICAgICYmIG1fZG9jdW1lbnQgJiYgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkgewogICAg
ICAgICAgICAgLy8gRG9uJ3QgbGV0IHRoZSBzZWxlY3Rpb24gZ28gYWNyb3NzIHRoZSBiYXNlIHBv
c2l0aW9uIGRpcmVjdGx5LiBOZWVkZWQgdG8gbWF0Y2ggbWFjCiAgICAgICAgICAgICAvLyBiZWhh
dmlvciB3aGVuLCBmb3IgaW5zdGFuY2UsIHdvcmQtc2VsZWN0aW5nIGJhY2t3YXJkcyBzdGFydGlu
ZyB3aXRoIHRoZSBjYXJldCBpbgogICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiBhIHdvcmQg
YW5kIHRoZW4gd29yZC1zZWxlY3RpbmcgZm9yd2FyZCwgbGVhdmluZyB0aGUgY2FyZXQgaW4gdGhl
CkBAIC0xNDA3LDcgKzE0MDcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVy
YXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAgICAg
IC8vIFN0YW5kYXJkIE1hYyBiZWhhdmlvciB3aGVuIGV4dGVuZGluZyB0byBhIGJvdW5kYXJ5IGlz
IGdyb3cgdGhlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBsZWF2aW5nIHRoZQogICAgICAgICAvLyBi
YXNlIGluIHBsYWNlIGFuZCBtb3ZpbmcgdGhlIGV4dGVudC4gTWF0Y2hlcyBOU1RleHRWaWV3Lgot
ICAgICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxl
Y3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKKyAgICAgICAgaWYg
KCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFs
d2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9u
LmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCiAgICAgICAgICAgICBzZXRF
eHRlbnQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxv
Y2soKTsKQEAgLTE1MTcsNyArMTUxNyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShF
QWx0ZXJhdGlvbiBhbHRlciwgdW5zaWduZWQgdmVydGljYWxEaXN0YW5jZSwgVmVydGljCiAgICAg
aWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCkKICAgICAgICAgbV9ncmFudWxhcml0
eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwogCi0gICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rp
b25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBhbHRl
ciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFs
KHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IGFsdGVy
ID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNTc1LDcg
KzE1NzUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQog
ICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIHZp
ZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1f
ZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJT
ZWxlY3Rpb24oKTsKIAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2Uo
VmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1
cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKQEAgLTE2NTUsOSAr
MTY1NSw5IEBAIHN0YXRpYyBib29sIGlzTm9uT3JwaGFuZWRDYXJldChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pCiAKIEludFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2Fy
ZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4ZWQpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlm
ICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICB1cGRhdGVTZWxl
Y3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgdXBkYXRlU2VsZWN0
aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOwogICAgIHJlY29tcHV0ZUNh
cmV0UmVjdCgpOwogICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAgICAgKmluc2lkZUZpeGVkID0g
bV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjc1LDEwICsxNjc1LDEwIEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgaWYgKCFzaG91bGRVcGRh
dGVDYXJldFJlY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2ZyYW1l
KQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRnJh
bWVWaWV3KiB2ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIEZyYW1lVmlldyog
diA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMTY5MCw3ICsxNjkwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRl
Q2FyZXRSZWN0KCkKICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2ZyYW1l
LT5kb2N1bWVudCgpLCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2Fy
ZXRSZWN0KG1fZG9jdW1lbnQsIHZpc2libGVTdGFydCkpIHsKICAgICAgICAgICAgICAgICBjYXJl
dE5vZGUgPSB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgICAgICAgICAgICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IHRydWU7CiAgICAgICAgICAg
ICB9CkBAIC0xNzE1LDcgKzE3MTUsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVD
YXJldFJlY3QoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJF
VCkKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRl
clZpZXcoKSkgeworICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVy
VmlldygpKSB7CiAgICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVk
aXRhYmxlID0gbV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0Nh
cmV0Tm9kZSAmJiBtX3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAg
ICAgICAgaWYgKHNob3VsZFJlcGFpbnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2Rl
SXNDb250ZW50RWRpdGFibGUpKSB7CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9k
ZSkKQEAgLTE4OTQsMTIgKzE4OTQsMTEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMo
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAogICAgIGlmICghaXNSYW5nZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQp
OwotICAgIGRvY3VtZW50LT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7CisgICAg
bV9kb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOwogICAgIE5vZGUq
IGlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBpZiAoIWlubmVyTm9kZSB8fCAh
aW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTY4LDkg
KzE5NjcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVu
dElmRnVsbHlTZWxlY3RlZCgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiB7
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgIEVs
ZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CisgICAg
RWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwog
ICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAgICAg
IEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LmNhblNl
bGVjdEFsbCgpKSB7CkBAIC0yMDAwLDggKzE5OTcsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RBbGwoKQogICAgICAgICBpZiAocm9vdCkKICAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFy
Z2V0ID0gcm9vdC0+c2hhZG93SG9zdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJv
b3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RTdGFy
dFRhcmdldCA9IGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOworICAgICAgICAgICAgcm9vdCA9
IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgc2VsZWN0U3RhcnRU
YXJnZXQgPSBtX2RvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmICghcm9vdCkKQEAgLTIwNTgsOSArMjA1NSw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3Vs
ZENsCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQog
ewogICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotICAg
IFJlZjxEb2N1bWVudD4gZG9jdW1lbnQoKm1fZnJhbWUtPmRvY3VtZW50KCkpOwogCi0gICAgZG9j
dW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX2RvY3VtZW50LT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CiAKICNpZiBVU0UoVUlLSVRfRURJVElORykKICAgICAvLyBDYXJldCBibGlu
a2luZyAoYmxpbmtzIHwgZG9lcyBub3QgYmxpbmspCkBAIC0yMDcxLDcgKzIwNjcsNyBAQCB2b2lk
IEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgIC8vIEJl
Y2F1c2UgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBhbmQKICAgICAv
LyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNoZWNrIGlmIHRoZSBm
cmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUgcGxhY2VzIHRob3NlIGNv
bG9ycyB3ZXJlIHBhaW50ZWQuCi0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+
cmVuZGVyVmlldygpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVu
ZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5yZXBhaW50KCk7CiAKICAgICAv
LyBDYXJldCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCkBAIC0yMDgyLDcgKzIwNzgsNyBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAg
IC8vIEJlY2F1c2UgU3R5bGU6OlJlc29sdmVyOjpjaGVja09uZVNlbGVjdG9yKCkgYW5kCiAgICAg
Ly8gUmVuZGVyVGhlbWU6OmlzRm9jdXNlZCgpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUs
IHdlIGhhdmUgdG8KICAgICAvLyB1cGRhdGUgc3R5bGUgYW5kIHRoZW1lIHN0YXRlIHRoYXQgZGVw
ZW5kZWQgb24gdGhvc2UuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Zm9j
dXNlZEVsZW1lbnQoKSkgeworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gbV9kb2N1bWVudC0+
Zm9jdXNlZEVsZW1lbnQoKSkgewogICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+
cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUo
KS5oYXNBcHBlYXJhbmNlKCkpCkBAIC0yMTA3LDEzICsyMTAzLDEzIEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNldEZvY3VzZWQoYm9vbCBmbGFnKQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0Zv
Y3VzZWRBbmRBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFt
ZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUo
KTsKKyAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZG9jdW1lbnQtPnBhZ2UoKSAmJiBtX2RvY3Vt
ZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7CiB9CiAKICNpZiBFTkFC
TEUoVEVYVF9DQVJFVCkKLWlubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVU
b1R5cGluZ0NvbW1hbmQoRnJhbWUqIGZyYW1lKQoraW5saW5lIHN0YXRpYyBib29sIHNob3VsZFN0
b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAg
cmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKSAmJiBmcmFtZS0+ZWRpdG9y
KCkubGFzdEVkaXRDb21tYW5kKCktPnNob3VsZFN0b3BDYXJldEJsaW5raW5nKCk7CisgICAgcmV0
dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKSAmJiBkb2N1bWVudC0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCktPnNob3VsZFN0b3BDYXJldEJsaW5raW5nKCk7CiB9CiAj
ZW5kaWYKIApAQCAtMjEzMiwxMiArMjEyOCwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRh
dGVBcHBlYXJhbmNlKCkKICAgICBib29sIHBhaW50QmxvY2tDdXJzb3IgPSBtX3Nob3VsZFNob3dC
bG9ja0N1cnNvciAmJiBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgJiYgIWlzTG9naWNhbEVuZE9mTGlu
ZShtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwogICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZE9y
Q2xlYXJlZCA9IHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogCi0gICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wg
Y2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJs
ZWQoKTsKICAgICBib29sIHNob3VsZEJsaW5rID0gIXBhaW50QmxvY2tDdXJzb3IgJiYgY2FyZXRJ
c1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJs
ZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9w
IHRoZSBibGluayB0aW1lciBzbyB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBj
YXJldCBpbiB0aGUgbmV3IGxvY2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVh
cmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1h
bmQobV9mcmFtZSkpCisgICAgaWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3Vs
ZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChtX2RvY3VtZW50
KSkKICAgICAgICAgbV9jYXJldEJsaW5rVGltZXIuc3RvcCgpOwogCiAgICAgLy8gU3RhcnQgYmxp
bmtpbmcgd2l0aCBhIGJsYWNrIGNhcmV0LiBCZSBzdXJlIG5vdCB0byByZXN0YXJ0IGlmIHdlJ3Jl
CkBAIC0yMTUzLDcgKzIxNDksNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJh
bmNlKCkKICAgICB9CiAjZW5kaWYKIAotICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKTsKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVu
ZGVyVmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAyLDgg
KzIxOTgsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRW
aXNpYmlsaXR5IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm9ub3VzIGxheW91dCBoZXJlLgotICAgIGlmICht
X2ZyYW1lKQotICAgICAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgq
bV9mcmFtZSk7CisgICAgaWYgKG1fZG9jdW1lbnQpCisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbkJ5
VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKIAogI2lmIEVOQUJMRShURVhUX0NB
UkVUKQogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKQEAgLTIyNDcsMTAgKzIyNDMsMTAgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgaWYgKGlz
Tm9uZSgpIHx8ICFpc0ZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBjYXJl
dEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwor
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAgICAgICBpZiAoRWxl
bWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChtX3NlbGVjdGlvbi5iYXNlKCkp
KSB7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZv
Y3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJhbWUpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+
cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2Zy
YW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTIyNjIsMTYg
KzIyNTgsMTYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRl
ZCgpCiAgICAgICAgICAgICAvLyBzbyBhZGQgdGhlICFpc0ZyYW1lRWxlbWVudCBjaGVjayBoZXJl
LiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBtYWtlIHRoaXMKICAgICAgICAgICAg
IC8vIHdvcmsgaW4gdGhlIGxvbmcgdGVybSwgYnV0IHRoaXMgaXMgdGhlIHNhZmVzdCBmaXggYXQg
dGhpcyB0aW1lLgogICAgICAgICAgICAgaWYgKHRhcmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYm
ICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1l
KTsKKyAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
LnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJhbWUpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50
T3JTaGFkb3dIb3N0RWxlbWVudCgpOwogICAgICAgICB9Ci0gICAgICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOworICAgICAgICBtX2RvY3VtZW50LT5z
ZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKICAgICB9CiAKICAgICBpZiAoY2FyZXRCcm93c2lu
ZykKLSAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2Vk
RWxlbWVudChudWxscHRyLCAqbV9mcmFtZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOwog
fQogCiB2b2lkIERyYWdDYXJldENvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFt
ZSwgR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IExheW91dFJlY3QmIGNsaXBSZWN0KSBjb25zdApAQCAtMjMwMCwxNiArMjI5NiwxNiBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKSBjbwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VD
YWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJl
dHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlv
bkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYgKCFtX2RvY3VtZW50KQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRh
dGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwotICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2Zy
YW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5
b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CisgICAgYXV0byogcmVuZGVyVmlldyA9IG1fZG9jdW1l
bnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CiAKQEAgLTIzMjUsMTQgKzIzMjEsMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJs
ZUNvbnQKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFu
Z2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0
ZXh0UmVjdEhlaWdodCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJl
cigpKQorICAgIGlmICghbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm47
CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHZpc2libGVDb250ZW50UmVj
dCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICBhdXRvIHZpc2libGVDb250ZW50UmVj
dCA9IG1fZG9jdW1lbnQtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVh
OjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKICAgICBmb3IgKGF1dG8mIHJlY3QgOiBi
b3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlLCB0ZXh0
UmVjdEhlaWdodCA9PSBUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpKSkgewog
ICAgICAgICBhdXRvIGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNlY3Rpb24ocmVjdCwgdmlzaWJs
ZUNvbnRlbnRSZWN0KTsKICAgICAgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHkoKSkK
QEAgLTIzNjQsNyArMjM2MCw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3Jt
KEVsZW1lbnQqIHN0YXJ0KQogSFRNTEZvcm1FbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6Y3VycmVu
dEZvcm0oKSBjb25zdAogewogICAgIC8vIFN0YXJ0IGxvb2tpbmcgZWl0aGVyIGF0IHRoZSBhY3Rp
dmUgKGZpcnN0IHJlc3BvbmRlcikgbm9kZSwgb3Igd2hlcmUgdGhlIHNlbGVjdGlvbiBpcy4KLSAg
ICBFbGVtZW50KiBzdGFydCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7
CisgICAgRWxlbWVudCogc3RhcnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAg
IGlmICghc3RhcnQpCiAgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50
KCk7CiAgICAgaWYgKCFzdGFydCkKQEAgLTI0MDcsOCArMjQwMyw4IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnJldmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNv
bnN0IFNjcm9sCiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVj
dCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3Vs
ZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAg
ICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBh
Z2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGll
bnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOwor
ICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAg
ICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRT
ZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2ZyYW1lKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogI2Vsc2UKQEAgLTI0MjYsMTcgKzI0MjIsMTYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9k
eSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50
aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1
bWVudCkuCiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJh
bWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgp
IHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3Np
bmdFbmFibGVkKCk7CisgICAgaWYgKCFpc05vbmUoKSB8fCAhKG1fZG9jdW1lbnQtPmhhc0VkaXRh
YmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAg
ICBpZiAoIWRvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9jdW1lbnQoVmlzaWJs
ZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkg
fHwgIWRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCisgICAgaWYgKCFtX2RvY3VtZW50IHx8
ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0
aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkgfHwgIW1fZG9jdW1lbnQtPmhh
c0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0
byogYm9keSA9IGRvY3VtZW50LT5ib2R5KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3Vt
ZW50LT5ib2R5KCkpCiAgICAgICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShib2R5KSwgRE9XTlNUUkVBTSkpOwogfQogCkBAIC0yNDQ2
LDcgKzI0NDEsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQogICAgIGlmIChtX2ZyYW1lLT5z
ZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZh
bHNlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBm
YWxzZSk7CiB9CiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OmRpc3BhdGNoU2VsZWN0U3RhcnQoKQpA
QCAtMjQ2NCw3ICsyNDU5LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2hvdWxkU2hvd0Js
b2NrQ3Vyc29yKGJvb2wgc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKQogewogICAgIG1fc2hvdWxkU2hv
d0Jsb2NrQ3Vyc29yID0gc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yOwogCi0gICAgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgbV9k
b2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICB1
cGRhdGVBcHBlYXJhbmNlKCk7CiB9CkBAIC0yNDg4LDcgKzI0ODMsNyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjphcHBlYXJhbmNlVXBkYXRlVGltZXJGaXJlZCgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UoKQogewotICAgIGlm
IChhdXRvKiBjbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICBpZiAoYXV0
byogY2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgIGNsaWVu
dC0+dXBkYXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKCk7CiAK
ICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwpAQCAtMjcyMyw3ICsyNzE4LDcgQEAgUmVm
UHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rp
b24oaW50IGFtb3VudCkgY29uc3QKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VP
bkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkK
IHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9kb2N1bWVu
dC0+Y3JlYXRlUmFuZ2UoKTsKICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRp
b24pOwogICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5ndGgpOwog
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0
UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKQEAgLTI5MDQsNyArMjg5OSw3IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MpCiAgICAgaWYg
KG1fY2FyZXRCbGlua3MgPT0gY2FyZXRCbGlua3MpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFC
TEUoVEVYVF9DQVJFVCkKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsgCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKG1fY2FyZXRQYWludCkgewogICAgICAg
ICBtX2NhcmV0UGFpbnQgPSBmYWxzZTsgCiAgICAgICAgIGludmFsaWRhdGVDYXJldFJlY3QoKTsg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1
OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVhMDUwOC4uNWFhZjlhMDg5YjNiMTlkZmEwMTBlZDA3MDlk
NDJkZWVhZTBiNWViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApA
QCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0g
bnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9j
dW1lbnQqID0gbnVsbHB0cik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAgICAgCkBAIC0zMzgsNiAr
MzM4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBMYXlv
dXRVbml0IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggNzMw
NzZkZTFiNzliOWYwOWZmOWYzMTI3YTgzZTViMDgzZDU3ODU5My4uNjYwMWRiOGZjYjRlMzdmNGFk
YjIwYWYxNzgyZTIyMTI0Y2YxM2JkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+
JiYgbm9kZSwgdW5zaWduZWQKIAogdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0Fw
cGx5KCkKIHsKLSAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBmcmFtZSgpLnNldHRpbmdz
KCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOworICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9
IGRvY3VtZW50KCkuc2V0dGluZ3MoKS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CiAgICAgaWYgKHBh
c3N3b3JkRWNob0VuYWJsZWQpCiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpbmVCcmVha0NvbW1hbmQuY3BwCmluZGV4IDE3NmQ4ZjA4OWFmNTAyNjZkZDg5OGZhOTc3
NGY5NzQxZGIzOTlkZmIuLjI3MzU1ZTY2ZmI4OWQ1NTQyY2Q2YTliZWE4OGUyYzI2MmY1MDc4M2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5k
LmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9B
cHBseSgpCiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcg
c3R5bGUuCiAKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lKCku
c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKIAogICAgIGlm
ICh0eXBpbmdTdHlsZSAmJiAhdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBB
cHBseSB0aGUgdHlwaW5nIHN0eWxlIHRvIHRoZSBpbnNlcnRlZCBsaW5lIGJyZWFrLCBzbyB0aGF0
IGlmIHRoZSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29t
bWFuZC5jcHAKaW5kZXggZTkxMzFmNmZiZjMyZDg2MzA1MGFhMWVmMjA4ZTViNGY0NDA0OWI2YS4u
MWJiMGQwNTI4NzBjNDUxMzY5OTQ3MTlkMGVjMDY1YjNlZDA5NmQ0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2
b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gYW55dGhpbmcgb3Ro
ZXIgdGhhbiBOb1NlbGVjdGlvbi4gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBh
IHJlYWwgZW5kaW5nU2VsZWN0aW9uLCBzbyBiYWlsIG91dC4KICAgICAgICAgaWYgKGVuZGluZ1Nl
bGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAo
ZnJhbWUoKS5lZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKKyAgICB9IGVsc2Ug
aWYgKGRvY3VtZW50KCkuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CiAgICAg
ICAgIGlmIChwZXJmb3JtT3ZlcndyaXRlKG1fdGV4dCwgbV9zZWxlY3RJbnNlcnRlZFRleHQpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIEluc2Vy
dFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBzZXRFbmRpbmdTZWxlY3Rpb25XaXRob3V0VmFs
aWRhdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAKICAgICAvLyBIYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCi0gICAgaWYgKFJlZlB0cjxFZGl0
aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgp
KSB7CisgICAgaWYgKFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQo
KS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7CiAgICAgICAgIHR5cGluZ1N0eWxlLT5wcmVw
YXJlVG9BcHBseUF0KGVuZFBvc2l0aW9uLCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0Rp
cmVjdGlvbik7CiAgICAgICAgIGlmICghdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDU0NjBi
NzVjYWJkMjNkZDU1YWQ5MzlkMDE0YjU4MjkyZWQ5ZDRlYTIuLjY4ZTA4MzUyYTRjMTBkODY4YmYx
ZTQ2OWJmNzVjOTU2ZDEzZjA1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9p
ZCBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9yYW5n
ZVRvQmVSZXBsYWNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVj
dGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQorICAgIGlmICghZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNl
ZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCmluZGV4IDUyNzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcuLjQ5
Njk5MTlkOTFhMTE0OTVjMjk4YzkyYTc2NjcyNmI5MmUxNjk1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMTgxLDcg
KzExODEsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAK
ICAgICAvLyBGSVhNRTogQ2FuIHRoaXMgd2FpdCB1bnRpbCBhZnRlciB0aGUgb3BlcmF0aW9uIGhh
cyBiZWVuIHBlcmZvcm1lZD8gIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQogICAgIC8vIGFueSB3
b3JrIHBlcmZvcm1lZCBhZnRlciB0aGlzIHRoYXQgcXVlcmllcyBvciB1c2VzIHRoZSB0eXBpbmcg
c3R5bGUuCi0gICAgZnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAvLyBXZSBk
b24ndCB3YW50IHRoZSBkZXN0aW5hdGlvbiB0byBlbmQgdXAgaW5zaWRlIG5vZGVzIHRoYXQgd2Vy
ZW4ndCBzZWxlY3RlZC4gIFRvIGF2b2lkIHRoYXQsIHdlIG1vdmUgdGhlCiAgICAgLy8gcG9zaXRp
b24gZm9yd2FyZCB3aXRob3V0IGNoYW5naW5nIHRoZSB2aXNpYmxlIHBvc2l0aW9uIHNvIHdlJ3Jl
IHN0aWxsIGF0IHRoZSBzYW1lIHZpc2libGUgbG9jYXRpb24sIGJ1dApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYzA2NWMwMmNhMTNmZDI1
MTcwZDZiMjFiMWY4OThlOWJhNzliZTYzOC4uMGRkMjZhODFlOTBiNjc4NzRjMzM1Y2VmMTIxMDdl
MjE0YmRmZDg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rp
b25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNv
bW1hbmQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVj
dGlvbkNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpCiAKIHZv
aWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IGZyYW1lKCkuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIHNl
bGVjdGlvbiA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvU2V0KSAmJiAhbV9zZWxlY3Rpb25Ub1Nl
dC5pc05vbmVPck9ycGhhbmVkKCkpIHsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbiht
X3NlbGVjdGlvblRvU2V0LCBtX29wdGlvbnMpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFNldFNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRv
VW5hcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCkuc2Vs
ZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbihzdGFy
dGluZ1NlbGVjdGlvbigpKSAmJiAhc3RhcnRpbmdTZWxlY3Rpb24oKS5pc05vbmVPck9ycGhhbmVk
KCkpCiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwg
bV9vcHRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAx
NzJkODVmZDQ2NmYyODM2NmI1NTgwNmQwOWJmNjAxZmUxYzVmODE5Li41MGMxNzUzZjE2ZDk2OGZh
OTZiYzJiYzZiNjExYjQ5OGZmMjQ5NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwCkBAIC05OCw4ICs5OCw4IEBAIHZvaWQgU3BlbGxDaGVja1JlcXVlc3Q6OnJlcXVl
c3RlckRlc3Ryb3llZCgpCiAgICAgbV9jaGVja2VyID0gbnVsbHB0cjsKIH0KIAotU3BlbGxDaGVj
a2VyOjpTcGVsbENoZWNrZXIoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1Nw
ZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgqdGhp
cywgJlNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QpCiB7CiB9
CkBAIC0xMTQsNyArMTE0LDcgQEAgU3BlbGxDaGVja2VyOjp+U3BlbGxDaGVja2VyKCkKIAogVGV4
dENoZWNrZXJDbGllbnQqIFNwZWxsQ2hlY2tlcjo6Y2xpZW50KCkgY29uc3QKIHsKLSAgICBQYWdl
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQucGFn
ZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJu
IHBhZ2UtPmVkaXRvckNsaWVudCgpLnRleHRDaGVja2VyKCk7CkBAIC0xMzEsNyArMTMxLDcgQEAg
dm9pZCBTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KCkKIAog
Ym9vbCBTcGVsbENoZWNrZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fZnJhbWUuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKTsKIH0KIAogYm9vbCBTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNo
cm9ub3VzbHkoUmFuZ2UmIHJhbmdlKSBjb25zdApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgU3Bl
bGxDaGVja2VyOjppbnZva2VSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0
KQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdS
ZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KTsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9wcm9jZXNz
aW5nUmVxdWVzdCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIHZv
aWQgU3BlbGxDaGVja2VyOjplbnF1ZXVlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYg
cmVxdWVzdCkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2so
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVjdAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQW5kUmVwbGFj
ZUZvcigqbV9wcm9jZXNzaW5nUmVxdWVzdCwgcmVzdWx0cyk7CisgICAgbV9kb2N1bWVudC5lZGl0
b3IoKS5tYXJrQW5kUmVwbGFjZUZvcigqbV9wcm9jZXNzaW5nUmVxdWVzdCwgcmVzdWx0cyk7CiAK
ICAgICBpZiAobV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllci50b1VJbnQ2NCgpIDwgaWRlbnRpZmll
ci50b1VJbnQ2NCgpKQogICAgICAgICBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyID0gaWRlbnRp
ZmllcjsKQEAgLTIxOSw3ICsyMTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgogICAgICAg
ICBpZiAocmVxdWVzdERhdGEuY2hlY2tpbmdUeXBlcygpLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIpKQogICAgICAgICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFya2Vy
OjpHcmFtbWFyKTsKICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vz
c2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5j
aGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKICAgICB9CiAgICAgZGlkQ2hlY2soaWRlbnRp
ZmllciwgcmVzdWx0cyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAppbmRl
eCBjMzZhZTJjMzBmZTlmYjViZWY2NzA3MzIyMmVjNDNlNDRhZDdmMmMwLi5kMTlmY2ZkZTM4NDE1
YjAxMTVjZjhjZGFhNDhhODY2MDhhODExOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxD
aGVja2VyLmgKQEAgLTc2LDcgKzc2LDcgQEAgY2xhc3MgU3BlbGxDaGVja2VyIHsKIHB1YmxpYzoK
ICAgICBmcmllbmQgY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiAKLSAgICBleHBsaWNpdCBTcGVs
bENoZWNrZXIoRnJhbWUmKTsKKyAgICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRG9jdW1lbnQmKTsK
ICAgICB+U3BlbGxDaGVja2VyKCk7CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzRW5hYmxlZCgp
IGNvbnN0OwpAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDaGVja0Nh
bmNlbChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRDaGVjayhU
ZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4mKTsKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50
OwogICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFJlcXVlc3RJZGVudGlm
aWVyOwogICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFByb2Nlc3NlZElk
ZW50aWZpZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDk5ZThmMTU4ODhlYWU5M2YzZDY4ZTA0ZDg5ZWZmNTc1
NjQ2YmMzNzkuLjU5MjA4NDUzNTFlYTQwM2I4Yzg3MzQzYWRhNzZiNzQzNjNkZjA1ZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcApAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9oYXNCZWVuVW5kb25lKSB7Ci0gICAgICAgICAg
ICBmcmFtZSgpLmVkaXRvcigpLnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVj
dGlvbigpLCBtX2NvcnJlY3RlZCwgbV9jb3JyZWN0aW9uKTsKKyAgICAgICAgICAgIGRvY3VtZW50
KCkuZWRpdG9yKCkudW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCks
IG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOwogICAgICAgICAgICAgbV9oYXNCZWVuVW5kb25l
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9jb3JyZWN0ZWQu
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKKyAgICBp
ZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0
aW9uVG9CZUNvcnJlY3RlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKFNldFNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShtX3NlbGVjdGlvblRvQmVDb3Jy
ZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJh
bWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRm
NTYxOGZiYWJiMjVhZS4uZjMxMjhkN2VhNTdkNTY3NjM5MThhMzEzYWI3N2I2NjQ5ZTViNjQwMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNjMsMTMgKzE2
MywxMCBAQCBUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwg
RVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIGNvbgogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRl
bGV0ZVNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENv
bXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgaWYgKCFmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNSYW5nZSgpKQorICAgIGlmICghZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5n
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygq
ZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJ
c0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0
aW9uVHlwZShjb21wb3NpdGlvblR5cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5n
KTsKQEAgLTE4Myw4ICsxODAsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlv
bihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbQogdm9pZCBUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBv
cHRpb25zLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKGdyYW51bGFy
aXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0
aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQo
KSwgZG9jdW1lbnQuZnJhbWUoKSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KGRvY3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVu
dFNwZWxsQ2hlY2tpbmcpOwpAQCAtMTk5LDEwICsxOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRl
eHRHcgogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVu
dCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogewogICAgIC8vIEZJWE1FOiBGb3J3YXJkIGRlbGV0ZSBpbiBUZXh0RWRpdCBhcHBlYXJzIHRv
IG9wZW4gYW5kIGNsb3NlIGEgbmV3IHR5cGluZyBjb21tYW5kLgotICAgIEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51
bGFyaXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0Nv
bW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsK
LSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGZyYW1lKTsKKyAgICAgICAgaWYgKFJlZlB0cjxU
eXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGls
bE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25J
ZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBk
b2N1bWVudCk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxl
dGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9w
dGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0yMTQsMTAgKzIxMCw5IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50
LCBPcHRpb25zIG9wdGlvbnMsCiAgICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBG
b3J3YXJkRGVsZXRlS2V5LCBlbXB0eVN0cmluZygpLCBvcHRpb25zLCBncmFudWxhcml0eSktPmFw
cGx5KCk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJl
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBGcmFt
ZSogZnJhbWUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRG9jdW1l
bnQmIGRvY3VtZW50KQogewotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgVmlzaWJsZVNlbGVjdGlv
biBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIGlmIChjdXJyZW50U2VsZWN0aW9uID09IHR5cGluZ0NvbW1hbmQt
PmVuZGluZ1NlbGVjdGlvbigpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyNywzMSArMjIyLDI1
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3Vy
cmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9ucyBvcHRp
b25zLCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uKQogewotICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIGlmICghdGV4
dC5pc0VtcHR5KCkpCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29y
ZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKKyAgICAgICAg
ZG9jdW1lbnQuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmco
aXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CiAgICAgCi0gICAgaW5zZXJ0VGV4dChkb2N1bWVu
dCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3Np
dGlvbik7CisgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBvc2l0aW9uKTsKIH0KIAogLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBuZWVkIHRvIHRha2Ugc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLiBJdCBzaG91bGQg
YmUgaWRlbnRpY2FsIHRvIEZyYW1lU2VsZWN0aW9uJ3MgY3VycmVudCBzZWxlY3Rpb24uCiB2b2lk
IFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2VydGlvbiwg
T3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsK
LSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQo
ZnJhbWUpOwotCiAgICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0ICh0
ZXh0ICVzKSIsIHRleHQudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAKICAgICBTdHJpbmcgbmV3VGV4dCA9IGRpc3BhdGNoQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQodGV4dCwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjb21wb3NpdGlvblR5cGUgPT0g
VGV4dENvbXBvc2l0aW9uUGVuZGluZyk7CiAgICAgCiAgICAgLy8gU2V0IHRoZSBzdGFydGluZyBh
bmQgZW5kaW5nIHNlbGVjdGlvbiBhcHByb3ByaWF0ZWx5IGlmIHdlIGFyZSB1c2luZyBhIHNlbGVj
dGlvbgogICAgIC8vIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0aW9u
LiAgSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGNoYW5nZSBFZGl0Q29tbWFuZAogICAgIC8vIHRv
IGRlYWwgd2l0aCBjdXN0b20gc2VsZWN0aW9ucyBpbiBhIGdlbmVyYWwgd2F5IHRoYXQgY2FuIGJl
IHVzZWQgYnkgYWxsIG9mIHRoZSBjb21tYW5kcy4KLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5
cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQp
KSB7CiAgICAgICAgIGlmIChsYXN0VHlwaW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkgIT0g
c2VsZWN0aW9uRm9ySW5zZXJ0aW9uKSB7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICAgICAgICAg
IGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0
aW9uKTsKQEAgLTI2NiwxMiArMjU1LDEyIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4
dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzCiAgICAg
fQogCiAgICAgYXV0byBjbWQgPSBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEluc2Vy
dFRleHQsIG5ld1RleHQsIG9wdGlvbnMsIGNvbXBvc2l0aW9uVHlwZSk7Ci0gICAgYXBwbHlUZXh0
SW5zZXJ0aW9uQ29tbWFuZChmcmFtZS5nZXQoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNl
cnRpb24sIGN1cnJlbnRTZWxlY3Rpb24pOworICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQo
ZG9jdW1lbnQuZnJhbWUoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJl
bnRTZWxlY3Rpb24pOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhE
b2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElz
QXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwog
ICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25J
bmRpY2F0b3Iob3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTI4
NCw3ICsyNzMsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVu
dCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQog
ewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgewor
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihmYWxzZSk7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3Rl
ZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCk7CkBAIC0yOTYsNyArMjg1LDcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQo
RG9jdW1lbnQmIGRvY3VtZW50KQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvcihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBp
ZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0Nv
bW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAo
UmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1h
bmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0Nv
bW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwog
ICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3Np
dGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0
b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yKTsKQEAgLTMwNyw5ICsyOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucwogICAgIFR5
cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yLCBl
bXB0eVN0cmluZygpLCBvcHRpb25zKS0+YXBwbHkoKTsKIH0KIAotUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
RnJhbWUmIGZyYW1lKQorUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50KQogewot
ICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0gZnJhbWUu
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21t
YW5kPiBsYXN0RWRpdENvbW1hbmQgPSBkb2N1bWVudC5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQo
KTsKICAgICBpZiAoIWxhc3RFZGl0Q29tbWFuZCB8fCAhbGFzdEVkaXRDb21tYW5kLT5pc1R5cGlu
Z0NvbW1hbmQoKSB8fCAhc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFu
ZC5nZXQoKSktPmlzT3BlbkZvck1vcmVUeXBpbmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTMyMSwxNiArMzEwLDE2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6c2hvdWxkRGVmZXJX
aWxsQXBwbHlDb21tYW5kVW50aWxBZGRpbmdUeXBpbmdDb21tYW5kKCkgY29uc3QKICAgICByZXR1
cm4gIW1faXNIYW5kbGluZ0luaXRpYWxUeXBpbmdDb21tYW5kIHx8IGVkaXRBY3Rpb25Jc0RlbGV0
ZUJ5VHlwaW5nKGVkaXRpbmdBY3Rpb24oKSk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xv
c2VUeXBpbmcoRnJhbWUqIGZyYW1lKQordm9pZCBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhE
b2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZy
YW1lKSkKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0g
bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpCiAgICAgICAg
IGxhc3RUeXBpbmdDb21tYW5kLT5jbG9zZVR5cGluZygpOwogfQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLXZvaWQgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3Vy
cmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxh
c3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQogewot
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldEVuZGluZ1NlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uT25MYXN0SW5zZXJ0Q29tbWFuZChuZXdTZWxlY3Rpb24p
OwogICAgIH0KQEAgLTQzNiwxOSArNDI1LDE3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGlkQXBw
bHlDb21tYW5kKCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKLQogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWZyYW1lLmVkaXRv
cigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1l
LmVkaXRvcigpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAg
JiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAg
ICAgICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxl
ZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgp
LmVkaXRvcigpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkK
KyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1l
bnRFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1lLmVkaXRvcigp
LmlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpKQorICAgIGlmIChkb2N1bWVudCgpLmVkaXRv
cigpLmlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpKQogICAgICAgICByZXR1cm47CiAjZWxz
ZQotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgLy8gVGFrZSBhIGxv
b2sgYXQgdGhlIHNlbGVjdGlvbiB0aGF0IHJlc3VsdHMgYWZ0ZXIgdHlwaW5nIGFuZCBkZXRlcm1p
bmUgd2hldGhlciB3ZSBuZWVkIHRvIHNwZWxsY2hlY2suIApAQCAtNDY2LDkgKzQ1Myw5IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21t
YW5kIGNvbW1hbmRUeXBlKQogICAgICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3Jk
OwogICAgICAgICAgICAgaWYgKHJhbmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5k
OjpJbnNlcnRUZXh0IHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVC
cmVhayB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3IgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KSkKICAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3Vz
V29yZCA9IHBsYWluVGV4dCgqcmFuZ2UpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAg
ZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRp
bmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkp
OwogICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2Vy
dFRleHQpCi0gICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4dFVJ
VGltZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2
ZVRleHRVSVRpbWVyKCk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oY29tbWFuZFR5cGUp
OwogICAgICAgICAvLyBJZiB0aGlzIGJ1ZyBnZXRzIGZpeGVkLCB0aGlzIFBMQVRGT1JNKElPU19G
QU1JTFkpIGNvZGUgY291bGQgYmUgcmVtb3ZlZDoKQEAgLTQ4Myw3ICs0NzAsNyBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBj
b21tYW5kVHlwZSkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQocHJl
dmlvdXMsIHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFy
dE9mV29yZChzdGFydCwgc3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikKLSAg
ICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCku
ZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxl
Y3Rpb24oKSwgZmFsc2UpOwogI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIH0K
IH0KQEAgLTQ5NywyNiArNDg0LDI2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGlu
Z1RvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIFRleHRHCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgaWYgKCFyYW5nZSB8fCBpc0VkaXRpbmdUZXh0QXJlYU9yVGV4
dElucHV0KCkpCi0gICAgICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRp
bmcoKnRoaXMsIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygp
KTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygq
dGhpcywgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOwog
Ci0gICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgeyAx
LCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpyYW5nZSkgfSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCku
ZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRl
KCpyYW5nZSkgfSk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5D
b21tYW5kKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpCiB7Ci0gICAg
RnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rv
cihkb2N1bWVudCgpLmZyYW1lKCkpOwogCiAgICAgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUo
Y29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBm
cmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0
b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAgICAgLy8gU2luY2UgdGhlIHNwZWxsY2hlY2tp
bmcgY29kZSBtYXkgYWxzbyBwZXJmb3JtIGNvcnJlY3Rpb25zIGFuZCBvdGhlciByZXBsYWNlbWVu
dHMsIGl0IHNob3VsZCBoYXBwZW4gYWZ0ZXIgdGhlIHR5cGluZyBjaGFuZ2VzLgogICAgIGlmICgh
bV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZykKICAgICAgICAgbWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAvLyBUaGUg
b2xkIHNwZWxsY2hlY2tpbmcgY29kZSByZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRvbmUgZmly
c3QsIHRvIHByZXZlbnQgaXNzdWVzIGxpa2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8ZG9lc24n
dD4gaXMgbWFya2VkIGFzIG1pc3NwZWxsZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwotICAgIGZyYW1lLmVkaXRvcigpLmFwcGxp
ZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5n
KCp0aGlzKTsKICNlbmRpZgogfQogCkBAIC01MzUsOSArNTIyLDkgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eShjb25zdCBTdHJpbmcgJnRleHQs
IGJvb2wgc2UKIHsKICAgICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQgJXAgaW5zZXJ0VGV4
dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkgKHRleHQgJXMsIHNlbGVjdEluc2VydGVkVGV4dCAlZCki
LCB0aGlzLCB0ZXh0LnV0ZjgoKS5kYXRhKCksIHNlbGVjdEluc2VydGVkVGV4dCk7CiAKLSAgICBB
Y2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4
dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRUZXh0KHRl
eHQsIHNlbGVjdEluc2VydGVkVGV4dCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhU
ZXh0RWRpdFR5cGVUeXBpbmcsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCB0ZXh0
LCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigp
LT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7
CiB9CiAKQEAgLTU1MCw5ICs1MzcsNiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRS
dW5XaXRob3V0TmV3bGluZXMoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAogICAgICAg
ICBtX2NvbXBvc2l0aW9uVHlwZSA9PSBUZXh0Q29tcG9zaXRpb25Ob25lID8gSW5zZXJ0VGV4dENv
bW1hbmQ6OlJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzIDogSW5zZXJ0VGV4
dENvbW1hbmQ6OlJlYmFsYW5jZUFsbFdoaXRlc3BhY2VzLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNl
cnRUZXh0KTsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCks
IGVuZGluZ1NlbGVjdGlvbigpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVu
Q29tbWFuZChJbnNlcnRUZXh0KTsKIH0KIApAQCAtNTY1LDE3ICs1NDksMTQgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUoZG9jdW1l
bnQoKSkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJh
bWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2Vy
dExpbmVCcmVhayk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrQW5k
Tm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCBy
ZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNz
aWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0TGluZUJyZWFrKCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZp
Y2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBl
VHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBj
b21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxh
Y2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTU4OCwxNyArNTY5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3Jl
YXRlKGRvY3VtZW50KCksIGZhbHNlLCBmYWxzZSwgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0UGFy
YWdyYXBoKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3IoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGlu
ZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRU
ZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRl
ZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNjE1LDE3
ICs1OTMsMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnQoKQogICAgIH0KICAgICAgICAgCiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
ZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBh
cmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQog
ewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVw
bGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwotICAgIHJlcGxhY2VkVGV4dC5w
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVj
dENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlm
aWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlw
ZVR5cGluZywgIlxuIiwgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAg
Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBs
YWNlZFJhbmdlKCkpOwogfQogCkBAIC02NTIsMTAgKzYyNyw5IEBAIGJvb2wgVHlwaW5nQ29tbWFu
ZDo6bWFrZUVkaXRhYmxlUm9vdEVtcHR5KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVL
ZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGRUb0tp
bGxSaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IoZnJhbWUpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKGRvY3Vt
ZW50KCkuZnJhbWUoKSk7CiAKLSAgICBmcmFtZS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29y
ZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS51cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAKICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvblRvRGVsZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uQWZ0ZXJVbmRvOwpAQCAtNzQ4LDIwICs3MjIsMjAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRB
ZGQKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0
aGlzIGJ1ZzoKICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ2NTM3NTU+IFVJS2l0IHRleHQg
d2lkZ2V0cyBzaG91bGQgdXNlIFdlYktpdCBlZGl0aW5nIEFQSSB0byBtYW5pcHVsYXRlIHRleHQK
LSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKLSAgICAgICAgY2xvc2VUeXBpbmcoJmZyYW1lKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBjbG9zZVR5
cGluZyhkb2N1bWVudCgpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigp
LnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYgKHNlbGVj
dGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRE
ZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFy
aXR5LCB7IH0sIHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3Io
KS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7Cisg
ICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25U
b0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0
aW9uTW9kZTo6UHJlcGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBu
b3RpZmljYXRpb24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNl
bGVjdGlvblRvRGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUy
LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3
YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hv
dWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3Rl
Y3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRp
dG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAgLTg1NSwxMyArODI4LDEzIEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBib29sIHNoCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fy
b3VuZCBmb3IgdGhpcyBidWc6CiAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBV
SUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxkIHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1
bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNsb3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAg
ICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5z
ZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAg
IGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRl
S2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQpA
QCAtODcxLDcgKzg0NCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAog
ICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRS
YW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2Rl
OjpBcHBlbmRUZXh0KTsKICAgICAvLyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQK
ICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21h
cnREZWxldGUsIC8qIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8g
ZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAppbmRleCA3NmU1Zjk5YmY5MjUz
ODU3NWNhYTM4NzZiYjliNmI1NTRiOWZiNzVjLi44OTZiZjBiZDE1ZGJlM2Q0ODE4NDg5NWY2NDNm
MWM4NjlkNThlYjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaApAQCAt
NjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERv
Y3VtZW50JiwgT3B0aW9ucyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yKERvY3VtZW50JiwgT3B0aW9ucyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgY2xv
c2VUeXBpbmcoRnJhbWUqKTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhEb2N1bWVudCYp
OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVk
aXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRD
b21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1lbnQmLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAjZW5kaWYKIAogICAgIHZvaWQgaW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKQEAgLTEwMyw3ICsx
MDMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNPcGVuRm9yTW9yZVR5cGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fb3BlbkZvck1vcmVUeXBpbmc7IH0KICAgICB2b2lkIGNsb3NlVHlwaW5nKCkgeyBt
X29wZW5Gb3JNb3JlVHlwaW5nID0gZmFsc2U7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhGcmFtZSYpOwor
ICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZyhEb2N1bWVudCYpOwogCiAgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAg
ICAgYm9vbCBpc1R5cGluZ0NvbW1hbmQoKSBjb25zdCBmaW5hbDsKQEAgLTEyMiw3ICsxMjIsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGlucHV0RXZlbnREYXRhVHJhbnNm
ZXIoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzQmVmb3JlSW5wdXRFdmVudENhbmNlbGFibGUo
KSBjb25zdCBmaW5hbDsKIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVy
ZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCosIEZyYW1lKik7CisgICAgc3Rh
dGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihU
eXBpbmdDb21tYW5kKiwgRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgdXBkYXRlUHJlc2VydmVzVHlw
aW5nU3R5bGUoRVR5cGluZ0NvbW1hbmQpOwogICAgIGJvb2wgd2lsbEFkZFR5cGluZ1RvT3BlbkNv
bW1hbmQoRVR5cGluZ0NvbW1hbmQsIFRleHRHcmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiA9IGVt
cHR5U3RyaW5nKCksIFJlZlB0cjxSYW5nZT4mJiA9IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IGYyYTJkNTJhYzVhYmY0ZTRmMTMxMTNjYTI1ZDFi
MjBhMTczOGZhNjkuLjUzODQ5YjRlYWUxODg4YzJmZDk0OGNjMjg2MjY5NzZlNzQxYmZmMzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTM4OSw3ICszODksNyBA
QCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBFbGVtZW50JiBlbGVtZW50KQogLy8gaGF2ZSBhIHN0YWxlIHNlbGVjdGlvbi4KIHZvaWQgRWRp
dG9yOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9y
ZVR5cGluZygpCiB7Ci0gICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFz
Q3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoJm1fZnJhbWUsIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKG1fZG9jdW1lbnQs
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBjNzE2ZDcy
ODBmNDYyY2I1NjczNzU3YjRiYTRlM2IyNGFiZWU4ZGUwLi5hMjY3MzQ1YmU1NDZlZTdmNDYxMTlk
ODMyYzhkZTE5MTZhOGFlY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
QEAgLTU0MSwxMSArNTQxLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogdm9pZCBGcmFt
ZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCgpCiB7CiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgd2hlbiBhIGZyYW1lIGlzIHN0aWxsIGZ1bGx5IGluIHBsYWNlIChub3Qg
Y2FjaGVkLCBub3QgZGV0YWNoZWQpLCBidXQgd2lsbCBiZSByZXBsYWNlZC4KKyAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24o
KSkgeworICAgIGlmIChkb2N1bWVudC0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAg
ICAgICAvLyBUaGUgdGV4dCB3YXMgYWxyZWFkeSBwcmVzZW50IGluIERPTSwgc28gaXQncyBiZXR0
ZXIgdG8gY29uZmlybSB0aGFuIHRvIGNhbmNlbCB0aGUgY29tcG9zaXRpb24uCi0gICAgICAgIG1f
ZnJhbWUuZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChFZGl0b3JD
bGllbnQqIGVkaXRvckNsaWVudCA9IG1fZnJhbWUuZWRpdG9yKCkuY2xpZW50KCkpIHsKKyAgICAg
ICAgZG9jdW1lbnQtPmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOworICAgICAgICBpZiAo
RWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQgPSBkb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkp
IHsKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigm
bV9mcmFtZSk7CiAgICAgICAgICAgICBlZGl0b3JDbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9u
KCZtX2ZyYW1lKTsKICAgICAgICAgfQpAQCAtNTY3LDggKzU3MCw2IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNsb3NlVVJMKCkKICAgICB9CiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGlj
eSk7Ci0gICAgCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygp
OwogfQogCiBib29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKCkKQEAgLTU4MCw3ICs1ODEsNiBA
QCBib29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKCkKICAgICB9CiAKICAgICBtX2ZyYW1lLm5h
dmlnYXRpb25TY2hlZHVsZXIoKS5jYW5jZWwoKTsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFy
TGFzdEVkaXRDb21tYW5kKCk7CiAKICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICBtX2Rp
ZENhbGxJbXBsaWNpdENsb3NlID0gZmFsc2U7CkBAIC02NDMsOCArNjQzLDYgQEAgc3RhdGljIGlu
bGluZSBib29sIHNob3VsZENsZWFyV2luZG93TmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0
IERvY3VtZW50JiBuZXcKIAogdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0Rv
Y3VtZW50LCBib29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVj
dHMsIGJvb2wgY2xlYXJGcmFtZVZpZXcsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZURP
TVdpbmRvd0NyZWF0aW9uKQogewotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXIoKTsKLQogICAg
IGJvb2wgbmVlZGVkQ2xlYXIgPSBtX25lZWRzQ2xlYXI7CiAgICAgbV9uZWVkc0NsZWFyID0gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMzg1ZTM3YTZkMGM5MGU2MzNhM2I3YjQyODcy
YzYxNmUzODA4NjQyNi4uMjkwN2I0ODViOTRjNjZhYzUwNjg1Yzk5ZGMxNWRkNWVlZWZmY2QwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFn
ZSYgcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxG
cmFtZUxvYQogICAgICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdh
dGlvblNjaGVkdWxlcj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50
KQogICAgICwgbV9zY3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykp
Ci0gICAgLCBtX2VkaXRvcihtYWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9z
ZWxlY3Rpb24obWFrZVVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigq
dGhpcykpCiAgICAgLCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMp
KQogICAgICwgbV90ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAg
LTU1NCw3ICs1NTIsNyBAQCBib29sIEZyYW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAg
IGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6OkRlbmllZDoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6Ok5vdFJlcXVlc3RlZFlldDogewotICAg
ICAgICBhdXRvKiBjbGllbnQgPSBtX2VkaXRvci0+Y2xpZW50KCk7CisgICAgICAgIGF1dG8qIGNs
aWVudCA9IGVkaXRvcigpLmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTM3LDcgKzkzNSw3IEBAIHZvaWQgRnJhbWU6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29t
RmFjdG9yCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lZGl0
b3ItPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICAgICAvLyBSZXNwZWN0IFNWR3Mgem9v
bUFuZFBhbj0iZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4K
ICAgICAvLyBGSVhNRTogSG93IHRvIGhhbmRsZSBjb21wb3VuZCBkb2N1bWVudHMgKyB6b29tQW5k
UGFuPSJkaXNhYmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5o
CmluZGV4IDNkNDNhOTRiZWE5NTU2Yzk4ZGM3NDIzYWI3ZWFkOWE5MmE1MmM2ZmUuLjA5MzJhODNj
YjY3NGY2ZjhjOTYxMWVkOWY2OTk5ZDE3YjYyZDE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1
c3RWaWV3U2l6ZU9yTm90LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJQYWdlSWRl
bnRpZmllci5oIgpAQCAtMTYzLDE0ICsxNjQsMTQgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBk
b2N1bWVudCgpIGNvbnN0OwogICAgIEZyYW1lVmlldyogdmlldygpIGNvbnN0OwogCi0gICAgRWRp
dG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQotICAgIGNvbnN0IEVkaXRvciYgZWRp
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBFZGl0b3ImIGVkaXRvcigpIHsg
cmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3Io
KSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQogICAgIEV2ZW50SGFuZGxl
ciYgZXZlbnRIYW5kbGVyKCkgeyByZXR1cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBjb25zdCBF
dmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVy
OyB9CiAgICAgRnJhbWVMb2FkZXImIGxvYWRlcigpIGNvbnN0OwogICAgIE5hdmlnYXRpb25TY2hl
ZHVsZXImIG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsKLSAgICBGcmFtZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KLSAgICBjb25zdCBGcmFtZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBGcmFt
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7
IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
ZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsK
ICAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1h
dGlvbkNvbnRyb2xsZXI7IH0KICAgICBjb25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmlt
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4
ICszMzksNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBV
bmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRv
cj4gbV9lZGl0b3I7Ci0gICAgVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsK
ICAgICBVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9s
bGVyOwogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUw
ZS4uM2VlZTQyZmYwY2QxZTczY2YwMWIyOTVlOThkMjg1NGU5YmI3Y2ZkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC02OCwyMSArNjgsMTYgQEAgUmVmPFRleHRJbmRp
Y2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0
YSkKIAogUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5n
ZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25zIG9wdGlvbnMsIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZs
b2F0U2l6ZSBtYXJnaW4pCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmFuZ2Uuc3RhcnRDb250YWlu
ZXIoKS5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKIAotICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsK
LQotICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1l
bnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgdGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3Vz
KTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlv
bnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7
CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwgeyBTaW1wbGVSYW5nZSB7IHJhbmdl
IH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlIHNlbGVjdGlvbkNoYW5nZShkb2N1bWVudCwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0g
fSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBk
YXRhOwogCkBAIC05MSw3ICs4Niw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAKICAgICBi
b29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9s
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIAotICAgIGlmICghaW5pdGlh
bGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJl
bnRTZWxlY3Rpb24pKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZG9jdW1l
bnQtPmZyYW1lKCksIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVh
dGUoZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397042</attachid>
            <date>2020-04-20 17:39:14 -0700</date>
            <delta_ts>2020-04-20 19:54:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200420173913.patch</filename>
            <type>text/plain</type>
            <size>199835</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2
ZDA2MTE2ZWQ2Zjg5ZmFiOTBhM2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0
ZmQwMGUxNWI4OGQ3MjJlOTVhOTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4
NmExYjFlMWY1NDIxYmRiNzg2YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRU
aW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
IGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZvbnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFz
cyBGcmFtZTsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
RnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsx
NTc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21D
b250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVk
aXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBj
b25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFj
ZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5z
aWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3Mg
PSAwKTsKQEAgLTIxMTYsNiArMjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmll
ZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2Iz
YWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdk
MDBiYmYxMjBjMDM3OWVmMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJv
b2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAo
Y3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNz
cGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAt
MjIwLDEyICsyMjAsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50
Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0y
MzYsMTIgKzIzNiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2Vs
ZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAs
IHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJh
Z3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7
CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0
LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdn
ZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAo
IXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcg
PSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIg
bW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywg
d2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29y
cmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8g
dW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVs
IHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYg
KGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3Jp
Z2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29t
bWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRp
dG9yQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdl
KCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdl
KCkgPyAmbV9kb2N1bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAog
VGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChl
bmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OwogICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Up
OwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00
NzksMTIgKzQ3OSwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VyQ29udHJvbGxlciA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250
cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxh
Y2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUCiAKICAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICgh
c2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBl
bmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NTgsNyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAog
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5h
dGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUu
cGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgp
LT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0
aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5
NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9
IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
dHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRl
ZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldElu
UGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAg
Ym9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAg
ICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAg
dGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9j
dW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0g
VGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwpAQCAtNjUzLDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1
dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZi
MjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3
OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3Mg
RWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9
KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19F
TkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZl
VGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVT
U19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3
ZDFiOTY1MjQ2NDIwZDExODI2NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwx
NyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRo
ZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFz
IGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhp
cyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQg
dGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3Io
KS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFw
cGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAg
ICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51
bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246
OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndp
bGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsK
IAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigp
LndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0
byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
IC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhl
cmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
LCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBk
ZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgp
KTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
KyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVu
ZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1w
dHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBo
IHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBh
cmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUz
YzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4
NzJhY2I4OGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5n
IHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBw
cmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQw
LDcgKzc0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVS
ZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQu
cHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2ls
bCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgp
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0
VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAg
aWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBm
cmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIg
bWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxh
Y2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICgh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAg
ICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyAr
OTU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUy
Y2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUy
YjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9u
KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5k
OjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJu
ICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0
aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4
LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5k
Ojppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
OwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3
ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRl
eCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJj
OGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9u
KTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1h
bmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAg
IEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAg
IEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJl
ZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJj
Y2QwNTk1MzU1NWFhMjJiMjZmZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTg2OSw3ICs4NjksNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkK
IAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRv
cigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQz
MTZhNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAg
ICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpk
b2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJm
NjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLmJiMTI5NmU0Y2I5NmZhN2ExZTc2NmQwMmJhZTg3
MjdhNzllMjA2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMs
OCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1
YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHko
Y29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0
aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBF
ZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29t
cG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1l
bnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJl
ZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRv
IGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkp
OwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
ICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lk
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJh
bWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxl
Y3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9u
PiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFt
ZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkp
CisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9w
dGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMp
Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9u
VG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2Vs
ZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAg
ICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxT
ZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNl
bGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNl
bGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBk
YXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBk
YXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNl
bmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAg
ICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05v
dFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwg
b3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQg
dGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNl
IHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlv
bi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAg
Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVu
dCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNr
IHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9y
IEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3Io
bV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgp
KTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAog
ZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRp
YyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBD
bGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQo
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9y
ZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBj
b25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBh
c3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRl
KCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0
b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0Fj
dGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1
bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxl
dGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJp
dHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wg
c21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFj
dGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4
dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRS
ZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODks
MTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9M
b2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgp
KTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAg
ICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRl
eHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRC
eVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKQEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
b3B5KCkKIHsgICAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBF
ZGl0b3I6OnRyeURIVE1MQ29weSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNw
YXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJv
YXJkRXZlbnRLaW5kOjpDdXQpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewot
ICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElu
cHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkK
KyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRT
dXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAg
LTc4MiwxNyArNzgyLDE3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBp
ZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxMiwxMiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0
aW9uKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFn
KTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSwgdWxUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2Rl
ID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAg
LTgyNywxMiArODI3LDEyIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlz
dFN0YXRlKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIG9sVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04NzIsNyArODcyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlz
dCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7
Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4g
bmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBA
IFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkKIAogdm9pZCBFZGl0b3I6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRU
YXJnZXRGcm9tKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBm
aW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
fQogCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0
aW5nU3R5bGVBbmRBY3Rpb24oKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFt
ZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNs
aWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRj
aElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0K
QEAgLTk4NCwxMyArOTg1LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5w
dXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlu
cHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZv
cmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0
IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNv
bHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0
cigpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5n
QWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rp
b25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNT
dHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+
dHJpU3RhdGVPZlN0eWxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZT
dHlsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAogICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZj
b21tYW5kKTsKIAogICAgICAgICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAg
ICAgICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkg
aW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQo
KSA9PSAmY29tbWFuZCkKQEAgLTEyMDAsMTYgKzEyMDEsMTggQEAgdm9pZCBFZGl0b3I6OnJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9y
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1
bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFt
ZSgqZG9jdW1lbnQuZnJhbWUoKSkKICAgICAsIG1fa2lsbFJpbmcobWFrZVVuaXF1ZTxQQUw6Oktp
bGxSaW5nPigpKQotICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+
KGZyYW1lKSkKLSAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5pcXVlPEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGZyYW1lKSkKKyAgICAsIG1fc3BlbGxDaGVja2VyKG1h
a2VVbmlxdWU8U3BlbGxDaGVja2VyPihkb2N1bWVudCkpCisgICAgLCBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPihkb2N1bWVu
dCkpCiAgICAgLCBtX2VkaXRvclVJVXBkYXRlVGltZXIoKnRoaXMsICZFZGl0b3I6OmVkaXRvclVJ
VXBkYXRlVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04p
ICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICwgbV90ZWxlcGhvbmVOdW1iZXJEZXRlY3Rp
b25VcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51
bWJlcnMpCiAjZW5kaWYKIHsKKwogfQogCiBFZGl0b3I6On5FZGl0b3IoKSA9IGRlZmF1bHQ7CkBA
IC0xMjIwLDcgKzEyMjMsNyBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogICAgIGlmIChtX2NvbXBv
c2l0aW9uTm9kZSkgewogICAgICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChFZGl0b3JDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNsaWVudCgpKQotICAgICAgICAg
ICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CisgICAgICAgICAgICBj
bGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgfQog
ICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21D
b21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKQEAgLTEyMzgsMTIgKzEyNDEsMTIgQEAgdm9p
ZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRU
eXBlKQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1
dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKKyAgICByZXR1cm4gbV9k
b2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0
LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlwZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRU
ZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIHJl
dHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAs
IFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVu
dElucHV0Q29tcG9zaXRpb24pOwogfQogCiBib29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYg
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAtMTMwMywx
MCArMTMwNiw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgICAgICAgICAvLyB0aGVu
IHRoaXMgY29kZSBzaG91bGQgY29uZGl0aW9uYWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlvbiBvbiB3
aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgYml0CiAgICAgICAgICAgICAvLyBp
cyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1c2VkIGZyYW1lLgogICAgICAgICAgICAgaWYgKGNsaWVu
dCgpICYmIGNsaWVudCgpLT5zaG91bGRSZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRp
b24oKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZWRpdGVk
RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJl
bnRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5y
ZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMzE5LDEwICsxMzIwLDEwIEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQog
ICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZElu
c2VydFRleHQoIlxuIiwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgYm9vbCBh
bGlnblRvRWRnZSA9IGlzRW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNhcmV0KTsK
ICAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwog
ICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhkb2N1bWVudCgpLCBhdXRvY29ycmVj
dGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yIDogMCk7CkBAIC0xMzM5LDEwICsxMzQwLDEwIEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1
cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwg
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBWaXNpYmxlUG9zaXRp
b24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
OworICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgYm9vbCBhbGlnblRvRWRnZSA9IGlzRW5kT2ZF
ZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNhcmV0KTsKICAgICBib29sIGF1dG9jb3JyZWN0
aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3Jy
ZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcihkb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGll
ZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CkBA
IC0xNDA2LDcgKzE0MDcsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JB
Y3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyh0cnVlKTsKICAgICB9CiAKLSAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgaWYg
KGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCkpKQogICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUo
KS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCksIGNhblNtYXJ0
Q29weU9yRGVsZXRlKCkgPyBQYXN0ZWJvYXJkOjpDYW5TbWFydFJlcGxhY2UgOiBQYXN0ZWJvYXJk
OjpDYW5ub3RTbWFydFJlcGxhY2UpOwogICAgIGVsc2UgewogICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZUVsZW1lbnQgPSBudWxscHRyOwpAQCAtMTQyNSw3ICsxNDI2LDcgQEAgdm9pZCBF
ZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAg
ICAgICAgICAgIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgLy8gRklYTUU6IERlbGV0ZSBh
ZnRlciA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAgICAgUGFz
dGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rp
b24sIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUsIEluY2x1ZGVJbWFnZUFsdFRleHRG
b3JEYXRhVHJhbnNmZXIpOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRl
KCksICptX2RvY3VtZW50LmZyYW1lKCksIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNm
ZXIpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CkBAIC0xNDM0LDEwICsxNDM1LDEwIEBAIHZv
aWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24p
CiAgICAgaWYgKGFjdGlvbiA9PSBDdXRBY3Rpb24pIHsKICAgICAgICAgU3RyaW5nIHRleHQ7CiAg
ICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAg
ICAgICAgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlv
blJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBkZWxldGVTZWxlY3Rp
b25XaXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgRWRpdEFjdGlvbjo6Q3V0
KTsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0g
ICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgcG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dCh0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTE0NTQsNyArMTQ1NSw3IEBAIHZvaWQgRWRpdG9y
OjpwYXN0ZShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAgICAgICByZXR1cm47CiAgICAgdXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIFJlc291cmNl
Q2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgp
LmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAg
ICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQ
bGFpblRleHQgfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3Rl
Ym9hcmQocGFzdGVib2FyZCk7CkBAIC0xNDc5LDcgKzE0ODAsNyBAQCB2b2lkIEVkaXRvcjo6cGFz
dGVBc1F1b3RhdGlvbigpCiAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoZmFsc2UpOwogICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0
aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgIGF1
dG8gcGFzdGVib2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZChwYXN0ZWJv
YXJkLmdldCgpLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCwgUGFzdGVPcHRpb246OkFz
UXVvdGF0aW9uIH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKCpwYXN0ZWJvYXJkKTsKQEAgLTE2MTcsNyArMTYxOCw3IEBAIHZvaWQgRWRpdG9yOjpy
ZW5kZXJMYXllckRpZFNjcm9sbChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKG1f
aW1hZ2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCkpOwor
ICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCkpOwogICAgIGlmICghc3RhcnRD
b250YWluZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg1MSw4ICsxODUyLDggQEAgdm9pZCBF
ZGl0b3I6OnRvZ2dsZVVuZGVybGluZSgpCiB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJl
Y3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudmlzaWJsZVN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKSAmJiAKLSAgICAgICAgYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25T
dGFydCgpID09IGRpcmVjdGlvbikKKyAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKQorICAgICAgICAmJiBiYXNlV3JpdGluZ0Rp
cmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAjZW5kaWYKICAgICAgICAgCkBAIC0xODgyLDcgKzE4ODMsNyBAQCBXcml0aW5nRGlyZWN0aW9u
IEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7
CiAgICAgYXV0byByZXN1bHQgPSBXcml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9SaWdodDsKIAotICAg
IFBvc2l0aW9uIHBvcyA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwb3MgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CiAg
ICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5MTcsNyArMTkxOCw3IEBAIHZvaWQgRWRpdG9yOjpz
ZWxlY3RDb21wb3NpdGlvbigpCiAgICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTc4MT4KICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAg
ICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
cmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHNlbGVjdGlvbiwgeyB9KTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihzZWxlY3Rpb24sIHsgfSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRp
b24oKQpAQCAtMTk1MiwyOCArMTk1MywyOCBAQCB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCkKIAogY2xhc3MgU2V0Q29tcG9zaXRpb25TY29wZSB7CiBw
dWJsaWM6Ci0gICAgU2V0Q29tcG9zaXRpb25TY29wZShGcmFtZSYgZnJhbWUpCi0gICAgICAgIDog
bV9mcmFtZShmcmFtZSkKLSAgICAgICAgLCBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3IoZnJhbWUp
CisgICAgU2V0Q29tcG9zaXRpb25TY29wZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgICAgIDog
bV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50KSkKKyAgICAgICAgLCBtX3R5cGluZ0dlc3R1cmVJ
bmRpY2F0b3IoKmRvY3VtZW50LmZyYW1lKCkpCiAgICAgewotICAgICAgICBtX2ZyYW1lLT5lZGl0
b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOworICAgICAgICBtX2RvY3VtZW50
LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwogICAgIH0KIAogICAg
IH5TZXRDb21wb3NpdGlvblNjb3BlKCkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigp
LnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwotICAgICAgICBpZiAoYXV0byogZWRp
dG9yQ2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIG1fZG9jdW1l
bnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOworICAgICAgICBp
ZiAoYXV0byogZWRpdG9yQ2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAg
ICAgICAgICAgICBlZGl0b3JDbGllbnQtPmRpZFVwZGF0ZUNvbXBvc2l0aW9uKCk7CiAgICAgfQog
Ci0gICAgUmVmPEZyYW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVu
dDsKICAgICBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvciBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0
b3I7CiB9OwogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0
LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobW9kZSA9PSBDb25maXJt
Q29tcG9zaXRpb24gfHwgbW9kZSA9PSBDYW5jZWxDb21wb3NpdGlvbik7Ci0gICAgU2V0Q29tcG9z
aXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZnJhbWUpOworICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2RvY3VtZW50KTsKIAogICAgIGlmIChtb2Rl
ID09IENhbmNlbENvbXBvc2l0aW9uKQogICAgICAgICBBU1NFUlQodGV4dCA9PSBlbXB0eVN0cmlu
ZygpKTsKQEAgLTE5ODQsNyArMTk4NSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihj
b25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogICAgIG1fY3VzdG9t
Q29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhp
Z2hsaWdodHMuY2xlYXIoKTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgp
KQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBBbHdheXMgZGVsZXRlIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGJlZm9y
ZSBpbnNlcnRpbmcgdGhlIGZpbmFsaXplZCBjb21wb3NpdGlvbiB0ZXh0IGlmIHdlJ3JlIGNvbmZp
cm1pbmcgb3VyIGNvbXBvc2l0aW9uLgpAQCAtMjAwMCwxMyArMjAwMSwxMyBAQCB2b2lkIEVkaXRv
cjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUg
bW9kZSkKIAogICAgIGlmIChtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKSB7CiAgICAgICAgIC8v
IEFuIG9wZW4gdHlwaW5nIGNvbW1hbmQgdGhhdCBkaXNhZ3JlZXMgYWJvdXQgY3VycmVudCBzZWxl
Y3Rpb24gd291bGQgY2F1c2UgaXNzdWVzIHdpdGggdHlwaW5nIGxhdGVyIG9uLgotICAgICAgICBU
eXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygmbV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1h
bmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQpOwogICAgIH0KIH0KIAogdm9pZCBFZGl0b3I6OnNl
dENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9u
VW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uSGlnaGxpZ2h0
PiYgaGlnaGxpZ2h0cywgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCkKIHsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9m
cmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9j
dW1lbnQpOwogCiAgICAgLy8gVXBkYXRlcyBzdHlsZXMgYmVmb3JlIHNldHRpbmcgc2VsZWN0aW9u
IGZvciBjb21wb3NpdGlvbiB0byBwcmV2ZW50CiAgICAgLy8gaW5zZXJ0aW5nIHRoZSBwcmV2aW91
cyBjb21wb3NpdGlvbiB0ZXh0IGludG8gdGV4dCBub2RlcyBvZGRseS4KQEAgLTIwMTUsNyArMjAx
Niw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAKICAgICBzZWxlY3RDb21wb3NpdGlvbigp
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBvcmlnaW5hbFRleHQgPSBzZWxlY3RlZFRleHQoKTsKQEAgLTIwMjMsMTAgKzIwMjQsMTAgQEAg
dm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICBpZiAoaXNTdGFydGluZ1RvUmVjb21wb3NlRXhp
c3RpbmdSYW5nZSkgewogICAgICAgICAvLyBXZSBwYXNzIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21w
b3NpdGlvbkZpbmFsIGhlcmUgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgcmVtb3ZpbmcgY29tcG9z
aXRpb24gdGV4dCB0aGF0IGhhcyBiZWVuIGZpbmFsaXplZC4KICAgICAgICAgVHlwaW5nQ29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKGRvY3VtZW50KCksIDAsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21w
b3NpdGlvbkZpbmFsKTsKLSAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKICAgICAgICAgICAgIC8vIElmIGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWQsIHRoZW4gd2UgbmVl
ZCB0byBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBlbmQgc28gdGhhdCB0aGUgb3JpZ2lu
YWwgdGV4dCB3aWxsIG5vdCBiZSByZWNvbXBvc2VkLgotICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBjdXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJyZW50U2Vs
ZWN0aW9uLmVuZCgpIH0pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oeyBjdXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJyZW50U2VsZWN0aW9uLmVuZCgp
IH0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDgyLDggKzIwODMsOCBAQCB2b2lkIEVkaXRv
cjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbgogICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50
KCksIHRleHQsIFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dCB8IFR5cGluZ0NvbW1h
bmQ6OlByZXZlbnRTcGVsbENoZWNraW5nLCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25Q
ZW5kaW5nKTsKIAogICAgICAgICAvLyBGaW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBjb21wb3Np
dGlvbiBub3cuCi0gICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmJhc2UoKS5kb3duc3RyZWFtKCk7Ci0gICAgICAgIFBvc2l0aW9uIGV4dGVudCA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZXh0ZW50KCk7CisgICAgICAgIFBvc2l0
aW9uIGJhc2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2UoKS5kb3du
c3RyZWFtKCk7CisgICAgICAgIFBvc2l0aW9uIGV4dGVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZXh0ZW50KCk7CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5k
ZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBiYXNlT2Zmc2V0ID0gYmFzZS5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICBOb2RlKiBleHRlbnROb2RlID0gZXh0ZW50
LmRlcHJlY2F0ZWROb2RlKCk7CkBAIC0yMTA5LDcgKzIxMTAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25V
bmRlcmxpbgogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0
ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBl
bmQgPSBzdGQ6Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCks
IGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBl
bmQpOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNl
bGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6Tm8pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTIzLDcg
KzIxMjQsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmICghY2xpZW50
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKIApAQCAtMjEzOSw3ICsyMTQwLDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3Bl
bGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJs
ZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNh
bGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFy
b3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRS
YW5nZSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0
ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIApAQCAtMjE1MiwxNCArMjE1Mywx
NSBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAKIHZvaWQgRWRpdG9yOjphZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKIHsKLSAgICBSZWY8
RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7Ci0KKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3Rl
ZERvY3VtZW50KG1fZG9jdW1lbnQpOworICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9m
cmFtZSk7CisgICAgCiAgICAgLy8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0
d28gcGhhc2VzIC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2Ms
IGFuZAogICAgIC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0
byAoYXBwcm94aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBh
dCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAg
U3RhcnRpbmcgYXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hl
Y2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVm
PFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkp
OwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsy
MzEwLDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhp
cyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEg
cGFyYWdyYXBoCiAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3Rl
clJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1t
YXJEZXRhaWwucmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxp
bmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwog
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpA
QCAtMjMyMCw4ICsyMzIyLDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBk
cmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3Nw
ZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwg
eyBtaXNzcGVsbGluZ09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3Bl
bGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJl
dmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAg
CiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1p
c3NwZWxsZWRXb3JkKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1p
c3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIz
MzcsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUq
IGNsaWNrZWROb2RlKSBjb25zdAogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xp
Y2tlZE5vZGUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9u
LmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM5MSw3
IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9v
bCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJf
Q0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNs
aWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hl
bHBlcigqY2xpZW50KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0
MDYsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwog
ICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0Zvcldv
cmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNz
ZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJp
bmcoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAg
cmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyArMjQxNCw3IEBAIFZlY3RvcjxTdHJpbmc+
IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3Bl
bGxlZCwgYm9vCiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxv
d1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9u
LmJhc2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoV29yZEdyYW51bGFyaXR5KTsKQEAgLTI0NzIsNyArMjQ3NCw4IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3Zp
bmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dv
cmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVm
PEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVk
RG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2Zy
YW1lKTsKIAogICAgIGlmIChwbGF0Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTk0LDE5ICsyNTk3LDE5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3Rh
cnQsCiAgICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0
aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KICAgICBpZiAoIWF1dG9jb3JyZWN0ZWRT
dHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KCptaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKTsKLSAgICAgICAgaWYgKG5ld1NlbGVjdGlv
biAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpZiAo
IW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikp
CisgICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
bik7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2ZyYW1lLmVkaXRvcigpLnNo
b3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudC5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChh
dXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6
Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkucmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2Vt
ZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIAogICAgICAg
ICAvLyBSZXNldCB0aGUgY2hhcmV0IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KLSAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5l
bmQoKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJk
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgfQogCiAgICAgaWYgKCFpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKSkKQEAgLTI2NzgsNyArMjY4MSw3IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqIG5vZGUpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjppc1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3IobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKIH0KIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpCkBAIC0yNzI2LDcgKzI3MjksNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAg
IGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ym9vbCBhc3luY2hyb25vdXMgPSBtX2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKKyAgICBib29s
IGFzeW5jaHJvbm91cyA9IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsOwogCiAgICAgLy8g
SW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlvbmFsbHkgY2hlY2sgcGFyYWdyYXBoLXdp
ZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlVGV4
dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0Q2hlY2tpbmdPcHRpb25zKTsKQEAg
LTI3NDEsNyArMjc0NCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgfQogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVkT3B0
aW9ucywgcmVzdWx0cywgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgp
LCByZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNlRm9yKHJlcXVlc3QucmVsZWFzZU5vbk51bGwoKSwg
cmVzdWx0cyk7CiB9CiAKQEAgLTI3ODcsNyArMjc5MCw4IEBAIHN0YXRpYyB2b2lkIGNvcnJlY3RT
cGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQ
YXJhCiAKIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMp
CiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVu
dD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0
ZWRGcmFtZShtX2ZyYW1lKTsKIAogICAgIGF1dG8gdGV4dENoZWNraW5nT3B0aW9ucyA9IHJlcXVl
c3QuZGF0YSgpLmNoZWNraW5nVHlwZXMoKTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFy
YWdyYXBoKHJlcXVlc3QuY2hlY2tpbmdSYW5nZSgpLCByZXF1ZXN0LmF1dG9tYXRpY1JlcGxhY2Vt
ZW50UmFuZ2UoKSwgJnJlcXVlc3QucGFyYWdyYXBoUmFuZ2UoKSk7CkBAIC0yODExLDkgKzI4MTUs
OSBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgIGJvb2wgYWRqdXN0U2VsZWN0aW9uRm9y
UGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZFBlcmZvcm1SZXBs
YWNlbWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwgc2hvdWxkQ2hlY2tGb3JDb3JyZWN0aW9u
KSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgeworICAgICAgICBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0g
VmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVt
cHQgdG8gc2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIg
aWYgbmVlZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0
UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAg
ICAgICAgICAgc2VsZWN0aW9uT2Zmc2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRp
b24pLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFm
dGVyQ2hhbmdlID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25PZmZzZXQgPiAwICYm
IChzZWxlY3Rpb25PZmZzZXQgPiBwYXJhZ3JhcGgudGV4dCgpLmxlbmd0aCgpIHx8IHBhcmFncmFw
aC50ZXh0KClbc2VsZWN0aW9uT2Zmc2V0IC0gMV0gPT0gbmV3bGluZUNoYXJhY3RlcikpCkBAIC0y
ODk1LDEzICsyODk5LDEzIEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBT
cGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9SZXBsYWNlKHJhbmdl
VG9SZXBsYWNlLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub1JlcGxh
Y2UgIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAg
IGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9u
VG9SZXBsYWNlKSkKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBs
YWNlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGU6OkxpbmspIHsKLSAg
ICAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25U
b1JlcGxhY2UpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdl
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKQEAgLTI5MTAs
NyArMjkxNCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENo
ZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAgICAgY29y
cmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKHBhcmFncmFw
aCwgcmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50LCB7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRM
ZW5ndGggfSk7CiAKICAgICAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBk
b2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChFbGVtZW50KiByb290ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiByb290
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihyb290
LCBBWE9iamVjdENhY2hlOjpBWEF1dG9jb3JyZWN0aW9uT2NjdXJlZCk7CiAgICAgICAgICAgICAg
ICAgfQogCkBAIC0yOTQwLDEzICsyOTQ0LDEzIEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFj
ZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAg
ICAgICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7CiAgICAgICAg
IGlmIChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgJiYgc2VsZWN0aW9uT2Zmc2V0IDw9IGV4
dGVuZGVkUGFyYWdyYXBoLnJhbmdlTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIGF1dG8gc2VsZWN0
aW9uUmFuZ2UgPSBleHRlbmRlZFBhcmFncmFwaC5zdWJyYW5nZSh7IDAsIHNlbGVjdGlvbk9mZnNl
dCB9KTsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKHNlbGVjdGlvblJh
bmdlLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkubW92ZVRvKHNlbGVjdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpLCBET1dOU1RS
RUFNKTsKICAgICAgICAgICAgIGlmIChhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFy
aWVzKQotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2Vs
ZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhpcyBm
YWlscyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxiYWNrIGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBi
ZXlvbmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzAyMyw4ICsz
MDI3LDggQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAvLyBPZiBjb3Vyc2UsIGlmIGN1
cnJlbnQgc2VsZWN0aW9uIGlzIGEgcmFuZ2UsIHdlIHBvdGVudGlhbGx5IHdpbGwgZWRpdCB0d28g
d29yZHMgdGhhdCBmYWxsIG9uIHRoZSBib3VuZGFyaWVzIG9mCiAgICAgLy8gc2VsZWN0aW9uLCBh
bmQgcmVtb3ZlIHdvcmRzIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBib3VuZGFyaWVzLgogICAgIC8v
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgIGlmIChzdGFydE9mU2Vs
ZWN0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRmlyc3Qgd29yZCBpcyB0
aGUgd29yZCB0aGF0IGVuZHMgYWZ0ZXIgb3Igb24gdGhlIHN0YXJ0IG9mIHNlbGVjdGlvbi4KQEAg
LTMwOTYsMTEgKzMxMDAsNyBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgogCiBSZWZQdHI8UmFu
Z2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0UG9pbnQod2luZG93
UG9pbnQpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IAotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIFJlZlB0cjxGcmFt
ZT4gZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcp
CkBAIC0zMTE3LDcgKzMxMTcsNyBAQCB2b2lkIEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJF
ZGl0aW5nT3BlcmF0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25tZQogICAgICAgICBy
ZXR1cm47CiAKICAgICBTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUgPSBTZWxlY3Rpb25S
ZXZlYWxNb2RlOjpSZXZlYWw7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rp
b24ocmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOworICAgIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKHJldmVhbE1vZGUsIGFsaWdubWVudCwg
cmV2ZWFsRXh0ZW50T3B0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWxFeGlzdGlu
Z1NlbGVjdGlvbikKQEAgLTMxMjksNyArMzEyOSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKGJvb2wgaWdub3JlLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFs
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBGSVhNRTogU2hvdWxkIHN1cHByZXNz
IHNlbGVjdGlvbiBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBkdXJpbmcgYSBjb21wb3NpdGlvbiBjaGFu
Z2UgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzM4ODMwPiAKICAgICBpZiAoIWlnbm9yZSkKLSAgICAg
ICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLCB7IH0pOworICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CiAjZW5kaWYKICAgICBpZiAoIWlnbm9yZSAm
JiBzaG91bGRSZXZlYWxFeGlzdGluZ1NlbGVjdGlvbiA9PSBSZXZlYWxTZWxlY3Rpb246OlllcykK
ICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50KTsKQEAgLTMxNTIsNyArMzE1
Miw3IEBAIGJvb2wgRWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbih1bnNpZ25lZCYgc2Vs
ZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3RpCiB7CiAgICAgaWYgKCFtX2NvbXBvc2l0aW9u
Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwogICAgIGlm
IChzdGFydC5kZXByZWNhdGVkTm9kZSgpICE9IG1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zMTc1LDcgKzMxNzUsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3Nl
KCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMzIwMCwxMCArMzIwMCwxMCBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICBT
dHJpbmcgdHJhbnNwb3NlZCA9IHRleHQucmlnaHQoMSkgKyB0ZXh0LmxlZnQoMSk7CiAKICAgICAv
LyBTZWxlY3QgdGhlIHR3byBjaGFyYWN0ZXJzLgotICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICBpZiAoIW1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgaWYgKG5l
d1NlbGVjdGlvbiAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAg
ICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICB9CiAKICAgICAvLyBJbnNl
cnQgdGhlIHRyYW5zcG9zZWQgY2hhcmFjdGVycy4KQEAgLTMyNTUsNyArMzI1NSw4IEBAIHZvaWQg
RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCkKIAogdm9pZCBFZGl0b3I6
OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdT
ZWxlY3Rpb24sIE9wdGlvblNldDxGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8
RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOworICAgIFJlZjxGcmFtZT4g
cHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBp
cyBvcnBoYW5lZCwgdGhlbiBkb24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3
U2VsZWN0aW9uLnN0YXJ0KCkuaXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBo
YW4oKSkKQEAgLTMyNjUsOSArMzI2Niw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25B
ZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAg
Ly8gYmVjYXVzZSB0aGVyZSBpcyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlv
bi4KICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxs
aW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMu
CiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8g
bG9uZ2VyIHZhbGlkCi0gICAgYm9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9
IG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlm
IChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wg
c2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBv
cGVyYXRpb25zIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5n
IGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlv
dSBwcmVzcyByZXR1cm4gaW4gdGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBe
KToKQEAgLTMyODIsMTMgKzMyODMsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFm
dGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0
aW9uICYmIGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4
dCgpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNl
dHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAg
ICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJu
IHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMjk2LDcgKzMyOTcsNyBAQCBTdHJpbmcg
RWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0
Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhh
dmlvciA9IFRleHRJdGVyYXRvckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNl
dHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNF
bmFibGVkKCkpCiAgICAgICAgIGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRU
cmVlOwogICAgIHJldHVybiBzZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwNCw3ICsz
MzA1LDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29u
c3QKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhh
dmlvcikgY29uc3QKIHsKICAgICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2Ug
dGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxl
Y3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3Rh
cnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsK
ICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxs
KCkgfHwgZW5kLmlzT3JwaGFuKCkpCkBAIC0zMzE0LDcgKzMzMTUsNyBAQCBTdHJpbmcgRWRpdG9y
OjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJl
ZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRl
cihjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlz
Tm9uZSgpIHx8ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+
ZG9jdW1lbnQoKSB9OwpAQCAtMzMyMiw3ICszMzIzLDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRl
ckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNp
emUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhG
cmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAg
ICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMzAs
NyArMzMzMSw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2Vy
dFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgcmFuZ2UtPmluc2VydE5v
ZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2Vs
ZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSwgcG9zaXRpb25B
ZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVj
dGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxl
Y3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAogICAgIHJldHVybiBwbGFjZWhvbGRlcjsK
IH0KQEAgLTMzNTAsOCArMzM1MSw4IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xk
ZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vob2xkZXIpCiAgICAgcGxhY2Vob2xkZXIu
cmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUgTGVnYWN5IFdlYktpdCBpbXBsZW1lbnRh
dGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB0byBiZSBiZWZvcmUgd2hlcmUgdGhl
IHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0Zv
Y3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJv
b3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNF
TF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9u
T3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
aXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2
ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9s
ZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNl
bGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQg
Y29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3QpCkBAIC0zNDAzLDcgKzM0MDQsNyBAQCBJ
bnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogYm9v
bCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmlu
aXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAogewogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlz
YWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxs
YmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVy
biBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CkBAIC0zNDEyLDE3ICsz
NDEzLDE3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFu
ZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKIHsKICAgICBpZiAoc3R5bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8v
IENhbGN1bGF0ZSB0aGUgY3VycmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gdHlwaW5nU3R5bGU7Ci0gICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKKyAgICBpZiAoYXV0byBleGlzdGluZ1R5
cGluZ1N0eWxlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQogICAgICAg
ICB0eXBpbmdTdHlsZSA9IGV4aXN0aW5nVHlwaW5nU3R5bGUtPmNvcHkoKTsKICAgICBlbHNlCiAg
ICAgICAgIHR5cGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKLSAgICB0eXBpbmdT
dHlsZS0+b3ZlcnJpZGVUeXBpbmdTdHlsZUF0KHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOworICAgIHR5cGluZ1N0
eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICAvLyBI
YW5kbGUgYmxvY2sgc3R5bGVzLCBzdWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0
eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHlsZS0+
ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOwpAQCAtMzQzMCw3ICszNDMxLDcgQEAg
dm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxl
LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICAgICAgQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpLCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsK
IAogICAgIC8vIFNldCB0aGUgcmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCi0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxl
KSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5
cGluZ1N0eWxlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUo
U3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBA
IC0zNDg5LDE5ICszNDkwLDIwIEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9k
eUVsZW1lbnQoKSBjb25zdAogCiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcm
IHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rp
b24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3Vt
ZW50KTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwogCi0gICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSByYW5nZU9m
U3RyaW5nKHRhcmdldCwgc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSwgb3B0aW9ucyk7CiAK
ICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5n
ZSwgRE9XTlNUUkVBTSkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBET1dOU1RSRUFNKSk7CiAKICAgICBpZiAo
IShvcHRpb25zLmNvbnRhaW5zKERvTm90UmV2ZWFsU2VsZWN0aW9uKSkpCi0gICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1
OTgsNyArMzYwMCw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgaWYgKHJhbmdlKSB7
CiAgICAgICAgIGlmICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKICAg
ICAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1l
SW5SYW5nZShtX2ZyYW1lLCAqcmFuZ2UpKQorICAgICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFu
Z2UoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICBpZiAoIXNlYXJjaFJhbmdlKQpAQCAtMzY2OCw3ICszNjcwLDcgQEAgdm9pZCBF
ZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYs
IE9wdGlvblNldDxGcmFtZVMKICNlbmRpZgogCiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBj
bGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNs
aWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAK
ICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIGlmIChzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkpCkBAIC0zNjkx
LDggKzM2OTMsNiBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogCiBib29sIEVkaXRvcjo6c2hv
dWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLmRvY3VtZW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZG9jdW1lbnQoKS5pc1RlbGVw
aG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6Omlz
U3VwcG9ydGVkKCk7CiB9CiAKQEAgLTM3MDUsOSArMzcwNSw5IEBAIHZvaWQgRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAKICAgICBWZWN0b3I8UmVmUHRyPFJhbmdl
Pj4gbWFya2VkUmFuZ2VzOwogCi0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24g
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWVTZWxlY3Rpb24uaXNSYW5n
ZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAg
IGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXND
aGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzI5LDcgKzM3MjksNyBAQCB2
b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgIFJlZlB0
cjxSYW5nZT4gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAKICAgICBpZiAoIWV4dGVuZGVkUmFuZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBh
Z2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50
LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5z
ZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM3NDIsNyArMzc0Miw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVy
UmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2Zy
YW1lLnBhZ2UoKSkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAg
ICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTM4MDEsOSArMzgwMSw5IEBAIHZvaWQgRWRp
dG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld0FkamFjZW50
V29yZHM7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0ZWRTZW50ZW5jZTsKLSAg
ICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5zZXR0aW5ncygpLmNhcmV0QnJvd3Np
bmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykgewotICAgICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkpOworICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNl
dHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dz
aW5nKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgICAgICAgICBuZXdBZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQo
bmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogI2Vsc2UKQEAgLTM4NTYsNyArMzg1
Niw3IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgIGlmICgh
bV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlEaWN0YXRpb24pCiAgICAgICAgIG1f
YWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRT
ZWxlY3Rpb24pOwogCi0gICAgbV9vbGRTZWxlY3Rpb25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9vbGRTZWxlY3Rpb25Gb3JFZGl0b3JV
SVVwZGF0ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICNpZiBFTkFC
TEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIG5vdGlmeUNsaWVudE9mQXR0YWNobWVudFVwZGF0
ZXMoKTsKQEAgLTM4ODMsNyArMzg4Myw3IEBAIHN0YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJs
ZShOb2RlKiBub2RlKQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3Io
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5n
dGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBO
b2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTUwLDEwICszOTUwLDEwIEBAIE9wdGlvblNldDxUZXh0
Q2hlY2tpbmdUeXBlPiBFZGl0b3I6OnJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBO
b2RlJiByb290CiAgICAgcmV0dXJuIGNoZWNraW5nVHlwZXM7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
UmFuZ2U+IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSkKK3N0YXRpYyBS
ZWZQdHI8UmFuZ2U+IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVu
dCkKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdv
cmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHJldHVybiBzZWxl
Y3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
KSA6IGRvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHN0YXRp
YyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQpAQCAtMzk2Nyw4ICszOTY3LDggQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291
bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIFN0cmlu
ZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0g
Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24obV9mcmFtZSk7CisgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRh
dGVSYW5nZUZvclNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICBpZiAocmFuZ2VGb3JDdXJyZW50
bHlUeXBlZFN0cmluZyAmJiBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCiAg
ICAgICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcpOwog
CkBAIC0zOTc3LDcgKzM5NzcsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVS
ZXF1ZXN0KCkgY29uc3QKICAgICAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VG
b3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAgICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkp
KTsKIH0KIApAQCAtNDA0NCw3ICs0MDQ0LDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250
QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIEZvbnRBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXM7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbnVsbHB0cjsKLSAgICBhdXRv
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJh
bWUoKSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGlmIChub2Rl
VG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgpOwpAQCAtNDA4NSw3
ICs0MDg1LDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdHRyaWJ1dGVz
LnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVy
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXR0cmlidXRl
cy50ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRl
cihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogCiAgICAgc3dp
dGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0
OgpAQCAtNDExMSw3ICs0MTExLDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmli
dXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGlu
Z1N0eWxlKCkpOworICAgIGF1dG8gdHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSk7CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGlu
Z1N0eWxlLT5zdHlsZSgpKSB7CiAgICAgICAgIGF1dG8gdmFsdWUgPSB0eXBpbmdTdHlsZS0+c3R5
bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9u
c0luRWZmZWN0KTsKICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CkBAIC00MTk5LDEyICs0MTk5LDggQEAgdm9pZCBFZGl0b3I6Om5vdGlmeUNsaWVudE9mQXR0YWNo
bWVudFVwZGF0ZXMoKQogICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IHJlbW92ZWRBdHRhY2ht
ZW50SWRlbnRpZmllcnMpCiAgICAgICAgIGNsaWVudCgpLT5kaWRSZW1vdmVBdHRhY2htZW50V2l0
aElkZW50aWZpZXIoaWRlbnRpZmllcik7CiAKLSAgICBhdXRvKiBkb2N1bWVudCA9IG1fZnJhbWUu
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KICAgICBm
b3IgKGF1dG8mIGlkZW50aWZpZXIgOiBpbnNlcnRlZEF0dGFjaG1lbnRJZGVudGlmaWVycykgewot
ICAgICAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gZG9jdW1lbnQtPmF0dGFjaG1lbnRGb3JJZGVu
dGlmaWVyKGlkZW50aWZpZXIpKQorICAgICAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gbV9kb2N1
bWVudC5hdHRhY2htZW50Rm9ySWRlbnRpZmllcihpZGVudGlmaWVyKSkKICAgICAgICAgICAgIGNs
aWVudCgpLT5kaWRJbnNlcnRBdHRhY2htZW50V2l0aElkZW50aWZpZXIoaWRlbnRpZmllciwgYXR0
YWNobWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0
dHIpLCBhdHRhY2htZW50LT5oYXNFbmNsb3NpbmdJbWFnZSgpKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjI3LDcgKzQyMjMsNyBAQCB2b2lk
IEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIE9wdGlv
bmFsPHVpbnQ2NF90PiYmIGZpbAogCiB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRh
dGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogewotICAgIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlk
YXRlID0gdHJ1ZTsKIApAQCAtNDI0Niw3ICs0MjQyLDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIAog
Ym9vbCBFZGl0b3I6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdAogewotICAgIHJl
dHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCZtX2ZyYW1lKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX2RvY3VtZW50LmZyYW1l
KCkpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zv
ck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQpAQCAtNDI2MiwxMyArNDI1OCw3
IEBAIHZvaWQgRWRpdG9yOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZlbHRlcm5hdGl2ZShjb25z
dCBTdHJpbmcmIGFsdGVybmF0aXZlU3RyaW5nCiB2b2lkIEVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRl
TW9kZUVuYWJsZWQoKQogewogICAgIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQgPSAhbV9vdmVyd3Jp
dGVNb2RlRW5hYmxlZDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9j
a0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKLX0KLQotRG9jdW1lbnQmIEVkaXRvcjo6
ZG9jdW1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2ZyYW1lLmRvY3VtZW50KCkpOwotICAg
IHJldHVybiAqbV9mcmFtZS5kb2N1bWVudCgpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwogfQogCiBS
ZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCkBAIC00MzIxLDkg
KzQzMTEsOSBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFz
TXVsdGlwbGVGb250cykgY29uc3QKIHsKICAgICBoYXNNdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAK
LSAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKCFtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1v
dmU7Ci0gICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFt
ZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVt
b3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKIAogICAgICAgICBjb25zdCBGb250KiBmb250ID0g
bnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKSB7CkBAIC00MzM1LDExICs0MzI1LDExIEBAIGNv
bnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAogICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBO
b2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOworICAg
IE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0
aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00Mzcx
LDcgKzQzNjEsNyBAQCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gRWRpdG9yOjppbnNlcnRFZGl0
YWJsZUltYWdlKCkKIAogYm9vbCBFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1h
Z2VzKCkgY29uc3QKIHsKLSAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIXNlbGVj
dGlvbi5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRl
eCBhZDllZGEyNjE4YzlhODgwYmVjYmIxY2U0ZDY4YmI1OWI4OWMyMGMwLi5hNjBlZWU4YTJjZjhh
ZGQzNjBlNmYyZDllMGM1Zjg1NTBhM2U2ZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJFZGl0
b3JJbnNlcnRBY3Rpb24uaCIKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJk
V3JpdGVyRGF0YS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgpAQCAtMTE5LDEzICsxMjAs
MTMgQEAgZW51bSBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24gOiB1aW50OF90IHsKIAog
Y2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRnJhbWUmLCBPcHRpb25hbDxWaXNpYmxlU2Vs
ZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlv
bj4gPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShE
b2N1bWVudCYsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgflRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIFJlZjxGcmFtZT4gbV9m
cmFtZTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgT3B0aW9uU2V0PFRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gbV9vcHRpb25zOwogICAgIGJvb2wgbV93YXNJZ25vcmlu
Z1NlbGVjdGlvbkNoYW5nZXM7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEzNyw3ICsx
MzgsNyBAQCBwcml2YXRlOgogY2xhc3MgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUgewog
cHVibGljOgogICAgIElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlKEZyYW1lJiBmcmFtZSkK
LSAgICAgICAgOiBtX3NlbGVjdGlvbkNoYW5nZShmcmFtZSwgV1RGOjpudWxsb3B0LCBUZW1wb3Jh
cnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCisgICAgICAgIDogbV9z
ZWxlY3Rpb25DaGFuZ2UoKmZyYW1lLmRvY3VtZW50KCksIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQogICAgIHsKICAgICB9CiAK
QEAgLTE1MCw3ICsxNTEsNyBAQCBwcml2YXRlOgogY2xhc3MgRWRpdG9yIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFZGl0b3IoRnJhbWUmKTsK
KyAgICBleHBsaWNpdCBFZGl0b3IoRG9jdW1lbnQmKTsKICAgICB+RWRpdG9yKCk7CiAKICAgICBl
bnVtIGNsYXNzIFBhc3RlT3B0aW9uIDogdWludDhfdCB7CkBAIC0yNzEsNyArMjcyLDcgQEAgcHVi
bGljOgogICAgIGNsYXNzIENvbW1hbmQgewogICAgIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9F
WFBPUlQgQ29tbWFuZCgpOwotICAgICAgICBDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29t
bWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIEZyYW1lJik7CisgICAgICAgIENvbW1hbmQoY29u
c3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRG9jdW1lbnQm
KTsKIAogICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGUoY29uc3QgU3RyaW5nJiBw
YXJhbWV0ZXIgPSBTdHJpbmcoKSwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCA9IG51bGxwdHIpIGNv
bnN0OwogICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGUoRXZlbnQqIHRyaWdnZXJp
bmdFdmVudCkgY29uc3Q7CkBAIC0yODgsNiArMjg5LDcgQEAgcHVibGljOgogICAgIHByaXZhdGU6
CiAgICAgICAgIGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogbV9jb21tYW5kIHsgbnVsbHB0
ciB9OwogICAgICAgICBFZGl0b3JDb21tYW5kU291cmNlIG1fc291cmNlOworICAgICAgICBSZWZQ
dHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsK
ICAgICB9OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbW1hbmQgY29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lKTsgLy8gQ29tbWFuZCBzb3VyY2UgaXMgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLgpAQCAtNTY3LDcgKzU2OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZVRleHRQbGFjZWhvbGRlcihUZXh0UGxhY2Vob2xkZXJFbGVtZW50Jik7CiAKIHBy
aXZhdGU6Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Q7CisgICAgRG9jdW1lbnQmIGRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCiAgICAgYm9vbCBjYW5EZWxl
dGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYpOwpAQCAtNjE4LDYgKzYyMCw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAg
ICAgRnJhbWUmIG1fZnJhbWU7CiAgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBtX2xh
c3RFZGl0Q29tbWFuZDsKICAgICBSZWZQdHI8VGV4dD4gbV9jb21wb3NpdGlvbk5vZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA5ZGJhNzA2OWFkMTQyOGNk
YzNiOTBmYjZjMDQ3MWZhYTEwZmI4YzQ0Li5iZDUxODBlYjQwMGVhNzkyMTUxYjZmNzk4YjYwZWNi
OGNmZmRhZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAg
LTExMDksNiArMTEwOSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29s
IGV4ZWN1dGVTd2FwV2l0aE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9u
KGZyYW1lLmRvY3VtZW50KCkpOwogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwog
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwpAQCAtMTgzNiwxMiArMTgzNywxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9y
SW50ZXJuYWxDb21tYW5kKiBpbnRlcm5hbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFt
ZSkKIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmROYW1lKQogewotICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFt
ZSksIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENv
bW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBtX2RvY3VtZW50KTsKIH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkK
IHsKLSAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3Vy
Y2UsIG1fZnJhbWUpOworICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5k
TmFtZSksIHNvdXJjZSwgbV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNT
dXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpA
QCAtMTg1MywxMiArMTg1NCwxMyBAQCBFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQog
Ci1FZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBj
b21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9y
OjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1f
Y29tbWFuZChjb21tYW5kKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShj
b21tYW5kID8gJmZyYW1lIDogbnVsbHB0cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZk
b2N1bWVudCA6IG51bGxwdHIpCisgICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFt
ZSgpIDogbnVsbHB0cikKIHsKLSAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAg
QVNTRVJUKGNvbW1hbmQgfHwgIW1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFu
ZDo6ZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVu
dCkgY29uc3QKQEAgLTE4NjgsOSArMTg3MCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVj
dXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAg
ICAgICAgIGlmICghYWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1
bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1f
ZG9jdW1lbnQtPmZyYW1lKCkgIT0gbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIG1fY29tbWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBt
X3NvdXJjZSwgcGFyYW1ldGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKaW5kZXggNDUxNmU1MDY1MDcyZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OS4uMTg1
N2QxMzY3YTFhNzIyZjI4NjQwZDkyZTBiYmIxYTUxYzIyOTlkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5LDE0IEBAIEludFJlY3Qg
RHJhZ0NhcmV0Q29udHJvbGxlcjo6ZWRpdGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGlu
YXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNo
b3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCog
ZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4g
IWRvY3VtZW50IHx8IGRvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVy
U2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgpOwogfQogCi1GcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxl
Y3Rpb24oRnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK0ZyYW1lU2VsZWN0aW9u
OjpGcmFtZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRv
Y3VtZW50KQorICAgICwgbV9mcmFtZShkb2N1bWVudD8gZG9jdW1lbnQtPmZyYW1lKCkgOiBudWxs
cHRyKQogICAgICwgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24oKSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCkBAIC0xNTYsNyArMTU3LDcgQEAgRnJh
bWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fYWJzQ2Fy
ZXRCb3VuZHNEaXJ0eSh0cnVlKQogICAgICwgbV9jYXJldFBhaW50KHRydWUpCiAgICAgLCBtX2lz
Q2FyZXRCbGlua2luZ1N1c3BlbmRlZChmYWxzZSkKLSAgICAsIG1fZm9jdXNlZChmcmFtZSAmJiBm
cmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRG
cmFtZSgpID09IGZyYW1lKQorICAgICwgbV9mb2N1c2VkKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVu
dC0+cGFnZSgpICYmIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZERvY3VtZW50KCkgPT0gZG9jdW1lbnQpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihm
YWxzZSkKICAgICAsIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3
YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0x
NjUsMTQgKzE2NiwxNCBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZy
YW1lKQogICAgICwgbV9jYXJldEJsaW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAgaWYgKHNob3Vs
ZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbV9zZWxl
Y3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rp
b246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAg
RWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKLSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/
IHNlbGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIH0KIAogdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNl
clRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduKQpAQCAt
Mjg0LDcgKzI4NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJ
ZkRpZmZlcmVudChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBwYXNzCiAgICAgRW5kUG9pbnRzQWRq
dXN0bWVudE1vZGUgZW5kcG9pbnRzQWRqdXN0bWVudE1vZGUpCiB7CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24gPSBwYXNzZWROZXdTZWxlY3Rpb247Ci0gICAgYm9vbCBpc0RpcmVj
dGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwg
bmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsKKyAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBz
aG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBuZXdTZWxl
Y3Rpb24uaXNEaXJlY3Rpb25hbCgpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJhc2UgPSBtX29y
aWdpbmFsQmFzZS5pc05vdE51bGwoKSA/IG1fb3JpZ2luYWxCYXNlIDogbmV3U2VsZWN0aW9uLnZp
c2libGVCYXNlKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld0Jhc2UgPSBiYXNlOwpAQCAtMzIy
LDcgKzMyMyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRh
dGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgYm9vbCBzaG91bGRDbGVh
clR5cGluZ1N0eWxlID0gb3B0aW9ucy5jb250YWlucyhDbGVhclR5cGluZ1N0eWxlKTsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uUG9zc2libHlXaXRo
b3V0RGlyZWN0aW9uOwotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlv
bihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24o
bV9kb2N1bWVudCkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUp
OwogCiAgICAgaWYgKCFtX2ZyYW1lKSB7CkBAIC0zMzQsNyArMzM1LDcgQEAgYm9vbCBGcmFtZVNl
bGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNp
YmxlU2VsZWN0aW8KICAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNh
biBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3VtZW50KiBuZXdTZWxlY3Rp
b25Eb2N1bWVudCA9IG5ld1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQoKSkgewogICAgICAgICBp
ZiAoUmVmUHRyPEZyYW1lPiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1NlbGVjdGlvbkRvY3VtZW50
LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFt
ZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25E
b2N1bWVudCAhPSBtX2RvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uRnJh
bWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMsIEFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICAg
ICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGR1cmluZyB0aGUgYWJvdmUgc2V0IHNlbGVjdGlvbiwg
dGhpcyBGcmFtZVNlbGVjdGlvbiBoYXMgYmVlbiBtb2RpZmllZCBieQogICAgICAgICAgICAgICAg
IC8vIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkLCBidXQgdGhhdCB0
aGUgc2VsZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZCBzaW5jZQpAQCAtMzQ5LDcgKzM1MCw3IEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFu
Y2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgbV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5
OwogCiAgICAgaWYgKGNsb3NlVHlwaW5nKQotICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5
cGluZyhtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoKm1fZG9j
dW1lbnQpOwogCiAgICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFy
VHlwaW5nU3R5bGUoKTsKQEAgLTM1Nyw3ICszNTgsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rp
bwogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAg
Ym9vbCBkaWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwog
ICAgIGlmIChkaWRNdXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNl
bGVjdGlvbldpbGxDaGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2VsZWN0
aW9uV2lsbENoYW5nZSgpOwogCiAgICAgbV9zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247CiAKQEAg
LTM3MSwyMSArMzcyLDIxIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhv
dXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgc2V0Q2FyZXRS
ZWN0TmVlZHNVcGRhdGUoKTsKIAogICAgIGlmICghbmV3U2VsZWN0aW9uLmlzTm9uZSgpICYmICEo
b3B0aW9ucyAmIERvTm90U2V0Rm9jdXMpKSB7Ci0gICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVt
ZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICAgICAgYXV0
byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAg
ICAgICBzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgbm90IGJlIG5lZWRlZC4KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3Vz
ZWRFbGVtZW50KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50
LT5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9k
b2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIH0KIAogICAgIC8vIEFsd2F5cyBj
bGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgog
ICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkgdGhlIHZlcnRpY2FsIGFycm93IG5hdmlnYXRp
b24gY29kZSBpZiBuZWNlc3NhcnkuCiAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRp
b24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgIHNlbGVjdEZyYW1l
RWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCku
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1f
ZG9jdW1lbnQtPmVkaXRvcigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
LCBvcHRpb25zKTsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0aW9uLWFwaS8j
c2VsZWN0aW9uY2hhbmdlLWV2ZW50CiAgICAgLy8gRklYTUU6IFNwZWMgZG9lc24ndCBzcGVjaWZ5
IHdoaWNoIHRhc2sgc291cmNlIHRvIHVzZS4KLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5xdWV1
ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJs
ZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgbV9kb2N1bWVudC0+cXVldWVU
YXNrVG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6
Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC0zOTYsMTAgKzM5Nyw2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAgaWYgKCFzZXRT
ZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywgYWxp
Z24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJhbWUp
CiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJl
dmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlv
bikKQEAgLTQxMSwyNyArNDA4LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAgbV9z
ZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9uVXBk
YXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkp
CisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7Cisg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKGZy
YW1lVmlldyAmJiBmcmFtZVZpZXctPmxheW91dENvbnRleHQoKS5pc0xheW91dFBlbmRpbmcoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGludGVudCk7
CiAKICAgICBpZiAob3B0aW9ucyAmIElzVXNlclRyaWdnZXJlZCkgewotICAgICAgICBpZiAoYXV0
byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIGlmIChhdXRv
KiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNs
aWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZyYW1l
JiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBm
cmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICNl
bHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRv
Y3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyArNDM4
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBSZXZl
YWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJldmVh
bE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0
aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+
cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigp
OwogfQogCkBAIC00NTcsNyArNDU0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5k
UmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKICAgICBp
ZiAobV9zZWxlY3Rpb25SZXZlYWxNb2RlICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90UmV2
ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAgICAgaWYg
KG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0
aW9uSXNSZXZlYWxlZCgpKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCiAgICAgICAg
ICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5n
U2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyA6IFNjcm9sbEFs
aWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
YWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVj
dGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQ7CkBAIC00NzEsNyArNDY4LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50JiBpbnQKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxl
Y3Rpb24oKQogewogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2NhblNlbGVjdGlvbkZv
clRlbGVwaG9uZU51bWJlcnMoKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zY2FuU2VsZWN0
aW9uRm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MDAsNyBA
QCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0oYm9v
bCBpc0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0
aGUgc2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0byB3
aGljaCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBi
ZSBjaGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAgaWYg
KG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRl
bmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudCAmJiBt
X2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlv
bkZyb21FeHRlbnRFbmRwb2ludCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwogCiAgICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MjAsNyBAQCBWaXNp
YmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShj
b25zdCBWaXNpYmxlUG9zaXRpbwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVy
Q3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0gICAg
aWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3Bh
Y2VXaGVuTW92aW5nUmlnaHQoKSkgeworICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQt
PmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsK
ICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdl
IGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVydGhlciBhbmQgdGhlbiBtb3ZlIG9uZSB3
b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBzZW1hbnRpY3Mgb2YgcHJldmlvdXNXb3Jk
UG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRoZQpAQCAtODU1LDcgKzg1Miw3IEBAIFZp
c2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24o
bV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnJpZ2h0KHRydWUs
IHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFy
aXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUg
JiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5n
UmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1
bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdo
ZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0aW9u
KG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAg
cG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hlbk1v
dmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEwNzYsNyArMTA3
Myw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVmdChU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxl
UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLmxl
ZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3Jk
R3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0g
bV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdo
ZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQg
PSBtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tp
cFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50
UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwog
ICAgICAgICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFj
ZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMzYy
LDcgKzEzNTksNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0
ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdn
ZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSkgeworICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2Uo
KSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVudCAmJiBBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlmeUFjY2Vz
c2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rp
b25Cb3VuZGFyeSwgdGV4dFNlbGVjdGlvbldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0eShkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5KSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTM3NCw4ICsxMzcxLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9u
IGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgaWYgKCF3
YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5h
bFN0YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9m
cmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAgICAg
IGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFj
Y2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBjYWNo
ZS0+c2V0VGV4dFNlbGVjdGlvbkludGVudCh0ZXh0U2VsZWN0aW9uSW50ZW50KGFsdGVyLCBkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5KSk7CiAgICAgfQogCkBAIC0xMzg0LDcgKzEzODEsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIFRleAogICAgIC8vIE5vdGU6IHRoZSBTVEFSVCBwb3NpdGlvbiB0eXBl
IGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQgd291bGQgYmUKICAgICAvLyB0
aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHR5cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24gc2V0LgogICAgIExheW91dFVuaXQgeCA9IGxpbmVEaXJlY3Rpb25Q
b2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9zZWxlY3Rpb24u
c2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2Zy
YW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5zZXRJ
c0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1l
bnQpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgc3dpdGNoIChhbHRlcikg
ewogICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6CkBAIC0xMzk0LDcgKzEzOTEsNyBAQCBib29sIEZy
YW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24sIFRleAogCiAgICAgICAgIGlmICghbV9zZWxlY3Rpb24uaXNDYXJldCgpCiAg
ICAgICAgICAgICAmJiAoZ3JhbnVsYXJpdHkgPT0gV29yZEdyYW51bGFyaXR5IHx8IGdyYW51bGFy
aXR5ID09IFBhcmFncmFwaEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IExpbmVHcmFudWxh
cml0eSkKLSAgICAgICAgICAgICYmIG1fZnJhbWUgJiYgIW1fZnJhbWUtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkgewor
ICAgICAgICAgICAgJiYgbV9kb2N1bWVudCAmJiAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7CiAg
ICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIHNlbGVjdGlvbiBnbyBhY3Jvc3MgdGhlIGJhc2Ug
cG9zaXRpb24gZGlyZWN0bHkuIE5lZWRlZCB0byBtYXRjaCBtYWMKICAgICAgICAgICAgIC8vIGJl
aGF2aW9yIHdoZW4sIGZvciBpbnN0YW5jZSwgd29yZC1zZWxlY3RpbmcgYmFja3dhcmRzIHN0YXJ0
aW5nIHdpdGggdGhlIGNhcmV0IGluCiAgICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEgd29y
ZCBhbmQgdGhlbiB3b3JkLXNlbGVjdGluZyBmb3J3YXJkLCBsZWF2aW5nIHRoZSBjYXJldCBpbiB0
aGUKQEAgLTE0MDcsNyArMTQwNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0
ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAgICAg
ICAgLy8gU3RhbmRhcmQgTWFjIGJlaGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91bmRhcnkg
aXMgZ3JvdyB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCiAgICAgICAgIC8v
IGJhc2UgaW4gcGxhY2UgYW5kIG1vdmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4dFZpZXcu
Ci0gICAgICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5z
aG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3Nl
bGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAgICAgICBp
ZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxk
QWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rp
b24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAgICAgIHNl
dEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jaygpOwpAQCAtMTUxNyw3ICsxNTE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0aWMKICAg
ICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBtX2dyYW51bGFy
aXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVj
dGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFs
dGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9u
YWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0
ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE1NzUs
NyArMTU3Miw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbigp
CiAgICAgbV9jYXJldEJsaW5rVGltZXIuc3RvcCgpOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byog
dmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChhdXRvKiB2aWV3ID0g
bV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVh
clNlbGVjdGlvbigpOwogCiAgICAgc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5j
ZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFsaWdu
Q3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY1NSw5
ICsxNjUyLDkgQEAgc3RhdGljIGJvb2wgaXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVD
YXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAg
aWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKKyAgICB1cGRhdGVTZWxl
Y3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAgICAgcmVjb21wdXRl
Q2FyZXRSZWN0KCk7CiAgICAgaWYgKGluc2lkZUZpeGVkKQogICAgICAgICAqaW5zaWRlRml4ZWQg
PSBtX2NhcmV0SW5zaWRlUG9zaXRpb25GaXhlZDsKQEAgLTE2NzUsMTAgKzE2NzIsMTAgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICBpZiAoIXNob3VsZFVw
ZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIW1fZnJh
bWUpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBG
cmFtZVZpZXcqIHYgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgRnJhbWVWaWV3
KiB2ID0gbV9kb2N1bWVudC0+dmlldygpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC0xNjkwLDcgKzE2ODcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1
dGVDYXJldFJlY3QoKQogICAgICAgICAgICAgY2xlYXJDYXJldFJlY3QoKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0ID0gbV9zZWxlY3Rp
b24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KG1fZnJh
bWUtPmRvY3VtZW50KCksIHZpc2libGVTdGFydCkpIHsKKyAgICAgICAgICAgIGlmICh1cGRhdGVD
YXJldFJlY3QobV9kb2N1bWVudCwgdmlzaWJsZVN0YXJ0KSkgewogICAgICAgICAgICAgICAgIGNh
cmV0Tm9kZSA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgICAgICAgICAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5ID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KQEAgLTE3MTUsNyArMTcxMiw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0
ZUNhcmV0UmVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShURVhUX0NB
UkVUKQotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyVmlldygpKSB7CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5k
ZXJWaWV3KCkpIHsKICAgICAgICAgYm9vbCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50
RWRpdGFibGUgPSBtX3NlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtX3ByZXZpb3Vz
Q2FyZXROb2RlICYmIG1fcHJldmlvdXNDYXJldE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpOwog
ICAgICAgICBpZiAoc2hvdWxkUmVwYWludENhcmV0KHZpZXcsIHByZXZpb3VzT3JOZXdDYXJldE5v
ZGVJc0NvbnRlbnRFZGl0YWJsZSkpIHsKICAgICAgICAgICAgIGlmIChtX3ByZXZpb3VzQ2FyZXRO
b2RlKQpAQCAtMTg5NCwxMiArMTg5MSwxMSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlu
cyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgaWYgKCFpc1JhbmdlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBhdXRvKiBkb2N1bWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2lu
dCk7Ci0gICAgZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKKyAg
ICBtX2RvY3VtZW50LT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7CiAgICAgTm9k
ZSogaW5uZXJOb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogICAgIGlmICghaW5uZXJOb2RlIHx8
ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5Njgs
OSArMTk2NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFy
ZW50SWZGdWxseVNlbGVjdGVkKCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkK
IHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAg
RWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7
CiAgICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKICAgICAg
ICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0
RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KTsKICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQuY2Fu
U2VsZWN0QWxsKCkpIHsKQEAgLTIwMDAsOCArMTk5NCw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNlbGVjdEFsbCgpCiAgICAgICAgIGlmIChyb290KQogICAgICAgICAgICAgc2VsZWN0U3RhcnRU
YXJnZXQgPSByb290LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
cm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHNlbGVjdFN0
YXJ0VGFyZ2V0ID0gZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CisgICAgICAgICAgICByb290
ID0gbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RTdGFy
dFRhcmdldCA9IG1fZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKCFyb290KQpAQCAtMjA1OCw5ICsyMDUyLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlv
bjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgU2hv
dWxkQ2wKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgp
CiB7CiAgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7Ci0g
ICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCgqbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAKLSAgICBk
b2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0
eWxlSWZOZWVkZWQoKTsKIAogI2lmIFVTRShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0IGJs
aW5raW5nIChibGlua3MgfCBkb2VzIG5vdCBibGluaykKQEAgLTIwNzEsNyArMjA2NCw3IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8g
QmVjYXVzZSBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAg
IC8vIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhl
IGZyYW1lIGlzIGFjdGl2ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2Ug
Y29sb3JzIHdlcmUgcGFpbnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50
LT5yZW5kZXJWaWV3KCkpCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5y
ZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAg
IC8vIENhcmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KQEAgLTIwODIsNyArMjA3NSw3
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAg
ICAgLy8gQmVjYXVzZSBTdHlsZTo6UmVzb2x2ZXI6OmNoZWNrT25lU2VsZWN0b3IoKSBhbmQKICAg
ICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2
ZSwgd2UgaGF2ZSB0bwogICAgIC8vIHVwZGF0ZSBzdHlsZSBhbmQgdGhlbWUgc3RhdGUgdGhhdCBk
ZXBlbmRlZCBvbiB0aG9zZS4KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5m
b2N1c2VkRWxlbWVudCgpKSB7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvY3VtZW50
LT5mb2N1c2VkRWxlbWVudCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50
LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zdHls
ZSgpLmhhc0FwcGVhcmFuY2UoKSkKQEAgLTIxMDcsMTMgKzIxMDAsMTMgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6c2V0Rm9jdXNlZChib29sIGZsYWcpCiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246Omlz
Rm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2Zy
YW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2
ZSgpOworICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9kb2N1bWVudC0+cGFnZSgpICYmIG1fZG9j
dW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKIH0KIAogI2lmIEVO
QUJMRShURVhUX0NBUkVUKQotaW5saW5lIHN0YXRpYyBib29sIHNob3VsZFN0b3BCbGlua2luZ0R1
ZVRvVHlwaW5nQ29tbWFuZChGcmFtZSogZnJhbWUpCitpbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxk
U3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAg
ICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpICYmIGZyYW1lLT5lZGl0
b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKKyAgICBy
ZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpICYmIGRvY3VtZW50LT5l
ZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKIH0K
ICNlbmRpZgogCkBAIC0yMTMyLDEyICsyMTI1LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVw
ZGF0ZUFwcGVhcmFuY2UoKQogICAgIGJvb2wgcGFpbnRCbG9ja0N1cnNvciA9IG1fc2hvdWxkU2hv
d0Jsb2NrQ3Vyc29yICYmIG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiAhaXNMb2dpY2FsRW5kT2ZM
aW5lKG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2Vk
T3JDbGVhcmVkID0gcmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAKLSAgICBib29sIGNhcmV0QnJvd3Np
bmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgYm9v
bCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5h
YmxlZCgpOwogICAgIGJvb2wgc2hvdWxkQmxpbmsgPSAhcGFpbnRCbG9ja0N1cnNvciAmJiBjYXJl
dElzVmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRh
YmxlKCkgfHwgY2FyZXRCcm93c2luZyk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0
b3AgdGhlIGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8vIGJsYWNr
IGNhcmV0IGluIHRoZSBuZXcgbG9jYXRpb24uCi0gICAgaWYgKGNhcmV0UmVjdENoYW5nZWRPckNs
ZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29t
bWFuZChtX2ZyYW1lKSkKKyAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hv
dWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZG9jdW1l
bnQpKQogICAgICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAKICAgICAvLyBTdGFydCBi
bGlua2luZyB3aXRoIGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYgd2Un
cmUKQEAgLTIxNTMsNyArMjE0Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVh
cmFuY2UoKQogICAgIH0KICNlbmRpZgogCi0gICAgUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpOworICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5y
ZW5kZXJWaWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMDIs
OCArMjE5NSw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eShDYXJl
dFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCB0cmlnZ2VyIGEgc3luY2hyb25vdXMgbGF5b3V0IGhlcmUuCi0gICAgaWYg
KG1fZnJhbWUpCi0gICAgICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxl
KCptX2ZyYW1lKTsKKyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgdXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKFRFWFRf
Q0FSRVQpCiAgICAgaWYgKG1fY2FyZXRQYWludCkgewpAQCAtMjI0NywxMCArMjI0MCwxMCBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBpZiAo
aXNOb25lKCkgfHwgIWlzRm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGNh
cmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7
CisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJy
b3dzaW5nRW5hYmxlZCgpOwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7CiAgICAgICAgIGlmIChF
bGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9uLmJhc2Uo
KSkpIHsKLSAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0
Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CisgICAgICAgICAgICBtX2RvY3VtZW50
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1f
ZnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2Miwx
NiArMjI1NSwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVl
ZGVkKCkKICAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhl
cmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwogICAgICAgICAg
ICAgLy8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBh
dCB0aGlzIHRpbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkg
JiYgIWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJh
bWUpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJl
bnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQt
PnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogICAgIH0KIAogICAgIGlmIChjYXJldEJyb3dz
aW5nKQotICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3Vz
ZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKKyAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFtZSk7
CiB9CiAKIHZvaWQgRHJhZ0NhcmV0Q29udHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUqIGZy
YW1lLCBHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
Y29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpIGNvbnN0CkBAIC0yMzAwLDE2ICsyMjkzLDE2IEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5n
ZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAg
cmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQt
PmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSk7CiB9CiAKIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25z
dAogewotICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVw
ZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1f
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9kb2N1
bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlmICghcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIApAQCAtMjMyNSwxNCArMjMxOCwxNCBAQCBGbG9hdFJlY3QgRnJhbWVT
ZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNp
YmxlQ29udAogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0
YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0
IHRleHRSZWN0SGVpZ2h0KSBjb25zdAogewotICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRl
cmVyKCkpCisgICAgaWYgKCFtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRS
ZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6
OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRS
ZWN0ID0gbV9kb2N1bWVudC0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFy
ZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwogICAgIGZvciAoYXV0byYgcmVjdCA6
IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UsIHRl
eHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkpKSB7
CiAgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2aXNp
YmxlQ29udGVudFJlY3QpOwogICAgICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgp
KQpAQCAtMjM2NCw3ICsyMzU3LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZv
cm0oRWxlbWVudCogc3RhcnQpCiBIVE1MRm9ybUVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpjdXJy
ZW50Rm9ybSgpIGNvbnN0CiB7CiAgICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFj
dGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzLgot
ICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQo
KTsKKyAgICBFbGVtZW50KiBzdGFydCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAg
ICAgaWYgKCFzdGFydCkKICAgICAgICAgc3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmVsZW1l
bnQoKTsKICAgICBpZiAoIXN0YXJ0KQpAQCAtMjQwNyw4ICsyNDAwLDggQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwg
Y29uc3QgU2Nyb2wKICAgICAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShy
ZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hv
dWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogICAgICAgICAgICAgICAgIGxh
eWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAg
ICAgICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+
cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLmNs
aWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7
CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxl
ZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAjZWxzZQpAQCAtMjQyNiwxNyArMjQxOSwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiAgICAgLy8gUHV0IGEgY2FyZXQgaW5zaWRlIHRoZSBi
b2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZWRpdGFibGUgKGVpdGhlciB0aGUKICAgICAvLyBl
bnRpcmUgV2ViVmlldyBpcyBlZGl0YWJsZSBvciBkZXNpZ25Nb2RlIGlzIG9uIGZvciB0aGlzIGRv
Y3VtZW50KS4KIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7
CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9m
cmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGlmICghaXNOb25l
KCkgfHwgIShkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQor
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC0+aGFzRWRp
dGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQot
ICAgIGlmICghZG9jdW1lbnQgfHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNp
YmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkp
KSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQg
fHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxl
Y3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpKSB8fCAhbV9kb2N1bWVudC0+
aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIGlmIChh
dXRvKiBib2R5ID0gZG9jdW1lbnQtPmJvZHkoKSkKKyAgICBpZiAoYXV0byogYm9keSA9IG1fZG9j
dW1lbnQtPmJvZHkoKSkKICAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmly
c3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKQEAgLTI0
NDYsNyArMjQzOCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZENoYW5nZVNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCiAgICAgaWYgKG1fZnJhbWUt
PnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogI2VuZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwg
ZmFsc2UpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgp
CkBAIC0yNDY0LDcgKzI0NTYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93
QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRT
aG93QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBt
X2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAg
IHVwZGF0ZUFwcGVhcmFuY2UoKTsKIH0KQEAgLTI0ODgsNyArMjQ4MCw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKCkKIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpCiB7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgIGlmIChh
dXRvKiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgY2xp
ZW50LT51cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0eUNoYW5nZWQoKTsK
IAogICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CkBAIC0yNzIzLDcgKzI3MTUsNyBAQCBS
ZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVj
dGlvbihpbnQgYW1vdW50KSBjb25zdAogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5n
ZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2Rl
KQogewotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5jcmVhdGVSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2RvY3Vt
ZW50LT5jcmVhdGVSYW5nZSgpOwogICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydChub2RlLCBsb2Nh
dGlvbik7CiAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZChub2RlLCBsb2NhdGlvbiArIGxlbmd0aCk7
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKCpyZXN1
bHRSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOwpAQCAtMjkwNCw3ICsyODk2LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcykKICAgICBp
ZiAobV9jYXJldEJsaW5rcyA9PSBjYXJldEJsaW5rcykKICAgICAgICAgcmV0dXJuOwogI2lmIEVO
QUJMRShURVhUX0NBUkVUKQotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOyAKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAobV9jYXJldFBhaW50KSB7CiAgICAg
ICAgIG1fY2FyZXRQYWludCA9IGZhbHNlOyAKICAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVjdCgp
OyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBlNmE3MDhiMDU0
ZjU5YjMwYmZiNTdlZmRmZTMyY2FlZDE2NWEwNTA4Li41YWFmOWEwODliM2IxOWRmYTAxMGVkMDcw
OWQ0MmRlZWFlMGI1ZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3B0aW9uczsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSog
PSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihE
b2N1bWVudCogPSBudWxscHRyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwogICAgICAKQEAgLTMzOCw2
ICszMzgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBkaXNwYXRjaFNlbGVjdFN0YXJ0KCk7CiAK
KyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExh
eW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA3
MzA3NmRlMWI3OWI5ZjA5ZmY5ZjMxMjdhODNlNWIwODNkNTc4NTkzLi42NjAxZGI4ZmNiNGUzN2Y0
YWRiMjBhZjE3ODJlMjIxMjRjZjEzYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChSZWY8VGV4
dD4mJiBub2RlLCB1bnNpZ25lZAogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRv
QXBwbHkoKQogewotICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGZyYW1lKCkuc2V0dGlu
Z3MoKS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CisgICAgYm9vbCBwYXNzd29yZEVjaG9FbmFibGVk
ID0gZG9jdW1lbnQoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0VuYWJsZWQoKTsKICAgICBpZiAo
cGFzc3dvcmRFY2hvRW5hYmxlZCkKICAgICAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXggMTc2ZDhmMDg5YWY1MDI2NmRkODk4ZmE5
Nzc0Zjk3NDFkYjM5OWRmYi4uMjczNTVlNjZmYjg5ZDU1NDJjZDZhOWJlYTg4ZTJjMjYyZjUwNzgz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1h
bmQuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpk
b0FwcGx5KCkKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGlu
ZyBzdHlsZS4KIAotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJhbWUo
KS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5
cGluZ1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOwogCiAgICAg
aWYgKHR5cGluZ1N0eWxlICYmICF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIC8v
IEFwcGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGluc2VydGVkIGxpbmUgYnJlYWssIHNvIHRo
YXQgaWYgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRD
b21tYW5kLmNwcAppbmRleCBlOTEzMWY2ZmJmMzJkODYzMDUwYWExZWYyMDhlNWI0ZjQ0MDQ5YjZh
Li4xYmIwZDA1Mjg3MGM0NTEzNjk5NDcxOWQwZWMwNjViM2VkMDk2ZDQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBA
IHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBhbnl0aGluZyBv
dGhlciB0aGFuIE5vU2VsZWN0aW9uLiBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVz
IGEgcmVhbCBlbmRpbmdTZWxlY3Rpb24sIHNvIGJhaWwgb3V0LgogICAgICAgICBpZiAoZW5kaW5n
U2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlm
IChmcmFtZSgpLmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgeworICAgIH0gZWxz
ZSBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKICAg
ICAgICAgaWYgKHBlcmZvcm1PdmVyd3JpdGUobV90ZXh0LCBtX3NlbGVjdEluc2VydGVkVGV4dCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgSW5z
ZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIHNldEVuZGluZ1NlbGVjdGlvbldpdGhvdXRW
YWxpZGF0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAogICAgIC8vIEhhbmRsZSB0
aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KLSAgICBpZiAoUmVmUHRyPEVk
aXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxl
KCkpIHsKKyAgICBpZiAoUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpIHsKICAgICAgICAgdHlwaW5nU3R5bGUtPnBy
ZXBhcmVUb0FwcGx5QXQoZW5kUG9zaXRpb24sIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVXcml0aW5n
RGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5kZXggNTQ2
MGI3NWNhYmQyM2RkNTVhZDkzOWQwMTRiNTgyOTJlZDlkNGVhMi4uNjhlMDgzNTJhNGMxMGQ4Njhi
ZjFlNDY5YmY3NWM5NTZkMTNmMDU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAtNjAsNyArNjAsNyBAQCB2
b2lkIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX3Jh
bmdlVG9CZVJlcGxhY2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2Vs
ZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCisgICAgaWYgKCFkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoIWNoYXJhY3RlckNvdW50KCptX3JhbmdlVG9CZVJlcGxh
Y2VkKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggNTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRhMjFjOTkxNzAyZjY1ZTc4Ny4u
NDk2OTkxOWQ5MWExMTQ5NWMyOThjOTJhNzY2NzI2YjkyZTE2OTUwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTExODEs
NyArMTE4MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
IAogICAgIC8vIEZJWE1FOiBDYW4gdGhpcyB3YWl0IHVudGlsIGFmdGVyIHRoZSBvcGVyYXRpb24g
aGFzIGJlZW4gcGVyZm9ybWVkPyAgVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCiAgICAgLy8gYW55
IHdvcmsgcGVyZm9ybWVkIGFmdGVyIHRoaXMgdGhhdCBxdWVyaWVzIG9yIHVzZXMgdGhlIHR5cGlu
ZyBzdHlsZS4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAg
ICBkb2N1bWVudCgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKIAogICAgIC8vIFdl
IGRvbid0IHdhbnQgdGhlIGRlc3RpbmF0aW9uIHRvIGVuZCB1cCBpbnNpZGUgbm9kZXMgdGhhdCB3
ZXJlbid0IHNlbGVjdGVkLiAgVG8gYXZvaWQgdGhhdCwgd2UgbW92ZSB0aGUKICAgICAvLyBwb3Np
dGlvbiBmb3J3YXJkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZpc2libGUgcG9zaXRpb24gc28gd2Un
cmUgc3RpbGwgYXQgdGhlIHNhbWUgdmlzaWJsZSBsb2NhdGlvbiwgYnV0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBjMDY1YzAyY2ExM2Zk
MjUxNzBkNmIyMWIxZjg5OGU5YmE3OWJlNjM4Li4wZGQyNmE4MWU5MGI2Nzg3NGMzMzVjZWYxMjEw
N2UyMTRiZGZkODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9u
Q29tbWFuZC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgU2V0U2VsZWN0aW9uQ29tbWFuZDo6U2V0U2Vs
ZWN0aW9uQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGkKIAog
dm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gZnJhbWUoKS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rpb24u
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQpICYmICFtX3NlbGVjdGlvblRv
U2V0LmlzTm9uZU9yT3JwaGFuZWQoKSkgewogICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9u
KG1fc2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgU2V0
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6
ZG9VbmFwcGx5KCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUoKS5z
ZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rpb24uc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHN0
YXJ0aW5nU2VsZWN0aW9uKCkpICYmICFzdGFydGluZ1NlbGVjdGlvbigpLmlzTm9uZU9yT3JwaGFu
ZWQoKSkKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigp
LCBtX29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCmluZGV4
IDE3MmQ4NWZkNDY2ZjI4MzY2YjU1ODA2ZDA5YmY2MDFmZTFjNWY4MTkuLjUwYzE3NTNmMTZkOTY4
ZmE5NmJjMmJjNmI2MTFiNDk4ZmYyNDk0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKQEAgLTk4LDggKzk4LDggQEAgdm9pZCBTcGVsbENoZWNrUmVxdWVzdDo6cmVx
dWVzdGVyRGVzdHJveWVkKCkKICAgICBtX2NoZWNrZXIgPSBudWxscHRyOwogfQogCi1TcGVsbENo
ZWNrZXI6OlNwZWxsQ2hlY2tlcihGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQor
U3BlbGxDaGVja2VyOjpTcGVsbENoZWNrZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9k
b2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KCp0
aGlzLCAmU3BlbGxDaGVja2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCkKIHsK
IH0KQEAgLTExNCw3ICsxMTQsNyBAQCBTcGVsbENoZWNrZXI6On5TcGVsbENoZWNrZXIoKQogCiBU
ZXh0Q2hlY2tlckNsaWVudCogU3BlbGxDaGVja2VyOjpjbGllbnQoKSBjb25zdAogewotICAgIFBh
Z2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gcGFnZS0+ZWRpdG9yQ2xpZW50KCkudGV4dENoZWNrZXIoKTsKQEAgLTEzMSw3ICsxMzEsNyBA
QCB2b2lkIFNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKQog
CiBib29sIFNwZWxsQ2hlY2tlcjo6aXNBc3luY2hyb25vdXNFbmFibGVkKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpOwogfQogCiBib29sIFNwZWxsQ2hlY2tlcjo6Y2FuQ2hlY2tBc3lu
Y2hyb25vdXNseShSYW5nZSYgcmFuZ2UpIGNvbnN0CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBT
cGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVl
c3QpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcHJvY2Vzc2lu
Z1JlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpOwotICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZygqbV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3Byb2Nl
c3NpbmdSZXF1ZXN0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAog
dm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVzdD4m
JiByZXF1ZXN0KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVj
ayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBWZWN0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbmRSZXBs
YWNlRm9yKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCByZXN1bHRzKTsKKyAgICBtX2RvY3VtZW50LmVk
aXRvcigpLm1hcmtBbmRSZXBsYWNlRm9yKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCByZXN1bHRzKTsK
IAogICAgIGlmIChtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyLnRvVUludDY0KCkgPCBpZGVudGlm
aWVyLnRvVUludDY0KCkpCiAgICAgICAgIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOwpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1
Y2NlZWQoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uCiAgICAg
ICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2luZ1R5cGVzKCkuY29udGFpbnMoVGV4dENoZWNraW5n
VHlwZTo6R3JhbW1hcikpCiAgICAgICAgICAgICBtYXJrZXJUeXBlcy5hZGQoRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIpOwogICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9j
ZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3Qt
PmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOwogICAgIH0KICAgICBkaWRDaGVjayhpZGVu
dGlmaWVyLCByZXN1bHRzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCmlu
ZGV4IGMzNmFlMmMzMGZlOWZiNWJlZjY3MDczMjIyZWM0M2U0NGFkN2YyYzAuLmQxOWZjZmRlMzg0
MTViMDExNWNmOGNkYWE0OGE4NjYwOGE4MTE5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bENoZWNrZXIuaApAQCAtNzYsNyArNzYsNyBAQCBjbGFzcyBTcGVsbENoZWNrZXIgewogcHVibGlj
OgogICAgIGZyaWVuZCBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKIAotICAgIGV4cGxpY2l0IFNw
ZWxsQ2hlY2tlcihGcmFtZSYpOworICAgIGV4cGxpY2l0IFNwZWxsQ2hlY2tlcihEb2N1bWVudCYp
OwogICAgIH5TcGVsbENoZWNrZXIoKTsKIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXNFbmFibGVk
KCkgY29uc3Q7CkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENoZWNr
Q2FuY2VsKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZENoZWNr
KFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiYpOwogCi0gICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1l
bnQ7CiAgICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0UmVxdWVzdElkZW50
aWZpZXI7CiAgICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0UHJvY2Vzc2Vk
SWRlbnRpZmllcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggOTllOGYxNTg4OGVhZTkzZjNkNjhlMDRkODllZmY1
NzU2NDZiYzM3OS4uNTkyMDg0NTM1MWVhNDAzYjhjODczNDNhZGE3NmI3NDM2M2RmMDVkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkb1VuYXBwbHkoKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2hhc0JlZW5VbmRvbmUpIHsKLSAgICAgICAg
ICAgIGZyYW1lKCkuZWRpdG9yKCkudW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2Vs
ZWN0aW9uKCksIG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOworICAgICAgICAgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KSwgbV9jb3JyZWN0ZWQsIG1fY29ycmVjdGlvbik7CiAgICAgICAgICAgICBtX2hhc0JlZW5VbmRv
bmUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX2NvcnJlY3Rl
ZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlv
bigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQpKQorICAg
IGlmICghZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxl
Y3Rpb25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9CZUNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA1YTZjNTNjMDM4MzcwY2ZiMGEzOGFiMGRh
NGY1NjE4ZmJhYmIyNWFlLi5mMzEyOGQ3ZWE1N2Q1Njc2MzkxOGEzMTNhYjc3YjY2NDllNWI2NDAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTE2MywxMyAr
MTYzLDEwIEBAIFR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50
LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6
ZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0
Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBpZiAoIWZyYW1lLT5z
ZWxlY3Rpb24oKS5pc1JhbmdlKCkpCisgICAgaWYgKCFkb2N1bWVudC5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsK
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9z
aXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5z
ZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tp
bmcpOwpAQCAtMTgzLDggKzE4MCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0
aW9uKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tCiB2b2lkIFR5
cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25z
IG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBpZiAoZ3JhbnVs
YXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxUeXBp
bmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9w
ZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7Ci0gICAgICAgICAgICB1cGRhdGVTZWxl
Y3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdl
dCgpLCBkb2N1bWVudC5mcmFtZSgpKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZy
b21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudCk7CiAg
ICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25z
ICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2
ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xOTksMTAgKzE5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6ZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywg
VGV4dEdyCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3Vt
ZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkpCiB7CiAgICAgLy8gRklYTUU6IEZvcndhcmQgZGVsZXRlIGluIFRleHRFZGl0IGFwcGVhcnMg
dG8gb3BlbiBhbmQgY2xvc2UgYSBuZXcgdHlwaW5nIGNvbW1hbmQuCi0gICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkg
ewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZnJhbWUpOworICAgICAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlv
bklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCks
IGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21w
bGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAg
ICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmco
b3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTIxNCwxMCArMjEwLDkgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1l
bnQsIE9wdGlvbnMgb3B0aW9ucywKICAgICBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQs
IEZvcndhcmREZWxldGVLZXksIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMsIGdyYW51bGFyaXR5KS0+
YXBwbHkoKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZl
cmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIEZy
YW1lKiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJl
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBEb2N1
bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gdHlwaW5nQ29tbWFu
ZC0+ZW5kaW5nU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI3LDMxICsyMjIs
MjUgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21D
dXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25zIG9w
dGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb24pCiB7Ci0gICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAgICAgaWYgKCF0
ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOworICAgICAg
ICBkb2N1bWVudC5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKICAgICAKLSAgICBpbnNlcnRUZXh0KGRvY3Vt
ZW50LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBv
c2l0aW9uKTsKKyAgICBpbnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBkb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCiAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IG5lZWQgdG8gdGFrZSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uIEl0IHNob3Vs
ZCBiZSBpZGVudGljYWwgdG8gRnJhbWVTZWxlY3Rpb24ncyBjdXJyZW50IHNlbGVjdGlvbi4KIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9u
LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQog
ewotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VS
VChmcmFtZSk7Ci0KICAgICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQg
KHRleHQgJXMpIiwgdGV4dC51dGY4KCkuZGF0YSgpKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKIAogICAgIFN0cmluZyBuZXdUZXh0ID0gZGlzcGF0Y2hCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCh0ZXh0LCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGNvbXBvc2l0aW9uVHlwZSA9
PSBUZXh0Q29tcG9zaXRpb25QZW5kaW5nKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHN0YXJ0aW5n
IGFuZCBlbmRpbmcgc2VsZWN0aW9uIGFwcHJvcHJpYXRlbHkgaWYgd2UgYXJlIHVzaW5nIGEgc2Vs
ZWN0aW9uCiAgICAgLy8gdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rp
b24uICBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgY2hhbmdlIEVkaXRDb21tYW5kCiAgICAgLy8g
dG8gZGVhbCB3aXRoIGN1c3RvbSBzZWxlY3Rpb25zIGluIGEgZ2VuZXJhbCB3YXkgdGhhdCBjYW4g
YmUgdXNlZCBieSBhbGwgb2YgdGhlIGNvbW1hbmRzLgotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9y
VHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVu
dCkpIHsKICAgICAgICAgaWYgKGxhc3RUeXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKSAh
PSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24pIHsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5zZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNlcnRpb24pOwogICAgICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNl
cnRpb24pOwpAQCAtMjY2LDEyICsyNTUsMTIgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMKICAg
ICB9CiAKICAgICBhdXRvIGNtZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgSW5z
ZXJ0VGV4dCwgbmV3VGV4dCwgb3B0aW9ucywgY29tcG9zaXRpb25UeXBlKTsKLSAgICBhcHBseVRl
eHRJbnNlcnRpb25Db21tYW5kKGZyYW1lLmdldCgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvcklu
c2VydGlvbiwgY3VycmVudFNlbGVjdGlvbik7CisgICAgYXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFu
ZChkb2N1bWVudC5mcmFtZSgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvckluc2VydGlvbiwgY3Vy
cmVudFNlbGVjdGlvbik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFr
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAgIGlmIChSZWZQdHI8
VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxP
cGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgIGxh
c3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7
CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlv
bkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAt
Mjg0LDcgKzI3Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKERvY3Vt
ZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYgZG9jdW1lbnQp
CiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxh
c3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7
CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxh
c3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKGZhbHNlKTsKICAgICAgICAgbGFz
dFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsK
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKTsKQEAgLTI5Niw3ICsyODUsNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVu
dChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAg
IGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7
CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBv
c2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3IpOwpAQCAtMzA3LDkgKzI5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zCiAgICAg
VHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Is
IGVtcHR5U3RyaW5nKCksIG9wdGlvbnMpLT5hcHBseSgpOwogfQogCi1SZWZQdHI8VHlwaW5nQ29t
bWFuZD4gVHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
ZyhGcmFtZSYgZnJhbWUpCitSZWZQdHI8VHlwaW5nQ29tbWFuZD4gVHlwaW5nQ29tbWFuZDo6bGFz
dFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENvbW1hbmQgPSBmcmFt
ZS5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKKyAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENv
bW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGRvY3VtZW50LmVkaXRvcigpLmxhc3RFZGl0Q29tbWFu
ZCgpOwogICAgIGlmICghbGFzdEVkaXRDb21tYW5kIHx8ICFsYXN0RWRpdENvbW1hbmQtPmlzVHlw
aW5nQ29tbWFuZCgpIHx8ICFzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21t
YW5kLmdldCgpKS0+aXNPcGVuRm9yTW9yZVR5cGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMzIxLDE2ICszMTAsMTYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjpzaG91bGREZWZl
cldpbGxBcHBseUNvbW1hbmRVbnRpbEFkZGluZ1R5cGluZ0NvbW1hbmQoKSBjb25zdAogICAgIHJl
dHVybiAhbV9pc0hhbmRsaW5nSW5pdGlhbFR5cGluZ0NvbW1hbmQgfHwgZWRpdEFjdGlvbklzRGVs
ZXRlQnlUeXBpbmcoZWRpdGluZ0FjdGlvbigpKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjpj
bG9zZVR5cGluZyhGcmFtZSogZnJhbWUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygq
ZnJhbWUpKQorICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPmNsb3NlVHlwaW5nKCk7CiB9CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotdm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXND
dXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhGcmFtZSogZnJhbWUsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6ZW5zdXJl
TGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCiB7
Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlmIChSZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0RW5kaW5nU2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb25Pbkxhc3RJbnNlcnRDb21tYW5kKG5ld1NlbGVjdGlv
bik7CiAgICAgfQpAQCAtNDM2LDE5ICs0MjUsMTcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkaWRB
cHBseUNvbW1hbmQoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRl
clR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKIHsKLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlmICghZnJhbWUuZWRp
dG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQotICAgICAgICAmJiAhZnJh
bWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAg
ICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCi0g
ICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFi
bGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2Vt
ZW50RW5hYmxlZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlz
QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50
KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAgICAgICYm
ICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQo
KQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNl
bWVudEVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZnJhbWUuZWRpdG9y
KCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCisgICAgaWYgKGRvY3VtZW50KCkuZWRp
dG9yKCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVybjsKICNl
bHNlCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAvLyBUYWtlIGEg
bG9vayBhdCB0aGUgc2VsZWN0aW9uIHRoYXQgcmVzdWx0cyBhZnRlciB0eXBpbmcgYW5kIGRldGVy
bWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gc3BlbGxjaGVjay4gCkBAIC00NjYsOSArNDUzLDkgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0Nv
bW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2aW91c1dv
cmQ7CiAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1h
bmQ6Okluc2VydFRleHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0TGlu
ZUJyZWFrIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNl
cGFyYXRvciB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpKQogICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJldmlv
dXNXb3JkID0gcGxhaW5UZXh0KCpyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAg
ICBmcmFtZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVu
ZGluZ1NlbGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9X
b3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHko
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5z
ZXJ0VGV4dCkKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0
VUlUaW1lcigpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5zdGFydEFsdGVybmF0
aXZlVGV4dFVJVGltZXIoKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlw
ZSk7CiAgICAgICAgIC8vIElmIHRoaXMgYnVnIGdldHMgZml4ZWQsIHRoaXMgUExBVEZPUk0oSU9T
X0ZBTUlMWSkgY29kZSBjb3VsZCBiZSByZW1vdmVkOgpAQCAtNDgzLDcgKzQ3MCw3IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5k
IGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDEgPSBzdGFydE9mV29yZChw
cmV2aW91cywgc3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMiA9IHN0
YXJ0T2ZXb3JkKHN0YXJ0LCBzdGFydFdvcmRTaWRlKTsKICAgICAgICAgaWYgKHAxICE9IHAyKQot
ICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9X
b3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2UpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCBmYWxzZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
fQogfQpAQCAtNDk3LDI2ICs0ODQsMjYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlw
aW5nVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEcKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoIXJhbmdlIHx8IGlzRWRpdGluZ1RleHRBcmVhT3JU
ZXh0SW5wdXQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRp
dGluZygqdGhpcywgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdz
KCkpOworICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5n
KCp0aGlzLCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7
CiAKLSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB7
IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoKnJhbmdlKSB9KTsKKyAgICByZXR1cm4gZG9jdW1lbnQo
KS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB7IDEsIFN0YXRpY1JhbmdlOjpjcmVh
dGUoKnJhbmdlKSB9KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3Bl
bkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVj
dG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKICAgICB1cGRhdGVQcmVzZXJ2ZXNUeXBpbmdTdHls
ZShjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVk
aXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICAgICAvLyBTaW5jZSB0aGUgc3BlbGxjaGVj
a2luZyBjb2RlIG1heSBhbHNvIHBlcmZvcm0gY29ycmVjdGlvbnMgYW5kIG90aGVyIHJlcGxhY2Vt
ZW50cywgaXQgc2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgdHlwaW5nIGNoYW5nZXMuCiAgICAgaWYg
KCFtX3Nob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKQogICAgICAgICBtYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAjZWxzZQogICAgIC8vIFRo
ZSBvbGQgc3BlbGxjaGVja2luZyBjb2RlIHJlcXVpcmVzIHRoYXQgY2hlY2tpbmcgYmUgZG9uZSBm
aXJzdCwgdG8gcHJldmVudCBpc3N1ZXMgbGlrZSB0aGF0IGluIDY4NjQwNzIsIHdoZXJlIDxkb2Vz
bid0PiBpcyBtYXJrZWQgYXMgbWlzc3BlbGxlZC4KICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7Ci0gICAgZnJhbWUuZWRpdG9yKCkuYXBw
bGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRp
bmcoKnRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTUzNSw5ICs1MjIsOSBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KGNvbnN0IFN0cmluZyAmdGV4
dCwgYm9vbCBzZQogewogICAgIExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZCAlcCBpbnNlcnRU
ZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSAodGV4dCAlcywgc2VsZWN0SW5zZXJ0ZWRUZXh0ICVk
KSIsIHRoaXMsIHRleHQudXRmOCgpLmRhdGEoKSwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKIAotICAg
IEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRU
ZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFRleHQo
dGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBB
WFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9j
dW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsIHRl
eHQsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9u
KCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgp
KTsKIH0KIApAQCAtNTUwLDkgKzUzNyw2IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4
dFJ1bldpdGhvdXROZXdsaW5lcyhjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0CiAgICAg
ICAgIG1fY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvbk5vbmUgPyBJbnNlcnRUZXh0
Q29tbWFuZDo6UmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMgOiBJbnNlcnRU
ZXh0Q29tbWFuZDo6UmViYWxhbmNlQWxsV2hpdGVzcGFjZXMsIEVkaXRBY3Rpb246OlR5cGluZ0lu
c2VydFRleHQpOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RGTW92ZShjb21tYW5k
KSwgZW5kaW5nU2VsZWN0aW9uKCkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09w
ZW5Db21tYW5kKEluc2VydFRleHQpOwogfQogCkBAIC01NjUsMTcgKzU0OSwxNCBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5z
ZXJ0TGluZUJyZWFrKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWtB
bmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0
IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nl
c3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRMaW5lQnJlYWsoKTsKLSAgICByZXBsYWNlZFRleHQu
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5
cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAg
IGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVw
bGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNTg4LDE3ICs1NjksMTQgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgICAgICByZXR1cm47CiAKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQoKSwgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNlcnRQ
YXJhZ3JhcGgpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVm
PEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vz
c2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRv
Y3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFncmFwaFNl
cGFyYXRvcigpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlw
aW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC02MTUs
MTcgKzU5MywxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckluUXVvdGVkQ29udGVudCgpCiAgICAgfQogICAgICAgICAKICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotCi0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNl
cGFyYXRvckluUXVvdGVkQ29udGVudCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgp
CiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCBy
ZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7Ci0gICAgcmVwbGFjZWRUZXh0
LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2Jq
ZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRU
eXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAg
ICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJl
cGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTY1MiwxMCArNjI3LDkgQEAgYm9vbCBUeXBpbmdDb21t
YW5kOjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRv
S2lsbFJpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8
RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9j
dW1lbnQoKS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVw
ZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25BZnRlclVuZG87CkBAIC03NDgsMjAgKzcyMiwyMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3Vs
ZEFkZAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9y
IHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4
dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4
dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3Nl
VHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9u
KCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2Vs
ZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3Vs
ZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVs
YXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0KTsK
KyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlv
blRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNl
cnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CiAKICAgICAvLyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5
IG5vdGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUg
c2VsZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxldGUpOwpAQCAtNzc4LDEwICs3
NTIsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBz
aG91bGRBZGRUb0tpbGxSaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOworICAgIFJlZlB0cjxGcmFtZT4gcHJv
dGVjdG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKLSAgICBmcmFtZS5lZGl0b3IoKS51cGRhdGVN
YXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CisgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVsZXRlOwogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwpAQCAtODU1LDEzICs4MjgsMTMgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGJvb2wgc2gKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAvLyBXb3Jr
YXJvdW5kIGZvciB0aGlzIGJ1ZzoKICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ2NTM3NTU+
IFVJS2l0IHRleHQgd2lkZ2V0cyBzaG91bGQgdXNlIFdlYktpdCBlZGl0aW5nIEFQSSB0byBtYW5p
cHVsYXRlIHRleHQKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKLSAgICAgICAgY2xvc2VUeXBpbmcoJmZyYW1lKTsKKyAgICAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
ICAgICBjbG9zZVR5cGluZyhkb2N1bWVudCgpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1l
LnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCisg
ICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEZvcndhcmREZWxl
dGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkp
CkBAIC04NzEsNyArODQ0LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBwb3N0VGV4
dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxldGUpOwog
CiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRvcigpLmFk
ZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgICAg
ICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxl
dGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1v
ZGU6OkFwcGVuZFRleHQpOwogICAgIC8vIG1ha2UgdW5kbyBzZWxlY3Qgd2hhdCB3YXMgZGVsZXRl
ZAogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkFmdGVyVW5kbyk7CiAgICAgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSwgbV9z
bWFydERlbGV0ZSwgLyogbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSovIHRydWUsIC8qIHJlcGxhY2Uq
LyBmYWxzZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzLCAvKnNhbml0aXplTWFya3VwKi8gdHJ1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCmluZGV4IDc2ZTVmOTliZjky
NTM4NTc1Y2FhMzg3NmJiOWI2YjU1NGI5ZmI3NWMuLjg5NmJmMGJkMTVkYmUzZDQ4MTg0ODk1ZjY0
M2YxYzg2OWQ1OGViNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCkBA
IC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRMaW5lQnJlYWso
RG9jdW1lbnQmLCBPcHRpb25zKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3IoRG9jdW1lbnQmLCBPcHRpb25zKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgdm9pZCBj
bG9zZVR5cGluZyhGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKERvY3VtZW50
Jik7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgdm9pZCBlbnN1cmVMYXN0
RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhGcmFtZSos
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBlbnN1cmVMYXN0RWRp
dENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICNlbmRpZgogCiAgICAgdm9pZCBpbnNlcnRUZXh0
KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQpOwpAQCAtMTAzLDcg
KzEwMyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc09wZW5Gb3JNb3JlVHlwaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGVuRm9yTW9yZVR5cGluZzsgfQogICAgIHZvaWQgY2xvc2VUeXBpbmcoKSB7
IG1fb3BlbkZvck1vcmVUeXBpbmcgPSBmYWxzZTsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxUeXBp
bmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJik7
CisgICAgc3RhdGljIFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKERvY3VtZW50Jik7CiAKICAgICB2b2lkIGRvQXBwbHkoKSBmaW5hbDsK
ICAgICBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0IGZpbmFsOwpAQCAtMTIyLDcgKzEyMiw3
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRFdmVudERhdGFUcmFu
c2ZlcigpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNCZWZvcmVJbnB1dEV2ZW50Q2FuY2VsYWJs
ZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uSWZEaWZm
ZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwgRnJhbWUqKTsKKyAgICBz
dGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9u
KFR5cGluZ0NvbW1hbmQqLCBEb2N1bWVudCYpOwogCiAgICAgdm9pZCB1cGRhdGVQcmVzZXJ2ZXNU
eXBpbmdTdHlsZShFVHlwaW5nQ29tbWFuZCk7CiAgICAgYm9vbCB3aWxsQWRkVHlwaW5nVG9PcGVu
Q29tbWFuZChFVHlwaW5nQ29tbWFuZCwgVGV4dEdyYW51bGFyaXR5LCBjb25zdCBTdHJpbmcmID0g
ZW1wdHlTdHJpbmcoKSwgUmVmUHRyPFJhbmdlPiYmID0gbnVsbHB0cik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggZjJhMmQ1MmFjNWFiZjRlNGYxMzExM2NhMjVk
MWIyMGExNzM4ZmE2OS4uNTM4NDliNGVhZTE4ODhjMmZkOTQ4Y2MyODYyNjk3NmU3NDFiZmYzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMzg5LDcgKzM4OSw3
IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRl
eHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAvLyBoYXZlIGEgc3RhbGUgc2VsZWN0aW9uLgogdm9pZCBF
ZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JN
b3JlVHlwaW5nKCkKIHsKLSAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRI
YXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygmbV9mcmFtZSwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVk
aXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcobV9kb2N1bWVu
dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGM3MTZk
NzI4MGY0NjJjYjU2NzM3NTdiNGJhNGUzYjI0YWJlZThkZTAuLmEyNjczNDViZTU0NmVlN2Y0NjEx
OWQ4MzJjOGRlMTkxNmE4YWVjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cApAQCAtNTQxLDExICs1NDEsMTQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcCgpCiB2b2lkIEZy
YW1lTG9hZGVyOjp3aWxsVHJhbnNpdGlvblRvQ29tbWl0dGVkKCkKIHsKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZnJhbWUgaXMgc3RpbGwgZnVsbHkgaW4gcGxhY2UgKG5v
dCBjYWNoZWQsIG5vdCBkZXRhY2hlZCksIGJ1dCB3aWxsIGJlIHJlcGxhY2VkLgorICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQor
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlv
bigpKSB7CisgICAgaWYgKGRvY3VtZW50LT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAg
ICAgICAgIC8vIFRoZSB0ZXh0IHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gRE9NLCBzbyBpdCdzIGJl
dHRlciB0byBjb25maXJtIHRoYW4gdG8gY2FuY2VsIHRoZSBjb21wb3NpdGlvbi4KLSAgICAgICAg
bV9mcmFtZS5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKLSAgICAgICAgaWYgKEVkaXRv
ckNsaWVudCogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS5lZGl0b3IoKS5jbGllbnQoKSkgeworICAg
ICAgICBkb2N1bWVudC0+ZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgICAgIGlm
IChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCA9IGRvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQo
KSkgewogICAgICAgICAgICAgZWRpdG9yQ2xpZW50LT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KCZtX2ZyYW1lKTsKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRp
b24oJm1fZnJhbWUpOwogICAgICAgICB9CkBAIC01NjcsOCArNTcwLDYgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6Y2xvc2VVUkwoKQogICAgIH0KIAogICAgIHN0b3BMb2FkaW5nKHVubG9hZEV2ZW50UG9s
aWN5KTsKLSAgICAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVyYXRpb25z
KCk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQpAQCAtNTgwLDcgKzU4MSw2
IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQogICAgIH0KIAogICAgIG1fZnJhbWUu
bmF2aWdhdGlvblNjaGVkdWxlcigpLmNhbmNlbCgpOwotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xl
YXJMYXN0RWRpdENvbW1hbmQoKTsKIAogICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgIG1f
ZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSBmYWxzZTsKQEAgLTY0Myw4ICs2NDMsNiBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkQ2xlYXJXaW5kb3dOYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29u
c3QgRG9jdW1lbnQmIG5ldwogCiB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3
RG9jdW1lbnQsIGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0T2Jq
ZWN0cywgYm9vbCBjbGVhckZyYW1lVmlldywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxl
RE9NV2luZG93Q3JlYXRpb24pCiB7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhcigpOwotCiAg
ICAgYm9vbCBuZWVkZWRDbGVhciA9IG1fbmVlZHNDbGVhcjsKICAgICBtX25lZWRzQ2xlYXIgPSBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IGZmNDEz
ZDk2NjYzZTE0YTNjNDk1ZjZjMzNmOTU0NWRhOWZmODZjNzYuLmUxZTllYjM4Njc0MTNmNzhmMGQ3
NGQ4ZmM5NmY3NThkMTk5OWI3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzaGFkb3dBZGp1c3Rl
ZFRhYkluZGV4KEVsZW1lbnQmIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogCiBGb2N1
c0NvbnRyb2xsZXI6OkZvY3VzQ29udHJvbGxlcihQYWdlJiBwYWdlLCBPcHRpb25TZXQ8QWN0aXZp
dHlTdGF0ZTo6RmxhZz4gYWN0aXZpdHlTdGF0ZSkKICAgICA6IG1fcGFnZShwYWdlKQotICAgICwg
bV9pc0NoYW5naW5nRm9jdXNlZEZyYW1lKGZhbHNlKQorICAgICwgbV9pc0NoYW5naW5nRm9jdXNl
ZERvY3VtZW50KGZhbHNlKQogICAgICwgbV9hY3Rpdml0eVN0YXRlKGFjdGl2aXR5U3RhdGUpCiAg
ICAgLCBtX2ZvY3VzUmVwYWludFRpbWVyKCp0aGlzLCAmRm9jdXNDb250cm9sbGVyOjpmb2N1c1Jl
cGFpbnRUaW1lckZpcmVkKQogewpAQCAtMzQ2LDMwICszNDYsMjcgQEAgRm9jdXNDb250cm9sbGVy
OjpGb2N1c0NvbnRyb2xsZXIoUGFnZSYgcGFnZSwgT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU6OkZs
YWc+IGFjdGkKIHZvaWQgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkRnJhbWUoRnJhbWUqIGZy
YW1lKQogewogICAgIEFTU0VSVCghZnJhbWUgfHwgZnJhbWUtPnBhZ2UoKSA9PSAmbV9wYWdlKTsK
LSAgICBpZiAobV9mb2N1c2VkRnJhbWUgPT0gZnJhbWUgfHwgbV9pc0NoYW5naW5nRm9jdXNlZEZy
YW1lKQorICAgIGlmICgoZnJhbWUgJiYgbV9mb2N1c2VkRG9jdW1lbnQgPT0gZnJhbWUtPmRvY3Vt
ZW50KCkpIHx8IG1faXNDaGFuZ2luZ0ZvY3VzZWREb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9pc0NoYW5naW5nRm9jdXNlZEZyYW1lID0gdHJ1ZTsKLQotICAgIFJlZlB0cjxGcmFt
ZT4gb2xkRnJhbWUgPSBtX2ZvY3VzZWRGcmFtZTsKLSAgICBSZWZQdHI8RnJhbWU+IG5ld0ZyYW1l
ID0gZnJhbWU7Ci0KLSAgICBtX2ZvY3VzZWRGcmFtZSA9IG5ld0ZyYW1lOworICAgIG1faXNDaGFu
Z2luZ0ZvY3VzZWREb2N1bWVudCA9IHRydWU7CiAKICAgICAvLyBOb3cgdGhhdCB0aGUgZnJhbWUg
aXMgdXBkYXRlZCwgZmlyZSBldmVudHMgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGZvY3VzZWQg
c3RhdGVzIG9mIGJvdGggZnJhbWVzLgotICAgIGlmIChvbGRGcmFtZSAmJiBvbGRGcmFtZS0+dmll
dygpKSB7Ci0gICAgICAgIG9sZEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRGb2N1c2VkKGZhbHNlKTsK
LSAgICAgICAgb2xkRnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZl
bnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICBpZiAobV9mb2N1c2VkRG9jdW1lbnQgJiYgbV9m
b2N1c2VkRG9jdW1lbnQtPnZpZXcoKSkgeworICAgICAgICBtX2ZvY3VzZWREb2N1bWVudC0+c2Vs
ZWN0aW9uKCkuc2V0Rm9jdXNlZChmYWxzZSk7CisgICAgICAgIG1fZm9jdXNlZERvY3VtZW50LT5k
aXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmJsdXJFdmVudCwg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAgICAgfQog
Ci0gICAgaWYgKG5ld0ZyYW1lICYmIG5ld0ZyYW1lLT52aWV3KCkgJiYgaXNGb2N1c2VkKCkpIHsK
LSAgICAgICAgbmV3RnJhbWUtPnNlbGVjdGlvbigpLnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgICAg
IG5ld0ZyYW1lLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmZvY3VzRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXND
YW5jZWxhYmxlOjpObykpOworICAgIG1fZm9jdXNlZEZyYW1lID0gZnJhbWU7CisgICAgbV9mb2N1
c2VkRG9jdW1lbnQgPSBmcmFtZT8gbV9mb2N1c2VkRnJhbWUtPmRvY3VtZW50KCkgOiBudWxscHRy
OworICAgIGlmIChtX2ZvY3VzZWREb2N1bWVudCAmJiBtX2ZvY3VzZWREb2N1bWVudC0+dmlldygp
ICYmIGlzRm9jdXNlZCgpKSB7CisgICAgICAgIG1fZm9jdXNlZERvY3VtZW50LT5zZWxlY3Rpb24o
KS5zZXRGb2N1c2VkKHRydWUpOworICAgICAgICBtX2ZvY3VzZWREb2N1bWVudC0+ZGlzcGF0Y2hX
aW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBFdmVudDo6
Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKICAgICB9CiAKLSAgICBt
X3BhZ2UuY2hyb21lKCkuZm9jdXNlZEZyYW1lQ2hhbmdlZChuZXdGcmFtZS5nZXQoKSk7CisgICAg
bV9wYWdlLmNocm9tZSgpLmZvY3VzZWRGcmFtZUNoYW5nZWQoZnJhbWUpOwogCi0gICAgbV9pc0No
YW5naW5nRm9jdXNlZEZyYW1lID0gZmFsc2U7CisgICAgbV9pc0NoYW5naW5nRm9jdXNlZERvY3Vt
ZW50ID0gZmFsc2U7CiB9CiAKIEZyYW1lJiBGb2N1c0NvbnRyb2xsZXI6OmZvY3VzZWRPck1haW5G
cmFtZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAppbmRleCA2Y2Q2
MDBmNzgyZTcyZjQxNzdjYmViMGQ2ZmE0NDZjMWM3ODMzYzJkLi4zNzFjZGMzMTdhN2M3ZmI3ZTIy
YTUzZWU2NjQxNDkwZmRkMTAzN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEZvY3VzQ29udHJvbGxl
cihQYWdlJiwgT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU6OkZsYWc+KTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0Rm9jdXNlZEZyYW1lKEZyYW1lKik7CisgICAgRG9jdW1lbnQqIGZvY3Vz
ZWREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZERvY3VtZW50LmdldCgpOyB9CiAg
ICAgRnJhbWUqIGZvY3VzZWRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZEZyYW1lLmdl
dCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRnJhbWUmIGZvY3VzZWRPck1haW5GcmFtZSgpIGNv
bnN0OwogCkBAIC0xMTYsOCArMTE3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZvY3VzUmVwYWlu
dFRpbWVyRmlyZWQoKTsKIAogICAgIFBhZ2UmIG1fcGFnZTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+
IG1fZm9jdXNlZERvY3VtZW50OwogICAgIFJlZlB0cjxGcmFtZT4gbV9mb2N1c2VkRnJhbWU7Ci0g
ICAgYm9vbCBtX2lzQ2hhbmdpbmdGb2N1c2VkRnJhbWU7CisgICAgYm9vbCBtX2lzQ2hhbmdpbmdG
b2N1c2VkRG9jdW1lbnQ7CiAgICAgT3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU6OkZsYWc+IG1fYWN0
aXZpdHlTdGF0ZTsKIAogICAgIFRpbWVyIG1fZm9jdXNSZXBhaW50VGltZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCmluZGV4IDM4NWUzN2E2ZDBjOTBlNjMzYTNiN2I0Mjg3MmM2MTZlMzgwODY0MjYuLjI5
MDdiNDg1Yjk0YzY2YWM1MDY4NWM5OWRjMTVkZDVlZWVmZmNkMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCkBAIC0xNTYsOCArMTU2LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UmIHBhZ2UsIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBVbmlxdWVSZWY8RnJhbWVMb2EKICAgICAsIG1f
bmF2aWdhdGlvblNjaGVkdWxlcihtYWtlVW5pcXVlUmVmPE5hdmlnYXRpb25TY2hlZHVsZXI+KCp0
aGlzKSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVudCkKICAgICAsIG1fc2NyaXB0
KG1ha2VVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4oKnRoaXMpKQotICAgICwgbV9lZGl0b3Io
bWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKLSAgICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlx
dWVSZWY8RnJhbWVTZWxlY3Rpb24+KHRoaXMpKQogICAgICwgbV9hbmltYXRpb25Db250cm9sbGVy
KG1ha2VVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9w
YWdlWm9vbUZhY3RvcihwYXJlbnRQYWdlWm9vbUZhY3Rvcih0aGlzKSkKICAgICAsIG1fdGV4dFpv
b21GYWN0b3IocGFyZW50VGV4dFpvb21GYWN0b3IodGhpcykpCkBAIC01NTQsNyArNTUyLDcgQEAg
Ym9vbCBGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKCkKICAgICBjYXNlIERPTVBhc3RlQWNj
ZXNzUG9saWN5OjpEZW5pZWQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIERPTVBh
c3RlQWNjZXNzUG9saWN5OjpOb3RSZXF1ZXN0ZWRZZXQ6IHsKLSAgICAgICAgYXV0byogY2xpZW50
ID0gbV9lZGl0b3ItPmNsaWVudCgpOworICAgICAgICBhdXRvKiBjbGllbnQgPSBlZGl0b3IoKS5j
bGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTkzNyw3ICs5MzUsNyBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0
b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZWRpdG9yLT5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsQXNJZ25vcmVkKCk7CisgICAgZWRpdG9yKCkuZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bEFzSWdub3JlZCgpOwogCiAgICAgLy8gUmVzcGVjdCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVk
IiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNWRyBkb2N1bWVudHMuCiAgICAgLy8gRklYTUU6IEhv
dyB0byBoYW5kbGUgY29tcG91bmQgZG9jdW1lbnRzICsgem9vbUFuZFBhbj0iZGlzYWJsZWQiPyBO
ZWVkcyBTVkcgV0cgY2xhcmlmaWNhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCAzZDQzYTk0YmVh
OTU1NmM5OGRjNzQyM2FiN2VhZDlhOTJhNTJjNmZlLi4wOTMyYTgzY2I2NzRmNmY4Yzk2MTFlZDlm
Njk5OWQxN2I2MmQxNTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlICJBYnN0cmFjdEZyYW1lLmgiCiAjaW5jbHVkZSAiQWRqdXN0Vmlld1NpemVPck5vdC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiUGFnZUlkZW50aWZpZXIuaCIKQEAgLTE2
MywxNCArMTY0LDE0IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsK
ICAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsKIAotICAgIEVkaXRvciYgZWRpdG9yKCkgeyBy
ZXR1cm4gbV9lZGl0b3I7IH0KLSAgICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0
dXJuIG1fZWRpdG9yOyB9CisgICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBkb2N1bWVudCgp
LT5lZGl0b3IoKTsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4g
ZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0KICAgICBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigp
IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgY29uc3QgRXZlbnRIYW5kbGVyJiBldmVu
dEhhbmRsZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50SGFuZGxlcjsgfQogICAgIEZyYW1lTG9h
ZGVyJiBsb2FkZXIoKSBjb25zdDsKICAgICBOYXZpZ2F0aW9uU2NoZWR1bGVyJiBuYXZpZ2F0aW9u
U2NoZWR1bGVyKCkgY29uc3Q7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0
dXJuIG1fc2VsZWN0aW9uOyB9Ci0gICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVj
dGlvbigpIHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CisgICAgY29uc3QgRnJh
bWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVj
dGlvbigpOyB9CiAgICAgRnJhbWVUcmVlJiB0cmVlKCkgY29uc3Q7CiAgICAgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlciYgYW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9
CiAgICAgY29uc3QgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CkBAIC0zMzgsOCArMzM5LDYgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOwogCiAgICAgVW5pcXVlUmVmPFNjcmlwdENv
bnRyb2xsZXI+IG1fc2NyaXB0OwotICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwotICAg
IFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiAgICAgVW5pcXVlUmVmPENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKIAogI2lmIEVOQUJM
RShEQVRBX0RFVEVDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4
IGViMDJmOGVjNDRkOTNhZDdhNmNiOTUxZjY5NzA2ZmM0ZDZmODBlMGUuLjNlZWU0MmZmMGNkMWU3
M2NmMDFiMjk1ZTk4ZDI4NTRlOWJiN2NmZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcApAQCAtNjgsMjEgKzY4LDE2IEBAIFJlZjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNh
dG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvckRhdGEmIGRhdGEpCiAKIFJlZlB0cjxUZXh0
SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJh
bmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQog
ewotICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5m
cmFtZSgpOworICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpLmRvY3VtZW50KCk7CiAKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0KLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGRvY3VtZW50LT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKICAgICBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb25zOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRk
KFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOwogICAgIHRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFy
YW5jZVVwZGF0ZXMpOwogI2VuZGlmCi0gICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVj
dGlvbkNoYW5nZSgqZnJhbWUsIHsgU2ltcGxlUmFuZ2UgeyByYW5nZSB9IH0sIHRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbnMpOworICAgIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25D
aGFuZ2UoZG9jdW1lbnQsIHsgU2ltcGxlUmFuZ2UgeyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVj
dGlvbk9wdGlvbnMpOwogCiAgICAgVGV4dEluZGljYXRvckRhdGEgZGF0YTsKIApAQCAtOTEsNyAr
ODYsNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dEluZAogCiAgICAgYm9vbCBpbmRpY2F0ZXNDdXJy
ZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBvbGRTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0
YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKKyAg
ICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmRvY3VtZW50LT5mcmFtZSgpLCByYW5n
ZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397048</attachid>
            <date>2020-04-20 19:54:52 -0700</date>
            <delta_ts>2020-04-21 14:41:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200420195451.patch</filename>
            <type>text/plain</type>
            <size>197671</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2
ZDA2MTE2ZWQ2Zjg5ZmFiOTBhM2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0
ZmQwMGUxNWI4OGQ3MjJlOTVhOTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4
NmExYjFlMWY1NDIxYmRiNzg2YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRU
aW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
IGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZvbnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFz
cyBGcmFtZTsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
RnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsx
NTc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21D
b250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVk
aXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBj
b25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFj
ZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5z
aWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3Mg
PSAwKTsKQEAgLTIxMTYsNiArMjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmll
ZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2Iz
YWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdk
MDBiYmYxMjBjMDM3OWVmMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJv
b2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAo
Y3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNz
cGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAt
MjIwLDEyICsyMjAsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50
Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0y
MzYsMTIgKzIzNiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2Vs
ZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAs
IHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJh
Z3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7
CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0
LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdn
ZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAo
IXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcg
PSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIg
bW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywg
d2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29y
cmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8g
dW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVs
IHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYg
KGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3Jp
Z2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29t
bWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRp
dG9yQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdl
KCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdl
KCkgPyAmbV9kb2N1bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAog
VGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChl
bmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OwogICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Up
OwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00
NzksMTIgKzQ3OSwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VyQ29udHJvbGxlciA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250
cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxh
Y2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUCiAKICAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICgh
c2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBl
bmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NTgsNyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAog
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5h
dGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUu
cGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgp
LT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0
aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5
NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9
IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
dHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRl
ZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldElu
UGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAg
Ym9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAg
ICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAg
dGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9j
dW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0g
VGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwpAQCAtNjUzLDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1
dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZi
MjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3
OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3Mg
RWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9
KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19F
TkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZl
VGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVT
U19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3
ZDFiOTY1MjQ2NDIwZDExODI2NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwx
NyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRo
ZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFz
IGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhp
cyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQg
dGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3Io
KS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFw
cGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAg
ICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51
bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246
OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndp
bGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsK
IAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigp
LndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0
byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
IC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhl
cmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
LCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBk
ZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgp
KTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
KyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVu
ZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1w
dHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBo
IHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBh
cmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUz
YzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4
NzJhY2I4OGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5n
IHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBw
cmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQw
LDcgKzc0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVS
ZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQu
cHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2ls
bCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgp
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0
VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAg
aWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBm
cmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIg
bWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxh
Y2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICgh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAg
ICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyAr
OTU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUy
Y2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUy
YjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9u
KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5k
OjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJu
ICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0
aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4
LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5k
Ojppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
OwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3
ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRl
eCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJj
OGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9u
KTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1h
bmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAg
IEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAg
IEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJl
ZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJj
Y2QwNTk1MzU1NWFhMjJiMjZmZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTg2OSw3ICs4NjksNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkK
IAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRv
cigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQz
MTZhNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAg
ICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpk
b2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJm
NjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLjg3ZWVkODk0MTc4YzNkZDExYzkzOGQ0ZjI2MzVk
NTA1YzdjZDRlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMs
OCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1
YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHko
Y29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0
aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBF
ZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29t
cG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1l
bnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJl
ZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRv
IGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkp
OwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
ICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lk
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJh
bWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxl
Y3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9u
PiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFt
ZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkp
CisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9w
dGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMp
Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9u
VG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2Vs
ZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAg
ICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxT
ZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNl
bGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNl
bGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBk
YXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBk
YXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNl
bmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAg
ICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05v
dFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwg
b3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQg
dGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNl
IHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlv
bi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAg
Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVu
dCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNr
IHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9y
IEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3Io
bV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgp
KTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAog
ZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRp
YyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBD
bGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQo
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9y
ZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBj
b25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBh
c3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRl
KCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0
b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0Fj
dGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1
bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxl
dGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJp
dHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wg
c21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFj
dGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4
dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRS
ZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODks
MTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9M
b2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgp
KTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAg
ICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRl
eHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRC
eVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKQEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
b3B5KCkKIHsgICAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBF
ZGl0b3I6OnRyeURIVE1MQ29weSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNw
YXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJv
YXJkRXZlbnRLaW5kOjpDdXQpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewot
ICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElu
cHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkK
KyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRT
dXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAg
LTc4MiwxNyArNzgyLDE3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBp
ZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxMiwxMiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0
aW9uKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFn
KTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSwgdWxUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2Rl
ID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAg
LTgyNywxMiArODI3LDEyIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlz
dFN0YXRlKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIG9sVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04NzIsNyArODcyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlz
dCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7
Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4g
bmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBA
IFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkKIAogdm9pZCBFZGl0b3I6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRU
YXJnZXRGcm9tKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBm
aW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
fQogCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0
aW5nU3R5bGVBbmRBY3Rpb24oKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFt
ZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNs
aWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRj
aElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0K
QEAgLTk4NCwxMyArOTg1LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5w
dXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlu
cHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZv
cmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0
IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNv
bHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0
cigpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5n
QWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rp
b25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNT
dHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+
dHJpU3RhdGVPZlN0eWxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZT
dHlsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAogICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZj
b21tYW5kKTsKIAogICAgICAgICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAg
ICAgICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkg
aW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQo
KSA9PSAmY29tbWFuZCkKQEAgLTEyMDAsMTYgKzEyMDEsMTkgQEAgdm9pZCBFZGl0b3I6OnJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9y
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1
bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFt
ZSgqZG9jdW1lbnQuZnJhbWUoKSkKKyAgICAsIG1fcHJvdGVjdGVkRnJhbWUoJm1fZnJhbWUpCiAg
ICAgLCBtX2tpbGxSaW5nKG1ha2VVbmlxdWU8UEFMOjpLaWxsUmluZz4oKSkKLSAgICAsIG1fc3Bl
bGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihmcmFtZSkpCi0gICAgLCBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
PihmcmFtZSkpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4o
ZG9jdW1lbnQpKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VVbmlxdWU8
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZG9jdW1lbnQpKQogICAgICwgbV9lZGl0b3JVSVVw
ZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpCiAjaWYg
RU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICAsIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIoKnRoaXMsICZF
ZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKQogI2VuZGlmCiB7CisKIH0K
IAogRWRpdG9yOjp+RWRpdG9yKCkgPSBkZWZhdWx0OwpAQCAtMTIyMCw3ICsxMjI0LDcgQEAgdm9p
ZCBFZGl0b3I6OmNsZWFyKCkKICAgICBpZiAobV9jb21wb3NpdGlvbk5vZGUpIHsKICAgICAgICAg
bV9jb21wb3NpdGlvbk5vZGUgPSBudWxscHRyOwogICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBj
bGllbnQgPSB0aGlzLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVudC0+ZGlzY2FyZGVkQ29t
cG9zaXRpb24oJm1fZnJhbWUpOworICAgICAgICAgICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3Np
dGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIH0KICAgICBtX2N1c3RvbUNvbXBvc2l0aW9u
VW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNs
ZWFyKCk7CkBAIC0xMjM4LDEyICsxMjQyLDEyIEBAIHZvaWQgRWRpdG9yOjpjbGVhcigpCiAKIGJv
b2wgRWRpdG9yOjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHRyaWdnZXJp
bmdFdmVudCwgVGV4dEV2ZW50SW5wdXRUeXBlIGlucHV0VHlwZSkKIHsKLSAgICByZXR1cm4gbV9m
cmFtZS5ldmVudEhhbmRsZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCB0cmlnZ2VyaW5n
RXZlbnQsIGlucHV0VHlwZSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1
dFR5cGUpOwogfQogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5ldmVudEhhbmRs
ZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCAwLCBUZXh0RXZlbnRJbnB1dENvbXBvc2l0
aW9uKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5oYW5k
bGVUZXh0SW5wdXRFdmVudCh0ZXh0LCAwLCBUZXh0RXZlbnRJbnB1dENvbXBvc2l0aW9uKTsKIH0K
IAogYm9vbCBFZGl0b3I6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcywg
RXZlbnQqIHRyaWdnZXJpbmdFdmVudCkKQEAgLTEzMDMsMTAgKzEzMDcsOCBAQCBib29sIEVkaXRv
cjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwg
Ym9vbCBzZWxlY3RJbgogICAgICAgICAgICAgLy8gdGhlbiB0aGlzIGNvZGUgc2hvdWxkIGNvbmRp
dGlvbmFsaXplIHJldmVhbGluZyBzZWxlY3Rpb24gb24gd2hldGhlciB0aGUgaWdub3JlU2VsZWN0
aW9uQ2hhbmdlcygpIGJpdAogICAgICAgICAgICAgLy8gaXMgc2V0IGZvciB0aGUgbmV3bHkgZm9j
dXNlZCBmcmFtZS4KICAgICAgICAgICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxk
UmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9uKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYXV0byogZWRpdGVkRnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGVkaXRlZEZyYW1lLT5wYWdlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwYWdlLT5yZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBh
Z2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTMxOSwxMCArMTMyMSwxMCBA
QCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1f
ZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9u
IGNhcmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpOwogICAgIGJvb2wgYWxpZ25Ub0VkZ2UgPSBpc0VuZE9mRWRp
dGFibGVPck5vbkVkaXRhYmxlQ29udGVudChjYXJldCk7CiAgICAgYm9vbCBhdXRvY29ycmVjdGlv
bklzQXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVj
dGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNl
cnRMaW5lQnJlYWsoZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdD
b21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwpAQCAtMTMzOSwxMCAr
MTM0MSwxMCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwog
Ci0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAg
aWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24g
Y2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
OwogICAgIGJvb2wgYWxpZ25Ub0VkZ2UgPSBpc0VuZE9mRWRpdGFibGVPck5vbkVkaXRhYmxlQ29u
dGVudChjYXJldCk7CiAgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBw
cm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRh
aW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwpAQCAtMTQwNiw3ICsxNDA4LDcgQEAgdm9p
ZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikK
ICAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcodHJ1ZSk7CiAg
ICAgfQogCi0gICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKQorICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAg
UGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlUGxhaW5UZXh0KHNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gUGFzdGVi
b2FyZDo6Q2FuU21hcnRSZXBsYWNlIDogUGFzdGVib2FyZDo6Q2Fubm90U21hcnRSZXBsYWNlKTsK
ICAgICBlbHNlIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gbnVs
bHB0cjsKQEAgLTE0MjUsNyArMTQyNyw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5
KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgICAgICAgICB3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkpOwogI2Vs
c2UKICAgICAgICAgICAgIC8vIEZJWE1FOiBEZWxldGUgYWZ0ZXIgPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTc3NjE4PiBsYW5kcy4KLSAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSgpLT53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uLCBjYW5TbWFydENvcHlPckRlbGV0
ZSgpLCBtX2ZyYW1lLCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKKyAgICAg
ICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVNlbGVjdGlv
bigqc2VsZWN0aW9uLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCAqbV9kb2N1bWVudC5mcmFtZSgp
LCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgogICAgICAgICB9
CiAgICAgfQpAQCAtMTQzNCwxMCArMTQzNiwxMCBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9y
Q29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgIGlmIChhY3Rpb24gPT0gQ3V0
QWN0aW9uKSB7CiAgICAgICAgIFN0cmluZyB0ZXh0OwogICAgICAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHRleHQgPSBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGNhblNt
YXJ0Q29weU9yRGVsZXRlKCksIEVkaXRBY3Rpb246OkN1dCk7CiAgICAgICAgIGlmIChBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICAgICAgcG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dCh0ZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JD
dXQodGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgfQogfQog
CkBAIC0xNDU0LDcgKzE0NTYsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGUoUGFzdGVib2FyZCYgcGFz
dGVib2FyZCkKICAgICAgICAgcmV0dXJuOwogICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNz
b3IgdmFsaWRhdGlvblN1cHByZXNzb3IoZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
KTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQo
JnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0IH0pOwogICAgIGVsc2UK
ICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwpAQCAt
MTQ3OSw3ICsxNDgxLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNRdW90YXRpb24oKQogICAgIHVw
ZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBSZXNvdXJj
ZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IoZG9jdW1lbnQo
KS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKICAgICBhdXRvIHBhc3RlYm9hcmQgPSBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAg
ICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZC5nZXQoKSwgeyBQYXN0ZU9wdGlv
bjo6QWxsb3dQbGFpblRleHQsIFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbiB9KTsKICAgICBlbHNl
CiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCk7CkBA
IC0xNjE3LDcgKzE2MTksNyBAQCB2b2lkIEVkaXRvcjo6cmVuZGVyTGF5ZXJEaWRTY3JvbGwoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChtX2ltYWdlRWxlbWVudHNUb0xvYWRCZWZv
cmVSZXZlYWxpbmdTZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIHN0YXJ0Q29udGFpbmVyID0gbWFrZVJlZlB0cihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpKTsKKyAgICBhdXRvIHN0YXJ0Q29udGFpbmVy
ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCku
Y29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKQogICAgICAgICByZXR1
cm47CiAKQEAgLTE4NTEsOCArMTg1Myw4IEBAIHZvaWQgRWRpdG9yOjp0b2dnbGVVbmRlcmxpbmUo
KQogdm9pZCBFZGl0b3I6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGluU2FtZVBh
cmFncmFwaChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVFbmQoKSkgJiYgCi0gICAgICAg
IGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCisg
ICAgaWYgKGluU2FtZVBhcmFncmFwaChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVFbmQoKSkKKyAgICAgICAgJiYgYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFy
dCgpID09IGRpcmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgICAgIApAQCAt
MTg4Miw3ICsxODg0LDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGly
ZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIGF1dG8gcmVzdWx0ID0gV3Jp
dGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7CiAKLSAgICBQb3NpdGlvbiBwb3MgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7
CisgICAgUG9zaXRpb24gcG9zID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVw
cmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xOTE3LDcgKzE5MTksNyBAQCB2b2lkIEVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24oKQogICAg
IC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODE+CiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb247CiAgICAgc2VsZWN0aW9uLnNldFdpdGhvdXRW
YWxpZGF0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigpKTsK
LSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7Cisg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOwog
fQogCiB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0aW9uKCkKQEAgLTE5NTIsMjggKzE5NTQs
MjggQEAgdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQp
CiAKIGNsYXNzIFNldENvbXBvc2l0aW9uU2NvcGUgewogcHVibGljOgotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUoRnJhbWUmIGZyYW1lKQotICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgICAg
ICwgbV90eXBpbmdHZXN0dXJlSW5kaWNhdG9yKGZyYW1lKQorICAgIFNldENvbXBvc2l0aW9uU2Nv
cGUoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgICAgICA6IG1fZG9jdW1lbnQoUmVmUHRyKCZkb2N1
bWVudCkpCisgICAgICAgICwgbV90eXBpbmdHZXN0dXJlSW5kaWNhdG9yKCpkb2N1bWVudC5mcmFt
ZSgpKQogICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9u
Q2hhbmdlcyh0cnVlKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyh0cnVlKTsKICAgICB9CiAKICAgICB+U2V0Q29tcG9zaXRpb25TY29wZSgp
CiAgICAgewotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFu
Z2VzKGZhbHNlKTsKLSAgICAgICAgaWYgKGF1dG8qIGVkaXRvckNsaWVudCA9IG1fZnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpKQorICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKKyAgICAgICAgaWYgKGF1dG8qIGVkaXRvckNsaWVudCA9
IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICAgICAgZWRpdG9yQ2xpZW50
LT5kaWRVcGRhdGVDb21wb3NpdGlvbigpOwogICAgIH0KIAotICAgIFJlZjxGcmFtZT4gbV9mcmFt
ZTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgVXNlclR5cGluZ0dlc3R1
cmVJbmRpY2F0b3IgbV90eXBpbmdHZXN0dXJlSW5kaWNhdG9yOwogfTsKIAogdm9pZCBFZGl0b3I6
OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKG1vZGUgPT0gQ29uZmlybUNvbXBvc2l0aW9uIHx8IG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pOwotICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRp
b25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9kb2N1bWVudCk7CiAKICAgICBpZiAobW9kZSA9PSBDYW5jZWxDb21wb3NpdGlvbikK
ICAgICAgICAgQVNTRVJUKHRleHQgPT0gZW1wdHlTdHJpbmcoKSk7CkBAIC0xOTg0LDcgKzE5ODYs
NyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRD
b21wb3NpdGlvbk1vZGUgbW9kZSkKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5j
bGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CiAKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWx3YXlzIGRl
bGV0ZSB0aGUgY3VycmVudCBjb21wb3NpdGlvbiBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBmaW5hbGl6
ZWQgY29tcG9zaXRpb24gdGV4dCBpZiB3ZSdyZSBjb25maXJtaW5nIG91ciBjb21wb3NpdGlvbi4K
QEAgLTIwMDAsMTMgKzIwMDIsMTMgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAKICAgICBpZiAobW9kZSA9
PSBDYW5jZWxDb21wb3NpdGlvbikgewogICAgICAgICAvLyBBbiBvcGVuIHR5cGluZyBjb21tYW5k
IHRoYXQgZGlzYWdyZWVzIGFib3V0IGN1cnJlbnQgc2VsZWN0aW9uIHdvdWxkIGNhdXNlIGlzc3Vl
cyB3aXRoIHR5cGluZyBsYXRlciBvbi4KLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcoJm1fZnJhbWUpOworICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhtX2RvY3Vt
ZW50KTsKICAgICB9CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMs
IGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvbkhpZ2hsaWdodD4mIGhpZ2hsaWdodHMsIHVuc2lnbmVk
IHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCBzZWxlY3Rpb25FbmQpCiB7Ci0gICAgU2V0Q29tcG9z
aXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZnJhbWUpOworICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2RvY3VtZW50KTsKIAogICAgIC8vIFVwZGF0
ZXMgc3R5bGVzIGJlZm9yZSBzZXR0aW5nIHNlbGVjdGlvbiBmb3IgY29tcG9zaXRpb24gdG8gcHJl
dmVudAogICAgIC8vIGluc2VydGluZyB0aGUgcHJldmlvdXMgY29tcG9zaXRpb24gdGV4dCBpbnRv
IHRleHQgbm9kZXMgb2RkbHkuCkBAIC0yMDE1LDcgKzIwMTcsNyBAQCB2b2lkIEVkaXRvcjo6c2V0
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25V
bmRlcmxpbgogCiAgICAgc2VsZWN0Q29tcG9zaXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgb3JpZ2luYWxUZXh0ID0gc2VsZWN0
ZWRUZXh0KCk7CkBAIC0yMDIzLDEwICsyMDI1LDEwIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGlu
CiAgICAgaWYgKGlzU3RhcnRpbmdUb1JlY29tcG9zZUV4aXN0aW5nUmFuZ2UpIHsKICAgICAgICAg
Ly8gV2UgcGFzcyBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25GaW5hbCBoZXJlIHRvIGlu
ZGljYXRlIHRoYXQgd2UgYXJlIHJlbW92aW5nIGNvbXBvc2l0aW9uIHRleHQgdGhhdCBoYXMgYmVl
biBmaW5hbGl6ZWQuCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihkb2N1
bWVudCgpLCAwLCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25GaW5hbCk7Ci0gICAgICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJy
ZW50U2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgICAgICAvLyBJZiBk
ZWxldGlvbiB3YXMgcHJldmVudGVkLCB0aGVuIHdlIG5lZWQgdG8gY29sbGFwc2UgdGhlIHNlbGVj
dGlvbiB0byB0aGUgZW5kIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHRleHQgd2lsbCBub3QgYmUgcmVj
b21wb3NlZC4KLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHsg
Y3VycmVudFNlbGVjdGlvbi5lbmQoKSwgY3VycmVudFNlbGVjdGlvbi5lbmQoKSB9KTsKKyAgICAg
ICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHsgY3VycmVudFNlbGVj
dGlvbi5lbmQoKSwgY3VycmVudFNlbGVjdGlvbi5lbmQoKSB9KTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMjA4Miw4ICsyMDg0LDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1bWVudCgpLCB0ZXh0LCBUeXBpbmdDb21tYW5k
OjpTZWxlY3RJbnNlcnRlZFRleHQgfCBUeXBpbmdDb21tYW5kOjpQcmV2ZW50U3BlbGxDaGVja2lu
ZywgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uUGVuZGluZyk7CiAKICAgICAgICAgLy8g
RmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9zaXRpb24gbm93LgotICAgICAgICBQb3Np
dGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0
cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOworICAgICAgICBQb3Np
dGlvbiBleHRlbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgp
OwogICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAg
ICAgdW5zaWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsK
ICAgICAgICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNhdGVkTm9kZSgpOwpAQCAt
MjEwOSw3ICsyMTExLDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgICAgIHVu
c2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4oYmFzZU9mZnNldCArIHNlbGVjdGlvblN0YXJ0LCBleHRl
bnRPZmZzZXQpOwogICAgICAgICAgICAgdW5zaWduZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgo
c3RhcnQsIGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25FbmQpLCBleHRlbnRPZmZzZXQpOwogICAgICAg
ICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShiYXNlTm9kZS0+ZG9jdW1l
bnQoKSwgYmFzZU5vZGUsIHN0YXJ0LCBiYXNlTm9kZSwgZW5kKTsKLSAgICAgICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLnB0cigpLCBET1dO
U1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vKTsKKyAgICAgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdl
LnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5v
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEyMyw3ICsyMTI1LDcgQEAgdm9pZCBFZGl0b3I6
Omlnbm9yZVNwZWxsaW5nKCkKICAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFu
Z2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYg
KHNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKQEAgLTIxMzks
NyArMjE0MSw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICAgICAgCiAgICAg
Ly8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVzZSAibGVhcm4iIGJ1dHRvbiBvbiAiU3BlbGxp
bmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHNo
b3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2VycyBhcm91bmQgdGhlIGxlYXJuZWQgd29yZCwg
c2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4KIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0
ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIGRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CiAKQEAgLTIxNTIsMTQgKzIxNTQsMTQgQEAgdm9pZCBFZGl0b3I6OmxlYXJu
U3BlbGxpbmcoKQogCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wg
c3RhcnRCZWZvcmVTZWxlY3Rpb24pCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJh
bWUpOwotCisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsK
KyAgICAKICAgICAvLyBUaGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFz
ZXMgLSBmcm9tIHRoZSBzZWxlY3Rpb24gZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCiAg
ICAgLy8gdGhlbiB3ZSB3cmFwIGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHBy
b3hpbWF0ZWx5KSB3aGVyZSB3ZSBzdGFydGVkLgogICAgIAogICAgIC8vIFN0YXJ0IGF0IHRoZSBl
bmQgb2YgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIHRvIGVkZ2Ugb2YgZG9jdW1lbnQuICBTdGFydGlu
ZyBhdCB0aGUgc2VsZWN0aW9uIGVuZCBtYWtlcwogICAgIC8vIHJlcGVhdGVkICJjaGVjayBzcGVs
bGluZyIgY29tbWFuZHMgd29yay4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBSZWY8UmFuZ2U+
IHNwZWxsaW5nU2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CiAKICAg
ICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gZmFsc2U7CkBAIC0yMzA4LDggKzIzMTAsOCBA
QCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRSA0ODU5MTkwOiBUaGlzIGdldHMg
Y29uZnVzZWQgd2l0aCBkb3VibGVkIHB1bmN0dWF0aW9uIGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3Jh
cGgKICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
KmdyYW1tYXJTZWFyY2hSYW5nZSwgeyBncmFtbWFyUGhyYXNlT2Zmc2V0ICsgZ3JhbW1hckRldGFp
bC5yYW5nZS5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5yYW5nZS5sZW5ndGggfSk7Ci0gICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3Jh
bW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkpKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxl
Y3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiAgICAgICAg
IGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpHcmFtbWFyLCBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CkBAIC0yMzIw
LDggKzIzMjIsOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wg
c3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIC8vIGEgbWFya2VyIHNvIHdlIGRyYXcgdGhl
IHJlZCBzcXVpZ2dsZSBsYXRlci4KICAgICAgICAgCiAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdS
YW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShzcGVsbGluZ1NlYXJjaFJhbmdlLCB7IG1pc3Nw
ZWxsaW5nT2Zmc2V0LCBtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSB9KTsKLSAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtaXNzcGVsbGluZ1Jh
bmdlLCBET1dOU1RSRUFNKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2Vs
ZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOworICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAKICAgICAg
ICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxl
ZFdvcmQpOwogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxp
bmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKQEAgLTIzMzUsNyArMjMzNyw3IEBA
IFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tl
ZE5vZGUpIGNvbnN0CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
IHx8ICFjbGlja2VkTm9kZSB8fCAhaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihjbGlja2VkTm9k
ZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBzZWxlY3Rpb24uaXNOb25l
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMjM4OSw3ICsyMzkxLDcgQEAgU3Ry
aW5nIEVkaXRvcjo6bWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpIGNvbnN0CiBib29sIEVkaXRv
cjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkKIHsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lO
RykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSB8fCAhY2xpZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKCpj
bGllbnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsKQEAgLTI0MDQsNyArMjQwNiw3IEBA
IFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCkgY29uc3QKIAogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CiAgICAgaWYg
KGNsaWVudCgpKQotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3Jk
LCBTdHJpbmcoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7Cisg
ICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmluZygpLCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKICAgICByZXR1cm4g
Z3Vlc3NlczsKIH0KIApAQCAtMjQxMiw3ICsyNDE0LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbChib29sJiBtaXNzcGVsbGVkLCBi
b28KIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CiAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAg
ICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxp
bmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiB3b3JkU2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgp
KTsKICAgICAgICAgICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3Jk
R3JhbnVsYXJpdHkpOwpAQCAtMjQ3Miw3ICsyNDc0LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVj
dGkKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25z
dCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCkKIHsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVu
dChtX2RvY3VtZW50KTsKIAogICAgIGlmIChwbGF0Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNTk0LDE5ICsyNTk2LDE5IEBAIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZ3b3JkU3RhcnQsCiAgICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwg
cmVwbGFjZSB0aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KICAgICBpZiAoIWF1dG9j
b3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKCptaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKTsKLSAgICAgICAgaWYgKG5l
d1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbikpCisgICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5l
d1NlbGVjdGlvbik7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2ZyYW1lLmVk
aXRvcigpLnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgICAgIGlmICghbV9k
b2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1p
c3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0
UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CisgICAgICAgIG1fZG9jdW1lbnQuZWRp
dG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNlbGVj
dFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsK
IAogICAgICAgICAvLyBSZXNldCB0aGUgY2hhcmV0IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KLSAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rp
b25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgfQogCiAgICAgaWYgKCFpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKQEAgLTI2NzgsNyArMjY4MCw3IEBAIGJvb2wgRWRpdG9y
Ojppc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqIG5vZGUpIGNvbnN0CiAKIGJvb2wgRWRp
dG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIHJldHVybiBpc1NwZWxsQ2hl
Y2tpbmdFbmFibGVkRm9yKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3Mo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpCkBAIC0yNzI2LDcgKzI3MjgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5n
VHlwZQogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsK
KyAgICBib29sIGFzeW5jaHJvbm91cyA9IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3luY2hyb25v
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsOwog
CiAgICAgLy8gSW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlvbmFsbHkgY2hlY2sgcGFy
YWdyYXBoLXdpZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNvbHZlZE9wdGlvbnMgPSBy
ZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0Q2hlY2tpbmdPcHRp
b25zKTsKQEAgLTI3NDEsNyArMjc0Myw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAg
fQogCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1Rl
eHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJl
c29sdmVkT3B0aW9ucywgcmVzdWx0cywgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hl
Y2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNlRm9yKHJlcXVlc3QucmVsZWFzZU5v
bk51bGwoKSwgcmVzdWx0cyk7CiB9CiAKQEAgLTI3ODcsNyArMjc4OSw3IEBAIHN0YXRpYyB2b2lk
IGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0
Q2hlY2tpbmdQYXJhCiAKIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVs
bENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdHMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJl
ZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICBhdXRvIHRl
eHRDaGVja2luZ09wdGlvbnMgPSByZXF1ZXN0LmRhdGEoKS5jaGVja2luZ1R5cGVzKCk7CiAgICAg
VGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChyZXF1ZXN0LmNoZWNraW5nUmFuZ2UoKSwg
cmVxdWVzdC5hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKCksICZyZXF1ZXN0LnBhcmFncmFwaFJh
bmdlKCkpOwpAQCAtMjgxMSw5ICsyODEzLDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNl
Rm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAg
ICBib29sIGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMgPSBmYWxzZTsKIAog
ICAgIGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxkTWFya1NwZWxsaW5nIHx8
IHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbikgewotICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9u
KSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNhdmUgdGhlIGNhcmV0IHBvc2l0aW9uIHNv
IHdlIGNhbiByZXN0b3JlIGl0IGxhdGVyIGlmIG5lZWRlZAotICAgICAgICAgICAgUG9zaXRpb24g
Y2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7Cisg
ICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCA9IHBhcmFn
cmFwaC5vZmZzZXRUbyhjYXJldFBvc2l0aW9uKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAg
ICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IHRydWU7CiAgICAgICAgICAgICBp
ZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiAoc2VsZWN0aW9uT2Zmc2V0ID4gcGFyYWdyYXBoLnRl
eHQoKS5sZW5ndGgoKSB8fCBwYXJhZ3JhcGgudGV4dCgpW3NlbGVjdGlvbk9mZnNldCAtIDFdID09
IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjg5NSwxMyArMjg5NywxMyBAQCB2b2lkIEVkaXRvcjo6
bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFZlY3RvcjxUZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvblRvUmVwbGFjZShyYW5nZVRvUmVwbGFjZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAg
ICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpCisgICAgICAgICAgICBpZiAoc2Vs
ZWN0aW9uVG9SZXBsYWNlICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0
Q2hlY2tpbmdUeXBlOjpMaW5rKSB7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOwogICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJl
c3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChj
YW5FZGl0UmljaGx5KCkpCkBAIC0yOTEwLDcgKzI5MTIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fu
ZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3Rv
cjxUZQogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRD
aGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCwg
eyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0pOwogCiAgICAgICAgICAgICAgICAgaWYg
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcm9vdCA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcm9vdCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgY2Fj
aGUtPnBvc3ROb3RpZmljYXRpb24ocm9vdCwgQVhPYmplY3RDYWNoZTo6QVhBdXRvY29ycmVjdGlv
bk9jY3VyZWQpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjk0MCwxMyArMjk0MiwxMyBAQCB2
b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICBleHRlbmRlZFBhcmFncmFwaC5leHBhbmRS
YW5nZVRvTmV4dEVuZCgpOwogICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdl
ICYmIHNlbGVjdGlvbk9mZnNldCA8PSBleHRlbmRlZFBhcmFncmFwaC5yYW5nZUxlbmd0aCgpKSB7
CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gZXh0ZW5kZWRQYXJhZ3JhcGguc3Vi
cmFuZ2UoeyAwLCBzZWxlY3Rpb25PZmZzZXQgfSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLm1vdmVUbyhzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7
CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhzZWxlY3Rpb25SYW5n
ZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoYWRqdXN0U2Vs
ZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcykKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlv
bkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAgICBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERp
cmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMgZm9yIGFueSByZWFzb24sIHRoZSBmYWxsYmFj
ayBpcyB0byBnbyBvbmUgcG9zaXRpb24gYmV5b25kIHRoZSBsYXN0IHJlcGxhY2VtZW50Ci0gICAg
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpKTsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5
KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3Zl
VG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTMwMjMsOCArMzAyNSw4IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJr
ZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25B
CiAgICAgLy8gT2YgY291cnNlLCBpZiBjdXJyZW50IHNlbGVjdGlvbiBpcyBhIHJhbmdlLCB3ZSBw
b3RlbnRpYWxseSB3aWxsIGVkaXQgdHdvIHdvcmRzIHRoYXQgZmFsbCBvbiB0aGUgYm91bmRhcmll
cyBvZgogICAgIC8vIHNlbGVjdGlvbiwgYW5kIHJlbW92ZSB3b3JkcyBiZXR3ZWVuIHRoZSBzZWxl
Y3Rpb24gYm91bmRhcmllcy4KICAgICAvLwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIFZp
c2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5l
bmQoKTsKICAgICBpZiAoc3RhcnRPZlNlbGVjdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIC8vIEZpcnN0IHdvcmQgaXMgdGhlIHdvcmQgdGhhdCBlbmRzIGFmdGVyIG9yIG9uIHRo
ZSBzdGFydCBvZiBzZWxlY3Rpb24uCkBAIC0zMDk2LDExICszMDk4LDcgQEAgdm9pZCBFZGl0b3I6
OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
LCBjb25zdCBTdHIKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3Qg
SW50UG9pbnQmIHdpbmRvd1BvaW50KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gbV9kb2N1bWVudC5mcmFtZSgpOwog
ICAgIEFTU0VSVChmcmFtZSk7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmll
dygpOwogICAgIGlmICghZnJhbWVWaWV3KQpAQCAtMzExNyw3ICszMTE1LDcgQEAgdm9pZCBFZGl0
b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGln
bm1lbnQmIGFsaWdubWUKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2VsZWN0aW9uUmV2ZWFsTW9k
ZSByZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsOwotICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKHJldmVhbE1vZGUsIGFsaWdubWVudCwgcmV2ZWFs
RXh0ZW50T3B0aW9uKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlv
bihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlvbik7CiB9CiAKIHZvaWQg
RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGJvb2wgaWdub3JlLCBSZXZlYWxTZWxl
Y3Rpb24gc2hvdWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24pCkBAIC0zMTI5LDcgKzMxMjcsNyBA
QCB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2
ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
Ly8gRklYTUU6IFNob3VsZCBzdXBwcmVzcyBzZWxlY3Rpb24gY2hhbmdlIG5vdGlmaWNhdGlvbnMg
ZHVyaW5nIGEgY29tcG9zaXRpb24gY2hhbmdlIDxodHRwczovL3dlYmtpdC5vcmcvYi8zODgzMD4g
CiAgICAgaWYgKCFpZ25vcmUpCi0gICAgICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKKyAgICAgICAgcmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCB7IH0pOwog
I2VuZGlmCiAgICAgaWYgKCFpZ25vcmUgJiYgc2hvdWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24g
PT0gUmV2ZWFsU2VsZWN0aW9uOjpZZXMpCiAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRp
dGluZ09wZXJhdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFJldmVh
bEV4dGVudCk7CkBAIC0zMTUyLDcgKzMxNTAsNyBAQCBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRp
b25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aQog
ewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBz
ZWxlY3Rpb24uc3RhcnQoKTsKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAhPSBtX2Nv
bXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE3NSw3ICszMTczLDcg
QEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXND
YXJldCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTMyMDAsMTAgKzMxOTgsMTAgQEAgdm9pZCBF
ZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAgU3RyaW5nIHRyYW5zcG9zZWQgPSB0ZXh0LnJpZ2h0KDEp
ICsgdGV4dC5sZWZ0KDEpOwogCiAgICAgLy8gU2VsZWN0IHRoZSB0d28gY2hhcmFjdGVycy4KLSAg
ICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsK
LSAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pKQorICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
bik7CiAgICAgfQogCiAgICAgLy8gSW5zZXJ0IHRoZSB0cmFuc3Bvc2VkIGNoYXJhY3RlcnMuCkBA
IC0zMjU1LDcgKzMyNTMsNyBAQCB2b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFz
SWdub3JlZCgpCiAKIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPcHRpb25TZXQ8RnJhbWVTZWxlY3Rp
b246OlNldFNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3Rl
Y3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2Rv
Y3VtZW50KTsKIAogICAgIC8vIElmIHRoZSBuZXcgc2VsZWN0aW9uIGlzIG9ycGhhbmVkLCB0aGVu
IGRvbid0IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChuZXdTZWxlY3Rpb24uc3RhcnQo
KS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQoKS5pc09ycGhhbigpKQpAQCAtMzI2NSw5
ICszMjYzLDkgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAvLyBiZWNhdXNlIHRoZXJl
IGlzIHdvcmsgdGhhdCBpdCBtdXN0IGRvIGluIHRoaXMgc2l0dWF0aW9uLgogICAgIC8vIFRoZSBv
bGQgc2VsZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhlcmUgYW5kIGNhbGxpbmcgc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3RyYW5nZSBjYWxscy4KICAgICAvLyBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzU3MjkzMTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSBj
b250YWluIFJhbmdlcyBmb3Igc2VsZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQKLSAg
ICBib29sIHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uID0gbmV3U2VsZWN0aW9uID09
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbkRpZE5v
dENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKG5ld1NlbGVjdGlvbikpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgYm9vbCBzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8
fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pKQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24sIG9wdGlvbnMpOwogCiAgICAgLy8gU29tZSBlZGl0aW5nIG9wZXJhdGlvbnMgY2hhbmdl
IHRoZSBzZWxlY3Rpb24gdmlzdWFsbHkgd2l0aG91dCBhZmZlY3RpbmcgaXRzIHBvc2l0aW9uIHdp
dGhpbiB0aGUgRE9NLgogICAgIC8vIEZvciBleGFtcGxlIHdoZW4geW91IHByZXNzIHJldHVybiBp
biB0aGUgZm9sbG93aW5nICh0aGUgY2FyZXQgaXMgbWFya2VkIGJ5IF4pOgpAQCAtMzI4MiwxMyAr
MzI4MCwxMyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgTwogICAgICAgICByZXR1cm47CiAjZW5k
aWYKICAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gJiYgY2xpZW50KCkp
Ci0gICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsK
KyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5m
cmFtZSgpKTsKIH0KIAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKIHsKICAg
ICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhh
dmlvcjsKLSAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0Jv
dW5kYXJpZXNFbmFibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQogICAgICAgICBiZWhhdmlvciB8PSBU
ZXh0SXRlcmF0b3JUcmF2ZXJzZXNGbGF0VHJlZTsKICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0KGJl
aGF2aW9yKTsKIH0KQEAgLTMyOTYsNyArMzI5NCw3IEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVk
VGV4dCgpIGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIo
KSBjb25zdAogewogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yID0gVGV4dEl0ZXJh
dG9yRW1pdHNJbWFnZUFsdFRleHQ7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNl
dHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAg
ICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJu
IHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMzA0LDcgKzMzMDIsNyBAQCBTdHJpbmcg
RWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25zdAogU3RyaW5nIEVkaXRv
cjo6c2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKSBjb25zdAogewog
ICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBub3Qgdmlz
aWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KLSAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgYXV0byBzdGFydCA9IHNlbGVjdGlvbi5z
dGFydCgpOwogICAgIGF1dG8gZW5kID0gc2VsZWN0aW9uLmVuZCgpOwogICAgIGlmIChzdGFydC5p
c051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwoKSB8fCBlbmQuaXNPcnBo
YW4oKSkKQEAgLTMzMTQsNyArMzMxMiw3IEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dChU
ZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIAogUmVmUHRyPFRleHRQbGFjZWhv
bGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUm
IHNpemUpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQgeyB0aGlzLT5kb2N1bWVudCgpIH07CkBA
IC0zMzIyLDcgKzMzMjAsNyBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9y
OjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAgIC8vIEZJWE1F
OiBXcml0ZSBpbiB0ZXJtcyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KCkuIFNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc0ND4uCiAgICAgZGVs
ZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAgIGF1dG8gcmFuZ2UgPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzMzMCw3ICszMzI4LDcgQEAgUmVm
UHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVy
KGNvbnN0IEludFNpemUmIHNpemUKICAgICByYW5nZS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5j
b3B5UmVmKCkpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24geyBwb3NpdGlv
bkJlZm9yZU5vZGUocGxhY2Vob2xkZXIucHRyKCkpLCBwb3NpdGlvbkFmdGVyTm9kZShwbGFjZWhv
bGRlci5wdHIoKSkgfTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2Vy
VHJpZ2dlcmVkKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNl
clRyaWdnZXJlZCkpOwogCiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyOwogfQpAQCAtMzM1MCw4ICsz
MzQ4LDggQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVRleHRQbGFjZWhvbGRlcihUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50JiBwbGFjZWhvbGRlcikKICAgICBwbGFjZWhvbGRlci5yZW1vdmUoKTsKIAogICAg
IC8vIFRvIG1hdGNoIHRoZSBMZWdhY3kgV2ViS2l0IGltcGxlbWVudGF0aW9uLCBzZXQgdGhlIHRl
eHQgaW5zZXJ0aW9uIHBvaW50IHRvIGJlIGJlZm9yZSB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgdXNl
IHRvIGJlLgotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgp
ICYmIGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IHNhdmVkUm9vdEVkaXRhYmxlRWxlbWVu
dCkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbiB7IHNhdmVkUG9zaXRpb25CZWZvcmVQbGFjZWhvbGRlciwgU0VMX0RFRkFVTFRfQUZGSU5J
VFkgfSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmln
Z2VyZWQpKTsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3Rp
dmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVs
ZW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxU
X0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhV
c2VyVHJpZ2dlcmVkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lk
dGgoSW50UmVjdCYgcmVjdCkKQEAgLTM0MDMsNyArMzQwMSw3IEBAIEludFJlY3QgRWRpdG9yOjpm
aXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiBib29sIEVkaXRvcjo6c2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQorICAgIGlm
IChtX2RvY3VtZW50LmZyYW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNs
aWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
YWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKQEAgLTM0MTIsMTcgKzM0MTAsMTcgQEAgYm9vbCBF
ZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24sIGNvbnN0IFYKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIGlm
IChzdHlsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5
cGluZ1N0eWxlKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdT
dHlsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBj
dXJyZW50IHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHls
ZTsKLSAgICBpZiAoYXV0byBleGlzdGluZ1R5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50eXBpbmdTdHlsZSgpKQorICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHR5cGluZ1N0eWxlID0g
ZXhpc3RpbmdUeXBpbmdTdHlsZS0+Y29weSgpOwogICAgIGVsc2UKICAgICAgICAgdHlwaW5nU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwotICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5
cGluZ1N0eWxlQXQoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlw
aW5nU3R5bGVBdChzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRsZSBibG9jayBzdHls
ZXMsIHN1YnN0cmFjdGluZyB0aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRy
PEVkaXRpbmdTdHlsZT4gYmxvY2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRyYWN0QW5kUmVtb3Zl
QmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0zNDMwLDcgKzM0MjgsNyBAQCB2b2lkIEVkaXRvcjo6Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdAogICAgICAgICBBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJs
b2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwogCiAgICAgLy8gU2V0IHRo
ZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNldFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKKyAgICBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMm
IHByb3BlcnRpZXMsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0ODksMTkgKzM0ODcs
MTkgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0
CiAKIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0
aW9ucyBvcHRpb25zKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAg
ICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCi0gICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSByYW5nZU9m
U3RyaW5nKHRhcmdldCwgc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSwgb3B0aW9ucyk7CiAK
ICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5n
ZSwgRE9XTlNUUkVBTSkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBET1dOU1RSRUFNKSk7CiAKICAgICBpZiAo
IShvcHRpb25zLmNvbnRhaW5zKERvTm90UmV2ZWFsU2VsZWN0aW9uKSkpCi0gICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1
OTgsNyArMzU5Niw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgaWYgKHJhbmdlKSB7
CiAgICAgICAgIGlmICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKICAg
ICAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1l
SW5SYW5nZShtX2ZyYW1lLCAqcmFuZ2UpKQorICAgICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFu
Z2UoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICBpZiAoIXNlYXJjaFJhbmdlKQpAQCAtMzY2OCw3ICszNjY2LDcgQEAgdm9pZCBF
ZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYs
IE9wdGlvblNldDxGcmFtZVMKICNlbmRpZgogCiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBj
bGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNs
aWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAK
ICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIGlmIChzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkpCkBAIC0zNjkx
LDggKzM2ODksNiBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogCiBib29sIEVkaXRvcjo6c2hv
dWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLmRvY3VtZW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZG9jdW1lbnQoKS5pc1RlbGVw
aG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6Omlz
U3VwcG9ydGVkKCk7CiB9CiAKQEAgLTM3MDUsOSArMzcwMSw5IEBAIHZvaWQgRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAKICAgICBWZWN0b3I8UmVmUHRyPFJhbmdl
Pj4gbWFya2VkUmFuZ2VzOwogCi0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24g
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpOwogICAgIGlmICghZnJhbWVTZWxlY3Rpb24uaXNSYW5n
ZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAg
IGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXND
aGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzI5LDcgKzM3MjUsNyBAQCB2
b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgIFJlZlB0
cjxSYW5nZT4gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAKICAgICBpZiAoIWV4dGVuZGVkUmFuZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBh
Z2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50
LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5z
ZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM3NDIsNyArMzczOCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVy
UmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2Zy
YW1lLnBhZ2UoKSkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAg
ICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTM4MDEsOSArMzc5Nyw5IEBAIHZvaWQgRWRp
dG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld0FkamFjZW50
V29yZHM7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0ZWRTZW50ZW5jZTsKLSAg
ICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5zZXR0aW5ncygpLmNhcmV0QnJvd3Np
bmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykgewotICAgICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkpOworICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNl
dHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dz
aW5nKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgICAgICAgICBuZXdBZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQo
bmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogI2Vsc2UKQEAgLTM4NTYsNyArMzg1
Miw3IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgIGlmICgh
bV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlEaWN0YXRpb24pCiAgICAgICAgIG1f
YWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRT
ZWxlY3Rpb24pOwogCi0gICAgbV9vbGRTZWxlY3Rpb25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9vbGRTZWxlY3Rpb25Gb3JFZGl0b3JV
SVVwZGF0ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICNpZiBFTkFC
TEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIG5vdGlmeUNsaWVudE9mQXR0YWNobWVudFVwZGF0
ZXMoKTsKQEAgLTM4ODMsNyArMzg3OSw3IEBAIHN0YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJs
ZShOb2RlKiBub2RlKQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3Io
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5n
dGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBO
b2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTUwLDEwICszOTQ2LDEwIEBAIE9wdGlvblNldDxUZXh0
Q2hlY2tpbmdUeXBlPiBFZGl0b3I6OnJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBO
b2RlJiByb290CiAgICAgcmV0dXJuIGNoZWNraW5nVHlwZXM7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
UmFuZ2U+IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSkKK3N0YXRpYyBS
ZWZQdHI8UmFuZ2U+IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVu
dCkKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdv
cmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHJldHVybiBzZWxl
Y3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
KSA6IGRvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHN0YXRp
YyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQpAQCAtMzk2Nyw4ICszOTYzLDggQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291
bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIFN0cmlu
ZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0g
Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24obV9mcmFtZSk7CisgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRh
dGVSYW5nZUZvclNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICBpZiAocmFuZ2VGb3JDdXJyZW50
bHlUeXBlZFN0cmluZyAmJiBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCiAg
ICAgICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcpOwog
CkBAIC0zOTc3LDcgKzM5NzMsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVS
ZXF1ZXN0KCkgY29uc3QKICAgICAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VG
b3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAgICAgcmV0dXJuIG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkp
KTsKIH0KIApAQCAtNDA0NCw3ICs0MDQwLDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250
QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIEZvbnRBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXM7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbnVsbHB0cjsKLSAgICBhdXRv
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJh
bWUoKSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGlmIChub2Rl
VG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgpOwpAQCAtNDA4NSw3
ICs0MDgxLDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdHRyaWJ1dGVz
LnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVy
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXR0cmlidXRl
cy50ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRl
cihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogCiAgICAgc3dp
dGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0
OgpAQCAtNDExMSw3ICs0MTA3LDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmli
dXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGlu
Z1N0eWxlKCkpOworICAgIGF1dG8gdHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSk7CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGlu
Z1N0eWxlLT5zdHlsZSgpKSB7CiAgICAgICAgIGF1dG8gdmFsdWUgPSB0eXBpbmdTdHlsZS0+c3R5
bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9u
c0luRWZmZWN0KTsKICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CkBAIC00MTk5LDEyICs0MTk1LDggQEAgdm9pZCBFZGl0b3I6Om5vdGlmeUNsaWVudE9mQXR0YWNo
bWVudFVwZGF0ZXMoKQogICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IHJlbW92ZWRBdHRhY2ht
ZW50SWRlbnRpZmllcnMpCiAgICAgICAgIGNsaWVudCgpLT5kaWRSZW1vdmVBdHRhY2htZW50V2l0
aElkZW50aWZpZXIoaWRlbnRpZmllcik7CiAKLSAgICBhdXRvKiBkb2N1bWVudCA9IG1fZnJhbWUu
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KICAgICBm
b3IgKGF1dG8mIGlkZW50aWZpZXIgOiBpbnNlcnRlZEF0dGFjaG1lbnRJZGVudGlmaWVycykgewot
ICAgICAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gZG9jdW1lbnQtPmF0dGFjaG1lbnRGb3JJZGVu
dGlmaWVyKGlkZW50aWZpZXIpKQorICAgICAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gbV9kb2N1
bWVudC5hdHRhY2htZW50Rm9ySWRlbnRpZmllcihpZGVudGlmaWVyKSkKICAgICAgICAgICAgIGNs
aWVudCgpLT5kaWRJbnNlcnRBdHRhY2htZW50V2l0aElkZW50aWZpZXIoaWRlbnRpZmllciwgYXR0
YWNobWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0
dHIpLCBhdHRhY2htZW50LT5oYXNFbmNsb3NpbmdJbWFnZSgpKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MjI3LDcgKzQyMTksNyBAQCB2b2lk
IEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIE9wdGlv
bmFsPHVpbnQ2NF90PiYmIGZpbAogCiB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRh
dGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogewotICAgIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlk
YXRlID0gdHJ1ZTsKIApAQCAtNDI0Niw3ICs0MjM4LDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIAog
Ym9vbCBFZGl0b3I6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdAogewotICAgIHJl
dHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCZtX2ZyYW1lKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX2RvY3VtZW50LmZyYW1l
KCkpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zv
ck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQpAQCAtNDI2MiwxMyArNDI1NCw3
IEBAIHZvaWQgRWRpdG9yOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZlbHRlcm5hdGl2ZShjb25z
dCBTdHJpbmcmIGFsdGVybmF0aXZlU3RyaW5nCiB2b2lkIEVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRl
TW9kZUVuYWJsZWQoKQogewogICAgIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQgPSAhbV9vdmVyd3Jp
dGVNb2RlRW5hYmxlZDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9j
a0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKLX0KLQotRG9jdW1lbnQmIEVkaXRvcjo6
ZG9jdW1lbnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2ZyYW1lLmRvY3VtZW50KCkpOwotICAg
IHJldHVybiAqbV9mcmFtZS5kb2N1bWVudCgpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwogfQogCiBS
ZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCkBAIC00MzIxLDkg
KzQzMDcsOSBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFz
TXVsdGlwbGVGb250cykgY29uc3QKIHsKICAgICBoYXNNdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAK
LSAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKCFtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1v
dmU7Ci0gICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFt
ZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVt
b3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKIAogICAgICAgICBjb25zdCBGb250KiBmb250ID0g
bnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKSB7CkBAIC00MzM1LDExICs0MzIxLDExIEBAIGNv
bnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAogICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBO
b2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOworICAg
IE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0
aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00Mzcx
LDcgKzQzNTcsNyBAQCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gRWRpdG9yOjppbnNlcnRFZGl0
YWJsZUltYWdlKCkKIAogYm9vbCBFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1h
Z2VzKCkgY29uc3QKIHsKLSAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIXNlbGVj
dGlvbi5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRl
eCBhZDllZGEyNjE4YzlhODgwYmVjYmIxY2U0ZDY4YmI1OWI4OWMyMGMwLi5mMWE5MGQxNjhhZjkw
NDNjNzliMzMwNWZmNDRmMWViNzE2MDdhZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJFZGl0
b3JJbnNlcnRBY3Rpb24uaCIKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJk
V3JpdGVyRGF0YS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgpAQCAtMTE5LDEzICsxMjAs
MTMgQEAgZW51bSBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24gOiB1aW50OF90IHsKIAog
Y2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRnJhbWUmLCBPcHRpb25hbDxWaXNpYmxlU2Vs
ZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlv
bj4gPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShE
b2N1bWVudCYsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgflRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIFJlZjxGcmFtZT4gbV9m
cmFtZTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgT3B0aW9uU2V0PFRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gbV9vcHRpb25zOwogICAgIGJvb2wgbV93YXNJZ25vcmlu
Z1NlbGVjdGlvbkNoYW5nZXM7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEzNyw3ICsx
MzgsNyBAQCBwcml2YXRlOgogY2xhc3MgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUgewog
cHVibGljOgogICAgIElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlKEZyYW1lJiBmcmFtZSkK
LSAgICAgICAgOiBtX3NlbGVjdGlvbkNoYW5nZShmcmFtZSwgV1RGOjpudWxsb3B0LCBUZW1wb3Jh
cnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCisgICAgICAgIDogbV9z
ZWxlY3Rpb25DaGFuZ2UoKmZyYW1lLmRvY3VtZW50KCksIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQogICAgIHsKICAgICB9CiAK
QEAgLTE1MCw3ICsxNTEsNyBAQCBwcml2YXRlOgogY2xhc3MgRWRpdG9yIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFZGl0b3IoRnJhbWUmKTsK
KyAgICBleHBsaWNpdCBFZGl0b3IoRG9jdW1lbnQmKTsKICAgICB+RWRpdG9yKCk7CiAKICAgICBl
bnVtIGNsYXNzIFBhc3RlT3B0aW9uIDogdWludDhfdCB7CkBAIC0yNzEsNyArMjcyLDcgQEAgcHVi
bGljOgogICAgIGNsYXNzIENvbW1hbmQgewogICAgIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9F
WFBPUlQgQ29tbWFuZCgpOwotICAgICAgICBDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29t
bWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIEZyYW1lJik7CisgICAgICAgIENvbW1hbmQoY29u
c3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRG9jdW1lbnQm
KTsKIAogICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGUoY29uc3QgU3RyaW5nJiBw
YXJhbWV0ZXIgPSBTdHJpbmcoKSwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCA9IG51bGxwdHIpIGNv
bnN0OwogICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGUoRXZlbnQqIHRyaWdnZXJp
bmdFdmVudCkgY29uc3Q7CkBAIC0yODgsNiArMjg5LDcgQEAgcHVibGljOgogICAgIHByaXZhdGU6
CiAgICAgICAgIGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogbV9jb21tYW5kIHsgbnVsbHB0
ciB9OwogICAgICAgICBFZGl0b3JDb21tYW5kU291cmNlIG1fc291cmNlOworICAgICAgICBSZWZQ
dHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsK
ICAgICB9OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbW1hbmQgY29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lKTsgLy8gQ29tbWFuZCBzb3VyY2UgaXMgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLgpAQCAtNTY3LDcgKzU2OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZVRleHRQbGFjZWhvbGRlcihUZXh0UGxhY2Vob2xkZXJFbGVtZW50Jik7CiAKIHBy
aXZhdGU6Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Q7CisgICAgRG9jdW1lbnQmIGRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCiAgICAgYm9vbCBjYW5EZWxl
dGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYpOwpAQCAtNjE4LDcgKzYyMCw5IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAg
ICAgRnJhbWUmIG1fZnJhbWU7CisgICAgUmVmUHRyPEZyYW1lPiBtX3Byb3RlY3RlZEZyYW1lOwog
ICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENvbW1hbmQ7CiAgICAg
UmVmUHRyPFRleHQ+IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIHVuc2lnbmVkIG1fY29tcG9zaXRp
b25TdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDlk
YmE3MDY5YWQxNDI4Y2RjM2I5MGZiNmMwNDcxZmFhMTBmYjhjNDQuLmJkNTE4MGViNDAwZWE3OTIx
NTFiNmY3OThiNjBlY2I4Y2ZmZGFlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcApAQCAtMTEwOSw2ICsxMTA5LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVN1cGVy
c2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwK
IAogc3RhdGljIGJvb2wgZXhlY3V0ZVN3YXBXaXRoTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKKyAgICBSZWZQdHI8RG9jdW1l
bnQ+IHByb3RlY3Rpb24oZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0
b3IoZnJhbWUpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFtZS5lZGl0
b3IoKS5tYXJrKCk7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC0xODM2LDEyICsxODM3LDEyIEBAIHN0YXRp
YyBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGludGVybmFsQ29tbWFuZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lKQogCiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZE5hbWUpCiB7Ci0gICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21t
YW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2ZyYW1lKTsK
KyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBDb21tYW5k
RnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZG9jdW1lbnQpOwogfQogCiBFZGl0b3I6OkNvbW1hbmQg
RWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIEVkaXRvckNvbW1hbmRT
b3VyY2Ugc291cmNlKQogewotICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21t
YW5kTmFtZSksIHNvdXJjZSwgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxD
b21tYW5kKGNvbW1hbmROYW1lKSwgc291cmNlLCBtX2RvY3VtZW50KTsKIH0KIAogYm9vbCBFZGl0
b3I6OmNvbW1hbmRJc1N1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5kaW5nKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUpCkBAIC0xODUzLDEyICsxODU0LDEzIEBAIEVkaXRvcjo6Q29tbWFuZDo6Q29t
bWFuZCgpCiB7CiB9CiAKLUVkaXRvcjo6Q29tbWFuZDo6Q29tbWFuZChjb25zdCBFZGl0b3JJbnRl
cm5hbENvbW1hbmQqIGNvbW1hbmQsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBGcmFtZSYg
ZnJhbWUpCitFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21t
YW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIDogbV9jb21tYW5kKGNvbW1hbmQpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0g
ICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyAmZnJhbWUgOiBudWxscHRyKQorICAgICwgbV9kb2N1bWVu
dChjb21tYW5kID8gJmRvY3VtZW50IDogbnVsbHB0cikKKyAgICAsIG1fZnJhbWUoY29tbWFuZCA/
IGRvY3VtZW50LmZyYW1lKCkgOiBudWxscHRyKQogewotICAgIEFTU0VSVChjb21tYW5kIHx8ICFt
X2ZyYW1lKTsKKyAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9kb2N1bWVudCk7CiB9CiAKIGJvb2wg
RWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyLCBFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KSBjb25zdApAQCAtMTg2OCw5ICsxODcwLDkgQEAgYm9vbCBFZGl0b3I6
OkNvbW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIsIEV2ZW50KiB0cmlnZ2Vy
aW5nRXZlbnQpIGMKICAgICAgICAgaWYgKCFhbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGRvY3VtZW50ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQp
CisKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAhPSBtX2ZyYW1lKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb21tYW5kLT5leGVjdXRlKCptX2ZyYW1lLCB0cmln
Z2VyaW5nRXZlbnQsIG1fc291cmNlLCBwYXJhbWV0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJmZjUxYzNjOTAxYjc4NTI0NTNm
YmZhOTdiMzU5Li4zNGRhMzE5YmNlNWUzMmViNjliZGFjMmEyMjk5YTNjMTU1MWNkYmY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTM5LDEzICsxMzks
MTUgQEAgSW50UmVjdCBEcmFnQ2FyZXRDb250cm9sbGVyOjplZGl0YWJsZUVsZW1lbnRSZWN0SW5S
b290Vmlld0Nvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRnJhbWUqIGZy
YW1lKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0
aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gIWZyYW1lIHx8IGZyYW1lLT5l
ZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgp
OworICAgIHJldHVybiAhZG9jdW1lbnQgfHwgZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7CiB9CiAKLUZyYW1lU2VsZWN0
aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQor
RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+
ZnJhbWUoKSA6IG51bGxwdHIpCisgICAgLCBtX3Byb3RlY3RlZEZyYW1lKG1fZnJhbWUpCiAgICAg
LCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkK
ICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Niw3ICsxNTgsNyBAQCBGcmFtZVNlbGVjdGlv
bjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0Rp
cnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJsaW5r
aW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5wYWdl
KCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0g
ZnJhbWUpCisgICAgLCBtX2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9m
cmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1l
KQogICAgICwgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdT
ZWxlY3Rpb25VcGRhdGUoZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxX
aGVuUmV2ZWFsaW5nU2VsZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjcsMTQgQEAgRnJhbWVT
ZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fY2FyZXRCbGlu
a3ModHJ1ZSkKICNlbmRpZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNl
bGVjdGlvbihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxl
Y3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwo
dHJ1ZSk7CiB9CiAKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50
T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3Qg
PSBtX3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlv
blJvb3QgPyBzZWxlY3Rpb25Sb290IDogbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCk7CisgICAgcmV0dXJuIHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogbV9kb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVU
byhjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJl
ZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbikKQEAgLTI4NCw3ICsyODYsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25CeU1vdXNlSWZEaWZmZXJlbnQoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgcGFzcwogICAgIEVuZFBvaW50c0FkanVzdG1lbnRNb2RlIGVuZHBvaW50c0Fk
anVzdG1lbnRNb2RlKQogewogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gcGFz
c2VkTmV3U2VsZWN0aW9uOwotICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3VsZEFsd2F5c1Vz
ZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IG5ld1NlbGVjdGlvbi5pc0RpcmVjdGlv
bmFsKCk7CisgICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9u
YWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsK
IAogICAgIFZpc2libGVQb3NpdGlvbiBiYXNlID0gbV9vcmlnaW5hbEJhc2UuaXNOb3ROdWxsKCkg
PyBtX29yaWdpbmFsQmFzZSA6IG5ld1NlbGVjdGlvbi52aXNpYmxlQmFzZSgpOwogICAgIFZpc2li
bGVQb3NpdGlvbiBuZXdCYXNlID0gYmFzZTsKQEAgLTMyMiw3ICszMjQsNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZp
c2libGVTZWxlY3RpbwogICAgIGJvb2wgc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSA9IG9wdGlvbnMu
Y29udGFpbnMoQ2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbiA9IG5ld1NlbGVjdGlvblBvc3NpYmx5V2l0aG91dERpcmVjdGlvbjsKLSAgICBpZiAo
c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkpCisgICAgaWYgKHNo
b3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpKQogICAgICAgICBu
ZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKIAogICAgIGlmICghbV9mcmFtZSkg
ewpAQCAtMzM0LDcgKzMzNiw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldp
dGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgLy8gaWYg
ZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5maW5pdGUg
bG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdTZWxlY3Rp
b24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4gbmV3U2Vs
ZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAgICAgICAg
ICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9jdW1l
bnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlv
bkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkg
ewogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBh
bGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhh
dCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMgRnJhbWVTZWxlY3Rpb24gaGFz
IGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBzZWxlY3RGcmFtZUVsZW1lbnRJ
blBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBubyBsb25n
ZXIgdmFsaWQgc2luY2UKQEAgLTM0OSw3ICszNTEsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rp
bwogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKIAogICAgIGlmIChjbG9zZVR5cGlu
ZykKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9mcmFtZSk7CisgICAgICAg
IFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKCptX2RvY3VtZW50KTsKIAogICAgIGlmIChzaG91
bGRDbGVhclR5cGluZ1N0eWxlKQogICAgICAgICBjbGVhclR5cGluZ1N0eWxlKCk7CkBAIC0zNTcs
NyArMzU5LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBWaXNpYmxlU2VsZWN0aW9u
IG9sZFNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwogICAgIGJvb2wgZGlkTXV0YXRlU2VsZWN0aW9u
ID0gb2xkU2VsZWN0aW9uICE9IG5ld1NlbGVjdGlvbjsKICAgICBpZiAoZGlkTXV0YXRlU2VsZWN0
aW9uKQotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7Cisg
ICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2UoKTsKIAogICAg
IG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogCkBAIC0zNzEsMzUgKzM3MywzMCBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNv
bnN0IFZpc2libGVTZWxlY3RpbwogICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAKICAg
ICBpZiAoIW5ld1NlbGVjdGlvbi5pc05vbmUoKSAmJiAhKG9wdGlvbnMgJiBEb05vdFNldEZvY3Vz
KSkgewotICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPmZvY3VzZWRFbGVtZW50KCk7CisgICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVtZW50ID0g
bV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICAgICAgc2V0Rm9jdXNlZEVsZW1lbnRJ
Zk5lZWRlZCgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0gICAg
ICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3Vz
ZWRFbGVtZW50KQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBv
bGRGb2N1c2VkRWxlbWVudCkKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZO
ZWVkZWQoKTsKICAgICB9CiAKICAgICAvLyBBbHdheXMgY2xlYXIgdGhlIHggcG9zaXRpb24gdXNl
ZCBmb3IgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbi4KICAgICAvLyBJdCB3aWxsIGJlIHJlc3Rv
cmVkIGJ5IHRoZSB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uIGNvZGUgaWYgbmVjZXNzYXJ5Lgog
ICAgIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gTm9YUG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb24oKTsKICAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlT
ZWxlY3RlZCgpOwotICAgIG1fZnJhbWUtPmVkaXRvcigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CiAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlvbi1hcGkvI3NlbGVjdGlvbmNoYW5nZS1ldmVudAog
ICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNrIHNvdXJjZSB0byB1
c2UuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KFRh
c2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Vs
ZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxh
YmxlOjpObykpOworICAgIG1fZG9jdW1lbnQtPnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChUYXNr
U291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlbGVj
dGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJs
ZTo6Tm8pKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8
U2V0U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCBpbnRl
bnQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSkKIHsKLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwogICAgIGlm
ICghc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShzZWxlY3Rpb24sIG9wdGlv
bnMsIGFsaWduLCBncmFudWxhcml0eSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG9wdGlvbnMgJiBSZXZlYWxTZWxlY3Rpb25VcFRvTWFp
bkZyYW1lKQogICAgICAgICBtX3NlbGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxN
b2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lOwogICAgIGVsc2UgaWYgKG9wdGlvbnMgJiBSZXZlYWxT
ZWxlY3Rpb24pCkBAIC00MTEsMjcgKzQwOCwyNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8Uwog
ICAgIG1fc2VsZWN0aW9uUmV2ZWFsSW50ZW50ID0gaW50ZW50OwogICAgIG1fcGVuZGluZ1NlbGVj
dGlvblVwZGF0ZSA9IHRydWU7CiAKLSAgICBpZiAoZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJl
Y2FsYygpKQorICAgIGlmIChtX2RvY3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNhbGMoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1bWVudC0+dmll
dygpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9kb2N1bWVudC0+dmlldygpOwogICAg
IGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5k
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihp
bnRlbnQpOwogCiAgICAgaWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAg
aWYgKGF1dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBp
ZiAoYXV0byogY2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAg
ICAgICBjbGllbnQtPmRpZEVuZFVzZXJUcmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCk7CiAgICAg
fQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHls
ZShGcmFtZSYgZnJhbWUpCitzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5
b3V0T3JTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAjZWxzZQotICAgIGZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
KyAgICBkb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAjZW5kaWYKIH0KIApAQCAtNDQx
LDcgKzQzOCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRl
KFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlIHJldmVhbE1vCiAgICAgaWYgKHJldmVhbE1vZGUg
PT0gUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGU6OkZvcmNlZCkKICAgICAgICAgbV9zZWxlY3Rp
b25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsOwogICAgIG1fcGVuZGlu
Z1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7Ci0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2Zy
YW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9j
dW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxl
Y3Rpb24oKTsKIH0KIApAQCAtNDU3LDcgKzQ1NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVw
ZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50
CiAgICAgaWYgKG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSAhPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpE
b05vdFJldmVhbCkgewogICAgICAgICBTY3JvbGxBbGlnbm1lbnQgYWxpZ25tZW50OwogCi0gICAg
ICAgIGlmIChtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRlckFsaWduV2hl
blNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmVkaXRvcigp
LmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQog
ICAgICAgICAgICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJl
dmVhbGluZ1NlbGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBT
Y3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGFsaWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxp
bmdTZWxlY3Rpb24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkOwpAQCAtNDcxLDcgKzQ2OCw3IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNo
YW5nZUludGVudCYgaW50CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3Jz
Rm9yU2VsZWN0aW9uKCkKIHsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04p
ICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1fZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxl
Y3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKTsKICNlbmRpZgogfQogCkBAIC03MDMsNyAr
NzAwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRm
b3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3QKICAgICAvLyBiYXNlL2V4dGVudCBhbHdheXMgcG9p
bnQgdG8gdGhlIHNhbWUgbm9kZXMgYXMgc3RhcnQvZW5kLCBidXQgd2hpY2ggcG9pbnRzCiAgICAg
Ly8gdG8gd2hpY2ggZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhp
cyBjYW4gYmUgY2hhbmdlZAogICAgIC8vIHRvIGp1c3QgcmV0dXJuIG1fc2VsLmV4dGVudCgpLgot
ICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3
YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBvaW50KCkpCisgICAgaWYgKG1fZG9jdW1l
bnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRT
ZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9u
LmlzQmFzZUZpcnN0KCkgPyBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkgOiBtX3NlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKTsKIAogICAgIHJldHVybiBpc0dldFN0YXJ0ID8gbV9zZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCk7CkBAIC03MjMsNyArNzIwLDcg
QEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0oY29uc3QgVmlzaWJsZVBvc2l0aW8KIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25BZnRlckN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsK
IAotICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxk
U2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKKyAgICBpZiAobV9kb2N1bWVudCAmJiBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCgpKSB7CiAgICAgICAgIC8vIEluIG9yZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJp
Z2h0LCB3ZSBhZHZhbmNlIG9uZQogICAgICAgICAvLyB3b3JkIGZ1cnRoZXIgYW5kIHRoZW4gbW92
ZSBvbmUgd29yZCBiYWNrLiBHaXZlbiB0aGUKICAgICAgICAgLy8gc2VtYW50aWNzIG9mIHByZXZp
b3VzV29yZFBvc2l0aW9uKCkgdGhpcyB3aWxsIHB1dCB1cyBhdCB0aGUKQEAgLTg1NSw3ICs4NTIs
NyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYgogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBv
c2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5yaWdo
dCh0cnVlLCByZWFjaGVkQm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRH
cmFudWxhcml0eTogewotICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBt
X2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hl
bk1vdmluZ1JpZ2h0KCk7CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9
IG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lw
U3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQ
b3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAg
ICAgICAgIHBvcyA9IHJpZ2h0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFj
ZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMDc2
LDcgKzEwNzMsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBibwogICAgICAgICAgICAgcG9zID0g
VmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0
eSgpKS5sZWZ0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdS
aWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lw
U3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmlu
Z1JpZ2h0ID0gbV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNo
b3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24g
Y3VycmVudFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0
eSgpKTsKICAgICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24sIHNr
aXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAgICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpA
QCAtMTM2Miw3ICsxMzU5LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0
aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVz
ZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2ZyYW1lICYmIEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFp
c1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZG9jdW1lbnQg
JiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewogICAgICAgICBub3Rp
ZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKHsgQVhUZXh0U3RhdGVDaGFuZ2VUeXBl
U2VsZWN0aW9uQm91bmRhcnksIHRleHRTZWxlY3Rpb25XaXRoRGlyZWN0aW9uQW5kR3JhbnVsYXJp
dHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSkgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KQEAgLTEzNzQsOCArMTM3MSw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0
ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAg
IGlmICghd2FzUmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUgJiYgcG9zaXRpb24gPT0g
b3JpZ2luYWxTdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewot
ICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKKyAgICBpZiAobV9kb2N1bWVudCAmJiBBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChBWE9iamVjdENhY2hl
KiBjYWNoZSA9IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAg
ICAgY2FjaGUtPnNldFRleHRTZWxlY3Rpb25JbnRlbnQodGV4dFNlbGVjdGlvbkludGVudChhbHRl
ciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSkpOwogICAgIH0KIApAQCAtMTM4NCw3ICsxMzgxLDcg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rp
b25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRp
b24gdHlwZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAg
ICAgLy8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uIHNldC4KICAgICBMYXlvdXRVbml0IHggPSBsaW5lRGly
ZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2Vs
ZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rp
b24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rp
b24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbiht
X2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAogICAgIHN3aXRjaCAo
YWx0ZXIpIHsKICAgICBjYXNlIEFsdGVyYXRpb25Nb3ZlOgpAQCAtMTM5NCw3ICsxMzkxLDcgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25E
aXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAogICAgICAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2Fy
ZXQoKQogICAgICAgICAgICAgJiYgKGdyYW51bGFyaXR5ID09IFdvcmRHcmFudWxhcml0eSB8fCBn
cmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBMaW5l
R3JhbnVsYXJpdHkpCi0gICAgICAgICAgICAmJiBtX2ZyYW1lICYmICFtX2ZyYW1lLT5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZEV4dGVuZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0
KCkpIHsKKyAgICAgICAgICAgICYmIG1fZG9jdW1lbnQgJiYgIW1fZG9jdW1lbnQtPmVkaXRvcigp
LmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQo
KSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IHRoZSBzZWxlY3Rpb24gZ28gYWNyb3NzIHRo
ZSBiYXNlIHBvc2l0aW9uIGRpcmVjdGx5LiBOZWVkZWQgdG8gbWF0Y2ggbWFjCiAgICAgICAgICAg
ICAvLyBiZWhhdmlvciB3aGVuLCBmb3IgaW5zdGFuY2UsIHdvcmQtc2VsZWN0aW5nIGJhY2t3YXJk
cyBzdGFydGluZyB3aXRoIHRoZSBjYXJldCBpbgogICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBv
ZiBhIHdvcmQgYW5kIHRoZW4gd29yZC1zZWxlY3RpbmcgZm9yd2FyZCwgbGVhdmluZyB0aGUgY2Fy
ZXQgaW4gdGhlCkBAIC0xNDA3LDcgKzE0MDQsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2Rp
ZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAog
CiAgICAgICAgIC8vIFN0YW5kYXJkIE1hYyBiZWhhdmlvciB3aGVuIGV4dGVuZGluZyB0byBhIGJv
dW5kYXJ5IGlzIGdyb3cgdGhlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBsZWF2aW5nIHRoZQogICAg
ICAgICAvLyBiYXNlIGluIHBsYWNlIGFuZCBtb3ZpbmcgdGhlIGV4dGVudC4gTWF0Y2hlcyBOU1Rl
eHRWaWV3LgotICAgICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkg
fHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKKyAg
ICAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigp
LnNob3VsZEFsd2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1f
c2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCiAgICAgICAg
ICAgICBzZXRFeHRlbnQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2soKTsKQEAgLTE1MTcsNyArMTUxNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgdW5zaWduZWQgdmVydGljYWxEaXN0YW5jZSwgVmVy
dGljCiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCkKICAgICAgICAgbV9n
cmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwogCi0gICAgbV9zZWxlY3Rpb24uc2V0
SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1l
KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5zZXRJc0Rp
cmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQp
IHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC0xNTc1LDcgKzE1NzIsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1
Y3Rpb24oKQogICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgaWYg
KGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byog
dmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9u
KCkuY2xlYXJTZWxlY3Rpb24oKTsKIAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0Fw
cGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
LCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKQEAg
LTE2NTUsOSArMTY1Miw5IEBAIHN0YXRpYyBib29sIGlzTm9uT3JwaGFuZWRDYXJldChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIEludFJlY3QgRnJhbWVTZWxlY3Rpb246OmFi
c29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4ZWQpCiB7Ci0gICAgaWYgKCFtX2ZyYW1l
KQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOwogICAgIHJl
Y29tcHV0ZUNhcmV0UmVjdCgpOwogICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAgICAgKmluc2lk
ZUZpeGVkID0gbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjc1LDEwICsxNjcyLDEw
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgaWYgKCFz
aG91bGRVcGRhdGVDYXJldFJlY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KCFtX2ZyYW1lKQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgRnJhbWVWaWV3KiB2ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIEZy
YW1lVmlldyogdiA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTY5MCw3ICsxNjg3LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1f
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVj
dChtX2ZyYW1lLT5kb2N1bWVudCgpLCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAo
dXBkYXRlQ2FyZXRSZWN0KG1fZG9jdW1lbnQsIHZpc2libGVTdGFydCkpIHsKICAgICAgICAgICAg
ICAgICBjYXJldE5vZGUgPSB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpOwogICAgICAgICAgICAgICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IHRydWU7CiAg
ICAgICAgICAgICB9CkBAIC0xNzE1LDcgKzE3MTIsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpy
ZWNvbXB1dGVDYXJldFJlY3QoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUo
VEVYVF9DQVJFVCkKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlclZpZXcoKSkgeworICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVu
dC0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlz
Q29udGVudEVkaXRhYmxlID0gbV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9w
cmV2aW91c0NhcmV0Tm9kZSAmJiBtX3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFJlcGFpbnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3
Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUpKSB7CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91
c0NhcmV0Tm9kZSkKQEAgLTE4OTQsMTIgKzE4OTEsMTEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
Y29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAogICAgIGlmICghaXNSYW5n
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgYXV0byogZG9jdW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCisgICAgaWYgKCFtX2RvY3Vt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgSGl0VGVzdFJlc3VsdCByZXN1
bHQocG9pbnQpOwotICAgIGRvY3VtZW50LT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3Vs
dCk7CisgICAgbV9kb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOwog
ICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBpZiAoIWlubmVy
Tm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xOTY4LDkgKzE5NjQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1l
bnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVj
dEFsbCgpCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsK
LQotICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCk7CisgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxl
bWVudCgpOwogICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7
CiAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChzZWxlY3RFbGVt
ZW50LmNhblNlbGVjdEFsbCgpKSB7CkBAIC0yMDAwLDggKzE5OTQsOCBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgICAgICBpZiAocm9vdCkKICAgICAgICAgICAgIHNlbGVj
dFN0YXJ0VGFyZ2V0ID0gcm9vdC0+c2hhZG93SG9zdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBz
ZWxlY3RTdGFydFRhcmdldCA9IGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOworICAgICAgICAg
ICAgcm9vdCA9IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgc2Vs
ZWN0U3RhcnRUYXJnZXQgPSBtX2RvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOwogICAgICAgICB9
CiAgICAgfQogICAgIGlmICghcm9vdCkKQEAgLTIwNTgsOSArMjA1Miw4IEBAIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5p
dHksIFNob3VsZENsCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNo
YW5nZWQoKQogewogICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2
ZSgpOwotICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQoKm1fZnJhbWUtPmRvY3VtZW50KCkpOwog
Ci0gICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX2RvY3VtZW50LT51
cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICNpZiBVU0UoVUlLSVRfRURJVElORykKICAgICAvLyBD
YXJldCBibGlua2luZyAoYmxpbmtzIHwgZG9lcyBub3QgYmxpbmspCkBAIC0yMDcxLDcgKzIwNjQs
NyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQog
ICAgIC8vIEJlY2F1c2UgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBh
bmQKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNoZWNr
IGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUgcGxhY2Vz
IHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCi0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBk
b2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1
bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5yZXBhaW50KCk7
CiAKICAgICAvLyBDYXJldCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCkBAIC0yMDgyLDcg
KzIwNzUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5n
ZWQoKQogICAgIC8vIEJlY2F1c2UgU3R5bGU6OlJlc29sdmVyOjpjaGVja09uZVNlbGVjdG9yKCkg
YW5kCiAgICAgLy8gUmVuZGVyVGhlbWU6OmlzRm9jdXNlZCgpIGNoZWNrIGlmIHRoZSBmcmFtZSBp
cyBhY3RpdmUsIHdlIGhhdmUgdG8KICAgICAvLyB1cGRhdGUgc3R5bGUgYW5kIHRoZW1lIHN0YXRl
IHRoYXQgZGVwZW5kZWQgb24gdGhvc2UuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1
bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSkgeworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gbV9k
b2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSkgewogICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
ZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJl
ci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCkBAIC0yMTA3LDEzICsyMTAwLDEzIEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWQoYm9vbCBmbGFnKQogCiBib29sIEZyYW1lU2VsZWN0
aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZvY3VzZWQg
JiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCku
aXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZG9jdW1lbnQtPnBhZ2UoKSAm
JiBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7CiB9CiAK
ICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLWlubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxp
bmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRnJhbWUqIGZyYW1lKQoraW5saW5lIHN0YXRpYyBib29s
IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQp
CiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKSAmJiBmcmFt
ZS0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCktPnNob3VsZFN0b3BDYXJldEJsaW5raW5nKCk7
CisgICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKSAmJiBkb2N1
bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCktPnNob3VsZFN0b3BDYXJldEJsaW5raW5n
KCk7CiB9CiAjZW5kaWYKIApAQCAtMjEzMiwxMiArMjEyNSwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICBib29sIHBhaW50QmxvY2tDdXJzb3IgPSBtX3No
b3VsZFNob3dCbG9ja0N1cnNvciAmJiBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgJiYgIWlzTG9naWNh
bEVuZE9mTGluZShtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwogICAgIGJvb2wgY2FyZXRSZWN0
Q2hhbmdlZE9yQ2xlYXJlZCA9IHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogCi0gICAgYm9vbCBjYXJl
dEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwor
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNob3VsZEJsaW5rID0gIXBhaW50QmxvY2tDdXJzb3Ig
JiYgY2FyZXRJc1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRl
bnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1v
dmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBzbyB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAv
LyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxvY2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFu
Z2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5
cGluZ0NvbW1hbmQobV9mcmFtZSkpCisgICAgaWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQg
fHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZCht
X2RvY3VtZW50KSkKICAgICAgICAgbV9jYXJldEJsaW5rVGltZXIuc3RvcCgpOwogCiAgICAgLy8g
U3RhcnQgYmxpbmtpbmcgd2l0aCBhIGJsYWNrIGNhcmV0LiBCZSBzdXJlIG5vdCB0byByZXN0YXJ0
IGlmIHdlJ3JlCkBAIC0yMTUzLDcgKzIxNDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRh
dGVBcHBlYXJhbmNlKCkKICAgICB9CiAjZW5kaWYKIAotICAgIFJlbmRlclZpZXcqIHZpZXcgPSBt
X2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1
bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yMjAyLDggKzIxOTUsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxp
dHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm9ub3VzIGxheW91dCBoZXJlLgot
ICAgIGlmIChtX2ZyYW1lKQotICAgICAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0
T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgaWYgKG1fZG9jdW1lbnQpCisgICAgICAgIHVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKIAogI2lmIEVOQUJM
RShURVhUX0NBUkVUKQogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKQEAgLTIyNDcsMTAgKzIyNDAs
MTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAg
ICAgaWYgKGlzTm9uZSgpIHx8ICFpc0ZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ym9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5h
YmxlZCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCku
Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAgICAg
ICBpZiAoRWxlbWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChtX3NlbGVjdGlv
bi5iYXNlKCkpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJhbWUpOworICAgICAgICAgICAgbV9k
b2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNo
b3IsICptX2ZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAg
LTIyNjIsMTYgKzIyNTUsMTYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1l
bnRJZk5lZWRlZCgpCiAgICAgICAgICAgICAvLyBzbyBhZGQgdGhlICFpc0ZyYW1lRWxlbWVudCBj
aGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBtYWtlIHRoaXMKICAg
ICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxvbmcgdGVybSwgYnV0IHRoaXMgaXMgdGhlIHNhZmVz
dCBmaXggYXQgdGhpcyB0aW1lLgogICAgICAgICAgICAgaWYgKHRhcmdldC0+aXNNb3VzZUZvY3Vz
YWJsZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9m
cmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQs
ICptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJhbWUpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdl
dC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwogICAgICAgICB9Ci0gICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOworICAgICAgICBtX2Rv
Y3VtZW50LT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKICAgICB9CiAKICAgICBpZiAoY2Fy
ZXRCcm93c2luZykKLSAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFtZSk7CisgICAgICAgIG1fZG9jdW1lbnQt
PnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1f
ZnJhbWUpOwogfQogCiB2b2lkIERyYWdDYXJldENvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZy
YW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KSBjb25zdApAQCAtMjMwMCwxNiArMjI5
MywxNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rp
b25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRp
ZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFu
Z2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246
OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVu
dCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYgKCFtX2Rv
Y3VtZW50KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgdXBkYXRlU2VsZWN0
aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwotICAgIGF1dG8qIHJlbmRlclZp
ZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICB1cGRhdGVTZWxlY3Rpb25CeVVw
ZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CisgICAgYXV0byogcmVuZGVyVmlldyA9
IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7CiAKQEAgLTIzMjUsMTQgKzIzMTgsMTQgQEAgRmxvYXRSZWN0
IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xp
cFRvVmlzaWJsZUNvbnQKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVU
ZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3Rhbmds
ZUhlaWdodCB0ZXh0UmVjdEhlaWdodCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmNvbnRl
bnRSZW5kZXJlcigpKQorICAgIGlmICghbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHZpc2libGVD
b250ZW50UmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFi
bGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICBhdXRvIHZpc2libGVD
b250ZW50UmVjdCA9IG1fZG9jdW1lbnQtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9s
bGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKICAgICBmb3IgKGF1dG8m
IHJlY3QgOiBib3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJh
bmdlLCB0ZXh0UmVjdEhlaWdodCA9PSBUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWln
aHQpKSkgewogICAgICAgICBhdXRvIGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNlY3Rpb24ocmVj
dCwgdmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0Lmlz
RW1wdHkoKSkKQEAgLTIzNjQsNyArMjM1Nyw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNj
YW5Gb3JGb3JtKEVsZW1lbnQqIHN0YXJ0KQogSFRNTEZvcm1FbGVtZW50KiBGcmFtZVNlbGVjdGlv
bjo6Y3VycmVudEZvcm0oKSBjb25zdAogewogICAgIC8vIFN0YXJ0IGxvb2tpbmcgZWl0aGVyIGF0
IHRoZSBhY3RpdmUgKGZpcnN0IHJlc3BvbmRlcikgbm9kZSwgb3Igd2hlcmUgdGhlIHNlbGVjdGlv
biBpcy4KLSAgICBFbGVtZW50KiBzdGFydCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRF
bGVtZW50KCk7CisgICAgRWxlbWVudCogc3RhcnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVu
dCgpOwogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQo
KS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKQEAgLTI0MDcsOCArMjQwMCw4IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVh
bE1vZGUsIGNvbnN0IFNjcm9sCiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zp
c2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1l
bnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICAgICAgICAgICAg
ICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAg
ICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
ZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJv
bWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1f
ZnJhbWUpOworICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdlKCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5
UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2ZyYW1lKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogI2Vsc2UKQEAgLTI0MjYsMTcgKzI0MTksMTYgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogICAgIC8vIFB1dCBhIGNhcmV0IGluc2lk
ZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAg
ICAgLy8gZW50aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3Ig
dGhpcyBkb2N1bWVudCkuCiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgY2FyZXRCcm93c2lu
ZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAo
IWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dz
aW5nKSkKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNh
cmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKCFpc05vbmUoKSB8fCAhKG1fZG9jdW1lbnQt
Pmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKICAgICAgICAgcmV0dXJuOwog
I2Vsc2UKLSAgICBpZiAoIWRvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9jdW1l
bnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpKSkgfHwgIWRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCisgICAgaWYgKCFtX2Rv
Y3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkgfHwgIW1fZG9j
dW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAg
ICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50LT5ib2R5KCkpCisgICAgaWYgKGF1dG8qIGJvZHkg
PSBtX2RvY3VtZW50LT5ib2R5KCkpCiAgICAgICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShib2R5KSwgRE9XTlNUUkVBTSkpOwogfQog
CkBAIC0yNDQ2LDcgKzI0MzgsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQogICAgIGlmICht
X2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmlu
aXR5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZp
bml0eSgpLCBmYWxzZSk7CiB9CiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OmRpc3BhdGNoU2VsZWN0
U3RhcnQoKQpAQCAtMjQ2NCw3ICsyNDU2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2hv
dWxkU2hvd0Jsb2NrQ3Vyc29yKGJvb2wgc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKQogewogICAgIG1f
c2hvdWxkU2hvd0Jsb2NrQ3Vyc29yID0gc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yOwogCi0gICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CiAKICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiB9CkBAIC0yNDgyLDEzICsyNDc0LDEyIEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNjaGVkdWxlQXBwZWFyYW5jZVVwZGF0ZUFmdGVyU3R5bGVDaGFu
Z2UoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjphcHBlYXJhbmNlVXBkYXRlVGltZXJGaXJlZCgp
CiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZSgqbV9mcmFtZSk7CiAgICAgdXBkYXRl
QXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpOwogfQogCiB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCkKIHsKLSAg
ICBpZiAoYXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgaWYg
KGF1dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBj
bGllbnQtPnVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgp
OwogCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKQEAgLTI3MjMsNyArMjcxNCw3IEBA
IFJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2Vs
ZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJh
bmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5v
ZGUpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPmNyZWF0ZVJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZG9j
dW1lbnQtPmNyZWF0ZVJhbmdlKCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxv
Y2F0aW9uKTsKICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3Ro
KTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJl
c3VsdFJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CkBAIC0yOTA0LDcgKzI4OTUsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzKQogICAg
IGlmIChtX2NhcmV0QmxpbmtzID09IGNhcmV0QmxpbmtzKQogICAgICAgICByZXR1cm47CiAjaWYg
RU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7IAorICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAg
ICAgICAgbV9jYXJldFBhaW50ID0gZmFsc2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0
KCk7IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGU2YTcwOGIw
NTRmNTliMzBiZmI1N2VmZGZlMzJjYWVkMTY1YTA1MDguLjc2NjQzYjM3ODQ2OTBiODI5NDcxNGVm
OWE5ODhhYmZmNGYyNDA1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1l
KiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9u
KERvY3VtZW50KiA9IG51bGxwdHIpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9v
dEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIApAQCAtMzM4
LDcgKzMzOCw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsK
IAorICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIFJl
ZlB0cjxGcmFtZT4gbV9wcm90ZWN0ZWRGcmFtZTsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlm
ZjlmMzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEy
NGNmMTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2ln
bmVkCiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAg
Ym9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNo
b0VuYWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNl
dHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFi
bGVkKQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZi
Li4yNzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3
ICsxNDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5
cGluZ1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUg
JiYgIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGlu
ZyBzdHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4
IGU5MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1
MTM2OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxl
Y3Rpb24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1Nl
bGVjdGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9y
KCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
LmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9y
bU92ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChl
bmRQb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAg
ICAgICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxl
KHR5cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFk
OTM5ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQx
M2YwNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1
Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li40OTY5OTE5ZDkxYTExNDk1
YzI5OGM5MmE3NjY3MjZiOTJlMTY5NTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6
IENhbiB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3Jt
ZWQ/ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQg
YWZ0ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZy
YW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
ZGVzdGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQu
ICBUbyBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0
aG91dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUg
c2FtZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
dFNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4
ZTliYTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAt
NDAsNyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBo
YW5lZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1Nl
dCwgbV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewot
ICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAg
ICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KSkgJiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBz
ZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgz
NjZiNTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0
OThmZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAt
OTgsOCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQo
KQogICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a2VyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNw
ZWxsQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50
KQogICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNr
ZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzEx
NCw3IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50
KiBTcGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJh
bWUucGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JD
bGllbnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVj
a2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVj
a2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1l
LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdl
JiByYW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52
b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1v
dmUocmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3By
b2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBj
bGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tl
cjo6ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0x
OTksNyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vz
c2luZ1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJl
cGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFz
dFByb2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkK
ICAgICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTks
NyArMjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3RE
YXRhLmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkK
ICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAg
ICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5k
b2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5j
aGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgp
LCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5
ZmI1YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4
YTg2NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03
Niw3ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1l
Jik7CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hl
Y2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEw
Niw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAg
ICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0
Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIw
ODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcg
KzY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0
b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3Jy
ZWN0ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVu
YXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0
ZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpT
cGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCmluZGV4IDVhNmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUu
LmYzMTI4ZDdlYTU3ZDU2NzYzOTE4YTMxM2FiNzdiNjY0OWU1YjY0MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5n
Q29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5k
IGNvbW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24o
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUg
Y29tcG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAg
IGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlv
bik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9z
aXRpb25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRT
cGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCAr
MTgwLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0
ZXJHcmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9j
dW1lbnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZy
YW1lKCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsK
KyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0
aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUo
VGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5n
KTsKQEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBG
SVhNRTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9z
ZSBhIG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAg
ICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1
cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdD
b21tYW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KGRvY3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVu
dFNwZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRp
b25zLAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtl
eSwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12
b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9p
ZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rp
b24oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBv
c2l0aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRv
cigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xp
bmUodGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGlu
c2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVl
ZCB0byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0
byBGcmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9u
cywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAg
IExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAg
ICAgU3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQs
IHNlbGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlv
blBlbmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxl
Y3Rpb24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0
aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1
cmUsIHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3Vz
dG9tIHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBv
ZiB0aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkg
eworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBp
ZiAobGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvcklu
c2VydGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2Vs
ZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYs
MTIgKzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8g
Y21kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0
LCBvcHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1h
bmQoZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50
U2VsZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1l
KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
KmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9j
dW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9u
KG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlv
bnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90
aWZ5QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1
bWVudCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBp
bmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9w
ZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1
dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcs
OSArMjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwg
b3B0aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21t
YW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkK
K1JlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29t
cG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RF
ZGl0Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRD
b21tYW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFs
YXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwg
IXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09w
ZW5Gb3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYg
KzMxMCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFu
ZFVudGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxp
bmdJbml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0
aW5nQWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25J
Zk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRI
YXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGlu
Z1NlbGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00
MzYsMTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0KICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0
b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1l
LmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAm
JiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisg
ICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRp
dG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5n
QWNjZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYg
KCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxl
Y3Rpb24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2Ug
bmVlZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlw
ZSkKICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAg
IGlmIChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8
fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFu
ZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1h
bmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRl
eHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigp
Lm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCks
ICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8g
SWYgdGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNv
dWxkIGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdv
cmRTaWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQs
IHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNl
KTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYg
KzQ4NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5k
KEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAg
ICAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJl
dHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBm
cmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6
OmNyZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxB
cHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5n
Q29tbWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5m
cmFtZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9y
QWRkZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCku
YXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVk
aXRpbmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFs
c28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQg
aGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVu
dFNwZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21t
YW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNr
aW5nIGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50
IGlzc3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBh
cyBtaXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlw
ZUZvckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5k
aWYKIH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4
dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAg
ICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nl
c3NpYmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51
dGY4KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJl
cGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNl
cnRlZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlw
aW5nLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAs
OSArNTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xp
bmVzKGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlv
blR5cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJh
bGFuY2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rp
b24oKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0
VGV4dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
ZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2li
aWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZy
YW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNl
ZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
fQogCkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNl
cGFyYXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAg
cmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVw
bGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KCkKICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxv
Y2txdW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRD
b250ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIs
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCkt
PnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsK
IH0KIApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJs
ZVJvb3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc0OCwyMCArNzIyLDIwIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3Nl
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxk
IHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNs
b3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQo
KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0
aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5p
c0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmICghd2ls
bEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxl
Y3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
c2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBl
bmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0
ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JE
ZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC03NzgsMTAgKzc1Miw5IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGJvb2wgc2hvdWxkQWRkCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2lsbFJp
bmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQo
KS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0ZU1h
cmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25B
ZnRlclVuZG87CkBAIC04NTUsMTMgKzgyOCwxMyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMg
YnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRn
ZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwot
ICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5n
KGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hv
dWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJp
dHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKQEAgLTg3MSw3ICs4NDQs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxk
QWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRp
dG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7
CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRp
bmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBt
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRG
b3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5
YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlv
bnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYs
IE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1l
Kik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1
cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5G
b3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5
cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
RG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBp
bmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmlu
YWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7
CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCos
IERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBp
bmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdD
b21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBS
ZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbQppbmRleCBmMmEyZDUyYWM1YWJmNGU0ZjEzMTEzY2EyNWQxYjIwYTE3MzhmYTY5Li41
Mzg0OWI0ZWFlMTg4OGMyZmQ5NDhjYzI4NjI2OTc2ZTc0MWJmZjM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC0zODksNyArMzg5LDcgQEAgdm9pZCBFZGl0b3I6
OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxl
bWVudCkKIC8vIGhhdmUgYSBzdGFsZSBzZWxlY3Rpb24uCiB2b2lkIEVkaXRvcjo6ZW5zdXJlTGFz
dEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoKQogewot
ICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rp
b25JZk9wZW5Gb3JNb3JlVHlwaW5nKCZtX2ZyYW1lLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJy
ZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYzcxNmQ3MjgwZjQ2MmNiNTY3Mzc1
N2I0YmE0ZTNiMjRhYmVlOGRlMC4uYTI2NzM0NWJlNTQ2ZWU3ZjQ2MTE5ZDgzMmM4ZGUxOTE2YThh
ZWNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC01NDEsMTEgKzU0
MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wKCkKIHZvaWQgRnJhbWVMb2FkZXI6OndpbGxU
cmFuc2l0aW9uVG9Db21taXR0ZWQoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IHdoZW4gYSBmcmFtZSBpcyBzdGlsbCBmdWxseSBpbiBwbGFjZSAobm90IGNhY2hlZCwgbm90IGRl
dGFjaGVkKSwgYnV0IHdpbGwgYmUgcmVwbGFjZWQuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
bV9mcmFtZS5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX2ZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICBpZiAo
ZG9jdW1lbnQtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gVGhlIHRl
eHQgd2FzIGFscmVhZHkgcHJlc2VudCBpbiBET00sIHNvIGl0J3MgYmV0dGVyIHRvIGNvbmZpcm0g
dGhhbiB0byBjYW5jZWwgdGhlIGNvbXBvc2l0aW9uLgotICAgICAgICBtX2ZyYW1lLmVkaXRvcigp
LmNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JD
bGllbnQgPSBtX2ZyYW1lLmVkaXRvcigpLmNsaWVudCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5l
ZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICAgICAgaWYgKEVkaXRvckNsaWVudCog
ZWRpdG9yQ2xpZW50ID0gZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKSB7CiAgICAgICAgICAg
ICBlZGl0b3JDbGllbnQtPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOwogICAg
ICAgICAgICAgZWRpdG9yQ2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CiAg
ICAgICAgIH0KQEAgLTU2Nyw4ICs1NzAsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgp
CiAgICAgfQogCiAgICAgc3RvcExvYWRpbmcodW5sb2FkRXZlbnRQb2xpY3kpOwotICAgIAotICAg
IG1fZnJhbWUuZWRpdG9yKCkuY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKIH0KIAogYm9vbCBG
cmFtZUxvYWRlcjo6ZGlkT3BlblVSTCgpCkBAIC01ODAsNyArNTgxLDYgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6ZGlkT3BlblVSTCgpCiAgICAgfQogCiAgICAgbV9mcmFtZS5uYXZpZ2F0aW9uU2NoZWR1
bGVyKCkuY2FuY2VsKCk7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhckxhc3RFZGl0Q29tbWFu
ZCgpOwogCiAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRD
bG9zZSA9IGZhbHNlOwpAQCAtNjQzLDggKzY0Myw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRDbGVhcldpbmRvd05hbWUoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBEb2N1bWVudCYgbmV3
CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBj
bGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib29sIGNsZWFy
RnJhbWVWaWV3LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVET01XaW5kb3dDcmVhdGlv
bikKIHsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyKCk7Ci0KICAgICBib29sIG5lZWRlZENs
ZWFyID0gbV9uZWVkc0NsZWFyOwogICAgIG1fbmVlZHNDbGVhciA9IGZhbHNlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggZmY0MTNkOTY2NjNlMTRhM2M0OTVm
NmMzM2Y5NTQ1ZGE5ZmY4NmM3Ni4uNDZmN2JiODVlNzkxOTQxYzkxYTYwZGFjZTUxMzI3NTE2ZjQx
YTk4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMzQ2LDcg
KzM0Niw3IEBAIEZvY3VzQ29udHJvbGxlcjo6Rm9jdXNDb250cm9sbGVyKFBhZ2UmIHBhZ2UsIE9w
dGlvblNldDxBY3Rpdml0eVN0YXRlOjpGbGFnPiBhY3RpCiB2b2lkIEZvY3VzQ29udHJvbGxlcjo6
c2V0Rm9jdXNlZEZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NFUlQoIWZyYW1lIHx8IGZy
YW1lLT5wYWdlKCkgPT0gJm1fcGFnZSk7Ci0gICAgaWYgKG1fZm9jdXNlZEZyYW1lID09IGZyYW1l
IHx8IG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFtZSkKKyAgICBpZiAoKCFmcmFtZSAmJiAhbV9mb2N1
c2VkRnJhbWUpIHx8IChmcmFtZSAmJiBtX2ZvY3VzZWREb2N1bWVudCA9PSBmcmFtZS0+ZG9jdW1l
bnQoKSkgfHwgbV9pc0NoYW5naW5nRm9jdXNlZEZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX2lzQ2hhbmdpbmdGb2N1c2VkRnJhbWUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXND
b250cm9sbGVyLmgKaW5kZXggNmNkNjAwZjc4MmU3MmY0MTc3Y2JlYjBkNmZhNDQ2YzFjNzgzM2My
ZC4uNzc2ODQwYjMwOWU3NjY4M2I1ZjRiMWEzOGZiYjRhN2NjN2Q5ZTAyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCkBAIC0xMTYsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGZvY3VzUmVwYWludFRpbWVyRmlyZWQoKTsKIAogICAgIFBhZ2UmIG1fcGFnZTsKKyAg
ICBSZWZQdHI8RG9jdW1lbnQ+IG1fZm9jdXNlZERvY3VtZW50OwogICAgIFJlZlB0cjxGcmFtZT4g
bV9mb2N1c2VkRnJhbWU7CiAgICAgYm9vbCBtX2lzQ2hhbmdpbmdGb2N1c2VkRnJhbWU7CiAgICAg
T3B0aW9uU2V0PEFjdGl2aXR5U3RhdGU6OkZsYWc+IG1fYWN0aXZpdHlTdGF0ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKaW5kZXggMzg1ZTM3YTZkMGM5MGU2MzNhM2I3YjQyODcyYzYxNmUzODA4NjQyNi4u
MjkwN2I0ODViOTRjNjZhYzUwNjg1Yzk5ZGMxNWRkNWVlZWZmY2QwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAgICwg
bV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxlcj4o
KnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9zY3Jp
cHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2VkaXRv
cihtYWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rpb24obWFrZVVu
aXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigqdGhpcykpCiAgICAgLCBt
X3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV90ZXh0
Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTU1NCw3ICs1NTIsNyBA
QCBib29sIEZyYW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2UgRE9NUGFzdGVB
Y2Nlc3NQb2xpY3k6OkRlbmllZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRE9N
UGFzdGVBY2Nlc3NQb2xpY3k6Ok5vdFJlcXVlc3RlZFlldDogewotICAgICAgICBhdXRvKiBjbGll
bnQgPSBtX2VkaXRvci0+Y2xpZW50KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9IGVkaXRvcigp
LmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtOTM3LDcgKzkzNSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZh
Y3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVjdGlvblBh
bmVsQXNJZ25vcmVkKCk7CiAKICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJs
ZWQiIHByb3BlcnR5IGluIHN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTog
SG93IHRvIGhhbmRsZSBjb21wb3VuZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/
IE5lZWRzIFNWRyBXRyBjbGFyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDNkNDNhOTRi
ZWE5NTU2Yzk4ZGM3NDIzYWI3ZWFkOWE5MmE1MmM2ZmUuLjA5MzJhODNjYjY3NGY2ZjhjOTYxMWVk
OWY2OTk5ZDE3YjYyZDE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkFic3RyYWN0RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgpAQCAt
MTYzLDE0ICsxNjQsMTQgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
OwogICAgIEZyYW1lVmlldyogdmlldygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBlZGl0b3IoKSB7
IHJldHVybiBtX2VkaXRvcjsgfQotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRvY3VtZW50
KCktPmVkaXRvcigpOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVy
biBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVy
KCkgeyByZXR1cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhhbmRsZXImIGV2
ZW50SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgRnJhbWVM
b2FkZXImIGxvYWRlcigpIGNvbnN0OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXImIG5hdmlnYXRp
b25TY2hlZHVsZXIoKSBjb25zdDsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyBy
ZXR1cm4gbV9zZWxlY3Rpb247IH0KLSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAgICBjb25zdCBG
cmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2Vs
ZWN0aW9uKCk7IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBDU1NBbmltYXRp
b25Db250cm9sbGVyJiBhbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7
IH0KICAgICBjb25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzksNiBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0
Q29udHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7Ci0g
ICAgVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBVbmlxdWVSZWY8
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0
SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5k
ZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZS4uM2VlZTQyZmYwY2Qx
ZTczY2YwMWIyOTVlOThkMjg1NGU5YmI3Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRp
Y2F0b3IuY3BwCkBAIC02OCwyMSArNjgsMTYgQEAgUmVmPFRleHRJbmRpY2F0b3I+IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKIAogUmVmUHRyPFRl
eHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYg
cmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4p
CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
LmZyYW1lKCk7CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKTsKIAotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQotICAgIFZpc2libGVT
ZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5h
ZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFy
eVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBl
YXJhbmNlVXBkYXRlcyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2Vs
ZWN0aW9uQ2hhbmdlKCpmcmFtZSwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlv
bkNoYW5nZShkb2N1bWVudCwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOwogCkBAIC05MSw3
ICs4Niw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAKICAgICBib29sIGluZGljYXRlc0N1
cnJlbnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihk
YXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQor
ICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZG9jdW1lbnQtPmZyYW1lKCksIHJh
bmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397122</attachid>
            <date>2020-04-21 14:41:11 -0700</date>
            <delta_ts>2020-04-21 16:23:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200421144110.patch</filename>
            <type>text/plain</type>
            <size>203206</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2
ZDA2MTE2ZWQ2Zjg5ZmFiOTBhM2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0
ZmQwMGUxNWI4OGQ3MjJlOTVhOTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4
NmExYjFlMWY1NDIxYmRiNzg2YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRU
aW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
IGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZvbnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFz
cyBGcmFtZTsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
RnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsx
NTc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21D
b250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVk
aXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBj
b25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFj
ZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5z
aWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3Mg
PSAwKTsKQEAgLTIxMTYsNiArMjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmll
ZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2Iz
YWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdk
MDBiYmYxMjBjMDM3OWVmMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJv
b2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAo
Y3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNz
cGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAt
MjIwLDEyICsyMjAsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50
Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0y
MzYsMTIgKzIzNiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2Vs
ZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAs
IHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJh
Z3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7
CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0
LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdn
ZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAo
IXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcg
PSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIg
bW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywg
d2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29y
cmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8g
dW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVs
IHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYg
KGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3Jp
Z2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29t
bWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRp
dG9yQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdl
KCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdl
KCkgPyAmbV9kb2N1bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAog
VGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChl
bmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OwogICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Up
OwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00
NzksMTIgKzQ3OSwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VyQ29udHJvbGxlciA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250
cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxh
Y2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUCiAKICAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICgh
c2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBl
bmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NTgsNyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAog
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5h
dGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUu
cGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgp
LT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0
aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5
NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9
IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
dHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRl
ZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldElu
UGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAg
Ym9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAg
ICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAg
dGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9j
dW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0g
VGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwpAQCAtNjUzLDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1
dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZi
MjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3
OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3Mg
RWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9
KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19F
TkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZl
VGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVT
U19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3
ZDFiOTY1MjQ2NDIwZDExODI2NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwx
NyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRo
ZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFz
IGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhp
cyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQg
dGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3Io
KS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFw
cGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAg
ICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51
bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246
OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndp
bGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsK
IAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigp
LndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0
byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
IC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhl
cmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
LCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBk
ZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgp
KTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
KyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVu
ZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1w
dHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBo
IHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBh
cmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUz
YzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4
NzJhY2I4OGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5n
IHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBw
cmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQw
LDcgKzc0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVS
ZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQu
cHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2ls
bCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgp
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0
VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAg
aWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBm
cmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIg
bWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxh
Y2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICgh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAg
ICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyAr
OTU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUy
Y2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUy
YjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9u
KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5k
OjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJu
ICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0
aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4
LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5k
Ojppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
OwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3
ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRl
eCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJj
OGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9u
KTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1h
bmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAg
IEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAg
IEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJl
ZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJj
Y2QwNTk1MzU1NWFhMjJiMjZmZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTg2OSw3ICs4NjksNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkK
IAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRv
cigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQz
MTZhNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAg
ICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpk
b2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJm
NjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLmUyYzI5ZmNjNmU3ZTc0MzE0YmUzOTkxZDBkZmNk
N2Y5MTdmMjUxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMs
OCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1
YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHko
Y29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0
aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBF
ZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29t
cG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1l
bnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJl
ZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRv
IGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkp
OwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
ICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lk
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJh
bWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxl
Y3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9u
PiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFt
ZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkp
CisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9w
dGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMp
Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9u
VG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2Vs
ZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAg
ICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxT
ZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNl
bGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNl
bGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBk
YXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBk
YXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNl
bmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAg
ICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05v
dFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwg
b3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQg
dGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNl
IHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlv
bi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAg
Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVu
dCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNr
IHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9y
IEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3Io
bV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgp
KTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAog
ZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRp
YyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBD
bGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQo
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9y
ZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBj
b25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBh
c3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRl
KCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0
b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0Fj
dGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1
bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxl
dGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJp
dHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wg
c21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFj
dGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4
dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRS
ZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODks
MTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9M
b2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgp
KTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAg
ICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRl
eHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRC
eVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKQEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
b3B5KCkKIHsgICAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBF
ZGl0b3I6OnRyeURIVE1MQ29weSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNw
YXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJv
YXJkRXZlbnRLaW5kOjpDdXQpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewot
ICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElu
cHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkK
KyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRT
dXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAg
LTc4MiwxNyArNzgyLDE3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBp
ZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxMiwxMiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0
aW9uKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFn
KTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSwgdWxUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2Rl
ID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAg
LTgyNywxMiArODI3LDEyIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlz
dFN0YXRlKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIG9sVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04NzIsNyArODcyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlz
dCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7
Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4g
bmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBA
IFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkKIAogdm9pZCBFZGl0b3I6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRU
YXJnZXRGcm9tKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBm
aW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
fQogCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0
aW5nU3R5bGVBbmRBY3Rpb24oKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFt
ZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNs
aWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRj
aElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0K
QEAgLTk4NCwxMyArOTg1LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5w
dXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlu
cHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZv
cmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0
IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNv
bHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0
cigpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5n
QWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rp
b25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNT
dHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+
dHJpU3RhdGVPZlN0eWxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZT
dHlsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAogICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZj
b21tYW5kKTsKIAogICAgICAgICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAg
ICAgICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkg
aW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQo
KSA9PSAmY29tbWFuZCkKQEAgLTEyMDAsMTEgKzEyMDEsMTEgQEAgdm9pZCBFZGl0b3I6OnJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9y
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1
bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9raWxs
UmluZyhtYWtlVW5pcXVlPFBBTDo6S2lsbFJpbmc+KCkpCi0gICAgLCBtX3NwZWxsQ2hlY2tlciht
YWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4oZnJhbWUpKQotICAgICwgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZnJhbWUpKQor
ICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+KGRvY3VtZW50KSkK
KyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI+KGRvY3VtZW50KSkKICAgICAsIG1fZWRpdG9yVUlVcGRhdGVUaW1lcigq
dGhpcywgJkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKQogI2lmIEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLCBt
X3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycykKQEAgLTEyMjAsNyArMTIyMSw3IEBAIHZvaWQg
RWRpdG9yOjpjbGVhcigpCiAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CiAgICAgICAgIG1f
Y29tcG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKEVkaXRvckNsaWVudCogY2xp
ZW50ID0gdGhpcy0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBv
c2l0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRp
b24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICB9CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVu
ZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVh
cigpOwpAQCAtMTIzOCwxMiArMTIzOSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29s
IEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQsIFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2
ZW50LCBpbnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRU
eXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlv
bihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVy
KCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlv
bik7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxl
VGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAK
IGJvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2
ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAzLDEwICsxMzA0LDggQEAgYm9vbCBFZGl0b3I6
Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRp
b25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3Vz
ZWQgZnJhbWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJl
dmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGF1dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdl
KCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMTksMTAgKzEzMTgsMTAgQEAg
Ym9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBj
YXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRh
YmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25J
c0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29t
bWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTEzMzksMTAgKzEz
MzgsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYg
KCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKIAot
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDYsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI1LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzQsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1NCw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzksNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNyw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUxLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODIsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNyw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUyLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4NCw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0yMDAwLDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNSw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMywxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODIsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDksNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjMsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChz
ZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTM5LDcg
KzIxMzgsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8v
IEZJWE1FOiBPbiBNYWMgT1MgWCwgd2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5n
IGFuZCBHcmFtbWFyIiBwYW5lbCwgd2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91
bGQgcmVtb3ZlIG1pc3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVk
UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpOwogCkBAIC0yMTUyLDE0ICsyMTUxLDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNw
ZWxsaW5nKCkKIAogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1l
KTsKLQorICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7Cisg
ICAgCiAgICAgLy8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2Vz
IC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAg
IC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94
aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5k
IG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcg
YXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxp
bmciIGNvbW1hbmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBz
cGVsbGluZ1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAg
Ym9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsyMzA3LDggQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNv
bmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBo
CiAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpn
cmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwu
cmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1t
YXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0
aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMyMCw4
ICsyMzE5LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSBy
ZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFu
Z2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVs
bGluZ09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5n
ZSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAg
IGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRX
b3JkKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5n
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIzMzQsNyBAQCBT
dHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWRO
b2RlKSBjb25zdAogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8
fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM4OCw3IEBAIFN0cmlu
ZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcp
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xp
ZW50KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0MDMsNyBAQCBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwg
U3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1
ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyArMjQxMSw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9v
CiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAg
aWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5n
U3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7
CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdy
YW51bGFyaXR5KTsKQEAgLTI0NzIsNyArMjQ3MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3Rp
CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQo
bV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5NCwxOSArMjU5MywxOSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
d29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJl
cGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29y
cmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdT
ZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFu
Z2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9j
dW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNz
cGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJl
cGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRv
cigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RS
ZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAK
ICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAg
ICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51
bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
Rm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc4LDcgKzI2NzcsNyBAQCBib29sIEVkaXRvcjo6
aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJl
dHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNr
aW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCku
ZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKQpAQCAtMjcyNiw3ICsyNzI1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5
cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7Cisg
ICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAog
ICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFn
cmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVz
b2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9u
cyk7CkBAIC0yNzQxLDcgKzI3NDAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0K
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNv
bHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwor
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNr
LnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25O
dWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg3LDcgKzI3ODYsNyBAQCBzdGF0aWMgdm9pZCBj
b3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENo
ZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxD
aGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiBy
ZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8
RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0
Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRl
eHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJl
cXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKQEAgLTI4MTEsOSArMjgxMCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAg
Ym9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAg
ICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBz
aG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0
U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikg
ewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3
ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAg
ICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3Jh
cGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAg
ICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0
KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBu
ZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTUsMTMgKzI4OTQsMTMgQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBW
ZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVj
dGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0
b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2Fu
RWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3ICsyOTA5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8
VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsg
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hl
LT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25P
Y2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5NDAsMTMgKzI5MzksMTMgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFu
Z2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAm
JiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewog
ICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJh
bmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwor
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVj
dGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25G
b3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sg
aXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRv
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zMDIzLDggKzMwMjIsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vy
c0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQog
ICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90
ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMg
b2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0
aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUg
c3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5NiwxMSArMzA5NSw3IEBAIHZvaWQgRWRpdG9yOjpk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwg
Y29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IElu
dFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAg
ICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXco
KTsKICAgICBpZiAoIWZyYW1lVmlldykKQEAgLTMxMTcsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1Miw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzUsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjAwLDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NSw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjUsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODIsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk2LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwNCw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzE0LDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMiw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMzAsNyArMzMyNSw3IEBAIFJlZlB0
cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihj
b25zdCBJbnRTaXplJiBzaXplCiAgICAgcmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29w
eVJlZigpKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25C
ZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xk
ZXIucHRyKCkpIH07Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRy
aWdnZXJlZCkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJU
cmlnZ2VyZWQpKTsKIAogICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNTAsOCArMzM0
NSw4IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVy
RWxlbWVudCYgcGxhY2Vob2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAv
LyBUbyBtYXRjaCB0aGUgTGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0
IGluc2VydGlvbiBwb2ludCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0
byBiZS4KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAm
JiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQp
Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZ
IH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dl
cmVkKSk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZl
KCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVt
ZW50KQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9B
RkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNl
clRyaWdnZXJlZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRo
KEludFJlY3QmIHJlY3QpCkBAIC0zNDAzLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmly
c3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGll
bnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFm
ZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CkBAIC0zNDEyLDE3ICszNDA3LDE3IEBAIGJvb2wgRWRp
dG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uLCBjb25zdCBWCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVk
aXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBpZiAo
c3R5bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5
bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgY3Vy
cmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGU7
Ci0gICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkKKyAgICBpZiAoYXV0byBleGlzdGluZ1R5cGluZ1N0eWxlID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQogICAgICAgICB0eXBpbmdTdHlsZSA9IGV4
aXN0aW5nVHlwaW5nU3R5bGUtPmNvcHkoKTsKICAgICBlbHNlCiAgICAgICAgIHR5cGluZ1N0eWxl
ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKLSAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBp
bmdTdHlsZUF0KHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOworICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGlu
Z1N0eWxlQXQoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICAvLyBIYW5kbGUgYmxvY2sgc3R5bGVz
LCBzdWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxF
ZGl0aW5nU3R5bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHlsZS0+ZXh0cmFjdEFuZFJlbW92ZUJs
b2NrUHJvcGVydGllcygpOwpAQCAtMzQzMCw3ICszNDI1LDcgQEAgdm9pZCBFZGl0b3I6OmNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICAgICAgQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBibG9j
a1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKIAogICAgIC8vIFNldCB0aGUg
cmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CisgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CiB9CiAK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC0zNDg5LDE5ICszNDg0LDE5
IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAog
CiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlv
bnMgb3B0aW9ucykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAg
UmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAotICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0
cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwogCiAg
ICAgaWYgKCFyZXN1bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2Us
IERPV05TVFJFQU0pKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVBTSkpOwogCiAgICAgaWYgKCEo
b3B0aW9ucy5jb250YWlucyhEb05vdFJldmVhbFNlbGVjdGlvbikpKQotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNTk4
LDcgKzM1OTMsNyBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogICAgIGlmIChyYW5nZSkgewog
ICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0gJmRvY3VtZW50KCkpCiAgICAg
ICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOwotICAgICAgICBlbHNlIGlmICghaXNGcmFtZUlu
UmFuZ2UobV9mcmFtZSwgKnJhbmdlKSkKKyAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdl
KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKQEAgLTM2NjgsNyArMzY2Myw3IEBAIHZvaWQgRWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBP
cHRpb25TZXQ8RnJhbWVTCiAjZW5kaWYKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOworICAgICAgICBjbGll
bnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogCiAj
aWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpKQpAQCAtMzY5MSw4
ICszNjg2LDYgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMKIAogYm9vbCBFZGl0b3I6OnNob3Vs
ZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKQogewotICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuaXNUZWxlcGhv
bmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1
cHBvcnRlZCgpOwogfQogCkBAIC0zNzA1LDkgKzM2OTgsOSBAQCB2b2lkIEVkaXRvcjo6c2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogCiAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+
IG1hcmtlZFJhbmdlczsKIAotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWZyYW1lU2VsZWN0aW9uLmlzUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBp
ZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hh
bmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyOSw3ICszNzIyLDcgQEAgdm9p
ZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBSZWZQdHI8
UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2Vs
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNzQyLDcgKzM3MzUsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKQogICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJh
bmdlcy5hcHBlbmQocmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFt
ZS5wYWdlKCkpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAg
ICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVt
YmVyUmFuZ2VzQ2hhbmdlZCgpOwogfQogCkBAIC0zODAxLDkgKzM3OTQsOSBAQCB2b2lkIEVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGphY2VudFdv
cmRzOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGVkU2VudGVuY2U7Ci0gICAg
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOwotICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKLSAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXdTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpKTsKKyAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0
aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24o
c3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5l
d1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICNlbHNlCkBAIC0zODU2LDcgKzM4NDks
NyBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoIW1f
ZWRpdG9yVUlVcGRhdGVUaW1lcldhc1RyaWdnZXJlZEJ5RGljdGF0aW9uKQogICAgICAgICBtX2Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKIAotICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlV
cGRhdGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAjaWYgRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBub3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRhdGVz
KCk7CkBAIC0zODgzLDcgKzM4NzYsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUo
Tm9kZSogbm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3Ro
KSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9k
ZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMzk1MCwxMCArMzk0MywxMCBAQCBPcHRpb25TZXQ8VGV4dENo
ZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9k
ZSYgcm9vdAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJh
bmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCitzdGF0aWMgUmVm
UHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQp
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gc2VsZWN0
aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkg
OiBkb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiBzdGF0aWMg
Ym9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKQEAgLTM5NjcsOCArMzk2MCw4IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxk
UmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNh
bmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOworICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRl
UmFuZ2VGb3JTZWxlY3Rpb24obV9kb2N1bWVudCk7CiAgICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5
VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsKIApA
QCAtMzk3Nyw3ICszOTcwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVx
dWVzdCgpIGNvbnN0CiAgICAgCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7
CiB9CiAKQEAgLTQwNDQsNyArNDAzNyw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0
dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBGb250QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAgYXV0byog
c3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOwor
ICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1l
KCksIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBpZiAobm9kZVRv
UmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKQEAgLTQwODUsNyAr
NDA3OCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXR0cmlidXRlcy50
ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlciht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF0dHJpYnV0ZXMu
dGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIAogICAgIHN3aXRj
aCAoc3R5bGUtPnRleHRBbGlnbigpKSB7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoK
QEAgLTQxMTEsNyArNDEwNCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0
ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
YXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdT
dHlsZSgpKTsKKyAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpOwogICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdT
dHlsZS0+c3R5bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpA
QCAtNDE5OSwxMiArNDE5Miw4IEBAIHZvaWQgRWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFjaG1l
bnRVcGRhdGVzKCkKICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiByZW1vdmVkQXR0YWNobWVu
dElkZW50aWZpZXJzKQogICAgICAgICBjbGllbnQoKS0+ZGlkUmVtb3ZlQXR0YWNobWVudFdpdGhJ
ZGVudGlmaWVyKGlkZW50aWZpZXIpOwogCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9y
IChhdXRvJiBpZGVudGlmaWVyIDogaW5zZXJ0ZWRBdHRhY2htZW50SWRlbnRpZmllcnMpIHsKLSAg
ICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IGRvY3VtZW50LT5hdHRhY2htZW50Rm9ySWRlbnRp
ZmllcihpZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IG1fZG9jdW1l
bnQuYXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCiAgICAgICAgICAgICBjbGll
bnQoKS0+ZGlkSW5zZXJ0QXR0YWNobWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXIsIGF0dGFj
aG1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRy
KSwgYXR0YWNobWVudC0+aGFzRW5jbG9zaW5nSW1hZ2UoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDIyNyw3ICs0MjE2LDcgQEAgdm9pZCBF
ZGl0b3I6Omluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBPcHRpb25h
bDx1aW50NjRfdD4mJiBmaWwKIAogdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKLSAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSA9IHRydWU7CiAKQEAgLTQyNDYsNyArNDIzNSw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKIGJv
b2wgRWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgmbV9mcmFtZSk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9kb2N1bWVudC5mcmFtZSgp
KTsKIH0KIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JN
YXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKQEAgLTQyNjIsMTMgKzQyNTEsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2ZWx0ZXJuYXRpdmUoY29uc3Qg
U3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZwogdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1v
ZGVFbmFibGVkKCkKIHsKICAgICBtX292ZXJ3cml0ZU1vZGVFbmFibGVkID0gIW1fb3ZlcndyaXRl
TW9kZUVuYWJsZWQ7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tD
dXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7Ci19Ci0KLURvY3VtZW50JiBFZGl0b3I6OmRv
Y3VtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9mcmFtZS5kb2N1bWVudCgpKTsKLSAgICBy
ZXR1cm4gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFNob3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAogUmVm
UHRyPFJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQpAQCAtNDMyMSw5ICs0
MzA0LDkgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCi0g
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmICghbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3Zl
OwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUs
IG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1lKCksIG5vZGVUb1JlbW92
ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogZm9udCA9IG51
bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkgewpAQCAtNDMzNSwxMSArNDMxOCwxMSBAQCBjb25z
dCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9k
ZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24o
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBO
b2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDM3MSw3
ICs0MzU0LDcgQEAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0RWRpdGFi
bGVJbWFnZSgpCiAKIGJvb2wgRWRpdG9yOjpjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9uZUltYWdl
cygpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXgg
YWQ5ZWRhMjYxOGM5YTg4MGJlY2JiMWNlNGQ2OGJiNTliODljMjBjMC4uZmZhNzdkMGU1NDhlN2Nl
NzdkY2Q0N2JiMGU2MWMxMGE4NDc3ZjAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiRWRpdG9y
SW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFdy
aXRlckRhdGEuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKQEAgLTExOSwxMyArMTIwLDEz
IEBAIGVudW0gY2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uIDogdWludDhfdCB7CiAKIGNs
YXNzIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVj
dGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9j
dW1lbnQmLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JU
IH5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJh
bWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIE9wdGlvblNldDxUZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb24+IG1fb3B0aW9uczsKICAgICBib29sIG1fd2FzSWdub3JpbmdT
ZWxlY3Rpb25DaGFuZ2VzOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzcsNyArMTM4
LDcgQEAgcHJpdmF0ZToKIGNsYXNzIElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlIHsKIHB1
YmxpYzoKICAgICBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZShGcmFtZSYgZnJhbWUpCi0g
ICAgICAgIDogbV9zZWxlY3Rpb25DaGFuZ2UoZnJhbWUsIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQorICAgICAgICA6IG1fc2Vs
ZWN0aW9uQ2hhbmdlKCpmcmFtZS5kb2N1bWVudCgpLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKICAgICB7CiAgICAgfQogCkBA
IC0xNTAsNyArMTUxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEVkaXRvciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRWRpdG9yKEZyYW1lJik7Cisg
ICAgZXhwbGljaXQgRWRpdG9yKERvY3VtZW50Jik7CiAgICAgfkVkaXRvcigpOwogCiAgICAgZW51
bSBjbGFzcyBQYXN0ZU9wdGlvbiA6IHVpbnQ4X3QgewpAQCAtMjcxLDcgKzI3Miw3IEBAIHB1Ymxp
YzoKICAgICBjbGFzcyBDb21tYW5kIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQ
T1JUIENvbW1hbmQoKTsKLSAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1h
bmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBGcmFtZSYpOworICAgICAgICBDb21tYW5kKGNvbnN0
IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIERvY3VtZW50Jik7
CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyID0gU3RyaW5nKCksIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQgPSBudWxscHRyKSBjb25z
dDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQpIGNvbnN0OwpAQCAtMjg4LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgog
ICAgICAgICBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIG1fY29tbWFuZCB7IG51bGxwdHIg
fTsKICAgICAgICAgRWRpdG9yQ29tbWFuZFNvdXJjZSBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRy
PERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAg
ICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kIGNvbW1hbmQoY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSk7IC8vIENvbW1hbmQgc291cmNlIGlzIENvbW1hbmRGcm9tTWVudU9yS2V5Qmlu
ZGluZy4KQEAgLTU2Nyw3ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYpOwogCiBwcml2
YXRlOgotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0OworICAgIERvY3VtZW50JiBkb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAogICAgIGJvb2wgY2FuRGVsZXRl
UmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQmKTsKQEAgLTYxOCw3ICs2MjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3Vt
ZW50JiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbV9sYXN0
RWRpdENvbW1hbmQ7CiAgICAgUmVmUHRyPFRleHQ+IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIHVu
c2lnbmVkIG1fY29tcG9zaXRpb25TdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2RjM2I5MGZiNmMwNDcxZmFhMTBmYjhjNDQu
LmJkNTE4MGViNDAwZWE3OTIxNTFiNmY3OThiNjBlY2I4Y2ZmZGFlYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTEwOSw2ICsxMTA5LDcgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlIHNvdXJjZSwKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVN3YXBXaXRoTWFyayhGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
KyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rpb24oZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAg
UmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCk7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC0xODM2LDEy
ICsxODM3LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGludGVybmFs
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogCiBFZGl0b3I6OkNvbW1hbmQgRWRp
dG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiB7Ci0gICAgcmV0dXJuIENv
bW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29t
bWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZG9jdW1lbnQpOwogfQog
CiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewotICAgIHJldHVybiBDb21tYW5kKGlu
dGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9mcmFtZSk7CisgICAgcmV0dXJu
IENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgc291cmNlLCBtX2RvY3VtZW50
KTsKIH0KIAogYm9vbCBFZGl0b3I6OmNvbW1hbmRJc1N1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5k
aW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCkBAIC0xODUzLDEyICsxODU0LDEzIEBAIEVk
aXRvcjo6Q29tbWFuZDo6Q29tbWFuZCgpCiB7CiB9CiAKLUVkaXRvcjo6Q29tbWFuZDo6Q29tbWFu
ZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1hbmQsIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBGcmFtZSYgZnJhbWUpCitFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3Qg
RWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJj
ZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jb21tYW5kKGNvbW1hbmQpCiAgICAgLCBt
X3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyAmZnJhbWUgOiBudWxscHRy
KQorICAgICwgbV9kb2N1bWVudChjb21tYW5kID8gJmRvY3VtZW50IDogbnVsbHB0cikKKyAgICAs
IG1fZnJhbWUoY29tbWFuZCA/IGRvY3VtZW50LmZyYW1lKCkgOiBudWxscHRyKQogewotICAgIEFT
U0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKKyAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9kb2N1
bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYg
cGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjb25zdApAQCAtMTg2OCw5ICsxODcw
LDkgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0
ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGMKICAgICAgICAgaWYgKCFhbGxvd0V4ZWN1dGlv
bldoZW5EaXNhYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBh
dXRvIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudC0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gZG9jdW1lbnQpCisKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAhPSBtX2Zy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb21tYW5kLT5leGVj
dXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQsIG1fc291cmNlLCBwYXJhbWV0ZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJm
ZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li5iMTdhMDE0YzBlMzE0YTk2ZGVkZmI3YzM0ODE0
NTM1Y2E1YmM1N2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtMTM5LDEzICsxMzksMTQgQEAgSW50UmVjdCBEcmFnQ2FyZXRDb250cm9sbGVyOjplZGl0
YWJsZUVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4g
eyB9OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxT
ZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1Vz
ZURpcmVjdGlvbmFsU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4g
IWZyYW1lIHx8IGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0
aW9uQXNEaXJlY3Rpb25hbCgpOworICAgIHJldHVybiAhZG9jdW1lbnQgfHwgZG9jdW1lbnQtPmVk
aXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7
CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKERvY3VtZW50
KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2ZyYW1lKGRv
Y3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQog
ICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICNpZiBFTkFCTEUoVEVY
VF9DQVJFVCkKQEAgLTE1Niw3ICsxNTcsNyBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCiAgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZh
bHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gZnJhbWUpCisgICAgLCBt
X2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICwgbV9zaG91
bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUo
ZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2Vs
ZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjYsMjQgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1l
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fY2FyZXRCbGlua3ModHJ1ZSkKICNlbmRp
ZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1l
KSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CisgICAgCisg
ICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CisgICAgaWYg
KGFjdGl2ZUFuZEZvY3VzZWQpCisgICAgICAgIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisjaWYg
VVNFKFVJS0lUX0VESVRJTkcpCisgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMg
bm90IGJsaW5rKQorICAgIHNldENhcmV0VmlzaWJsZShhY3RpdmVBbmRGb2N1c2VkKTsKKyNlbHNl
CisgICAgc2V0Q2FyZXRWaXNpYmlsaXR5KGFjdGl2ZUFuZEZvY3VzZWQgPyBWaXNpYmxlIDogSGlk
ZGVuKTsKKyNlbmRpZgogfQogCiBFbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6cm9vdEVkaXRhYmxl
RWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiBzZWxlY3Rp
b25Sb290ID0gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIHJldHVybiBz
ZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpOworICAgIHJldHVybiBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6
IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
Ojptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQsNyArMjk1LDcgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlmZmVyZW50KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3RtZW50TW9kZSBlbmRw
b2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlv
biA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdTZWxlY3Rpb24uaXNE
aXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlvbi5pc0RpcmVjdGlv
bmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2luYWxCYXNlLmlzTm90
TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJsZUJhc2UoKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsNyArMzMzLDcgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBib29sIHNob3VsZENsZWFyVHlwaW5nU3R5bGUgPSBv
cHRpb25zLmNvbnRhaW5zKENsZWFyVHlwaW5nU3R5bGUpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBuZXdTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb25Qb3NzaWJseVdpdGhvdXREaXJlY3Rpb247Ci0g
ICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAg
IGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAg
ICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CiAKICAgICBpZiAoIW1f
ZnJhbWUpIHsKQEAgLTMzNCw3ICszNDUsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2FuIGdldCBpbnRvIGFuIGlu
ZmluaXRlIGxvb3AKICAgICBpZiAoRG9jdW1lbnQqIG5ld1NlbGVjdGlvbkRvY3VtZW50ID0gbmV3
U2VsZWN0aW9uLmJhc2UoKS5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8RnJhbWU+
IG5ld1NlbGVjdGlvbkZyYW1lID0gbmV3U2VsZWN0aW9uRG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAg
ICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlv
bkRvY3VtZW50ICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChuZXdT
ZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9IG1fZG9j
dW1lbnQpIHsKICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25GcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucywgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQoKSwgYWxpZ24sIGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3Np
YmxlIHRoYXQgZHVyaW5nIHRoZSBhYm92ZSBzZXQgc2VsZWN0aW9uLCB0aGlzIEZyYW1lU2VsZWN0
aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5CiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0RnJhbWVF
bGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQsIGJ1dCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMg
bm8gbG9uZ2VyIHZhbGlkIHNpbmNlCkBAIC0zNDksNyArMzYwLDcgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxl
U2VsZWN0aW8KICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CiAKICAgICBpZiAoY2xv
c2VUeXBpbmcpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZnJhbWUpOwor
ICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygqbV9kb2N1bWVudCk7CiAKICAgICBp
ZiAoc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSkKICAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwpA
QCAtMzU3LDcgKzM2OCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhv
dXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKICAgICBib29sIGRpZE11dGF0ZVNl
bGVjdGlvbiA9IG9sZFNlbGVjdGlvbiAhPSBuZXdTZWxlY3Rpb247CiAgICAgaWYgKGRpZE11dGF0
ZVNlbGVjdGlvbikKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5n
ZSgpOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7
CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDIxICszODIsMjEg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFy
YW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgp
OwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25zICYgRG9Ob3RT
ZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxl
bWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgICAgIHNldEZvY3VzZWRF
bGVtZW50SWZOZWVkZWQoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbmVlZGVk
LgotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBv
bGRGb2N1c2VkRWxlbWVudCkKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCisgICAgICAgICAgICBtX2RvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0
aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQgd2lsbCBi
ZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlmIG5lY2Vz
c2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJ
ZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9y
KCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOwogICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3Rpb24tYXBpLyNzZWxlY3Rpb25jaGFuZ2Ut
ZXZlbnQKICAgICAvLyBGSVhNRTogU3BlYyBkb2Vzbid0IHNwZWNpZnkgd2hpY2ggdGFzayBzb3Vy
Y2UgdG8gdXNlLgotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnF1ZXVlVGFza1RvRGlzcGF0Y2hF
dmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6Tm8pKTsKKyAgICBtX2RvY3VtZW50LT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZl
bnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5NiwxMCArNDA3LDYg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBpZiAoIXNldFNlbGVjdGlvbldpdGhvdXRV
cGRhdGluZ0FwcGVhcmFuY2Uoc2VsZWN0aW9uLCBvcHRpb25zLCBhbGlnbiwgZ3JhbnVsYXJpdHkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlm
IChvcHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uVXBUb01haW5GcmFtZSkKICAgICAgICAgbV9zZWxl
Y3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsVXBUb01haW5GcmFt
ZTsKICAgICBlbHNlIGlmIChvcHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uKQpAQCAtNDExLDI3ICs0
MTgsMjcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBtX3NlbGVjdGlvblJldmVhbElu
dGVudCA9IGludGVudDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogCi0g
ICAgaWYgKGRvY3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNhbGMoKSkKKyAgICBpZiAobV9kb2N1
bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1l
Vmlldy0+bGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0UGVuZGluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICB1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oaW50ZW50KTsKIAogICAgIGlmIChvcHRp
b25zICYgSXNVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2Zy
YW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9j
dW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICAgICAgY2xpZW50LT5kaWRFbmRVc2Vy
VHJpZ2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRnJhbWUmIGZyYW1lKQorc3RhdGlj
IHZvaWQgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQogewogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGZyYW1lLmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIGRvY3VtZW50LnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogI2Vsc2UKLSAgICBmcmFtZS5k
b2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQudXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ0MSw3ICs0NDgsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZShSZXZlYWxTZWxlY3Rpb25BZnRlclVw
ZGF0ZSByZXZlYWxNbwogICAgIGlmIChyZXZlYWxNb2RlID09IFJldmVhbFNlbGVjdGlvbkFmdGVy
VXBkYXRlOjpGb3JjZWQpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlv
blJldmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVl
OwotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkp
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAg
ICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiB9CiAKQEAgLTQ1Nyw3
ICs0NjQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24o
Y29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAgIGlmIChtX3NlbGVjdGlvblJl
dmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZlYWwpIHsKICAgICAgICAg
U2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBpZiAobV9mcmFtZS0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkp
CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRl
ckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKICAgICAgICAgICAgIGFsaWdubWVudCA9
IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24gPyBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNl
bnRlcklmTmVlZGVkOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fs
d2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvcEFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZDsKQEAgLTQ3MSw3ICs0NzgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogdm9pZCBG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlRGF0YURldGVjdG9yc0ZvclNlbGVjdGlvbigpCiB7CiAjaWYg
RU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVy
cygpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVO
dW1iZXJzKCk7CiAjZW5kaWYKIH0KIApAQCAtNzAzLDcgKzcxMCw3IEBAIFZpc2libGVQb3NpdGlv
biBGcmFtZVNlbGVjdGlvbjo6cG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlzR2V0U3RhcnQpIGNv
bnN0CiAgICAgLy8gYmFzZS9leHRlbnQgYWx3YXlzIHBvaW50IHRvIHRoZSBzYW1lIG5vZGVzIGFz
IHN0YXJ0L2VuZCwgYnV0IHdoaWNoIHBvaW50cwogICAgIC8vIHRvIHdoaWNoIGRlcGVuZHMgb24g
dGhlIHZhbHVlIG9mIGlzQmFzZUZpcnN0LiBUaGVuIHRoaXMgY2FuIGJlIGNoYW5nZWQKICAgICAv
LyB0byBqdXN0IHJldHVybiBtX3NlbC5leHRlbnQoKS4KLSAgICBpZiAobV9mcmFtZSAmJiBtX2Zy
YW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21F
eHRlbnRFbmRwb2ludCgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBv
aW50KCkpCiAgICAgICAgIHJldHVybiBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gbV9zZWxl
Y3Rpb24udmlzaWJsZUVuZCgpIDogbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAKICAgICBy
ZXR1cm4gaXNHZXRTdGFydCA/IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogbV9zZWxlY3Rp
b24udmlzaWJsZUVuZCgpOwpAQCAtNzIzLDcgKzczMCw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFt
ZVNlbGVjdGlvbjo6bmV4dFdvcmRQb3NpdGlvbkZvclBsYXRmb3JtKGNvbnN0IFZpc2libGVQb3Np
dGlvCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IG5l
eHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7CiAKLSAgICBpZiAobV9mcmFtZSAmJiBt
X2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCgpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgewogICAgICAgICAvLyBJbiBv
cmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyByaWdodCwgd2UgYWR2YW5jZSBvbmUKICAg
ICAgICAgLy8gd29yZCBmdXJ0aGVyIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgYmFjay4gR2l2ZW4g
dGhlCiAgICAgICAgIC8vIHNlbWFudGljcyBvZiBwcmV2aW91c1dvcmRQb3NpdGlvbigpIHRoaXMg
d2lsbCBwdXQgdXMgYXQgdGhlCkBAIC04NTUsNyArODYyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZy
YW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGIKICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRl
bnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkucmlnaHQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAg
Ym9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0
b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAg
ICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1l
bnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0
ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBwb3MgPSByaWdodFdvcmRQ
b3NpdGlvbihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAg
ICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTA3Niw3ICsxMDgzLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm8KICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVj
dGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkubGVmdCh0cnVlLCByZWFjaGVk
Qm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eTogewot
ICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1fZnJh
bWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7
CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQgJiYg
bV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5n
UmlnaHQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVj
dGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IGxl
ZnRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0
KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEzNjIsNyArMTM2OSw3IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChy
ZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmln
Z2VyZWQgJiYgbV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KSB7CisgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJUcmlnZ2Vy
ZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbkJvdW5kYXJ5LCB0ZXh0
U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMzc0LDggKzEzODEsOCBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBpZiAoIXdhc1JhbmdlICYmIGFsdGVy
ID09IEFsdGVyYXRpb25Nb3ZlICYmIHBvc2l0aW9uID09IG9yaWdpbmFsU3RhcnRQb3NpdGlvbikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
CisgICAgaWYgKG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5zZXRUZXh0U2VsZWN0
aW9uSW50ZW50KHRleHRTZWxlY3Rpb25JbnRlbnQoYWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpKTsKICAgICB9CiAKQEAgLTEzODQsNyArMTM5MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4CiAgICAgLy8gTm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRyYXJ5IGJl
Y2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3VsZCBiZQogICAgIC8vIHRoZSByZXF1ZXN0ZWQgcG9z
aXRpb24gdHlwZSBpZiB0aGVyZSB3ZXJlIG5vIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
biBzZXQuCiAgICAgTGF5b3V0VW5pdCB4ID0gbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJl
Y3Rpb25OYXZpZ2F0aW9uKFNUQVJUKTsKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFs
KHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFsdGVyID09
IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0g
QWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICBzd2l0Y2ggKGFsdGVyKSB7CiAgICAgY2FzZSBBbHRl
cmF0aW9uTW92ZToKQEAgLTEzOTQsNyArMTQwMSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1v
ZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
CiAKICAgICAgICAgaWYgKCFtX3NlbGVjdGlvbi5pc0NhcmV0KCkKICAgICAgICAgICAgICYmIChn
cmFudWxhcml0eSA9PSBXb3JkR3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBo
R3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gTGluZUdyYW51bGFyaXR5KQotICAgICAgICAg
ICAgJiYgbV9mcmFtZSAmJiAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRFeHRl
bmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7CisgICAgICAgICAgICAmJiBt
X2RvY3VtZW50ICYmICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVu
ZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKICAgICAgICAgICAgIC8vIERv
bid0IGxldCB0aGUgc2VsZWN0aW9uIGdvIGFjcm9zcyB0aGUgYmFzZSBwb3NpdGlvbiBkaXJlY3Rs
eS4gTmVlZGVkIHRvIG1hdGNoIG1hYwogICAgICAgICAgICAgLy8gYmVoYXZpb3Igd2hlbiwgZm9y
IGluc3RhbmNlLCB3b3JkLXNlbGVjdGluZyBiYWNrd2FyZHMgc3RhcnRpbmcgd2l0aCB0aGUgY2Fy
ZXQgaW4KICAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgYSB3b3JkIGFuZCB0aGVuIHdvcmQt
c2VsZWN0aW5nIGZvcndhcmQsIGxlYXZpbmcgdGhlIGNhcmV0IGluIHRoZQpAQCAtMTQwNyw3ICsx
NDE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBT
ZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAogICAgICAgICAvLyBTdGFuZGFyZCBN
YWMgYmVoYXZpb3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3VuZGFyeSBpcyBncm93IHRoZSBzZWxl
Y3Rpb24gcmF0aGVyIHRoYW4gbGVhdmluZyB0aGUKICAgICAgICAgLy8gYmFzZSBpbiBwbGFjZSBh
bmQgbW92aW5nIHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0Vmlldy4KLSAgICAgICAgaWYgKCFt
X2ZyYW1lIHx8ICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dT
ZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQo
KSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCisgICAgICAgIGlmICghbV9kb2N1bWVudCB8
fCAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0
aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwg
IWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQogICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9u
LCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CkBAIC0xNTE3
LDcgKzE1MjQsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0
ZXIsIHVuc2lnbmVkIHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dl
cmVkID09IFVzZXJUcmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJH
cmFudWxhcml0eTsKIAotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3
YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlv
bkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9u
RXh0ZW5kKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU3NSw3ICsxNTgyLDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0Qmxp
bmtUaW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIGlmIChhdXRvKiB2aWV3ID0gbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAK
ICAgICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKFZpc2libGVTZWxlY3Rp
b24oKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSwgQWxpZ25DdXJzb3JPblNjcm9sbElm
TmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CkBAIC0xNjU1LDkgKzE2NjIsOSBAQCBzdGF0
aWMgYm9vbCBpc05vbk9ycGhhbmVkQ2FyZXQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKQogCiBJbnRSZWN0IEZyYW1lU2VsZWN0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wq
IGluc2lkZUZpeGVkKQogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGlu
Z0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKICAgICByZWNvbXB1dGVDYXJldFJlY3QoKTsKICAg
ICBpZiAoaW5zaWRlRml4ZWQpCiAgICAgICAgICppbnNpZGVGaXhlZCA9IG1fY2FyZXRJbnNpZGVQ
b3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwxMCArMTY4MiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgIGlmICghc2hvdWxkVXBkYXRlQ2FyZXRSZWN0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1f
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZyYW1lVmlldyogdiA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2RvY3VtZW50
LT52aWV3KCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OTAs
NyArMTY5Nyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAg
ICAgICAgICAgICBjbGVhckNhcmV0UmVjdCgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKLSAgICAgICAgICAgIGlmICh1cGRhdGVDYXJldFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
dmlzaWJsZVN0YXJ0KSkgeworICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2RvY3Vt
ZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJs
ZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgICAgICAg
ICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTcxNSw3
ICsxNzIyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKFJl
bmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpIHsKKyAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewogICAg
ICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSA9IG1fc2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUgJiYgbV9w
cmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CiAgICAgICAgIGlmIChzaG91
bGRSZXBhaW50Q2FyZXQodmlldywgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRh
YmxlKSkgewogICAgICAgICAgICAgaWYgKG1fcHJldmlvdXNDYXJldE5vZGUpCkBAIC0xODk0LDEy
ICsxOTAxLDExIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkgY29uc3QKICAgICBpZiAoIWlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAg
ICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVu
dC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQtPmhp
dFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKICAgICBOb2RlKiBpbm5lck5vZGUgPSBy
ZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYgKCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVu
ZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2OCw5ICsxOTc0LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAgICBFbGVtZW50KiBmb2N1c2Vk
RWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGZvY3Vz
ZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRN
TFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAgICAgICBIVE1MU2VsZWN0RWxl
bWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwoKSkgewpA
QCAtMjAwMCw4ICsyMDA0LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAg
ICAgICAgaWYgKHJvb3QpCiAgICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHJvb3QtPnNo
YWRvd0hvc3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByb290ID0gZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBkb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKKyAgICAgICAgICAgIHJvb3QgPSBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbV9kb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIXJvb3Qp
CkBAIC0yMDU4LDkgKzIwNjIsOCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJh
bmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRDbAogdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFj
dGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsKLSAgICBSZWY8RG9jdW1lbnQ+
IGRvY3VtZW50KCptX2ZyYW1lLT5kb2N1bWVudCgpKTsKIAotICAgIGRvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwog
CiAjaWYgVVNFKFVJS0lUX0VESVRJTkcpCiAgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8
IGRvZXMgbm90IGJsaW5rKQpAQCAtMjA3MSw3ICsyMDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFJlbmRlck9i
amVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyT2JqZWN0
OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZl
LAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWlu
dGVkLgotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkK
KyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFy
cyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDg1LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0
eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkpIHsKICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5j
ZSgpKQpAQCAtMjEwNywxMyArMjExMCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1
c2VkKGJvb2wgZmxhZykKIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBt
X2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJu
IG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50LT5wYWdlKCkgJiYgbV9kb2N1bWVudC0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci1pbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5k
KEZyYW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVU
b1R5cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0
Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIx
MzIsMTIgKzIxMzUsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgp
CiAgICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYg
bV9zZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24u
dmlzaWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNv
bXB1dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNl
dHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3Npbmcg
PSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgYm9v
bCBzaG91bGRCbGluayA9ICFwYWludEJsb2NrQ3Vyc29yICYmIGNhcmV0SXNWaXNpYmxlKCkgJiYg
aXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJy
b3dzaW5nKTsKIAogICAgIC8vIElmIHRoZSBjYXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGlt
ZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCiAgICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhlIG5l
dyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxk
QmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZnJhbWUpKQor
ICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91
bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9kb2N1bWVudCkpCiAgICAgICAgIG1f
Y2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBi
bGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsy
MTU2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQog
I2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCk7CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIwMiw4ICsyMjA1LDggQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNp
YmlsaXR5KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRy
aWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KLSAgICBpZiAobV9mcmFtZSkKLSAgICAg
ICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAg
IGlmIChtX2RvY3VtZW50KQorICAgICAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0
T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAo
bV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsyMjUwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNG
b2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1f
ZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0
QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7
CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9
IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAgICAg
ICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChh
bmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjY1LDE2IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAg
ICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9i
YWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRo
ZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAg
ICAgICAgICAgIGlmICh0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1l
bnQodGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAg
ICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxl
bWVudCh0YXJnZXQsICptX2ZyYW1lKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE9yU2hhZG93SG9zdEVs
ZW1lbnQoKTsKICAgICAgICAgfQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1
c2VkRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1l
bnQobnVsbHB0cik7CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1f
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0
ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKIH0KIAogdm9pZCBEcmFn
Q2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29u
dGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0
JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsMTYgKzIzMDMsMTYgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50
KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRv
VmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIAotICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKCptX2ZyYW1lKTsKLSAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29udGVudFJl
bmRlcmVyKCk7CisgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1f
ZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3
KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwog
CkBAIC0yMzI1LDE0ICsyMzI4LDE0IEBAIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAo
IW1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52
aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1l
bnRWaXNpYmxlUmVjdCk7CisgICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50
LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0g
VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAgYXV0byBp
bnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7
CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0LDcgKzIz
NjcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFy
dCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkgY29uc3QK
IHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNw
b25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVudCogc3Rh
cnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQq
IHN0YXJ0ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQog
ICAgICAgICBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICgh
c3RhcnQpCkBAIC0yNDA3LDggKzI0MTAsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxT
ZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogICAg
ICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVk
LCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3Jp
Z2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBw
ZWFyYW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2
ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2ZyYW1lKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50
LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3Jv
bGxpbmdGcmFtZSgqbV9mcmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBA
IC0yNDI2LDE3ICsyNDI5LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZy
b21Ob25lKCkKICAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGly
ZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZQogICAgIC8vIGVudGlyZSBXZWJWaWV3IGlz
IGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgogCi0gICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50
LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgYm9vbCBjYXJldEJy
b3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwor
ICAgIGlmICghaXNOb25lKCkgfHwgIShtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwg
Y2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFkb2N1bWVu
dCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFkb2N1bWVudC0+
aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghbV9kb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8
IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIGJvZHkgPSBkb2N1
bWVudC0+Ym9keSgpKQorICAgIGlmIChhdXRvKiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpKQog
ICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUoYm9keSksIERPV05TVFJFQU0pKTsKIH0KIApAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdl
Q2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigp
LCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CisgICAgcmV0
dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24o
KSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBi
b29sIEZyYW1lU2VsZWN0aW9uOjpkaXNwYXRjaFNlbGVjdFN0YXJ0KCkKQEAgLTI0NjQsNyArMjQ2
Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihib29s
IHNob3VsZFNob3dCbG9ja0N1cnNvcikKIHsKICAgICBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciA9
IHNob3VsZFNob3dCbG9ja0N1cnNvcjsKIAotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOwogfQpAQCAtMjQ4OCw3ICsyNDkwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFy
YW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCkKIHsKLSAgICBpZiAoYXV0byogY2xpZW50
ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRv
clN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRS
ZWN0TmVlZHNVcGRhdGUoKTsKQEAgLTI3MjMsNyArMjcyNSw3IEBAIFJlZlB0cjxSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7
CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZG9jdW1lbnQtPmNyZWF0ZVJhbmdl
KCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxvY2F0aW9uKTsKICAgICByZXN1
bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoKTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBTRUxfREVG
QVVMVF9BRkZJTklUWSk7CkBAIC0yOTA0LDcgKzI5MDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzKQogICAgIGlmIChtX2NhcmV0Qmxpbmtz
ID09IGNhcmV0QmxpbmtzKQogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7IAorICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50
ID0gZmFsc2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZl
MzJjYWVkMTY1YTA1MDguLjVhYWY5YTA4OWIzYjE5ZGZhMDEwZWQwNzA5ZDQyZGVlYWUwYjVlYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAg
IFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKERvY3VtZW50KiA9IG51bGxw
dHIpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9y
RG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIApAQCAtMzM4LDYgKzMzOCw3IEBAIHByaXZh
dGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAorICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlm
ZjlmMzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEy
NGNmMTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2ln
bmVkCiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAg
Ym9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNo
b0VuYWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNl
dHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFi
bGVkKQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZi
Li4yNzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3
ICsxNDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5
cGluZ1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUg
JiYgIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGlu
ZyBzdHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4
IGU5MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1
MTM2OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxl
Y3Rpb24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1Nl
bGVjdGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9y
KCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
LmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9y
bU92ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChl
bmRQb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAg
ICAgICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxl
KHR5cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFk
OTM5ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQx
M2YwNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1
Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li40OTY5OTE5ZDkxYTExNDk1
YzI5OGM5MmE3NjY3MjZiOTJlMTY5NTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6
IENhbiB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3Jt
ZWQ/ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQg
YWZ0ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZy
YW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
ZGVzdGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQu
ICBUbyBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0
aG91dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUg
c2FtZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
dFNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4
ZTliYTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAt
NDAsNyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBo
YW5lZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1Nl
dCwgbV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewot
ICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAg
ICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KSkgJiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBz
ZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgz
NjZiNTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0
OThmZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAt
OTgsOCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQo
KQogICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a2VyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNw
ZWxsQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50
KQogICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNr
ZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzEx
NCw3IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50
KiBTcGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJh
bWUucGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JD
bGllbnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVj
a2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVj
a2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1l
LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdl
JiByYW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52
b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1v
dmUocmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3By
b2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBj
bGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tl
cjo6ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0x
OTksNyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vz
c2luZ1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJl
cGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFz
dFByb2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkK
ICAgICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTks
NyArMjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3RE
YXRhLmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkK
ICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAg
ICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5k
b2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5j
aGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgp
LCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5
ZmI1YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4
YTg2NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03
Niw3ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1l
Jik7CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hl
Y2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEw
Niw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAg
ICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0
Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIw
ODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcg
KzY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0
b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3Jy
ZWN0ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVu
YXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0
ZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpT
cGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCmluZGV4IDVhNmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUu
LmYzMTI4ZDdlYTU3ZDU2NzYzOTE4YTMxM2FiNzdiNjY0OWU1YjY0MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5n
Q29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5k
IGNvbW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24o
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUg
Y29tcG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAg
IGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlv
bik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9z
aXRpb25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRT
cGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCAr
MTgwLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0
ZXJHcmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9j
dW1lbnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZy
YW1lKCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsK
KyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0
aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUo
VGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5n
KTsKQEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBG
SVhNRTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9z
ZSBhIG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAg
ICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1
cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdD
b21tYW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KGRvY3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVu
dFNwZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRp
b25zLAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtl
eSwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12
b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9p
ZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rp
b24oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBv
c2l0aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRv
cigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xp
bmUodGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGlu
c2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVl
ZCB0byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0
byBGcmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9u
cywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAg
IExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAg
ICAgU3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQs
IHNlbGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlv
blBlbmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxl
Y3Rpb24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0
aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1
cmUsIHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3Vz
dG9tIHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBv
ZiB0aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkg
eworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBp
ZiAobGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvcklu
c2VydGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2Vs
ZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYs
MTIgKzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8g
Y21kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0
LCBvcHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1h
bmQoZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50
U2VsZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1l
KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
KmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9j
dW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9u
KG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlv
bnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90
aWZ5QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1
bWVudCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBp
bmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9w
ZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1
dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcs
OSArMjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwg
b3B0aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21t
YW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkK
K1JlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29t
cG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RF
ZGl0Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRD
b21tYW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFs
YXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwg
IXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09w
ZW5Gb3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYg
KzMxMCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFu
ZFVudGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxp
bmdJbml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0
aW5nQWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25J
Zk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRI
YXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGlu
Z1NlbGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00
MzYsMTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0KICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0
b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1l
LmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAm
JiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisg
ICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRp
dG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5n
QWNjZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYg
KCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxl
Y3Rpb24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2Ug
bmVlZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlw
ZSkKICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAg
IGlmIChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8
fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFu
ZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1h
bmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRl
eHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigp
Lm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCks
ICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8g
SWYgdGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNv
dWxkIGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdv
cmRTaWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQs
IHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNl
KTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYg
KzQ4NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5k
KEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAg
ICAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJl
dHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBm
cmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6
OmNyZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxB
cHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5n
Q29tbWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5m
cmFtZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9y
QWRkZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCku
YXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVk
aXRpbmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFs
c28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQg
aGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVu
dFNwZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21t
YW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNr
aW5nIGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50
IGlzc3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBh
cyBtaXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlw
ZUZvckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5k
aWYKIH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4
dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAg
ICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nl
c3NpYmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51
dGY4KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJl
cGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNl
cnRlZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlw
aW5nLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAs
OSArNTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xp
bmVzKGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlv
blR5cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJh
bGFuY2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rp
b24oKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0
VGV4dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
ZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2li
aWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZy
YW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNl
ZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
fQogCkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNl
cGFyYXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAg
cmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVw
bGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KCkKICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxv
Y2txdW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRD
b250ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIs
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCkt
PnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsK
IH0KIApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJs
ZVJvb3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc0OCwyMCArNzIyLDIwIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3Nl
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxk
IHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNs
b3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQo
KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0
aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5p
c0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmICghd2ls
bEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxl
Y3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
c2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBl
bmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0
ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JE
ZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC03NzgsMTAgKzc1Miw5IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGJvb2wgc2hvdWxkQWRkCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2lsbFJp
bmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQo
KS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0ZU1h
cmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25B
ZnRlclVuZG87CkBAIC04NTUsMTMgKzgyOCwxMyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMg
YnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRn
ZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwot
ICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5n
KGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hv
dWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJp
dHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKQEAgLTg3MSw3ICs4NDQs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxk
QWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRp
dG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7
CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRp
bmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBt
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRG
b3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5
YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlv
bnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYs
IE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1l
Kik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1
cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5G
b3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5
cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
RG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBp
bmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmlu
YWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7
CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCos
IERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBp
bmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdD
b21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBS
ZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRkYjU2MTI5MmU3OTQyNzdiZmI3
NmQ1OWUuLjkxMGRlZWY3MDg0ZDFmZGM4ZTBmOWFlMDZlOTEzYTExYzc2M2YxOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtODAsOCArODAsOCBA
QCBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0
cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKgogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFy
YW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhj
bHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICByZXR1cm4g
c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQ
cml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVN
RU5UKQpAQCAtMTA3LDEwICsxMDcsMTAgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBl
c0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogdm9p
ZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmli
dXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0
cmluZ0Zyb21TZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAK
ICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY29udGVudE9y
aWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQo
KTsKKyAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2RvY3VtZW50Lm9yaWdpbklkZW50aWZp
ZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNh
blNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0
ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5SVEZE
Rm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRG
REZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7CkBAIC0xMjUsMTAgKzEyNSwxMCBA
QCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFz
dGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJE
YXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIAogICAgIFBhc3RlYm9hcmRXcml0ZXJEYXRhOjpXZWJDb250
ZW50IHdlYkNvbnRlbnQ7Ci0gICAgd2ViQ29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5k
b2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOworICAgIHdlYkNvbnRl
bnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKTsKICAgICB3ZWJDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5
T3JEZWxldGUoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxl
Y3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3Jt
YXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9y
bWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lk
IEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRX
cml0ZXJEYXRhKQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OnNlbGVjdGlvbkluV2Vi
QXJjaGl2ZUZvcm1hdCgpCiB7Ci0gICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlRnJvbVNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5
V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAg
IGlmICghYXJjaGl2ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpKTsK
QEAgLTE3MSwxMSArMTcxLDExIEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rp
b25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAg
ICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1f
ZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBpZiAo
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50
LmZyYW1lKCksIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSW5z
ZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21l
bnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5n
KTsKICAgICAgICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVk
aXRvcjo6ZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQogLy8gT3Ig
cmVmYWN0b3Igc28gaXQgZG9lcyBub3QgZG8gdGhhdC4KIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
LCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCiB7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgY29udGV4dCwgYWxs
b3dQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZy
YW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKICAgICBwYXN0ZWJvYXJkLnJlYWQocmVh
ZGVyKTsKICAgICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5U
ZXh0OwogICAgIHJldHVybiBXVEZNb3ZlKHJlYWRlci5mcmFnbWVudCk7CkBAIC0yMzQsNyArMjM0
LDcgQEAgdm9pZCBFZGl0b3I6OnRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0cmluZ0Zyb21TZWxlY3Rpb24gPSBtX2ZyYW1l
LmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5z
ZmVyKCkpOworICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuZnJhbWUo
KS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJh
bnNmZXIoKSk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwog
ICAgIHR5cGVzLmFwcGVuZChTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IGYyYTJkNTJhYzVhYmY0
ZTRmMTMxMTNjYTI1ZDFiMjBhMTczOGZhNjkuLjUzODQ5YjRlYWUxODg4YzJmZDk0OGNjMjg2MjY5
NzZlNzQxYmZmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAg
LTM4OSw3ICszODksNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogLy8gaGF2ZSBhIHN0YWxlIHNlbGVj
dGlvbi4KIHZvaWQgRWRpdG9yOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0
aW9uSWZPcGVuRm9yTW9yZVR5cGluZygpCiB7Ci0gICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFz
dEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoJm1fZnJh
bWUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFR5cGluZ0NvbW1hbmQ6
OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlw
aW5nKG1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0KaW5kZXggMjkxODI0NjVkOGNmMjkzOWNiMjE2MDI0OWZlYTJhZTExZWExN2M3Yy4uOTg0
MWM5NGZhYTIxM2ZkMDgyZTU4MTIwZTFhMmI3NGZhMzg2OTkzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgRWRpdG9yOjpw
YXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0
ZU9wdGlvbj4KIHZvaWQgRWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRo
UGFzdGVib2FyZCgmcGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQgfSk7
CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVi
b2FyZCk7CkBAIC0xMzcsMTYgKzEzNywxNiBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9t
UGFzdGVib2FyZChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewog
ICAgIEFTU0VSVChub2RlKTsKIAotICAgIGlmICgmbm9kZS0+ZG9jdW1lbnQoKSAhPSBtX2ZyYW1l
LmRvY3VtZW50KCkpCisgICAgaWYgKG5vZGUtPmRvY3VtZW50KCkgIT0gbV9kb2N1bWVudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CisgICAg
UmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBv
c2l0aW9uSXNCZWZvcmVBbmNob3IpLCBQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25J
c0FmdGVyQW5jaG9yKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3Vz
KTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKHJhbmdlLmdldCgpKSwgRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMpOwogCiAgICAg
UGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKIAotICAgIGlmICghbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Cisg
ICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpIHsKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBh
c3RlYm9hcmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHN0
YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQmIGltYWdlRWxlbWVudCwgUmVmUHRyPEltYWdlPiYg
aW1hZ2UsIENhY2hlZEltYWdlKiYKIAogdm9pZCBFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2Uo
KQogewotICAgIGlmICghaGFzQ29tcG9zaXRpb24oKSB8fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWhhc0NvbXBvc2l0
aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhbmNlbENvbXBvc2l0aW9uKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBjNzE2ZDcyODBmNDYyY2I1
NjczNzU3YjRiYTRlM2IyNGFiZWU4ZGUwLi5hMjY3MzQ1YmU1NDZlZTdmNDYxMTlkODMyYzhkZTE5
MTZhOGFlY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTU0MSwx
MSArNTQxLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogdm9pZCBGcmFtZUxvYWRlcjo6
d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgd2hlbiBhIGZyYW1lIGlzIHN0aWxsIGZ1bGx5IGluIHBsYWNlIChub3QgY2FjaGVkLCBu
b3QgZGV0YWNoZWQpLCBidXQgd2lsbCBiZSByZXBsYWNlZC4KKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1fZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgeworICAg
IGlmIChkb2N1bWVudC0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAvLyBU
aGUgdGV4dCB3YXMgYWxyZWFkeSBwcmVzZW50IGluIERPTSwgc28gaXQncyBiZXR0ZXIgdG8gY29u
ZmlybSB0aGFuIHRvIGNhbmNlbCB0aGUgY29tcG9zaXRpb24uCi0gICAgICAgIG1fZnJhbWUuZWRp
dG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVk
aXRvckNsaWVudCA9IG1fZnJhbWUuZWRpdG9yKCkuY2xpZW50KCkpIHsKKyAgICAgICAgZG9jdW1l
bnQtPmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOworICAgICAgICBpZiAoRWRpdG9yQ2xp
ZW50KiBlZGl0b3JDbGllbnQgPSBkb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpIHsKICAgICAg
ICAgICAgIGVkaXRvckNsaWVudC0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7
CiAgICAgICAgICAgICBlZGl0b3JDbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1l
KTsKICAgICAgICAgfQpAQCAtNTY3LDggKzU3MCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsb3Nl
VVJMKCkKICAgICB9CiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGljeSk7Ci0gICAg
Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogfQogCiBi
b29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKCkKQEAgLTU4MCw3ICs1ODEsNiBAQCBib29sIEZy
YW1lTG9hZGVyOjpkaWRPcGVuVVJMKCkKICAgICB9CiAKICAgICBtX2ZyYW1lLm5hdmlnYXRpb25T
Y2hlZHVsZXIoKS5jYW5jZWwoKTsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyTGFzdEVkaXRD
b21tYW5kKCk7CiAKICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICBtX2RpZENhbGxJbXBs
aWNpdENsb3NlID0gZmFsc2U7CkBAIC02NDMsOCArNjQzLDYgQEAgc3RhdGljIGlubGluZSBib29s
IHNob3VsZENsZWFyV2luZG93TmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IERvY3VtZW50
JiBuZXcKIAogdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBi
b29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvb2wg
Y2xlYXJGcmFtZVZpZXcsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZURPTVdpbmRvd0Ny
ZWF0aW9uKQogewotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXIoKTsKLQogICAgIGJvb2wgbmVl
ZGVkQ2xlYXIgPSBtX25lZWRzQ2xlYXI7CiAgICAgbV9uZWVkc0NsZWFyID0gZmFsc2U7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKaW5kZXggMzg1ZTM3YTZkMGM5MGU2MzNhM2I3YjQyODcyYzYxNmUzODA4
NjQyNi4uMjkwN2I0ODViOTRjNjZhYzUwNjg1Yzk5ZGMxNWRkNWVlZWZmY2QwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQog
ICAgICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVk
dWxlcj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwg
bV9zY3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBt
X2VkaXRvcihtYWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rpb24o
bWFrZVVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlvbkNv
bnRyb2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigqdGhpcykpCiAg
ICAgLCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAgICwg
bV90ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTU1NCw3ICs1
NTIsNyBAQCBib29sIEZyYW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2UgRE9N
UGFzdGVBY2Nlc3NQb2xpY3k6OkRlbmllZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNh
c2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6Ok5vdFJlcXVlc3RlZFlldDogewotICAgICAgICBhdXRv
KiBjbGllbnQgPSBtX2VkaXRvci0+Y2xpZW50KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9IGVk
aXRvcigpLmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtOTM3LDcgKzkzNSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0
Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAg
ICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRpc21p
c3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0i
ZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAvLyBG
SVhNRTogSG93IHRvIGhhbmRsZSBjb21wb3VuZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJkaXNh
YmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDNk
NDNhOTRiZWE5NTU2Yzk4ZGM3NDIzYWI3ZWFkOWE5MmE1MmM2ZmUuLjA5MzJhODNjYjY3NGY2Zjhj
OTYxMWVkOWY2OTk5ZDE3YjYyZDE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIkFic3RyYWN0RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6
ZU9yTm90LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50aWZp
ZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5o
IgpAQCAtMTYzLDE0ICsxNjQsMTQgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0OwogICAgIEZyYW1lVmlldyogdmlldygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBlZGl0
b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRv
Y3VtZW50KCktPmVkaXRvcigpOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7
IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZlbnRI
YW5kbGVyKCkgeyByZXR1cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhhbmRs
ZXImIGV2ZW50SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAg
RnJhbWVMb2FkZXImIGxvYWRlcigpIGNvbnN0OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXImIG5h
dmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KLSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAgICBj
b25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQo
KS0+c2VsZWN0aW9uKCk7IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBDU1NB
bmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRy
b2xsZXI7IH0KICAgICBjb25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzksNiBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVSZWY8
U2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0
b3I7Ci0gICAgVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBVbmlx
dWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAj
aWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5j
cHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZS4uM2VlZTQy
ZmYwY2QxZTczY2YwMWIyOTVlOThkMjg1NGU5YmI3Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Rl
eHRJbmRpY2F0b3IuY3BwCkBAIC02OCwyMSArNjgsMTYgQEAgUmVmPFRleHRJbmRpY2F0b3I+IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKIAogUmVm
UHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBS
YW5nZSYgcmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBt
YXJnaW4pCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLmZyYW1lKCk7CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKIAotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQotICAgIFZp
c2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRp
b24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKTsKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFi
bGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNl
bGVjdGlvbkNoYW5nZShkb2N1bWVudCwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9y
YXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOwogCkBA
IC05MSw3ICs4Niw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAKICAgICBib29sIGluZGlj
YXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUluZGlj
YXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rp
b24pKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZG9jdW1lbnQtPmZyYW1l
KCksIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397160</attachid>
            <date>2020-04-21 20:27:13 -0700</date>
            <delta_ts>2020-04-21 21:44:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200421202712.patch</filename>
            <type>text/plain</type>
            <size>210778</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2
ZDA2MTE2ZWQ2Zjg5ZmFiOTBhM2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0
ZmQwMGUxNWI4OGQ3MjJlOTVhOTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4
NmExYjFlMWY1NDIxYmRiNzg2YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRU
aW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
IGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZvbnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFz
cyBGcmFtZTsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
RnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsx
NTc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21D
b250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVk
aXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBj
b25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFj
ZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5z
aWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3Mg
PSAwKTsKQEAgLTIxMTYsNiArMjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmll
ZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2Iz
YWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdk
MDBiYmYxMjBjMDM3OWVmMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJv
b2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAo
Y3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNz
cGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAt
MjIwLDEyICsyMjAsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50
Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0y
MzYsMTIgKzIzNiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2Vs
ZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAs
IHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJh
Z3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7
CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0
LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdn
ZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAo
IXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcg
PSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIg
bW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywg
d2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29y
cmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8g
dW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVs
IHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYg
KGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3Jp
Z2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29t
bWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRp
dG9yQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdl
KCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdl
KCkgPyAmbV9kb2N1bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAog
VGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChl
bmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OwogICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Up
OwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00
NzksMTIgKzQ3OSwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VyQ29udHJvbGxlciA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250
cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxh
Y2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUCiAKICAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICgh
c2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBl
bmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NTgsNyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAog
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5h
dGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUu
cGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgp
LT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0
aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5
NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9
IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
dHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRl
ZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldElu
UGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAg
Ym9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAg
ICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAg
dGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9j
dW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0g
VGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwpAQCAtNjUzLDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1
dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZi
MjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3
OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3Mg
RWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9
KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19F
TkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZl
VGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVT
U19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3
ZDFiOTY1MjQ2NDIwZDExODI2NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwx
NyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRo
ZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFz
IGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhp
cyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQg
dGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3Io
KS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFw
cGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAg
ICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51
bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246
OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndp
bGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsK
IAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigp
LndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0
byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
IC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhl
cmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
LCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBk
ZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgp
KTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
KyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVu
ZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1w
dHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBo
IHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBh
cmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUz
YzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4
NzJhY2I4OGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5n
IHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBw
cmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQw
LDcgKzc0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVS
ZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQu
cHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2ls
bCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgp
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0
VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAg
aWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBm
cmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIg
bWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxh
Y2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICgh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAg
ICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyAr
OTU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUy
Y2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUy
YjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9u
KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5k
OjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJu
ICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0
aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4
LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5k
Ojppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
OwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3
ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRl
eCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJj
OGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9u
KTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1h
bmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAg
IEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAg
IEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJl
ZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJj
Y2QwNTk1MzU1NWFhMjJiMjZmZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTg2OSw3ICs4NjksNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkK
IAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRv
cigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQz
MTZhNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAg
ICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpk
b2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJm
NjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLmUyYzI5ZmNjNmU3ZTc0MzE0YmUzOTkxZDBkZmNk
N2Y5MTdmMjUxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMs
OCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1
YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHko
Y29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0
aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBF
ZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29t
cG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1l
bnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJl
ZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRv
IGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkp
OwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
ICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lk
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJh
bWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxl
Y3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9u
PiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFt
ZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkp
CisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9w
dGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMp
Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9u
VG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2Vs
ZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAg
ICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxT
ZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNl
bGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNl
bGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBk
YXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBk
YXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNl
bmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAg
ICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05v
dFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwg
b3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQg
dGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNl
IHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlv
bi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAg
Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVu
dCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNr
IHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9y
IEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3Io
bV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgp
KTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAog
ZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRp
YyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBD
bGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQo
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9y
ZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBj
b25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBh
c3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRl
KCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0
b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0Fj
dGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1
bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxl
dGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJp
dHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wg
c21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFj
dGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4
dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRS
ZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODks
MTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9M
b2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgp
KTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAg
ICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRl
eHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRC
eVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKQEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
b3B5KCkKIHsgICAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBF
ZGl0b3I6OnRyeURIVE1MQ29weSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNw
YXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJv
YXJkRXZlbnRLaW5kOjpDdXQpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewot
ICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElu
cHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkK
KyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRT
dXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAg
LTc4MiwxNyArNzgyLDE3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBp
ZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxMiwxMiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0
aW9uKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFn
KTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSwgdWxUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2Rl
ID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAg
LTgyNywxMiArODI3LDEyIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlz
dFN0YXRlKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIG9sVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04NzIsNyArODcyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlz
dCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7
Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4g
bmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBA
IFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkKIAogdm9pZCBFZGl0b3I6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRU
YXJnZXRGcm9tKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBm
aW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
fQogCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0
aW5nU3R5bGVBbmRBY3Rpb24oKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFt
ZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNs
aWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRj
aElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0K
QEAgLTk4NCwxMyArOTg1LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5w
dXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlu
cHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZv
cmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0
IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNv
bHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0
cigpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5n
QWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rp
b25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNT
dHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+
dHJpU3RhdGVPZlN0eWxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZT
dHlsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAogICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZj
b21tYW5kKTsKIAogICAgICAgICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAg
ICAgICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkg
aW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQo
KSA9PSAmY29tbWFuZCkKQEAgLTEyMDAsMTEgKzEyMDEsMTEgQEAgdm9pZCBFZGl0b3I6OnJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9y
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1
bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9raWxs
UmluZyhtYWtlVW5pcXVlPFBBTDo6S2lsbFJpbmc+KCkpCi0gICAgLCBtX3NwZWxsQ2hlY2tlciht
YWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4oZnJhbWUpKQotICAgICwgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZnJhbWUpKQor
ICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+KGRvY3VtZW50KSkK
KyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI+KGRvY3VtZW50KSkKICAgICAsIG1fZWRpdG9yVUlVcGRhdGVUaW1lcigq
dGhpcywgJkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKQogI2lmIEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLCBt
X3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycykKQEAgLTEyMjAsNyArMTIyMSw3IEBAIHZvaWQg
RWRpdG9yOjpjbGVhcigpCiAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CiAgICAgICAgIG1f
Y29tcG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKEVkaXRvckNsaWVudCogY2xp
ZW50ID0gdGhpcy0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBv
c2l0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRp
b24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICB9CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVu
ZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVh
cigpOwpAQCAtMTIzOCwxMiArMTIzOSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29s
IEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQsIFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2
ZW50LCBpbnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRU
eXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlv
bihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVy
KCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlv
bik7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxl
VGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAK
IGJvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2
ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAzLDEwICsxMzA0LDggQEAgYm9vbCBFZGl0b3I6
Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRp
b25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3Vz
ZWQgZnJhbWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJl
dmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGF1dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdl
KCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMTksMTAgKzEzMTgsMTAgQEAg
Ym9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBj
YXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRh
YmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25J
c0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29t
bWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTEzMzksMTAgKzEz
MzgsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYg
KCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKIAot
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDYsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI1LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzQsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1NCw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzksNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNyw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUxLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODIsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNyw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUyLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4NCw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0yMDAwLDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNSw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMywxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODIsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDksNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjMsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChz
ZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTM5LDcg
KzIxMzgsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8v
IEZJWE1FOiBPbiBNYWMgT1MgWCwgd2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5n
IGFuZCBHcmFtbWFyIiBwYW5lbCwgd2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91
bGQgcmVtb3ZlIG1pc3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVk
UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpOwogCkBAIC0yMTUyLDE0ICsyMTUxLDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNw
ZWxsaW5nKCkKIAogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1l
KTsKLQorICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7Cisg
ICAgCiAgICAgLy8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2Vz
IC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAg
IC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94
aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5k
IG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcg
YXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxp
bmciIGNvbW1hbmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBz
cGVsbGluZ1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAg
Ym9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsyMzA3LDggQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNv
bmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBo
CiAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpn
cmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwu
cmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1t
YXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0
aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMyMCw4
ICsyMzE5LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSBy
ZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFu
Z2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVs
bGluZ09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5n
ZSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAg
IGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRX
b3JkKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5n
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIzMzQsNyBAQCBT
dHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWRO
b2RlKSBjb25zdAogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8
fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM4OCw3IEBAIFN0cmlu
ZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcp
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xp
ZW50KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0MDMsNyBAQCBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwg
U3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1
ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyArMjQxMSw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9v
CiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAg
aWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5n
U3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7
CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdy
YW51bGFyaXR5KTsKQEAgLTI0NzIsNyArMjQ3MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3Rp
CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQo
bV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5NCwxOSArMjU5MywxOSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
d29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJl
cGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29y
cmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdT
ZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFu
Z2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9j
dW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNz
cGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJl
cGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRv
cigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RS
ZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAK
ICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAg
ICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51
bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
Rm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc4LDcgKzI2NzcsNyBAQCBib29sIEVkaXRvcjo6
aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJl
dHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNr
aW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCku
ZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKQpAQCAtMjcyNiw3ICsyNzI1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5
cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7Cisg
ICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAog
ICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFn
cmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVz
b2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9u
cyk7CkBAIC0yNzQxLDcgKzI3NDAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0K
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNv
bHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwor
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNr
LnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25O
dWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg3LDcgKzI3ODYsNyBAQCBzdGF0aWMgdm9pZCBj
b3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENo
ZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxD
aGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiBy
ZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8
RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0
Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRl
eHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJl
cXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKQEAgLTI4MTEsOSArMjgxMCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAg
Ym9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAg
ICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBz
aG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0
U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikg
ewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3
ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAg
ICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3Jh
cGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAg
ICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0
KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBu
ZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTUsMTMgKzI4OTQsMTMgQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBW
ZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVj
dGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0
b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2Fu
RWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3ICsyOTA5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8
VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsg
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hl
LT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25P
Y2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5NDAsMTMgKzI5MzksMTMgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFu
Z2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAm
JiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewog
ICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJh
bmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwor
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVj
dGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25G
b3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sg
aXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRv
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zMDIzLDggKzMwMjIsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vy
c0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQog
ICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90
ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMg
b2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0
aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUg
c3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5NiwxMSArMzA5NSw3IEBAIHZvaWQgRWRpdG9yOjpk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwg
Y29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IElu
dFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAg
ICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXco
KTsKICAgICBpZiAoIWZyYW1lVmlldykKQEAgLTMxMTcsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1Miw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzUsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjAwLDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NSw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjUsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODIsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk2LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwNCw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzE0LDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMiw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMzAsNyArMzMyNSw3IEBAIFJlZlB0
cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihj
b25zdCBJbnRTaXplJiBzaXplCiAgICAgcmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29w
eVJlZigpKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25C
ZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xk
ZXIucHRyKCkpIH07Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRy
aWdnZXJlZCkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJU
cmlnZ2VyZWQpKTsKIAogICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNTAsOCArMzM0
NSw4IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVy
RWxlbWVudCYgcGxhY2Vob2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAv
LyBUbyBtYXRjaCB0aGUgTGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0
IGluc2VydGlvbiBwb2ludCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0
byBiZS4KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAm
JiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQp
Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZ
IH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dl
cmVkKSk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZl
KCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVt
ZW50KQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9B
RkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNl
clRyaWdnZXJlZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRo
KEludFJlY3QmIHJlY3QpCkBAIC0zNDAzLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmly
c3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGll
bnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFm
ZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CkBAIC0zNDEyLDE3ICszNDA3LDE3IEBAIGJvb2wgRWRp
dG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uLCBjb25zdCBWCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVk
aXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBpZiAo
c3R5bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5
bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgY3Vy
cmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGU7
Ci0gICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkKKyAgICBpZiAoYXV0byBleGlzdGluZ1R5cGluZ1N0eWxlID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQogICAgICAgICB0eXBpbmdTdHlsZSA9IGV4
aXN0aW5nVHlwaW5nU3R5bGUtPmNvcHkoKTsKICAgICBlbHNlCiAgICAgICAgIHR5cGluZ1N0eWxl
ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKLSAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBp
bmdTdHlsZUF0KHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOworICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGlu
Z1N0eWxlQXQoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICAvLyBIYW5kbGUgYmxvY2sgc3R5bGVz
LCBzdWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxF
ZGl0aW5nU3R5bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHlsZS0+ZXh0cmFjdEFuZFJlbW92ZUJs
b2NrUHJvcGVydGllcygpOwpAQCAtMzQzMCw3ICszNDI1LDcgQEAgdm9pZCBFZGl0b3I6OmNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICAgICAgQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBibG9j
a1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKIAogICAgIC8vIFNldCB0aGUg
cmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CisgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CiB9CiAK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC0zNDg5LDE5ICszNDg0LDE5
IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAog
CiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlv
bnMgb3B0aW9ucykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAg
UmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAotICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0
cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwogCiAg
ICAgaWYgKCFyZXN1bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2Us
IERPV05TVFJFQU0pKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVBTSkpOwogCiAgICAgaWYgKCEo
b3B0aW9ucy5jb250YWlucyhEb05vdFJldmVhbFNlbGVjdGlvbikpKQotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNTk4
LDcgKzM1OTMsNyBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogICAgIGlmIChyYW5nZSkgewog
ICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0gJmRvY3VtZW50KCkpCiAgICAg
ICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOwotICAgICAgICBlbHNlIGlmICghaXNGcmFtZUlu
UmFuZ2UobV9mcmFtZSwgKnJhbmdlKSkKKyAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdl
KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKQEAgLTM2NjgsNyArMzY2Myw3IEBAIHZvaWQgRWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBP
cHRpb25TZXQ8RnJhbWVTCiAjZW5kaWYKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOworICAgICAgICBjbGll
bnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogCiAj
aWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpKQpAQCAtMzY5MSw4
ICszNjg2LDYgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMKIAogYm9vbCBFZGl0b3I6OnNob3Vs
ZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKQogewotICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuaXNUZWxlcGhv
bmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1
cHBvcnRlZCgpOwogfQogCkBAIC0zNzA1LDkgKzM2OTgsOSBAQCB2b2lkIEVkaXRvcjo6c2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogCiAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+
IG1hcmtlZFJhbmdlczsKIAotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWZyYW1lU2VsZWN0aW9uLmlzUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBp
ZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hh
bmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyOSw3ICszNzIyLDcgQEAgdm9p
ZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBSZWZQdHI8
UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2Vs
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNzQyLDcgKzM3MzUsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKQogICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJh
bmdlcy5hcHBlbmQocmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFt
ZS5wYWdlKCkpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAg
ICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVt
YmVyUmFuZ2VzQ2hhbmdlZCgpOwogfQogCkBAIC0zODAxLDkgKzM3OTQsOSBAQCB2b2lkIEVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGphY2VudFdv
cmRzOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGVkU2VudGVuY2U7Ci0gICAg
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOwotICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKLSAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXdTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpKTsKKyAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0
aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24o
c3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5l
d1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICNlbHNlCkBAIC0zODU2LDcgKzM4NDks
NyBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoIW1f
ZWRpdG9yVUlVcGRhdGVUaW1lcldhc1RyaWdnZXJlZEJ5RGljdGF0aW9uKQogICAgICAgICBtX2Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKIAotICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlV
cGRhdGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAjaWYgRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBub3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRhdGVz
KCk7CkBAIC0zODgzLDcgKzM4NzYsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUo
Tm9kZSogbm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3Ro
KSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9k
ZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMzk1MCwxMCArMzk0MywxMCBAQCBPcHRpb25TZXQ8VGV4dENo
ZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9k
ZSYgcm9vdAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJh
bmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCitzdGF0aWMgUmVm
UHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQp
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gc2VsZWN0
aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkg
OiBkb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiBzdGF0aWMg
Ym9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKQEAgLTM5NjcsOCArMzk2MCw4IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxk
UmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNh
bmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOworICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRl
UmFuZ2VGb3JTZWxlY3Rpb24obV9kb2N1bWVudCk7CiAgICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5
VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsKIApA
QCAtMzk3Nyw3ICszOTcwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVx
dWVzdCgpIGNvbnN0CiAgICAgCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7
CiB9CiAKQEAgLTQwNDQsNyArNDAzNyw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0
dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBGb250QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAgYXV0byog
c3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOwor
ICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1l
KCksIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBpZiAobm9kZVRv
UmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKQEAgLTQwODUsNyAr
NDA3OCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXR0cmlidXRlcy50
ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlciht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF0dHJpYnV0ZXMu
dGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIAogICAgIHN3aXRj
aCAoc3R5bGUtPnRleHRBbGlnbigpKSB7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoK
QEAgLTQxMTEsNyArNDEwNCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0
ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
YXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdT
dHlsZSgpKTsKKyAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpOwogICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdT
dHlsZS0+c3R5bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpA
QCAtNDE5OSwxMiArNDE5Miw4IEBAIHZvaWQgRWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFjaG1l
bnRVcGRhdGVzKCkKICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiByZW1vdmVkQXR0YWNobWVu
dElkZW50aWZpZXJzKQogICAgICAgICBjbGllbnQoKS0+ZGlkUmVtb3ZlQXR0YWNobWVudFdpdGhJ
ZGVudGlmaWVyKGlkZW50aWZpZXIpOwogCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9y
IChhdXRvJiBpZGVudGlmaWVyIDogaW5zZXJ0ZWRBdHRhY2htZW50SWRlbnRpZmllcnMpIHsKLSAg
ICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IGRvY3VtZW50LT5hdHRhY2htZW50Rm9ySWRlbnRp
ZmllcihpZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IG1fZG9jdW1l
bnQuYXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCiAgICAgICAgICAgICBjbGll
bnQoKS0+ZGlkSW5zZXJ0QXR0YWNobWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXIsIGF0dGFj
aG1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRy
KSwgYXR0YWNobWVudC0+aGFzRW5jbG9zaW5nSW1hZ2UoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDIyNyw3ICs0MjE2LDcgQEAgdm9pZCBF
ZGl0b3I6Omluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBPcHRpb25h
bDx1aW50NjRfdD4mJiBmaWwKIAogdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKLSAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSA9IHRydWU7CiAKQEAgLTQyNDYsNyArNDIzNSw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKIGJv
b2wgRWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgmbV9mcmFtZSk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9kb2N1bWVudC5mcmFtZSgp
KTsKIH0KIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JN
YXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKQEAgLTQyNjIsMTMgKzQyNTEsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2ZWx0ZXJuYXRpdmUoY29uc3Qg
U3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZwogdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1v
ZGVFbmFibGVkKCkKIHsKICAgICBtX292ZXJ3cml0ZU1vZGVFbmFibGVkID0gIW1fb3ZlcndyaXRl
TW9kZUVuYWJsZWQ7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tD
dXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7Ci19Ci0KLURvY3VtZW50JiBFZGl0b3I6OmRv
Y3VtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9mcmFtZS5kb2N1bWVudCgpKTsKLSAgICBy
ZXR1cm4gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFNob3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAogUmVm
UHRyPFJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQpAQCAtNDMyMSw5ICs0
MzA0LDkgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCi0g
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmICghbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3Zl
OwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUs
IG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1lKCksIG5vZGVUb1JlbW92
ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogZm9udCA9IG51
bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkgewpAQCAtNDMzNSwxMSArNDMxOCwxMSBAQCBjb25z
dCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9k
ZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24o
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBO
b2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDM3MSw3
ICs0MzU0LDcgQEAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0RWRpdGFi
bGVJbWFnZSgpCiAKIGJvb2wgRWRpdG9yOjpjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9uZUltYWdl
cygpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXgg
YWQ5ZWRhMjYxOGM5YTg4MGJlY2JiMWNlNGQ2OGJiNTliODljMjBjMC4uZmZhNzdkMGU1NDhlN2Nl
NzdkY2Q0N2JiMGU2MWMxMGE4NDc3ZjAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiRWRpdG9y
SW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFdy
aXRlckRhdGEuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKQEAgLTExOSwxMyArMTIwLDEz
IEBAIGVudW0gY2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uIDogdWludDhfdCB7CiAKIGNs
YXNzIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVj
dGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9j
dW1lbnQmLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JU
IH5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJh
bWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIE9wdGlvblNldDxUZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb24+IG1fb3B0aW9uczsKICAgICBib29sIG1fd2FzSWdub3JpbmdT
ZWxlY3Rpb25DaGFuZ2VzOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzcsNyArMTM4
LDcgQEAgcHJpdmF0ZToKIGNsYXNzIElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlIHsKIHB1
YmxpYzoKICAgICBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZShGcmFtZSYgZnJhbWUpCi0g
ICAgICAgIDogbV9zZWxlY3Rpb25DaGFuZ2UoZnJhbWUsIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQorICAgICAgICA6IG1fc2Vs
ZWN0aW9uQ2hhbmdlKCpmcmFtZS5kb2N1bWVudCgpLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKICAgICB7CiAgICAgfQogCkBA
IC0xNTAsNyArMTUxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEVkaXRvciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRWRpdG9yKEZyYW1lJik7Cisg
ICAgZXhwbGljaXQgRWRpdG9yKERvY3VtZW50Jik7CiAgICAgfkVkaXRvcigpOwogCiAgICAgZW51
bSBjbGFzcyBQYXN0ZU9wdGlvbiA6IHVpbnQ4X3QgewpAQCAtMjcxLDcgKzI3Miw3IEBAIHB1Ymxp
YzoKICAgICBjbGFzcyBDb21tYW5kIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQ
T1JUIENvbW1hbmQoKTsKLSAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1h
bmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBGcmFtZSYpOworICAgICAgICBDb21tYW5kKGNvbnN0
IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIERvY3VtZW50Jik7
CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyID0gU3RyaW5nKCksIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQgPSBudWxscHRyKSBjb25z
dDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQpIGNvbnN0OwpAQCAtMjg4LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgog
ICAgICAgICBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIG1fY29tbWFuZCB7IG51bGxwdHIg
fTsKICAgICAgICAgRWRpdG9yQ29tbWFuZFNvdXJjZSBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRy
PERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAg
ICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kIGNvbW1hbmQoY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSk7IC8vIENvbW1hbmQgc291cmNlIGlzIENvbW1hbmRGcm9tTWVudU9yS2V5Qmlu
ZGluZy4KQEAgLTU2Nyw3ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYpOwogCiBwcml2
YXRlOgotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0OworICAgIERvY3VtZW50JiBkb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAogICAgIGJvb2wgY2FuRGVsZXRl
UmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQmKTsKQEAgLTYxOCw3ICs2MjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3Vt
ZW50JiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbV9sYXN0
RWRpdENvbW1hbmQ7CiAgICAgUmVmUHRyPFRleHQ+IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIHVu
c2lnbmVkIG1fY29tcG9zaXRpb25TdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2RjM2I5MGZiNmMwNDcxZmFhMTBmYjhjNDQu
LmJkNTE4MGViNDAwZWE3OTIxNTFiNmY3OThiNjBlY2I4Y2ZmZGFlYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTEwOSw2ICsxMTA5LDcgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlIHNvdXJjZSwKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVN3YXBXaXRoTWFyayhGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
KyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rpb24oZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAg
UmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCk7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC0xODM2LDEy
ICsxODM3LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGludGVybmFs
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogCiBFZGl0b3I6OkNvbW1hbmQgRWRp
dG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiB7Ci0gICAgcmV0dXJuIENv
bW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29t
bWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZG9jdW1lbnQpOwogfQog
CiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewotICAgIHJldHVybiBDb21tYW5kKGlu
dGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9mcmFtZSk7CisgICAgcmV0dXJu
IENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgc291cmNlLCBtX2RvY3VtZW50
KTsKIH0KIAogYm9vbCBFZGl0b3I6OmNvbW1hbmRJc1N1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5k
aW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCkBAIC0xODUzLDEyICsxODU0LDEzIEBAIEVk
aXRvcjo6Q29tbWFuZDo6Q29tbWFuZCgpCiB7CiB9CiAKLUVkaXRvcjo6Q29tbWFuZDo6Q29tbWFu
ZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1hbmQsIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBGcmFtZSYgZnJhbWUpCitFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3Qg
RWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJj
ZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jb21tYW5kKGNvbW1hbmQpCiAgICAgLCBt
X3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyAmZnJhbWUgOiBudWxscHRy
KQorICAgICwgbV9kb2N1bWVudChjb21tYW5kID8gJmRvY3VtZW50IDogbnVsbHB0cikKKyAgICAs
IG1fZnJhbWUoY29tbWFuZCA/IGRvY3VtZW50LmZyYW1lKCkgOiBudWxscHRyKQogewotICAgIEFT
U0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKKyAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9kb2N1
bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYg
cGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjb25zdApAQCAtMTg2OCw5ICsxODcw
LDkgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0
ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGMKICAgICAgICAgaWYgKCFhbGxvd0V4ZWN1dGlv
bldoZW5EaXNhYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBh
dXRvIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudC0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gZG9jdW1lbnQpCisKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAhPSBtX2Zy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb21tYW5kLT5leGVj
dXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQsIG1fc291cmNlLCBwYXJhbWV0ZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJm
ZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li5iMTdhMDE0YzBlMzE0YTk2ZGVkZmI3YzM0ODE0
NTM1Y2E1YmM1N2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtMTM5LDEzICsxMzksMTQgQEAgSW50UmVjdCBEcmFnQ2FyZXRDb250cm9sbGVyOjplZGl0
YWJsZUVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4g
eyB9OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxT
ZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1Vz
ZURpcmVjdGlvbmFsU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4g
IWZyYW1lIHx8IGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0
aW9uQXNEaXJlY3Rpb25hbCgpOworICAgIHJldHVybiAhZG9jdW1lbnQgfHwgZG9jdW1lbnQtPmVk
aXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7
CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKERvY3VtZW50
KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2ZyYW1lKGRv
Y3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQog
ICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICNpZiBFTkFCTEUoVEVY
VF9DQVJFVCkKQEAgLTE1Niw3ICsxNTcsNyBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCiAgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZh
bHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gZnJhbWUpCisgICAgLCBt
X2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICwgbV9zaG91
bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUo
ZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2Vs
ZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjYsMjQgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1l
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fY2FyZXRCbGlua3ModHJ1ZSkKICNlbmRp
ZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1l
KSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CisgICAgCisg
ICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CisgICAgaWYg
KGFjdGl2ZUFuZEZvY3VzZWQpCisgICAgICAgIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisjaWYg
VVNFKFVJS0lUX0VESVRJTkcpCisgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMg
bm90IGJsaW5rKQorICAgIHNldENhcmV0VmlzaWJsZShhY3RpdmVBbmRGb2N1c2VkKTsKKyNlbHNl
CisgICAgc2V0Q2FyZXRWaXNpYmlsaXR5KGFjdGl2ZUFuZEZvY3VzZWQgPyBWaXNpYmxlIDogSGlk
ZGVuKTsKKyNlbmRpZgogfQogCiBFbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6cm9vdEVkaXRhYmxl
RWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiBzZWxlY3Rp
b25Sb290ID0gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIHJldHVybiBz
ZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpOworICAgIHJldHVybiBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6
IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
Ojptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQsNyArMjk1LDcgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlmZmVyZW50KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3RtZW50TW9kZSBlbmRw
b2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlv
biA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdTZWxlY3Rpb24uaXNE
aXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlvbi5pc0RpcmVjdGlv
bmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2luYWxCYXNlLmlzTm90
TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJsZUJhc2UoKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsNyArMzMzLDcgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBib29sIHNob3VsZENsZWFyVHlwaW5nU3R5bGUgPSBv
cHRpb25zLmNvbnRhaW5zKENsZWFyVHlwaW5nU3R5bGUpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBuZXdTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb25Qb3NzaWJseVdpdGhvdXREaXJlY3Rpb247Ci0g
ICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAg
IGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAg
ICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CiAKICAgICBpZiAoIW1f
ZnJhbWUpIHsKQEAgLTMzNCw3ICszNDUsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2FuIGdldCBpbnRvIGFuIGlu
ZmluaXRlIGxvb3AKICAgICBpZiAoRG9jdW1lbnQqIG5ld1NlbGVjdGlvbkRvY3VtZW50ID0gbmV3
U2VsZWN0aW9uLmJhc2UoKS5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8RnJhbWU+
IG5ld1NlbGVjdGlvbkZyYW1lID0gbmV3U2VsZWN0aW9uRG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAg
ICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlv
bkRvY3VtZW50ICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChuZXdT
ZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9IG1fZG9j
dW1lbnQpIHsKICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25GcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucywgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQoKSwgYWxpZ24sIGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3Np
YmxlIHRoYXQgZHVyaW5nIHRoZSBhYm92ZSBzZXQgc2VsZWN0aW9uLCB0aGlzIEZyYW1lU2VsZWN0
aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5CiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0RnJhbWVF
bGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQsIGJ1dCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMg
bm8gbG9uZ2VyIHZhbGlkIHNpbmNlCkBAIC0zNDksNyArMzYwLDcgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxl
U2VsZWN0aW8KICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CiAKICAgICBpZiAoY2xv
c2VUeXBpbmcpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZnJhbWUpOwor
ICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygqbV9kb2N1bWVudCk7CiAKICAgICBp
ZiAoc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSkKICAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwpA
QCAtMzU3LDcgKzM2OCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhv
dXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKICAgICBib29sIGRpZE11dGF0ZVNl
bGVjdGlvbiA9IG9sZFNlbGVjdGlvbiAhPSBuZXdTZWxlY3Rpb247CiAgICAgaWYgKGRpZE11dGF0
ZVNlbGVjdGlvbikKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5n
ZSgpOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7
CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDIxICszODIsMjEg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFy
YW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgp
OwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25zICYgRG9Ob3RT
ZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxl
bWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgICAgIHNldEZvY3VzZWRF
bGVtZW50SWZOZWVkZWQoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbmVlZGVk
LgotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBv
bGRGb2N1c2VkRWxlbWVudCkKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCisgICAgICAgICAgICBtX2RvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0
aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQgd2lsbCBi
ZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlmIG5lY2Vz
c2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJ
ZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9y
KCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOwogICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3Rpb24tYXBpLyNzZWxlY3Rpb25jaGFuZ2Ut
ZXZlbnQKICAgICAvLyBGSVhNRTogU3BlYyBkb2Vzbid0IHNwZWNpZnkgd2hpY2ggdGFzayBzb3Vy
Y2UgdG8gdXNlLgotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnF1ZXVlVGFza1RvRGlzcGF0Y2hF
dmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6Tm8pKTsKKyAgICBtX2RvY3VtZW50LT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZl
bnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5NiwxMCArNDA3LDYg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBpZiAoIXNldFNlbGVjdGlvbldpdGhvdXRV
cGRhdGluZ0FwcGVhcmFuY2Uoc2VsZWN0aW9uLCBvcHRpb25zLCBhbGlnbiwgZ3JhbnVsYXJpdHkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlm
IChvcHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uVXBUb01haW5GcmFtZSkKICAgICAgICAgbV9zZWxl
Y3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsVXBUb01haW5GcmFt
ZTsKICAgICBlbHNlIGlmIChvcHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uKQpAQCAtNDExLDI3ICs0
MTgsMjcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBtX3NlbGVjdGlvblJldmVhbElu
dGVudCA9IGludGVudDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogCi0g
ICAgaWYgKGRvY3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNhbGMoKSkKKyAgICBpZiAobV9kb2N1
bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1l
Vmlldy0+bGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0UGVuZGluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICB1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oaW50ZW50KTsKIAogICAgIGlmIChvcHRp
b25zICYgSXNVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2Zy
YW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9j
dW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICAgICAgY2xpZW50LT5kaWRFbmRVc2Vy
VHJpZ2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRnJhbWUmIGZyYW1lKQorc3RhdGlj
IHZvaWQgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQogewogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGZyYW1lLmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIGRvY3VtZW50LnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogI2Vsc2UKLSAgICBmcmFtZS5k
b2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQudXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ0MSw3ICs0NDgsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZShSZXZlYWxTZWxlY3Rpb25BZnRlclVw
ZGF0ZSByZXZlYWxNbwogICAgIGlmIChyZXZlYWxNb2RlID09IFJldmVhbFNlbGVjdGlvbkFmdGVy
VXBkYXRlOjpGb3JjZWQpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlv
blJldmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVl
OwotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkp
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAg
ICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiB9CiAKQEAgLTQ1Nyw3
ICs0NjQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24o
Y29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAgIGlmIChtX3NlbGVjdGlvblJl
dmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZlYWwpIHsKICAgICAgICAg
U2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBpZiAobV9mcmFtZS0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkp
CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRl
ckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKICAgICAgICAgICAgIGFsaWdubWVudCA9
IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24gPyBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNl
bnRlcklmTmVlZGVkOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fs
d2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvcEFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZDsKQEAgLTQ3MSw3ICs0NzgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogdm9pZCBG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlRGF0YURldGVjdG9yc0ZvclNlbGVjdGlvbigpCiB7CiAjaWYg
RU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVy
cygpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVO
dW1iZXJzKCk7CiAjZW5kaWYKIH0KIApAQCAtNzAzLDcgKzcxMCw3IEBAIFZpc2libGVQb3NpdGlv
biBGcmFtZVNlbGVjdGlvbjo6cG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlzR2V0U3RhcnQpIGNv
bnN0CiAgICAgLy8gYmFzZS9leHRlbnQgYWx3YXlzIHBvaW50IHRvIHRoZSBzYW1lIG5vZGVzIGFz
IHN0YXJ0L2VuZCwgYnV0IHdoaWNoIHBvaW50cwogICAgIC8vIHRvIHdoaWNoIGRlcGVuZHMgb24g
dGhlIHZhbHVlIG9mIGlzQmFzZUZpcnN0LiBUaGVuIHRoaXMgY2FuIGJlIGNoYW5nZWQKICAgICAv
LyB0byBqdXN0IHJldHVybiBtX3NlbC5leHRlbnQoKS4KLSAgICBpZiAobV9mcmFtZSAmJiBtX2Zy
YW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21F
eHRlbnRFbmRwb2ludCgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBv
aW50KCkpCiAgICAgICAgIHJldHVybiBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gbV9zZWxl
Y3Rpb24udmlzaWJsZUVuZCgpIDogbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAKICAgICBy
ZXR1cm4gaXNHZXRTdGFydCA/IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogbV9zZWxlY3Rp
b24udmlzaWJsZUVuZCgpOwpAQCAtNzIzLDcgKzczMCw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFt
ZVNlbGVjdGlvbjo6bmV4dFdvcmRQb3NpdGlvbkZvclBsYXRmb3JtKGNvbnN0IFZpc2libGVQb3Np
dGlvCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IG5l
eHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7CiAKLSAgICBpZiAobV9mcmFtZSAmJiBt
X2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCgpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgewogICAgICAgICAvLyBJbiBv
cmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyByaWdodCwgd2UgYWR2YW5jZSBvbmUKICAg
ICAgICAgLy8gd29yZCBmdXJ0aGVyIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgYmFjay4gR2l2ZW4g
dGhlCiAgICAgICAgIC8vIHNlbWFudGljcyBvZiBwcmV2aW91c1dvcmRQb3NpdGlvbigpIHRoaXMg
d2lsbCBwdXQgdXMgYXQgdGhlCkBAIC04NTUsNyArODYyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZy
YW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGIKICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRl
bnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkucmlnaHQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAg
Ym9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0
b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAg
ICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1l
bnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0
ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBwb3MgPSByaWdodFdvcmRQ
b3NpdGlvbihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAg
ICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTA3Niw3ICsxMDgzLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm8KICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVj
dGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkubGVmdCh0cnVlLCByZWFjaGVk
Qm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eTogewot
ICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1fZnJh
bWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7
CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQgJiYg
bV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5n
UmlnaHQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVj
dGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IGxl
ZnRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0
KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEzNjIsNyArMTM2OSw3IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChy
ZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmln
Z2VyZWQgJiYgbV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KSB7CisgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJUcmlnZ2Vy
ZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbkJvdW5kYXJ5LCB0ZXh0
U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMzc0LDggKzEzODEsOCBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBpZiAoIXdhc1JhbmdlICYmIGFsdGVy
ID09IEFsdGVyYXRpb25Nb3ZlICYmIHBvc2l0aW9uID09IG9yaWdpbmFsU3RhcnRQb3NpdGlvbikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
CisgICAgaWYgKG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5zZXRUZXh0U2VsZWN0
aW9uSW50ZW50KHRleHRTZWxlY3Rpb25JbnRlbnQoYWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpKTsKICAgICB9CiAKQEAgLTEzODQsNyArMTM5MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4CiAgICAgLy8gTm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRyYXJ5IGJl
Y2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3VsZCBiZQogICAgIC8vIHRoZSByZXF1ZXN0ZWQgcG9z
aXRpb24gdHlwZSBpZiB0aGVyZSB3ZXJlIG5vIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
biBzZXQuCiAgICAgTGF5b3V0VW5pdCB4ID0gbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJl
Y3Rpb25OYXZpZ2F0aW9uKFNUQVJUKTsKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFs
KHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFsdGVyID09
IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0g
QWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICBzd2l0Y2ggKGFsdGVyKSB7CiAgICAgY2FzZSBBbHRl
cmF0aW9uTW92ZToKQEAgLTEzOTQsNyArMTQwMSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1v
ZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
CiAKICAgICAgICAgaWYgKCFtX3NlbGVjdGlvbi5pc0NhcmV0KCkKICAgICAgICAgICAgICYmIChn
cmFudWxhcml0eSA9PSBXb3JkR3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBo
R3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gTGluZUdyYW51bGFyaXR5KQotICAgICAgICAg
ICAgJiYgbV9mcmFtZSAmJiAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRFeHRl
bmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7CisgICAgICAgICAgICAmJiBt
X2RvY3VtZW50ICYmICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVu
ZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKICAgICAgICAgICAgIC8vIERv
bid0IGxldCB0aGUgc2VsZWN0aW9uIGdvIGFjcm9zcyB0aGUgYmFzZSBwb3NpdGlvbiBkaXJlY3Rs
eS4gTmVlZGVkIHRvIG1hdGNoIG1hYwogICAgICAgICAgICAgLy8gYmVoYXZpb3Igd2hlbiwgZm9y
IGluc3RhbmNlLCB3b3JkLXNlbGVjdGluZyBiYWNrd2FyZHMgc3RhcnRpbmcgd2l0aCB0aGUgY2Fy
ZXQgaW4KICAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgYSB3b3JkIGFuZCB0aGVuIHdvcmQt
c2VsZWN0aW5nIGZvcndhcmQsIGxlYXZpbmcgdGhlIGNhcmV0IGluIHRoZQpAQCAtMTQwNyw3ICsx
NDE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBT
ZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAogICAgICAgICAvLyBTdGFuZGFyZCBN
YWMgYmVoYXZpb3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3VuZGFyeSBpcyBncm93IHRoZSBzZWxl
Y3Rpb24gcmF0aGVyIHRoYW4gbGVhdmluZyB0aGUKICAgICAgICAgLy8gYmFzZSBpbiBwbGFjZSBh
bmQgbW92aW5nIHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0Vmlldy4KLSAgICAgICAgaWYgKCFt
X2ZyYW1lIHx8ICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dT
ZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQo
KSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCisgICAgICAgIGlmICghbV9kb2N1bWVudCB8
fCAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0
aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwg
IWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQogICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9u
LCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CkBAIC0xNTE3
LDcgKzE1MjQsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0
ZXIsIHVuc2lnbmVkIHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dl
cmVkID09IFVzZXJUcmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJH
cmFudWxhcml0eTsKIAotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3
YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlv
bkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9u
RXh0ZW5kKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU3NSw3ICsxNTgyLDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0Qmxp
bmtUaW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIGlmIChhdXRvKiB2aWV3ID0gbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAK
ICAgICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKFZpc2libGVTZWxlY3Rp
b24oKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSwgQWxpZ25DdXJzb3JPblNjcm9sbElm
TmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CkBAIC0xNjU1LDkgKzE2NjIsOSBAQCBzdGF0
aWMgYm9vbCBpc05vbk9ycGhhbmVkQ2FyZXQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKQogCiBJbnRSZWN0IEZyYW1lU2VsZWN0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wq
IGluc2lkZUZpeGVkKQogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGlu
Z0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKICAgICByZWNvbXB1dGVDYXJldFJlY3QoKTsKICAg
ICBpZiAoaW5zaWRlRml4ZWQpCiAgICAgICAgICppbnNpZGVGaXhlZCA9IG1fY2FyZXRJbnNpZGVQ
b3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwxMCArMTY4MiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgIGlmICghc2hvdWxkVXBkYXRlQ2FyZXRSZWN0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1f
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZyYW1lVmlldyogdiA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2RvY3VtZW50
LT52aWV3KCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OTAs
NyArMTY5Nyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAg
ICAgICAgICAgICBjbGVhckNhcmV0UmVjdCgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKLSAgICAgICAgICAgIGlmICh1cGRhdGVDYXJldFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
dmlzaWJsZVN0YXJ0KSkgeworICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2RvY3Vt
ZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJs
ZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgICAgICAg
ICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTcxNSw3
ICsxNzIyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKFJl
bmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpIHsKKyAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewogICAg
ICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSA9IG1fc2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUgJiYgbV9w
cmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CiAgICAgICAgIGlmIChzaG91
bGRSZXBhaW50Q2FyZXQodmlldywgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRh
YmxlKSkgewogICAgICAgICAgICAgaWYgKG1fcHJldmlvdXNDYXJldE5vZGUpCkBAIC0xODk0LDEy
ICsxOTAxLDExIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkgY29uc3QKICAgICBpZiAoIWlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAg
ICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVu
dC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQtPmhp
dFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKICAgICBOb2RlKiBpbm5lck5vZGUgPSBy
ZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYgKCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVu
ZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2OCw5ICsxOTc0LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAgICBFbGVtZW50KiBmb2N1c2Vk
RWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGZvY3Vz
ZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRN
TFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAgICAgICBIVE1MU2VsZWN0RWxl
bWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwoKSkgewpA
QCAtMjAwMCw4ICsyMDA0LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAg
ICAgICAgaWYgKHJvb3QpCiAgICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHJvb3QtPnNo
YWRvd0hvc3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByb290ID0gZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBkb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKKyAgICAgICAgICAgIHJvb3QgPSBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbV9kb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIXJvb3Qp
CkBAIC0yMDU4LDkgKzIwNjIsOCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJh
bmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRDbAogdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFj
dGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsKLSAgICBSZWY8RG9jdW1lbnQ+
IGRvY3VtZW50KCptX2ZyYW1lLT5kb2N1bWVudCgpKTsKIAotICAgIGRvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwog
CiAjaWYgVVNFKFVJS0lUX0VESVRJTkcpCiAgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8
IGRvZXMgbm90IGJsaW5rKQpAQCAtMjA3MSw3ICsyMDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFJlbmRlck9i
amVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyT2JqZWN0
OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZl
LAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWlu
dGVkLgotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkK
KyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFy
cyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDg1LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0
eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkpIHsKICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5j
ZSgpKQpAQCAtMjEwNywxMyArMjExMCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1
c2VkKGJvb2wgZmxhZykKIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBt
X2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJu
IG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50LT5wYWdlKCkgJiYgbV9kb2N1bWVudC0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci1pbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5k
KEZyYW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVU
b1R5cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0
Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIx
MzIsMTIgKzIxMzUsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgp
CiAgICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYg
bV9zZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24u
dmlzaWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNv
bXB1dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNl
dHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3Npbmcg
PSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgYm9v
bCBzaG91bGRCbGluayA9ICFwYWludEJsb2NrQ3Vyc29yICYmIGNhcmV0SXNWaXNpYmxlKCkgJiYg
aXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJy
b3dzaW5nKTsKIAogICAgIC8vIElmIHRoZSBjYXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGlt
ZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCiAgICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhlIG5l
dyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxk
QmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZnJhbWUpKQor
ICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91
bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9kb2N1bWVudCkpCiAgICAgICAgIG1f
Y2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBi
bGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsy
MTU2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQog
I2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCk7CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIwMiw4ICsyMjA1LDggQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNp
YmlsaXR5KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRy
aWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KLSAgICBpZiAobV9mcmFtZSkKLSAgICAg
ICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAg
IGlmIChtX2RvY3VtZW50KQorICAgICAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0
T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAo
bV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsyMjUwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNG
b2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1f
ZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0
QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7
CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9
IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAgICAg
ICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChh
bmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjY1LDE2IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAg
ICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9i
YWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRo
ZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAg
ICAgICAgICAgIGlmICh0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1l
bnQodGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAg
ICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxl
bWVudCh0YXJnZXQsICptX2ZyYW1lKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE9yU2hhZG93SG9zdEVs
ZW1lbnQoKTsKICAgICAgICAgfQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1
c2VkRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1l
bnQobnVsbHB0cik7CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1f
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0
ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKIH0KIAogdm9pZCBEcmFn
Q2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29u
dGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0
JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsMTYgKzIzMDMsMTYgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50
KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRv
VmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIAotICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKCptX2ZyYW1lKTsKLSAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29udGVudFJl
bmRlcmVyKCk7CisgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1f
ZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3
KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwog
CkBAIC0yMzI1LDE0ICsyMzI4LDE0IEBAIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAo
IW1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52
aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1l
bnRWaXNpYmxlUmVjdCk7CisgICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50
LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0g
VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAgYXV0byBp
bnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7
CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0LDcgKzIz
NjcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFy
dCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkgY29uc3QK
IHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNw
b25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVudCogc3Rh
cnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQq
IHN0YXJ0ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQog
ICAgICAgICBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICgh
c3RhcnQpCkBAIC0yNDA3LDggKzI0MTAsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxT
ZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogICAg
ICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVk
LCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3Jp
Z2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBw
ZWFyYW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2
ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2ZyYW1lKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50
LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3Jv
bGxpbmdGcmFtZSgqbV9mcmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBA
IC0yNDI2LDE3ICsyNDI5LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZy
b21Ob25lKCkKICAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGly
ZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZQogICAgIC8vIGVudGlyZSBXZWJWaWV3IGlz
IGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgogCi0gICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50
LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgYm9vbCBjYXJldEJy
b3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwor
ICAgIGlmICghaXNOb25lKCkgfHwgIShtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwg
Y2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFkb2N1bWVu
dCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFkb2N1bWVudC0+
aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghbV9kb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8
IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIGJvZHkgPSBkb2N1
bWVudC0+Ym9keSgpKQorICAgIGlmIChhdXRvKiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpKQog
ICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUoYm9keSksIERPV05TVFJFQU0pKTsKIH0KIApAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdl
Q2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigp
LCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CisgICAgcmV0
dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24o
KSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBi
b29sIEZyYW1lU2VsZWN0aW9uOjpkaXNwYXRjaFNlbGVjdFN0YXJ0KCkKQEAgLTI0NjQsNyArMjQ2
Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihib29s
IHNob3VsZFNob3dCbG9ja0N1cnNvcikKIHsKICAgICBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciA9
IHNob3VsZFNob3dCbG9ja0N1cnNvcjsKIAotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOwogfQpAQCAtMjQ4OCw3ICsyNDkwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFy
YW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCkKIHsKLSAgICBpZiAoYXV0byogY2xpZW50
ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRv
clN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRS
ZWN0TmVlZHNVcGRhdGUoKTsKQEAgLTI3MjMsNyArMjcyNSw3IEBAIFJlZlB0cjxSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7
CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZG9jdW1lbnQtPmNyZWF0ZVJhbmdl
KCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxvY2F0aW9uKTsKICAgICByZXN1
bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoKTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBTRUxfREVG
QVVMVF9BRkZJTklUWSk7CkBAIC0yOTA0LDcgKzI5MDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzKQogICAgIGlmIChtX2NhcmV0Qmxpbmtz
ID09IGNhcmV0QmxpbmtzKQogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7IAorICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50
ID0gZmFsc2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZl
MzJjYWVkMTY1YTA1MDguLjVhYWY5YTA4OWIzYjE5ZGZhMDEwZWQwNzA5ZDQyZGVlYWUwYjVlYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAg
IFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKERvY3VtZW50KiA9IG51bGxw
dHIpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9y
RG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIApAQCAtMzM4LDYgKzMzOCw3IEBAIHByaXZh
dGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAorICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlm
ZjlmMzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEy
NGNmMTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2ln
bmVkCiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAg
Ym9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNo
b0VuYWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNl
dHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFi
bGVkKQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZi
Li4yNzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3
ICsxNDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5
cGluZ1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUg
JiYgIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGlu
ZyBzdHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4
IGU5MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1
MTM2OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxl
Y3Rpb24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1Nl
bGVjdGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9y
KCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
LmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9y
bU92ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChl
bmRQb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAg
ICAgICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxl
KHR5cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFk
OTM5ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQx
M2YwNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1
Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li40OTY5OTE5ZDkxYTExNDk1
YzI5OGM5MmE3NjY3MjZiOTJlMTY5NTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6
IENhbiB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3Jt
ZWQ/ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQg
YWZ0ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZy
YW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
ZGVzdGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQu
ICBUbyBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0
aG91dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUg
c2FtZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
dFNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4
ZTliYTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAt
NDAsNyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBo
YW5lZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1Nl
dCwgbV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewot
ICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAg
ICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KSkgJiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBz
ZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgz
NjZiNTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0
OThmZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAt
OTgsOCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQo
KQogICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a2VyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNw
ZWxsQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50
KQogICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNr
ZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzEx
NCw3IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50
KiBTcGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJh
bWUucGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JD
bGllbnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVj
a2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVj
a2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1l
LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdl
JiByYW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52
b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1v
dmUocmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3By
b2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBj
bGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tl
cjo6ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0x
OTksNyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vz
c2luZ1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJl
cGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFz
dFByb2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkK
ICAgICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTks
NyArMjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3RE
YXRhLmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkK
ICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAg
ICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5k
b2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5j
aGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgp
LCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5
ZmI1YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4
YTg2NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03
Niw3ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1l
Jik7CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hl
Y2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEw
Niw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAg
ICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0
Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIw
ODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcg
KzY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0
b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3Jy
ZWN0ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVu
YXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0
ZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpT
cGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCmluZGV4IDVhNmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUu
LmYzMTI4ZDdlYTU3ZDU2NzYzOTE4YTMxM2FiNzdiNjY0OWU1YjY0MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5n
Q29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5k
IGNvbW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24o
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUg
Y29tcG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAg
IGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlv
bik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9z
aXRpb25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRT
cGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCAr
MTgwLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0
ZXJHcmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9j
dW1lbnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZy
YW1lKCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsK
KyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0
aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUo
VGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5n
KTsKQEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBG
SVhNRTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9z
ZSBhIG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAg
ICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1
cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdD
b21tYW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KGRvY3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVu
dFNwZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRp
b25zLAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtl
eSwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12
b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9p
ZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rp
b24oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBv
c2l0aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRv
cigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xp
bmUodGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGlu
c2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVl
ZCB0byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0
byBGcmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9u
cywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAg
IExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAg
ICAgU3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQs
IHNlbGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlv
blBlbmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxl
Y3Rpb24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0
aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1
cmUsIHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3Vz
dG9tIHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBv
ZiB0aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkg
eworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBp
ZiAobGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvcklu
c2VydGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2Vs
ZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYs
MTIgKzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8g
Y21kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0
LCBvcHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1h
bmQoZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50
U2VsZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1l
KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
KmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9j
dW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9u
KG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlv
bnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90
aWZ5QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1
bWVudCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBp
bmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9w
ZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1
dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcs
OSArMjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwg
b3B0aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21t
YW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkK
K1JlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29t
cG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RF
ZGl0Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRD
b21tYW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFs
YXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwg
IXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09w
ZW5Gb3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYg
KzMxMCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFu
ZFVudGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxp
bmdJbml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0
aW5nQWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25J
Zk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRI
YXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGlu
Z1NlbGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00
MzYsMTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0KICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0
b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1l
LmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAm
JiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisg
ICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRp
dG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5n
QWNjZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYg
KCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxl
Y3Rpb24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2Ug
bmVlZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlw
ZSkKICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAg
IGlmIChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8
fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFu
ZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1h
bmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRl
eHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigp
Lm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCks
ICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8g
SWYgdGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNv
dWxkIGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdv
cmRTaWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQs
IHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNl
KTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYg
KzQ4NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5k
KEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAg
ICAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJl
dHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBm
cmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6
OmNyZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxB
cHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5n
Q29tbWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5m
cmFtZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9y
QWRkZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCku
YXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVk
aXRpbmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFs
c28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQg
aGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVu
dFNwZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21t
YW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNr
aW5nIGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50
IGlzc3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBh
cyBtaXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlw
ZUZvckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5k
aWYKIH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4
dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAg
ICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nl
c3NpYmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51
dGY4KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJl
cGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNl
cnRlZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlw
aW5nLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAs
OSArNTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xp
bmVzKGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlv
blR5cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJh
bGFuY2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rp
b24oKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0
VGV4dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
ZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2li
aWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZy
YW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNl
ZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
fQogCkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNl
cGFyYXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAg
cmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVw
bGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KCkKICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxv
Y2txdW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRD
b250ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIs
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCkt
PnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsK
IH0KIApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJs
ZVJvb3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc0OCwyMCArNzIyLDIwIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3Nl
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxk
IHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNs
b3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQo
KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0
aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5p
c0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmICghd2ls
bEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxl
Y3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
c2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBl
bmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0
ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JE
ZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC03NzgsMTAgKzc1Miw5IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGJvb2wgc2hvdWxkQWRkCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2lsbFJp
bmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQo
KS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0ZU1h
cmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25B
ZnRlclVuZG87CkBAIC04NTUsMTMgKzgyOCwxMyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMg
YnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRn
ZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwot
ICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5n
KGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hv
dWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJp
dHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKQEAgLTg3MSw3ICs4NDQs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxk
QWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRp
dG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7
CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRp
bmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBt
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRG
b3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5
YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlv
bnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYs
IE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1l
Kik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1
cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5G
b3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5
cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
RG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBp
bmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmlu
YWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7
CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCos
IERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBp
bmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdD
b21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBS
ZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRkYjU2MTI5MmU3OTQyNzdiZmI3
NmQ1OWUuLjkxMGRlZWY3MDg0ZDFmZGM4ZTBmOWFlMDZlOTEzYTExYzc2M2YxOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtODAsOCArODAsOCBA
QCBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0
cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKgogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFy
YW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhj
bHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICByZXR1cm4g
c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQ
cml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVN
RU5UKQpAQCAtMTA3LDEwICsxMDcsMTAgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBl
c0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogdm9p
ZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmli
dXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0
cmluZ0Zyb21TZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAK
ICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY29udGVudE9y
aWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQo
KTsKKyAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2RvY3VtZW50Lm9yaWdpbklkZW50aWZp
ZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNh
blNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0
ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5SVEZE
Rm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRG
REZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7CkBAIC0xMjUsMTAgKzEyNSwxMCBA
QCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFz
dGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJE
YXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIAogICAgIFBhc3RlYm9hcmRXcml0ZXJEYXRhOjpXZWJDb250
ZW50IHdlYkNvbnRlbnQ7Ci0gICAgd2ViQ29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5k
b2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOworICAgIHdlYkNvbnRl
bnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKTsKICAgICB3ZWJDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5
T3JEZWxldGUoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxl
Y3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3Jt
YXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9y
bWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lk
IEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRX
cml0ZXJEYXRhKQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OnNlbGVjdGlvbkluV2Vi
QXJjaGl2ZUZvcm1hdCgpCiB7Ci0gICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlRnJvbVNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5
V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAg
IGlmICghYXJjaGl2ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpKTsK
QEAgLTE3MSwxMSArMTcxLDExIEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rp
b25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAg
ICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1f
ZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBpZiAo
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50
LmZyYW1lKCksIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSW5z
ZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21l
bnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5n
KTsKICAgICAgICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVk
aXRvcjo6ZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQogLy8gT3Ig
cmVmYWN0b3Igc28gaXQgZG9lcyBub3QgZG8gdGhhdC4KIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
LCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCiB7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgY29udGV4dCwgYWxs
b3dQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZy
YW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKICAgICBwYXN0ZWJvYXJkLnJlYWQocmVh
ZGVyKTsKICAgICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5U
ZXh0OwogICAgIHJldHVybiBXVEZNb3ZlKHJlYWRlci5mcmFnbWVudCk7CkBAIC0yMzQsNyArMjM0
LDcgQEAgdm9pZCBFZGl0b3I6OnRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0cmluZ0Zyb21TZWxlY3Rpb24gPSBtX2ZyYW1l
LmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5z
ZmVyKCkpOworICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuZnJhbWUo
KS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJh
bnNmZXIoKSk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwog
ICAgIHR5cGVzLmFwcGVuZChTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKaW5kZXggNzA2ZTgyNjczZjA4
MTMzMzczNWU1ODcxMjc4YzhkNDUwZDBiNjliYy4uNmQzZDVjODBkMWFhZmQ2ODJjMjVhNWRjNzNk
OGM0ZWEwNzA5NTFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRp
dG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3Bw
CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3Rl
Ym9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJu
OwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2Fy
ZCwgbV9mcmFtZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1Bs
YWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwg
Km1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAm
JiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1
b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2
b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVi
b2FyZCkKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAgICBw
YXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCk7CiAgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFU
cmFuc2ZlcigpOwotICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJl
c29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAg
bV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVk
KCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdW
aXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29s
dmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9k
b2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVk
KCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
Tm8pOwogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQogCiBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFz
dGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQs
IGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkRGF0YShwYXN0ZWJvYXJkLCBtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4
dCwgY2hvc2VQbGFpblRleHQpOworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJv
YXJkRGF0YShwYXN0ZWJvYXJkLCAqbV9kb2N1bWVuLmZyYW1lKCksIGNvbnRleHQsIGFsbG93UGxh
aW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBmMmEyZDUyYWM1YWJmNGU0
ZjEzMTEzY2EyNWQxYjIwYTE3MzhmYTY5Li4xYmZjYTU5MTNkNjQ2NDFjMDgyZmVmNzY1YWJhMTll
OTA5MGFkMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VX
cml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgLy8gSWYgdGhlIHRleHQg
aGFzIGxlZnQgb3IgcmlnaHQgYWxpZ25tZW50LCBmbGlwIGxlZnQtPnJpZ2h0IGFuZCByaWdodC0+
bGVmdC4gCiAgICAgLy8gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLgogCi0gICAgYXV0byBzZWxlY3Rp
b25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5
bGUoKSkKICAgICAgICAgIHJldHVybjsKIApAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCBFZGl0
b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGlu
Z0RpcmVjdGlvbiBkaXIKICAgICBpZiAoIW5ld1ZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVs
ZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNl
ZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhUTUxUZXh0QXJlYUVs
ZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2Vk
RWxlbWVudCkKICAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2Vk
RWxlbWVudCkuaXNUZXh0RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKICAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsaWduQXR0ciwgbmV3VmFsdWUpOwot
ICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAg
ICAgbV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5jaGFuZ2VhYmxl
U3R5bGVzKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgc3R5bGVzIHRoYXQgdGhl
IHVzZXIgY2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KICAg
ICAKLSAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0KCkpOwogICAgIGF1
dG8gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHlsZSgpLT5tdXRhYmxlQ29weSgpOwog
ICAgIAogICAgIC8vIFRleHQgd2lkZ2V0cyBpbXBsZW1lbnQgYmFja2dyb3VuZCBjb2xvciB2aWEg
dGhlIFVJVmlldyBwcm9wZXJ0eS4gVGhlaXIgYm9keSBlbGVtZW50IHdpbGwgbm90IGhhdmUgb25l
LgpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIHsKICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGJvb2wgYWxsb3dQbGFpblRl
eHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCk7Ci0gICAg
V2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7
CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdl
LCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zID0gY2xp
ZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVn
YXRlKGkpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIAogdm9p
ZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYm
IGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZGljdGF0aW9uUGhyYXNlcy5pc0VtcHR5KCkp
CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQKICAgICAvLyBTb21l
IGRheSB3ZSBjb3VsZCBtYWtlIHRoZW0gVW5kb2FibGUsIGFuZCBsZXQgY2FsbGVycyBjbGVhciB0
aGUgVW5kbyBzdGFjayBleHBsaWNpdGx5IGlmIHRoZXkgd2lzaC4KICAgICBjbGVhclVuZG9SZWRv
T3BlcmF0aW9ucygpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhcigpOworICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRy
ZW4oKTsKIApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9m
RWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAKICAgICAvLyBB
cyBhIHNpZGUgZWZmZWN0IHRoaXMgZnVuY3Rpb24gc2V0cyBhIGNhcmV0IHNlbGVjdGlvbiBhZnRl
ciB0aGUgaW5zZXJ0ZWQgY29udGVudC4gTXVjaCBvZiB3aGF0CiAgICAgLy8gZm9sbG93cyBpcyBt
b3JlIGV4cGVuc2l2ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgc28gY2xlYXIgaXQgc2luY2Ug
aXQncyBnb2luZyB0byBjaGFuZ2UgYW55d2F5LgotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xl
YXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICAvLyBjbGVh
ciBvdXQgYWxsIGN1cnJlbnQgY2hpbGRyZW4gb2YgZWxlbWVudAogICAgIGVsZW1lbnQucmVtb3Zl
Q2hpbGRyZW4oKTsKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hp
bGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogICAgIHNl
bGVjdGlvbi5zZXRCYXNlKHZpc2libGVQb3MpOwogICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQodmlz
aWJsZVBvcyk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rp
b24pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7
CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CiB9CkBAIC0zODks
NyArMzg5LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0
cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIC8vIGhhdmUgYSBzdGFsZSBzZWxlY3Rpb24u
CiB2b2lkIEVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklm
T3BlbkZvck1vcmVUeXBpbmcoKQogewotICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCZtX2ZyYW1lLCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBUeXBpbmdDb21tYW5kOjplbnN1
cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyht
X2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CmluZGV4IDI5MTgyNDY1ZDhjZjI5MzljYjIxNjAyNDlmZWEyYWUxMWVhMTdjN2MuLjk4NDFjOTRm
YWEyMTNmZDA4MmU1ODEyMGUxYTJiNzRmYTM4Njk5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9FZGl0b3JNYWMubW0KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRp
b24+CiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3Rl
Ym9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0IH0pOwogICAg
IGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQp
OwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3Rl
Ym9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBB
U1NFUlQobm9kZSk7CiAKLSAgICBpZiAoJm5vZGUtPmRvY3VtZW50KCkgIT0gbV9mcmFtZS5kb2N1
bWVudCgpKQorICAgIGlmIChub2RlLT5kb2N1bWVudCgpICE9IG1fZG9jdW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOworICAgIFJlZjxE
b2N1bWVudD4gcHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlv
bklzQmVmb3JlQW5jaG9yKSwgUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRl
ckFuY2hvcikpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7Cisg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihy
YW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAogICAgIFBhc3Rl
Ym9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgIGlm
ICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpKSB7CiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJv
YXJkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMg
dm9pZCBnZXRJbWFnZShFbGVtZW50JiBpbWFnZUVsZW1lbnQsIFJlZlB0cjxJbWFnZT4mIGltYWdl
LCBDYWNoZWRJbWFnZSomCiAKIHZvaWQgRWRpdG9yOjpzZWxlY3Rpb25XaWxsQ2hhbmdlKCkKIHsK
LSAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIHx8
IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFoYXNDb21wb3NpdGlvbigp
IHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYW5jZWxDb21wb3NpdGlvbigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggMDk2NGNjYjRmYmQ3YWMz
NmIxOGYzNDE2ZjQyMGEyN2RiZTk2OTE3OC4uOWM0ZmYwOGJjYTY0M2UxMzMzZjk2ODY1N2JkMGNi
MDEzY2YxOGU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9y
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCkBA
IC00Miw3ICs0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwog
CiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KG1fZnJhbWUsICpyYW5nZSwg
b3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWlu
VGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2Fy
ZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVuLmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5j
b250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAK
ICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90
YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpAQCAt
NjksOSArNjksOSBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbVBsYXRmb3JtRGF0YShQbGF0Zm9ybURyYWdEYXRhJgogUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQsIFJhbmdlJiwgYm9vbCAvKmFsbG93UGxhaW5UZXh0Ki8sIGJvb2wmIC8qY2hvc2VQbGFp
blRleHQqLykKIHsKICAgICBpZiAoQ09NUHRyPElEYXRhT2JqZWN0PiBwbGF0Zm9ybURyYWdEYXRh
ID0gcGFzdGVib2FyZC5kYXRhT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVu
dEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEsIG1fZnJhbWUpOworICAgICAgICBy
ZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURyYWdEYXRhLCAq
bV9kb2N1bWVuLmZyYW1lKCkpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRm
b3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRhTWFwKCksIG1fZnJhbWUpOworICAgIHJldHVybiBj
cmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0YU1hcCgpLCAq
bV9kb2N1bWVuLmZyYW1lKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBjNzE2ZDcyODBmNDYyY2I1NjczNzU3YjRi
YTRlM2IyNGFiZWU4ZGUwLi5hMjY3MzQ1YmU1NDZlZTdmNDYxMTlkODMyYzhkZTE5MTZhOGFlY2Nk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTU0MSwxMSArNTQxLDE0
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogdm9pZCBGcmFtZUxvYWRlcjo6d2lsbFRyYW5z
aXRpb25Ub0NvbW1pdHRlZCgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl
biBhIGZyYW1lIGlzIHN0aWxsIGZ1bGx5IGluIHBsYWNlIChub3QgY2FjaGVkLCBub3QgZGV0YWNo
ZWQpLCBidXQgd2lsbCBiZSByZXBsYWNlZC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgeworICAgIGlmIChkb2N1
bWVudC0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAvLyBUaGUgdGV4dCB3
YXMgYWxyZWFkeSBwcmVzZW50IGluIERPTSwgc28gaXQncyBiZXR0ZXIgdG8gY29uZmlybSB0aGFu
IHRvIGNhbmNlbCB0aGUgY29tcG9zaXRpb24uCi0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkuY29u
ZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVu
dCA9IG1fZnJhbWUuZWRpdG9yKCkuY2xpZW50KCkpIHsKKyAgICAgICAgZG9jdW1lbnQtPmVkaXRv
cigpLmNvbmZpcm1Db21wb3NpdGlvbigpOworICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0
b3JDbGllbnQgPSBkb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpIHsKICAgICAgICAgICAgIGVk
aXRvckNsaWVudC0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CiAgICAgICAg
ICAgICBlZGl0b3JDbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1lKTsKICAgICAg
ICAgfQpAQCAtNTY3LDggKzU3MCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsb3NlVVJMKCkKICAg
ICB9CiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGljeSk7Ci0gICAgCi0gICAgbV9m
cmFtZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogfQogCiBib29sIEZyYW1l
TG9hZGVyOjpkaWRPcGVuVVJMKCkKQEAgLTU4MCw3ICs1ODEsNiBAQCBib29sIEZyYW1lTG9hZGVy
OjpkaWRPcGVuVVJMKCkKICAgICB9CiAKICAgICBtX2ZyYW1lLm5hdmlnYXRpb25TY2hlZHVsZXIo
KS5jYW5jZWwoKTsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7
CiAKICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3Nl
ID0gZmFsc2U7CkBAIC02NDMsOCArNjQzLDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZENs
ZWFyV2luZG93TmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IERvY3VtZW50JiBuZXcKIAog
dm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFy
V2luZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvb2wgY2xlYXJGcmFt
ZVZpZXcsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZURPTVdpbmRvd0NyZWF0aW9uKQog
ewotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXIoKTsKLQogICAgIGJvb2wgbmVlZGVkQ2xlYXIg
PSBtX25lZWRzQ2xlYXI7CiAgICAgbV9uZWVkc0NsZWFyID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKaW5kZXggMzg1ZTM3YTZkMGM5MGU2MzNhM2I3YjQyODcyYzYxNmUzODA4NjQyNi4uMjkw
N2I0ODViOTRjNjZhYzUwNjg1Yzk5ZGMxNWRkNWVlZWZmY2QwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAgICwgbV9u
YXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxlcj4oKnRo
aXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9zY3JpcHQo
bWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2VkaXRvciht
YWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rpb24obWFrZVVuaXF1
ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIo
bWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigqdGhpcykpCiAgICAgLCBtX3Bh
Z2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV90ZXh0Wm9v
bUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTU1NCw3ICs1NTIsNyBAQCBi
b29sIEZyYW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2UgRE9NUGFzdGVBY2Nl
c3NQb2xpY3k6OkRlbmllZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRE9NUGFz
dGVBY2Nlc3NQb2xpY3k6Ok5vdFJlcXVlc3RlZFlldDogewotICAgICAgICBhdXRvKiBjbGllbnQg
PSBtX2VkaXRvci0+Y2xpZW50KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9IGVkaXRvcigpLmNs
aWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtOTM3LDcgKzkzNSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3Rv
cnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYgKCFk
b2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRpc21pc3NDb3JyZWN0
aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVs
QXNJZ25vcmVkKCk7CiAKICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJsZWQi
IHByb3BlcnR5IGluIHN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTogSG93
IHRvIGhhbmRsZSBjb21wb3VuZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/IE5l
ZWRzIFNWRyBXRyBjbGFyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDNkNDNhOTRiZWE5
NTU2Yzk4ZGM3NDIzYWI3ZWFkOWE5MmE1MmM2ZmUuLjA5MzJhODNjYjY3NGY2ZjhjOTYxMWVkOWY2
OTk5ZDE3YjYyZDE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIkFic3RyYWN0RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgpAQCAtMTYz
LDE0ICsxNjQsMTQgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0Owog
ICAgIEZyYW1lVmlldyogdmlldygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJl
dHVybiBtX2VkaXRvcjsgfQotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9lZGl0b3I7IH0KKyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRvY3VtZW50KCkt
PmVkaXRvcigpOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBk
b2N1bWVudCgpLT5lZGl0b3IoKTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkg
eyByZXR1cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhhbmRsZXImIGV2ZW50
SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgRnJhbWVMb2Fk
ZXImIGxvYWRlcigpIGNvbnN0OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXImIG5hdmlnYXRpb25T
Y2hlZHVsZXIoKSBjb25zdDsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1
cm4gbV9zZWxlY3Rpb247IH0KLSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAgICBjb25zdCBGcmFt
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0
aW9uKCk7IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBDU1NBbmltYXRpb25D
b250cm9sbGVyJiBhbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0K
ICAgICBjb25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzksNiBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29u
dHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7Ci0gICAg
VW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBVbmlxdWVSZWY8Q1NT
QW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5BQkxF
KERBVEFfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXgg
ZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZS4uM2VlZTQyZmYwY2QxZTcz
Y2YwMWIyOTVlOThkMjg1NGU5YmI3Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0
b3IuY3BwCkBAIC02OCwyMSArNjgsMTYgQEAgUmVmPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0
b3I6OmNyZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKIAogUmVmUHRyPFRleHRJ
bmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFu
Z2UsIFRleHRJbmRpY2F0b3JPcHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCiB7
Ci0gICAgRnJhbWUqIGZyYW1lID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZy
YW1lKCk7CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKTsKIAotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQotICAgIFZpc2libGVTZWxl
Y3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IHRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQo
VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKTsKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJh
bmNlVXBkYXRlcyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0
aW9uQ2hhbmdlKCpmcmFtZSwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNo
YW5nZShkb2N1bWVudCwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOwogCkBAIC05MSw3ICs4
Niw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFu
Z2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAKICAgICBib29sIGluZGljYXRlc0N1cnJl
bnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRh
LCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQorICAg
IGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZG9jdW1lbnQtPmZyYW1lKCksIHJhbmdl
LCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397166</attachid>
            <date>2020-04-21 21:44:19 -0700</date>
            <delta_ts>2020-04-22 00:52:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200421214418.patch</filename>
            <type>text/plain</type>
            <size>210863</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2
ZDA2MTE2ZWQ2Zjg5ZmFiOTBhM2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0
ZmQwMGUxNWI4OGQ3MjJlOTVhOTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4
NmExYjFlMWY1NDIxYmRiNzg2YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRU
aW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
IGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZvbnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFz
cyBGcmFtZTsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
RnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsx
NTc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21D
b250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVk
aXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBj
b25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFj
ZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5z
aWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3Mg
PSAwKTsKQEAgLTIxMTYsNiArMjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmll
ZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2Iz
YWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdk
MDBiYmYxMjBjMDM3OWVmMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJv
b2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAo
Y3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNz
cGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAt
MjIwLDEyICsyMjAsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50
Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0y
MzYsMTIgKzIzNiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2Vs
ZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAs
IHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJh
Z3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7
CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0
LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdn
ZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAo
IXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcg
PSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIg
bW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywg
d2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29y
cmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8g
dW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVs
IHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYg
KGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3Jp
Z2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29t
bWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRp
dG9yQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdl
KCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdl
KCkgPyAmbV9kb2N1bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAog
VGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChl
bmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OwogICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Up
OwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00
NzksMTIgKzQ3OSwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VyQ29udHJvbGxlciA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250
cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxh
Y2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUCiAKICAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICgh
c2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBl
bmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NTgsNyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAog
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5h
dGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUu
cGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgp
LT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0
aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5
NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9
IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
dHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRl
ZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldElu
UGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAg
Ym9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAg
ICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAg
dGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9j
dW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0g
VGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwpAQCAtNjUzLDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1
dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZi
MjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3
OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3Mg
RWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9
KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19F
TkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZl
VGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVT
U19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3
ZDFiOTY1MjQ2NDIwZDExODI2NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwx
NyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRo
ZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFz
IGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhp
cyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQg
dGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3Io
KS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFw
cGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAg
ICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51
bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246
OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndp
bGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsK
IAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigp
LndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0
byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
IC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhl
cmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
LCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBk
ZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgp
KTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
KyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVu
ZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1w
dHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBo
IHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBh
cmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUz
YzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4
NzJhY2I4OGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5n
IHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBw
cmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQw
LDcgKzc0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVS
ZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQu
cHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2ls
bCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgp
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0
VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAg
aWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBm
cmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIg
bWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxh
Y2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICgh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAg
ICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyAr
OTU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUy
Y2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUy
YjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9u
KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5k
OjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJu
ICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0
aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4
LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5k
Ojppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
OwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3
ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRl
eCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJj
OGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9u
KTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1h
bmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAg
IEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAg
IEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJl
ZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJj
Y2QwNTk1MzU1NWFhMjJiMjZmZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTg2OSw3ICs4NjksNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkK
IAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRv
cigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQz
MTZhNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAg
ICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpk
b2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJm
NjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLmUyYzI5ZmNjNmU3ZTc0MzE0YmUzOTkxZDBkZmNk
N2Y5MTdmMjUxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMs
OCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1
YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHko
Y29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0
aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBF
ZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29t
cG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1l
bnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJl
ZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRv
IGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkp
OwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
ICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lk
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJh
bWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxl
Y3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9u
PiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFt
ZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkp
CisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9w
dGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMp
Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9u
VG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2Vs
ZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAg
ICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxT
ZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNl
bGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNl
bGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBk
YXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBk
YXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNl
bmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAg
ICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05v
dFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwg
b3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQg
dGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNl
IHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlv
bi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAg
Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVu
dCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNr
IHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9y
IEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3Io
bV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgp
KTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAog
ZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRp
YyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBD
bGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQo
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9y
ZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBj
b25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBh
c3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRl
KCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0
b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0Fj
dGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1
bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxl
dGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJp
dHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wg
c21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFj
dGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4
dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRS
ZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODks
MTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9M
b2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgp
KTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAg
ICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRl
eHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRC
eVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKQEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
b3B5KCkKIHsgICAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBF
ZGl0b3I6OnRyeURIVE1MQ29weSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNw
YXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJv
YXJkRXZlbnRLaW5kOjpDdXQpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewot
ICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElu
cHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkK
KyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRT
dXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAg
LTc4MiwxNyArNzgyLDE3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBp
ZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxMiwxMiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0
aW9uKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFn
KTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSwgdWxUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2Rl
ID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAg
LTgyNywxMiArODI3LDEyIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlz
dFN0YXRlKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIG9sVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04NzIsNyArODcyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlz
dCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7
Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4g
bmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBA
IFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkKIAogdm9pZCBFZGl0b3I6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRU
YXJnZXRGcm9tKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBm
aW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
fQogCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0
aW5nU3R5bGVBbmRBY3Rpb24oKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFt
ZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNs
aWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRj
aElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0K
QEAgLTk4NCwxMyArOTg1LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5w
dXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlu
cHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZv
cmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0
IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNv
bHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0
cigpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5n
QWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rp
b25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNT
dHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+
dHJpU3RhdGVPZlN0eWxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZT
dHlsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAogICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZj
b21tYW5kKTsKIAogICAgICAgICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAg
ICAgICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkg
aW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQo
KSA9PSAmY29tbWFuZCkKQEAgLTEyMDAsMTEgKzEyMDEsMTEgQEAgdm9pZCBFZGl0b3I6OnJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9y
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1
bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9raWxs
UmluZyhtYWtlVW5pcXVlPFBBTDo6S2lsbFJpbmc+KCkpCi0gICAgLCBtX3NwZWxsQ2hlY2tlciht
YWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4oZnJhbWUpKQotICAgICwgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZnJhbWUpKQor
ICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+KGRvY3VtZW50KSkK
KyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI+KGRvY3VtZW50KSkKICAgICAsIG1fZWRpdG9yVUlVcGRhdGVUaW1lcigq
dGhpcywgJkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKQogI2lmIEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLCBt
X3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycykKQEAgLTEyMjAsNyArMTIyMSw3IEBAIHZvaWQg
RWRpdG9yOjpjbGVhcigpCiAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CiAgICAgICAgIG1f
Y29tcG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKEVkaXRvckNsaWVudCogY2xp
ZW50ID0gdGhpcy0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBv
c2l0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRp
b24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICB9CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVu
ZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVh
cigpOwpAQCAtMTIzOCwxMiArMTIzOSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29s
IEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQsIFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2
ZW50LCBpbnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRU
eXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlv
bihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVy
KCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlv
bik7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxl
VGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAK
IGJvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2
ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAzLDEwICsxMzA0LDggQEAgYm9vbCBFZGl0b3I6
Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRp
b25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3Vz
ZWQgZnJhbWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJl
dmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGF1dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdl
KCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMTksMTAgKzEzMTgsMTAgQEAg
Ym9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBj
YXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRh
YmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25J
c0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29t
bWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTEzMzksMTAgKzEz
MzgsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYg
KCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKIAot
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDYsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI1LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzQsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1NCw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzksNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNyw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUxLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODIsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNyw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUyLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4NCw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0yMDAwLDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNSw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMywxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODIsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDksNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjMsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChz
ZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTM5LDcg
KzIxMzgsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8v
IEZJWE1FOiBPbiBNYWMgT1MgWCwgd2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5n
IGFuZCBHcmFtbWFyIiBwYW5lbCwgd2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91
bGQgcmVtb3ZlIG1pc3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVk
UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpOwogCkBAIC0yMTUyLDE0ICsyMTUxLDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNw
ZWxsaW5nKCkKIAogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1l
KTsKLQorICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7Cisg
ICAgCiAgICAgLy8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2Vz
IC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAg
IC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94
aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5k
IG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcg
YXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxp
bmciIGNvbW1hbmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBz
cGVsbGluZ1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAg
Ym9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsyMzA3LDggQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNv
bmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBo
CiAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpn
cmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwu
cmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1t
YXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0
aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMyMCw4
ICsyMzE5LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSBy
ZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFu
Z2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVs
bGluZ09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5n
ZSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAg
IGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRX
b3JkKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5n
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIzMzQsNyBAQCBT
dHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWRO
b2RlKSBjb25zdAogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8
fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM4OCw3IEBAIFN0cmlu
ZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcp
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xp
ZW50KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0MDMsNyBAQCBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwg
U3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1
ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyArMjQxMSw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9v
CiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAg
aWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5n
U3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7
CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdy
YW51bGFyaXR5KTsKQEAgLTI0NzIsNyArMjQ3MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3Rp
CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQo
bV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5NCwxOSArMjU5MywxOSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
d29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJl
cGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29y
cmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdT
ZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFu
Z2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9j
dW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNz
cGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJl
cGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRv
cigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RS
ZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAK
ICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAg
ICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51
bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
Rm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc4LDcgKzI2NzcsNyBAQCBib29sIEVkaXRvcjo6
aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJl
dHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNr
aW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCku
ZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKQpAQCAtMjcyNiw3ICsyNzI1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5
cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7Cisg
ICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAog
ICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFn
cmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVz
b2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9u
cyk7CkBAIC0yNzQxLDcgKzI3NDAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0K
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNv
bHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwor
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNr
LnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25O
dWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg3LDcgKzI3ODYsNyBAQCBzdGF0aWMgdm9pZCBj
b3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENo
ZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxD
aGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiBy
ZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8
RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0
Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRl
eHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJl
cXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKQEAgLTI4MTEsOSArMjgxMCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAg
Ym9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAg
ICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBz
aG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0
U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikg
ewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3
ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAg
ICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3Jh
cGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAg
ICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0
KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBu
ZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTUsMTMgKzI4OTQsMTMgQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBW
ZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVj
dGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0
b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2Fu
RWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3ICsyOTA5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8
VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsg
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hl
LT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25P
Y2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5NDAsMTMgKzI5MzksMTMgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFu
Z2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAm
JiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewog
ICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJh
bmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwor
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVj
dGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25G
b3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sg
aXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRv
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zMDIzLDggKzMwMjIsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vy
c0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQog
ICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90
ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMg
b2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0
aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUg
c3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5NiwxMSArMzA5NSw3IEBAIHZvaWQgRWRpdG9yOjpk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwg
Y29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IElu
dFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAg
ICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXco
KTsKICAgICBpZiAoIWZyYW1lVmlldykKQEAgLTMxMTcsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1Miw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzUsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjAwLDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NSw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjUsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODIsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk2LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwNCw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzE0LDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMiw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMzAsNyArMzMyNSw3IEBAIFJlZlB0
cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihj
b25zdCBJbnRTaXplJiBzaXplCiAgICAgcmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29w
eVJlZigpKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25C
ZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xk
ZXIucHRyKCkpIH07Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRy
aWdnZXJlZCkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJU
cmlnZ2VyZWQpKTsKIAogICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNTAsOCArMzM0
NSw4IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVy
RWxlbWVudCYgcGxhY2Vob2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAv
LyBUbyBtYXRjaCB0aGUgTGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0
IGluc2VydGlvbiBwb2ludCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0
byBiZS4KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAm
JiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQp
Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZ
IH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dl
cmVkKSk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZl
KCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVt
ZW50KQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9B
RkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNl
clRyaWdnZXJlZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRo
KEludFJlY3QmIHJlY3QpCkBAIC0zNDAzLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmly
c3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGll
bnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFm
ZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CkBAIC0zNDEyLDE3ICszNDA3LDE3IEBAIGJvb2wgRWRp
dG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uLCBjb25zdCBWCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVk
aXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBpZiAo
c3R5bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5
bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgY3Vy
cmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGU7
Ci0gICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkKKyAgICBpZiAoYXV0byBleGlzdGluZ1R5cGluZ1N0eWxlID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQogICAgICAgICB0eXBpbmdTdHlsZSA9IGV4
aXN0aW5nVHlwaW5nU3R5bGUtPmNvcHkoKTsKICAgICBlbHNlCiAgICAgICAgIHR5cGluZ1N0eWxl
ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKLSAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBp
bmdTdHlsZUF0KHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOworICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGlu
Z1N0eWxlQXQoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICAvLyBIYW5kbGUgYmxvY2sgc3R5bGVz
LCBzdWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxF
ZGl0aW5nU3R5bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHlsZS0+ZXh0cmFjdEFuZFJlbW92ZUJs
b2NrUHJvcGVydGllcygpOwpAQCAtMzQzMCw3ICszNDI1LDcgQEAgdm9pZCBFZGl0b3I6OmNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICAgICAgQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBibG9j
a1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKIAogICAgIC8vIFNldCB0aGUg
cmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CisgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CiB9CiAK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC0zNDg5LDE5ICszNDg0LDE5
IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAog
CiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlv
bnMgb3B0aW9ucykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAg
UmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAotICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0
cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwogCiAg
ICAgaWYgKCFyZXN1bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2Us
IERPV05TVFJFQU0pKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVBTSkpOwogCiAgICAgaWYgKCEo
b3B0aW9ucy5jb250YWlucyhEb05vdFJldmVhbFNlbGVjdGlvbikpKQotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNTk4
LDcgKzM1OTMsNyBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogICAgIGlmIChyYW5nZSkgewog
ICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0gJmRvY3VtZW50KCkpCiAgICAg
ICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOwotICAgICAgICBlbHNlIGlmICghaXNGcmFtZUlu
UmFuZ2UobV9mcmFtZSwgKnJhbmdlKSkKKyAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdl
KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKQEAgLTM2NjgsNyArMzY2Myw3IEBAIHZvaWQgRWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBP
cHRpb25TZXQ8RnJhbWVTCiAjZW5kaWYKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOworICAgICAgICBjbGll
bnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogCiAj
aWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpKQpAQCAtMzY5MSw4
ICszNjg2LDYgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMKIAogYm9vbCBFZGl0b3I6OnNob3Vs
ZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKQogewotICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuaXNUZWxlcGhv
bmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1
cHBvcnRlZCgpOwogfQogCkBAIC0zNzA1LDkgKzM2OTgsOSBAQCB2b2lkIEVkaXRvcjo6c2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogCiAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+
IG1hcmtlZFJhbmdlczsKIAotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWZyYW1lU2VsZWN0aW9uLmlzUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBp
ZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hh
bmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyOSw3ICszNzIyLDcgQEAgdm9p
ZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBSZWZQdHI8
UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2Vs
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNzQyLDcgKzM3MzUsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKQogICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJh
bmdlcy5hcHBlbmQocmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFt
ZS5wYWdlKCkpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAg
ICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVt
YmVyUmFuZ2VzQ2hhbmdlZCgpOwogfQogCkBAIC0zODAxLDkgKzM3OTQsOSBAQCB2b2lkIEVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGphY2VudFdv
cmRzOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGVkU2VudGVuY2U7Ci0gICAg
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOwotICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKLSAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXdTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpKTsKKyAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0
aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24o
c3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5l
d1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICNlbHNlCkBAIC0zODU2LDcgKzM4NDks
NyBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoIW1f
ZWRpdG9yVUlVcGRhdGVUaW1lcldhc1RyaWdnZXJlZEJ5RGljdGF0aW9uKQogICAgICAgICBtX2Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKIAotICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlV
cGRhdGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAjaWYgRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBub3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRhdGVz
KCk7CkBAIC0zODgzLDcgKzM4NzYsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUo
Tm9kZSogbm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3Ro
KSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9k
ZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMzk1MCwxMCArMzk0MywxMCBAQCBPcHRpb25TZXQ8VGV4dENo
ZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9k
ZSYgcm9vdAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJh
bmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCitzdGF0aWMgUmVm
UHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQp
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gc2VsZWN0
aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkg
OiBkb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiBzdGF0aWMg
Ym9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKQEAgLTM5NjcsOCArMzk2MCw4IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxk
UmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNh
bmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOworICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRl
UmFuZ2VGb3JTZWxlY3Rpb24obV9kb2N1bWVudCk7CiAgICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5
VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsKIApA
QCAtMzk3Nyw3ICszOTcwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVx
dWVzdCgpIGNvbnN0CiAgICAgCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7
CiB9CiAKQEAgLTQwNDQsNyArNDAzNyw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0
dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBGb250QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAgYXV0byog
c3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOwor
ICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1l
KCksIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBpZiAobm9kZVRv
UmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKQEAgLTQwODUsNyAr
NDA3OCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXR0cmlidXRlcy50
ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlciht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF0dHJpYnV0ZXMu
dGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIAogICAgIHN3aXRj
aCAoc3R5bGUtPnRleHRBbGlnbigpKSB7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoK
QEAgLTQxMTEsNyArNDEwNCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0
ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
YXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdT
dHlsZSgpKTsKKyAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpOwogICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdT
dHlsZS0+c3R5bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpA
QCAtNDE5OSwxMiArNDE5Miw4IEBAIHZvaWQgRWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFjaG1l
bnRVcGRhdGVzKCkKICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiByZW1vdmVkQXR0YWNobWVu
dElkZW50aWZpZXJzKQogICAgICAgICBjbGllbnQoKS0+ZGlkUmVtb3ZlQXR0YWNobWVudFdpdGhJ
ZGVudGlmaWVyKGlkZW50aWZpZXIpOwogCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9y
IChhdXRvJiBpZGVudGlmaWVyIDogaW5zZXJ0ZWRBdHRhY2htZW50SWRlbnRpZmllcnMpIHsKLSAg
ICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IGRvY3VtZW50LT5hdHRhY2htZW50Rm9ySWRlbnRp
ZmllcihpZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IG1fZG9jdW1l
bnQuYXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCiAgICAgICAgICAgICBjbGll
bnQoKS0+ZGlkSW5zZXJ0QXR0YWNobWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXIsIGF0dGFj
aG1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRy
KSwgYXR0YWNobWVudC0+aGFzRW5jbG9zaW5nSW1hZ2UoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDIyNyw3ICs0MjE2LDcgQEAgdm9pZCBF
ZGl0b3I6Omluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBPcHRpb25h
bDx1aW50NjRfdD4mJiBmaWwKIAogdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKLSAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSA9IHRydWU7CiAKQEAgLTQyNDYsNyArNDIzNSw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKIGJv
b2wgRWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgmbV9mcmFtZSk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9kb2N1bWVudC5mcmFtZSgp
KTsKIH0KIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JN
YXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKQEAgLTQyNjIsMTMgKzQyNTEsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2ZWx0ZXJuYXRpdmUoY29uc3Qg
U3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZwogdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1v
ZGVFbmFibGVkKCkKIHsKICAgICBtX292ZXJ3cml0ZU1vZGVFbmFibGVkID0gIW1fb3ZlcndyaXRl
TW9kZUVuYWJsZWQ7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tD
dXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7Ci19Ci0KLURvY3VtZW50JiBFZGl0b3I6OmRv
Y3VtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9mcmFtZS5kb2N1bWVudCgpKTsKLSAgICBy
ZXR1cm4gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFNob3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAogUmVm
UHRyPFJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQpAQCAtNDMyMSw5ICs0
MzA0LDkgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCi0g
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmICghbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3Zl
OwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUs
IG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1lKCksIG5vZGVUb1JlbW92
ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogZm9udCA9IG51
bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkgewpAQCAtNDMzNSwxMSArNDMxOCwxMSBAQCBjb25z
dCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9k
ZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24o
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBO
b2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDM3MSw3
ICs0MzU0LDcgQEAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0RWRpdGFi
bGVJbWFnZSgpCiAKIGJvb2wgRWRpdG9yOjpjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9uZUltYWdl
cygpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXgg
YWQ5ZWRhMjYxOGM5YTg4MGJlY2JiMWNlNGQ2OGJiNTliODljMjBjMC4uZmZhNzdkMGU1NDhlN2Nl
NzdkY2Q0N2JiMGU2MWMxMGE4NDc3ZjAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiRWRpdG9y
SW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFdy
aXRlckRhdGEuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKQEAgLTExOSwxMyArMTIwLDEz
IEBAIGVudW0gY2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uIDogdWludDhfdCB7CiAKIGNs
YXNzIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVj
dGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9j
dW1lbnQmLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JU
IH5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJh
bWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIE9wdGlvblNldDxUZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb24+IG1fb3B0aW9uczsKICAgICBib29sIG1fd2FzSWdub3JpbmdT
ZWxlY3Rpb25DaGFuZ2VzOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzcsNyArMTM4
LDcgQEAgcHJpdmF0ZToKIGNsYXNzIElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlIHsKIHB1
YmxpYzoKICAgICBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZShGcmFtZSYgZnJhbWUpCi0g
ICAgICAgIDogbV9zZWxlY3Rpb25DaGFuZ2UoZnJhbWUsIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQorICAgICAgICA6IG1fc2Vs
ZWN0aW9uQ2hhbmdlKCpmcmFtZS5kb2N1bWVudCgpLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKICAgICB7CiAgICAgfQogCkBA
IC0xNTAsNyArMTUxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEVkaXRvciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRWRpdG9yKEZyYW1lJik7Cisg
ICAgZXhwbGljaXQgRWRpdG9yKERvY3VtZW50Jik7CiAgICAgfkVkaXRvcigpOwogCiAgICAgZW51
bSBjbGFzcyBQYXN0ZU9wdGlvbiA6IHVpbnQ4X3QgewpAQCAtMjcxLDcgKzI3Miw3IEBAIHB1Ymxp
YzoKICAgICBjbGFzcyBDb21tYW5kIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQ
T1JUIENvbW1hbmQoKTsKLSAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1h
bmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBGcmFtZSYpOworICAgICAgICBDb21tYW5kKGNvbnN0
IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIERvY3VtZW50Jik7
CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyID0gU3RyaW5nKCksIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQgPSBudWxscHRyKSBjb25z
dDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQpIGNvbnN0OwpAQCAtMjg4LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgog
ICAgICAgICBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIG1fY29tbWFuZCB7IG51bGxwdHIg
fTsKICAgICAgICAgRWRpdG9yQ29tbWFuZFNvdXJjZSBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRy
PERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAg
ICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kIGNvbW1hbmQoY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSk7IC8vIENvbW1hbmQgc291cmNlIGlzIENvbW1hbmRGcm9tTWVudU9yS2V5Qmlu
ZGluZy4KQEAgLTU2Nyw3ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYpOwogCiBwcml2
YXRlOgotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0OworICAgIERvY3VtZW50JiBkb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAogICAgIGJvb2wgY2FuRGVsZXRl
UmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQmKTsKQEAgLTYxOCw3ICs2MjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3Vt
ZW50JiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbV9sYXN0
RWRpdENvbW1hbmQ7CiAgICAgUmVmUHRyPFRleHQ+IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIHVu
c2lnbmVkIG1fY29tcG9zaXRpb25TdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2RjM2I5MGZiNmMwNDcxZmFhMTBmYjhjNDQu
LmJkNTE4MGViNDAwZWE3OTIxNTFiNmY3OThiNjBlY2I4Y2ZmZGFlYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTEwOSw2ICsxMTA5LDcgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlIHNvdXJjZSwKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVN3YXBXaXRoTWFyayhGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
KyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rpb24oZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAg
UmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCk7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC0xODM2LDEy
ICsxODM3LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGludGVybmFs
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogCiBFZGl0b3I6OkNvbW1hbmQgRWRp
dG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiB7Ci0gICAgcmV0dXJuIENv
bW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29t
bWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZG9jdW1lbnQpOwogfQog
CiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewotICAgIHJldHVybiBDb21tYW5kKGlu
dGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9mcmFtZSk7CisgICAgcmV0dXJu
IENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgc291cmNlLCBtX2RvY3VtZW50
KTsKIH0KIAogYm9vbCBFZGl0b3I6OmNvbW1hbmRJc1N1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5k
aW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCkBAIC0xODUzLDEyICsxODU0LDEzIEBAIEVk
aXRvcjo6Q29tbWFuZDo6Q29tbWFuZCgpCiB7CiB9CiAKLUVkaXRvcjo6Q29tbWFuZDo6Q29tbWFu
ZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1hbmQsIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBGcmFtZSYgZnJhbWUpCitFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3Qg
RWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJj
ZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jb21tYW5kKGNvbW1hbmQpCiAgICAgLCBt
X3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyAmZnJhbWUgOiBudWxscHRy
KQorICAgICwgbV9kb2N1bWVudChjb21tYW5kID8gJmRvY3VtZW50IDogbnVsbHB0cikKKyAgICAs
IG1fZnJhbWUoY29tbWFuZCA/IGRvY3VtZW50LmZyYW1lKCkgOiBudWxscHRyKQogewotICAgIEFT
U0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKKyAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9kb2N1
bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYg
cGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjb25zdApAQCAtMTg2OCw5ICsxODcw
LDkgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0
ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGMKICAgICAgICAgaWYgKCFhbGxvd0V4ZWN1dGlv
bldoZW5EaXNhYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBh
dXRvIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudC0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gZG9jdW1lbnQpCisKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAhPSBtX2Zy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb21tYW5kLT5leGVj
dXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQsIG1fc291cmNlLCBwYXJhbWV0ZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJm
ZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li5iMTdhMDE0YzBlMzE0YTk2ZGVkZmI3YzM0ODE0
NTM1Y2E1YmM1N2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtMTM5LDEzICsxMzksMTQgQEAgSW50UmVjdCBEcmFnQ2FyZXRDb250cm9sbGVyOjplZGl0
YWJsZUVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4g
eyB9OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxT
ZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1Vz
ZURpcmVjdGlvbmFsU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4g
IWZyYW1lIHx8IGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0
aW9uQXNEaXJlY3Rpb25hbCgpOworICAgIHJldHVybiAhZG9jdW1lbnQgfHwgZG9jdW1lbnQtPmVk
aXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7
CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKERvY3VtZW50
KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2ZyYW1lKGRv
Y3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQog
ICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICNpZiBFTkFCTEUoVEVY
VF9DQVJFVCkKQEAgLTE1Niw3ICsxNTcsNyBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCiAgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZh
bHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gZnJhbWUpCisgICAgLCBt
X2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICwgbV9zaG91
bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUo
ZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2Vs
ZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjYsMjQgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1l
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fY2FyZXRCbGlua3ModHJ1ZSkKICNlbmRp
ZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1l
KSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CisgICAgCisg
ICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CisgICAgaWYg
KGFjdGl2ZUFuZEZvY3VzZWQpCisgICAgICAgIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisjaWYg
VVNFKFVJS0lUX0VESVRJTkcpCisgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMg
bm90IGJsaW5rKQorICAgIHNldENhcmV0VmlzaWJsZShhY3RpdmVBbmRGb2N1c2VkKTsKKyNlbHNl
CisgICAgc2V0Q2FyZXRWaXNpYmlsaXR5KGFjdGl2ZUFuZEZvY3VzZWQgPyBWaXNpYmxlIDogSGlk
ZGVuKTsKKyNlbmRpZgogfQogCiBFbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6cm9vdEVkaXRhYmxl
RWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiBzZWxlY3Rp
b25Sb290ID0gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIHJldHVybiBz
ZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpOworICAgIHJldHVybiBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6
IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
Ojptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQsNyArMjk1LDcgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlmZmVyZW50KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3RtZW50TW9kZSBlbmRw
b2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlv
biA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdTZWxlY3Rpb24uaXNE
aXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlvbi5pc0RpcmVjdGlv
bmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2luYWxCYXNlLmlzTm90
TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJsZUJhc2UoKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsNyArMzMzLDcgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBib29sIHNob3VsZENsZWFyVHlwaW5nU3R5bGUgPSBv
cHRpb25zLmNvbnRhaW5zKENsZWFyVHlwaW5nU3R5bGUpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBuZXdTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb25Qb3NzaWJseVdpdGhvdXREaXJlY3Rpb247Ci0g
ICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAg
IGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAg
ICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CiAKICAgICBpZiAoIW1f
ZnJhbWUpIHsKQEAgLTMzNCw3ICszNDUsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2FuIGdldCBpbnRvIGFuIGlu
ZmluaXRlIGxvb3AKICAgICBpZiAoRG9jdW1lbnQqIG5ld1NlbGVjdGlvbkRvY3VtZW50ID0gbmV3
U2VsZWN0aW9uLmJhc2UoKS5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8RnJhbWU+
IG5ld1NlbGVjdGlvbkZyYW1lID0gbmV3U2VsZWN0aW9uRG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAg
ICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlv
bkRvY3VtZW50ICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChuZXdT
ZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9IG1fZG9j
dW1lbnQpIHsKICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25GcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucywgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQoKSwgYWxpZ24sIGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3Np
YmxlIHRoYXQgZHVyaW5nIHRoZSBhYm92ZSBzZXQgc2VsZWN0aW9uLCB0aGlzIEZyYW1lU2VsZWN0
aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5CiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0RnJhbWVF
bGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQsIGJ1dCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMg
bm8gbG9uZ2VyIHZhbGlkIHNpbmNlCkBAIC0zNDksNyArMzYwLDcgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxl
U2VsZWN0aW8KICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CiAKICAgICBpZiAoY2xv
c2VUeXBpbmcpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZnJhbWUpOwor
ICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygqbV9kb2N1bWVudCk7CiAKICAgICBp
ZiAoc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSkKICAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwpA
QCAtMzU3LDcgKzM2OCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhv
dXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKICAgICBib29sIGRpZE11dGF0ZVNl
bGVjdGlvbiA9IG9sZFNlbGVjdGlvbiAhPSBuZXdTZWxlY3Rpb247CiAgICAgaWYgKGRpZE11dGF0
ZVNlbGVjdGlvbikKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5n
ZSgpOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7
CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDIxICszODIsMjEg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFy
YW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgp
OwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25zICYgRG9Ob3RT
ZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxl
bWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgICAgIHNldEZvY3VzZWRF
bGVtZW50SWZOZWVkZWQoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbmVlZGVk
LgotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBv
bGRGb2N1c2VkRWxlbWVudCkKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCisgICAgICAgICAgICBtX2RvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0
aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQgd2lsbCBi
ZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlmIG5lY2Vz
c2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJ
ZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9y
KCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOwogICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3Rpb24tYXBpLyNzZWxlY3Rpb25jaGFuZ2Ut
ZXZlbnQKICAgICAvLyBGSVhNRTogU3BlYyBkb2Vzbid0IHNwZWNpZnkgd2hpY2ggdGFzayBzb3Vy
Y2UgdG8gdXNlLgotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnF1ZXVlVGFza1RvRGlzcGF0Y2hF
dmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6Tm8pKTsKKyAgICBtX2RvY3VtZW50LT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZl
bnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5NiwxMCArNDA3LDYg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBpZiAoIXNldFNlbGVjdGlvbldpdGhvdXRV
cGRhdGluZ0FwcGVhcmFuY2Uoc2VsZWN0aW9uLCBvcHRpb25zLCBhbGlnbiwgZ3JhbnVsYXJpdHkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlm
IChvcHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uVXBUb01haW5GcmFtZSkKICAgICAgICAgbV9zZWxl
Y3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsVXBUb01haW5GcmFt
ZTsKICAgICBlbHNlIGlmIChvcHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uKQpAQCAtNDExLDI3ICs0
MTgsMjcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBtX3NlbGVjdGlvblJldmVhbElu
dGVudCA9IGludGVudDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogCi0g
ICAgaWYgKGRvY3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNhbGMoKSkKKyAgICBpZiAobV9kb2N1
bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1l
Vmlldy0+bGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0UGVuZGluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICB1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oaW50ZW50KTsKIAogICAgIGlmIChvcHRp
b25zICYgSXNVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2Zy
YW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9j
dW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICAgICAgY2xpZW50LT5kaWRFbmRVc2Vy
VHJpZ2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRnJhbWUmIGZyYW1lKQorc3RhdGlj
IHZvaWQgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQogewogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGZyYW1lLmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIGRvY3VtZW50LnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogI2Vsc2UKLSAgICBmcmFtZS5k
b2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQudXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ0MSw3ICs0NDgsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZShSZXZlYWxTZWxlY3Rpb25BZnRlclVw
ZGF0ZSByZXZlYWxNbwogICAgIGlmIChyZXZlYWxNb2RlID09IFJldmVhbFNlbGVjdGlvbkFmdGVy
VXBkYXRlOjpGb3JjZWQpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlv
blJldmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVl
OwotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkp
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAg
ICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiB9CiAKQEAgLTQ1Nyw3
ICs0NjQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24o
Y29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAgIGlmIChtX3NlbGVjdGlvblJl
dmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZlYWwpIHsKICAgICAgICAg
U2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBpZiAobV9mcmFtZS0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkp
CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRl
ckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKICAgICAgICAgICAgIGFsaWdubWVudCA9
IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24gPyBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNl
bnRlcklmTmVlZGVkOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fs
d2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvcEFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZDsKQEAgLTQ3MSw3ICs0NzgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogdm9pZCBG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlRGF0YURldGVjdG9yc0ZvclNlbGVjdGlvbigpCiB7CiAjaWYg
RU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVy
cygpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVO
dW1iZXJzKCk7CiAjZW5kaWYKIH0KIApAQCAtNzAzLDcgKzcxMCw3IEBAIFZpc2libGVQb3NpdGlv
biBGcmFtZVNlbGVjdGlvbjo6cG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlzR2V0U3RhcnQpIGNv
bnN0CiAgICAgLy8gYmFzZS9leHRlbnQgYWx3YXlzIHBvaW50IHRvIHRoZSBzYW1lIG5vZGVzIGFz
IHN0YXJ0L2VuZCwgYnV0IHdoaWNoIHBvaW50cwogICAgIC8vIHRvIHdoaWNoIGRlcGVuZHMgb24g
dGhlIHZhbHVlIG9mIGlzQmFzZUZpcnN0LiBUaGVuIHRoaXMgY2FuIGJlIGNoYW5nZWQKICAgICAv
LyB0byBqdXN0IHJldHVybiBtX3NlbC5leHRlbnQoKS4KLSAgICBpZiAobV9mcmFtZSAmJiBtX2Zy
YW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21F
eHRlbnRFbmRwb2ludCgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBv
aW50KCkpCiAgICAgICAgIHJldHVybiBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gbV9zZWxl
Y3Rpb24udmlzaWJsZUVuZCgpIDogbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAKICAgICBy
ZXR1cm4gaXNHZXRTdGFydCA/IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogbV9zZWxlY3Rp
b24udmlzaWJsZUVuZCgpOwpAQCAtNzIzLDcgKzczMCw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFt
ZVNlbGVjdGlvbjo6bmV4dFdvcmRQb3NpdGlvbkZvclBsYXRmb3JtKGNvbnN0IFZpc2libGVQb3Np
dGlvCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IG5l
eHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7CiAKLSAgICBpZiAobV9mcmFtZSAmJiBt
X2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCgpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgewogICAgICAgICAvLyBJbiBv
cmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyByaWdodCwgd2UgYWR2YW5jZSBvbmUKICAg
ICAgICAgLy8gd29yZCBmdXJ0aGVyIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgYmFjay4gR2l2ZW4g
dGhlCiAgICAgICAgIC8vIHNlbWFudGljcyBvZiBwcmV2aW91c1dvcmRQb3NpdGlvbigpIHRoaXMg
d2lsbCBwdXQgdXMgYXQgdGhlCkBAIC04NTUsNyArODYyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZy
YW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGIKICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRl
bnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkucmlnaHQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAg
Ym9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0
b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAg
ICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1l
bnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0
ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBwb3MgPSByaWdodFdvcmRQ
b3NpdGlvbihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAg
ICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTA3Niw3ICsxMDgzLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm8KICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVj
dGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkubGVmdCh0cnVlLCByZWFjaGVk
Qm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eTogewot
ICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1fZnJh
bWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7
CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQgJiYg
bV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5n
UmlnaHQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVj
dGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IGxl
ZnRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0
KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEzNjIsNyArMTM2OSw3IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChy
ZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmln
Z2VyZWQgJiYgbV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KSB7CisgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJUcmlnZ2Vy
ZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbkJvdW5kYXJ5LCB0ZXh0
U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMzc0LDggKzEzODEsOCBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBpZiAoIXdhc1JhbmdlICYmIGFsdGVy
ID09IEFsdGVyYXRpb25Nb3ZlICYmIHBvc2l0aW9uID09IG9yaWdpbmFsU3RhcnRQb3NpdGlvbikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
CisgICAgaWYgKG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5zZXRUZXh0U2VsZWN0
aW9uSW50ZW50KHRleHRTZWxlY3Rpb25JbnRlbnQoYWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpKTsKICAgICB9CiAKQEAgLTEzODQsNyArMTM5MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4CiAgICAgLy8gTm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRyYXJ5IGJl
Y2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3VsZCBiZQogICAgIC8vIHRoZSByZXF1ZXN0ZWQgcG9z
aXRpb24gdHlwZSBpZiB0aGVyZSB3ZXJlIG5vIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
biBzZXQuCiAgICAgTGF5b3V0VW5pdCB4ID0gbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJl
Y3Rpb25OYXZpZ2F0aW9uKFNUQVJUKTsKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFs
KHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFsdGVyID09
IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0g
QWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICBzd2l0Y2ggKGFsdGVyKSB7CiAgICAgY2FzZSBBbHRl
cmF0aW9uTW92ZToKQEAgLTEzOTQsNyArMTQwMSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1v
ZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
CiAKICAgICAgICAgaWYgKCFtX3NlbGVjdGlvbi5pc0NhcmV0KCkKICAgICAgICAgICAgICYmIChn
cmFudWxhcml0eSA9PSBXb3JkR3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBo
R3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gTGluZUdyYW51bGFyaXR5KQotICAgICAgICAg
ICAgJiYgbV9mcmFtZSAmJiAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRFeHRl
bmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7CisgICAgICAgICAgICAmJiBt
X2RvY3VtZW50ICYmICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVu
ZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKICAgICAgICAgICAgIC8vIERv
bid0IGxldCB0aGUgc2VsZWN0aW9uIGdvIGFjcm9zcyB0aGUgYmFzZSBwb3NpdGlvbiBkaXJlY3Rs
eS4gTmVlZGVkIHRvIG1hdGNoIG1hYwogICAgICAgICAgICAgLy8gYmVoYXZpb3Igd2hlbiwgZm9y
IGluc3RhbmNlLCB3b3JkLXNlbGVjdGluZyBiYWNrd2FyZHMgc3RhcnRpbmcgd2l0aCB0aGUgY2Fy
ZXQgaW4KICAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgYSB3b3JkIGFuZCB0aGVuIHdvcmQt
c2VsZWN0aW5nIGZvcndhcmQsIGxlYXZpbmcgdGhlIGNhcmV0IGluIHRoZQpAQCAtMTQwNyw3ICsx
NDE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBT
ZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAogICAgICAgICAvLyBTdGFuZGFyZCBN
YWMgYmVoYXZpb3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3VuZGFyeSBpcyBncm93IHRoZSBzZWxl
Y3Rpb24gcmF0aGVyIHRoYW4gbGVhdmluZyB0aGUKICAgICAgICAgLy8gYmFzZSBpbiBwbGFjZSBh
bmQgbW92aW5nIHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0Vmlldy4KLSAgICAgICAgaWYgKCFt
X2ZyYW1lIHx8ICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dT
ZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQo
KSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCisgICAgICAgIGlmICghbV9kb2N1bWVudCB8
fCAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0
aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwg
IWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQogICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9u
LCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CkBAIC0xNTE3
LDcgKzE1MjQsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0
ZXIsIHVuc2lnbmVkIHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dl
cmVkID09IFVzZXJUcmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJH
cmFudWxhcml0eTsKIAotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3
YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlv
bkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9u
RXh0ZW5kKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU3NSw3ICsxNTgyLDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0Qmxp
bmtUaW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIGlmIChhdXRvKiB2aWV3ID0gbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAK
ICAgICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKFZpc2libGVTZWxlY3Rp
b24oKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSwgQWxpZ25DdXJzb3JPblNjcm9sbElm
TmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CkBAIC0xNjU1LDkgKzE2NjIsOSBAQCBzdGF0
aWMgYm9vbCBpc05vbk9ycGhhbmVkQ2FyZXQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKQogCiBJbnRSZWN0IEZyYW1lU2VsZWN0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wq
IGluc2lkZUZpeGVkKQogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGlu
Z0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKICAgICByZWNvbXB1dGVDYXJldFJlY3QoKTsKICAg
ICBpZiAoaW5zaWRlRml4ZWQpCiAgICAgICAgICppbnNpZGVGaXhlZCA9IG1fY2FyZXRJbnNpZGVQ
b3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwxMCArMTY4MiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgIGlmICghc2hvdWxkVXBkYXRlQ2FyZXRSZWN0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1f
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZyYW1lVmlldyogdiA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2RvY3VtZW50
LT52aWV3KCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OTAs
NyArMTY5Nyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAg
ICAgICAgICAgICBjbGVhckNhcmV0UmVjdCgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KTsKLSAgICAgICAgICAgIGlmICh1cGRhdGVDYXJldFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
dmlzaWJsZVN0YXJ0KSkgeworICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2RvY3Vt
ZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJs
ZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgICAgICAg
ICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTcxNSw3
ICsxNzIyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKFJl
bmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpIHsKKyAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewogICAg
ICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSA9IG1fc2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUgJiYgbV9w
cmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CiAgICAgICAgIGlmIChzaG91
bGRSZXBhaW50Q2FyZXQodmlldywgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRh
YmxlKSkgewogICAgICAgICAgICAgaWYgKG1fcHJldmlvdXNDYXJldE5vZGUpCkBAIC0xODk0LDEy
ICsxOTAxLDExIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkgY29uc3QKICAgICBpZiAoIWlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAg
ICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVu
dC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQtPmhp
dFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKICAgICBOb2RlKiBpbm5lck5vZGUgPSBy
ZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYgKCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVu
ZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2OCw5ICsxOTc0LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogewotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAgICBFbGVtZW50KiBmb2N1c2Vk
RWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGZvY3Vz
ZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRN
TFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAgICAgICBIVE1MU2VsZWN0RWxl
bWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwoKSkgewpA
QCAtMjAwMCw4ICsyMDA0LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAg
ICAgICAgaWYgKHJvb3QpCiAgICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHJvb3QtPnNo
YWRvd0hvc3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByb290ID0gZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBkb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKKyAgICAgICAgICAgIHJvb3QgPSBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbV9kb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIXJvb3Qp
CkBAIC0yMDU4LDkgKzIwNjIsOCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJh
bmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRDbAogdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFj
dGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsKLSAgICBSZWY8RG9jdW1lbnQ+
IGRvY3VtZW50KCptX2ZyYW1lLT5kb2N1bWVudCgpKTsKIAotICAgIGRvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwog
CiAjaWYgVVNFKFVJS0lUX0VESVRJTkcpCiAgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8
IGRvZXMgbm90IGJsaW5rKQpAQCAtMjA3MSw3ICsyMDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFJlbmRlck9i
amVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyT2JqZWN0
OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZl
LAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWlu
dGVkLgotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkK
KyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFy
cyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDg1LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0
eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkpIHsKICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5j
ZSgpKQpAQCAtMjEwNywxMyArMjExMCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1
c2VkKGJvb2wgZmxhZykKIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBt
X2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJu
IG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50LT5wYWdlKCkgJiYgbV9kb2N1bWVudC0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci1pbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5k
KEZyYW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVU
b1R5cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0
Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIx
MzIsMTIgKzIxMzUsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgp
CiAgICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYg
bV9zZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24u
dmlzaWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNv
bXB1dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNl
dHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3Npbmcg
PSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgYm9v
bCBzaG91bGRCbGluayA9ICFwYWludEJsb2NrQ3Vyc29yICYmIGNhcmV0SXNWaXNpYmxlKCkgJiYg
aXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJy
b3dzaW5nKTsKIAogICAgIC8vIElmIHRoZSBjYXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGlt
ZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCiAgICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhlIG5l
dyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxk
QmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZnJhbWUpKQor
ICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91
bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9kb2N1bWVudCkpCiAgICAgICAgIG1f
Y2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBi
bGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsy
MTU2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQog
I2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCk7CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIwMiw4ICsyMjA1LDggQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNp
YmlsaXR5KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRy
aWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KLSAgICBpZiAobV9mcmFtZSkKLSAgICAg
ICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAg
IGlmIChtX2RvY3VtZW50KQorICAgICAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0
T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAo
bV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsyMjUwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNG
b2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1f
ZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0
QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7
CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9
IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAgICAg
ICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChh
bmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjY1LDE2IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAg
ICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9i
YWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRo
ZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAg
ICAgICAgICAgIGlmICh0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1l
bnQodGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAg
ICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxl
bWVudCh0YXJnZXQsICptX2ZyYW1lKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE9yU2hhZG93SG9zdEVs
ZW1lbnQoKTsKICAgICAgICAgfQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1
c2VkRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1l
bnQobnVsbHB0cik7CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1f
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0
ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKIH0KIAogdm9pZCBEcmFn
Q2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29u
dGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0
JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsMTYgKzIzMDMsMTYgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50
KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRv
VmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIAotICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKCptX2ZyYW1lKTsKLSAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29udGVudFJl
bmRlcmVyKCk7CisgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1f
ZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3
KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwog
CkBAIC0yMzI1LDE0ICsyMzI4LDE0IEBAIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAo
IW1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52
aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1l
bnRWaXNpYmxlUmVjdCk7CisgICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50
LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0g
VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAgYXV0byBp
bnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7
CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0LDcgKzIz
NjcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFy
dCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkgY29uc3QK
IHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNw
b25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVudCogc3Rh
cnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQq
IHN0YXJ0ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQog
ICAgICAgICBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICgh
c3RhcnQpCkBAIC0yNDA3LDggKzI0MTAsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxT
ZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogICAg
ICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVk
LCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3Jp
Z2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBw
ZWFyYW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2
ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2ZyYW1lKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50
LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3Jv
bGxpbmdGcmFtZSgqbV9mcmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBA
IC0yNDI2LDE3ICsyNDI5LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZy
b21Ob25lKCkKICAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGly
ZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZQogICAgIC8vIGVudGlyZSBXZWJWaWV3IGlz
IGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgogCi0gICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50
LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgYm9vbCBjYXJldEJy
b3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwor
ICAgIGlmICghaXNOb25lKCkgfHwgIShtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwg
Y2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFkb2N1bWVu
dCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFkb2N1bWVudC0+
aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghbV9kb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8
IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIGJvZHkgPSBkb2N1
bWVudC0+Ym9keSgpKQorICAgIGlmIChhdXRvKiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpKQog
ICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUoYm9keSksIERPV05TVFJFQU0pKTsKIH0KIApAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdl
Q2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigp
LCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CisgICAgcmV0
dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24o
KSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBi
b29sIEZyYW1lU2VsZWN0aW9uOjpkaXNwYXRjaFNlbGVjdFN0YXJ0KCkKQEAgLTI0NjQsNyArMjQ2
Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihib29s
IHNob3VsZFNob3dCbG9ja0N1cnNvcikKIHsKICAgICBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciA9
IHNob3VsZFNob3dCbG9ja0N1cnNvcjsKIAotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOwogfQpAQCAtMjQ4OCw3ICsyNDkwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFy
YW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCkKIHsKLSAgICBpZiAoYXV0byogY2xpZW50
ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRv
clN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRS
ZWN0TmVlZHNVcGRhdGUoKTsKQEAgLTI3MjMsNyArMjcyNSw3IEBAIFJlZlB0cjxSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7
CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZG9jdW1lbnQtPmNyZWF0ZVJhbmdl
KCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxvY2F0aW9uKTsKICAgICByZXN1
bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoKTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBTRUxfREVG
QVVMVF9BRkZJTklUWSk7CkBAIC0yOTA0LDcgKzI5MDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzKQogICAgIGlmIChtX2NhcmV0Qmxpbmtz
ID09IGNhcmV0QmxpbmtzKQogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7IAorICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50
ID0gZmFsc2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZl
MzJjYWVkMTY1YTA1MDguLjVhYWY5YTA4OWIzYjE5ZGZhMDEwZWQwNzA5ZDQyZGVlYWUwYjVlYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAg
IFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKERvY3VtZW50KiA9IG51bGxw
dHIpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9y
RG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIApAQCAtMzM4LDYgKzMzOCw3IEBAIHByaXZh
dGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAorICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlm
ZjlmMzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEy
NGNmMTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2ln
bmVkCiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAg
Ym9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNo
b0VuYWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNl
dHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFi
bGVkKQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZi
Li4yNzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3
ICsxNDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5
cGluZ1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUg
JiYgIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGlu
ZyBzdHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4
IGU5MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1
MTM2OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxl
Y3Rpb24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1Nl
bGVjdGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9y
KCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
LmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9y
bU92ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChl
bmRQb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAg
ICAgICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxl
KHR5cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFk
OTM5ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQx
M2YwNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1
Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li40OTY5OTE5ZDkxYTExNDk1
YzI5OGM5MmE3NjY3MjZiOTJlMTY5NTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6
IENhbiB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3Jt
ZWQ/ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQg
YWZ0ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZy
YW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
ZGVzdGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQu
ICBUbyBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0
aG91dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUg
c2FtZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
dFNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4
ZTliYTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAt
NDAsNyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBo
YW5lZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1Nl
dCwgbV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewot
ICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAg
ICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KSkgJiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBz
ZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgz
NjZiNTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0
OThmZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAt
OTgsOCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQo
KQogICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a2VyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNw
ZWxsQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50
KQogICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNr
ZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzEx
NCw3IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50
KiBTcGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJh
bWUucGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JD
bGllbnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVj
a2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVj
a2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1l
LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdl
JiByYW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52
b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1v
dmUocmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3By
b2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBj
bGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tl
cjo6ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0x
OTksNyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vz
c2luZ1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJl
cGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFz
dFByb2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkK
ICAgICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTks
NyArMjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3RE
YXRhLmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkK
ICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAg
ICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5k
b2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5j
aGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgp
LCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5
ZmI1YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4
YTg2NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03
Niw3ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1l
Jik7CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hl
Y2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEw
Niw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAg
ICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0
Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIw
ODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcg
KzY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0
b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3Jy
ZWN0ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVu
YXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0
ZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpT
cGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCmluZGV4IDVhNmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUu
LmYzMTI4ZDdlYTU3ZDU2NzYzOTE4YTMxM2FiNzdiNjY0OWU1YjY0MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5n
Q29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5k
IGNvbW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24o
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUg
Y29tcG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAg
IGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlv
bik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9z
aXRpb25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRT
cGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCAr
MTgwLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0
ZXJHcmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9j
dW1lbnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZy
YW1lKCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsK
KyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0
aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUo
VGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5n
KTsKQEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBG
SVhNRTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9z
ZSBhIG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAg
ICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1
cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdD
b21tYW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KGRvY3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVu
dFNwZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRp
b25zLAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtl
eSwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12
b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9p
ZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rp
b24oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBv
c2l0aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRv
cigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xp
bmUodGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGlu
c2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVl
ZCB0byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0
byBGcmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9u
cywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAg
IExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAg
ICAgU3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQs
IHNlbGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlv
blBlbmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxl
Y3Rpb24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0
aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1
cmUsIHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3Vz
dG9tIHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBv
ZiB0aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkg
eworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBp
ZiAobGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvcklu
c2VydGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2Vs
ZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYs
MTIgKzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8g
Y21kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0
LCBvcHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1h
bmQoZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50
U2VsZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1l
KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
KmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9j
dW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9u
KG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlv
bnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90
aWZ5QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1
bWVudCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBp
bmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9w
ZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1
dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcs
OSArMjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwg
b3B0aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21t
YW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkK
K1JlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29t
cG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RF
ZGl0Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRD
b21tYW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFs
YXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwg
IXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09w
ZW5Gb3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYg
KzMxMCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFu
ZFVudGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxp
bmdJbml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0
aW5nQWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25J
Zk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRI
YXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGlu
Z1NlbGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00
MzYsMTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0KICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0
b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1l
LmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAm
JiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisg
ICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRp
dG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5n
QWNjZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYg
KCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxl
Y3Rpb24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2Ug
bmVlZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlw
ZSkKICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAg
IGlmIChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8
fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFu
ZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1h
bmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRl
eHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigp
Lm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCks
ICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8g
SWYgdGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNv
dWxkIGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdv
cmRTaWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQs
IHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNl
KTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYg
KzQ4NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5k
KEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAg
ICAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJl
dHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBm
cmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6
OmNyZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxB
cHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5n
Q29tbWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5m
cmFtZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9y
QWRkZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCku
YXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVk
aXRpbmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFs
c28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQg
aGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVu
dFNwZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21t
YW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNr
aW5nIGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50
IGlzc3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBh
cyBtaXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlw
ZUZvckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5k
aWYKIH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4
dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAg
ICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nl
c3NpYmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51
dGY4KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJl
cGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNl
cnRlZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlw
aW5nLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAs
OSArNTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xp
bmVzKGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlv
blR5cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJh
bGFuY2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rp
b24oKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0
VGV4dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
ZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2li
aWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZy
YW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNl
ZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
fQogCkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNl
cGFyYXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAg
cmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVw
bGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KCkKICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxv
Y2txdW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRD
b250ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIs
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCkt
PnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsK
IH0KIApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJs
ZVJvb3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc0OCwyMCArNzIyLDIwIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3Nl
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxk
IHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNs
b3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQo
KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0
aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5p
c0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmICghd2ls
bEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxl
Y3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
c2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBl
bmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0
ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JE
ZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC03NzgsMTAgKzc1Miw5IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGJvb2wgc2hvdWxkQWRkCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2lsbFJp
bmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQo
KS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0ZU1h
cmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25B
ZnRlclVuZG87CkBAIC04NTUsMTMgKzgyOCwxMyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMg
YnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRn
ZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwot
ICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5n
KGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hv
dWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJp
dHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKQEAgLTg3MSw3ICs4NDQs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxk
QWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRp
dG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7
CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRp
bmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBt
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRG
b3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5
YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlv
bnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYs
IE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1l
Kik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1
cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5G
b3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5
cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
RG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBp
bmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmlu
YWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7
CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCos
IERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBp
bmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdD
b21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBS
ZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRkYjU2MTI5MmU3OTQyNzdiZmI3
NmQ1OWUuLjkxMGRlZWY3MDg0ZDFmZGM4ZTBmOWFlMDZlOTEzYTExYzc2M2YxOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtODAsOCArODAsOCBA
QCBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0
cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKgogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFy
YW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhj
bHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICByZXR1cm4g
c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQ
cml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVN
RU5UKQpAQCAtMTA3LDEwICsxMDcsMTAgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBl
c0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogdm9p
ZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmli
dXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0
cmluZ0Zyb21TZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAK
ICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY29udGVudE9y
aWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQo
KTsKKyAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2RvY3VtZW50Lm9yaWdpbklkZW50aWZp
ZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNh
blNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0
ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5SVEZE
Rm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRG
REZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7CkBAIC0xMjUsMTAgKzEyNSwxMCBA
QCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFz
dGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJE
YXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIAogICAgIFBhc3RlYm9hcmRXcml0ZXJEYXRhOjpXZWJDb250
ZW50IHdlYkNvbnRlbnQ7Ci0gICAgd2ViQ29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5k
b2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOworICAgIHdlYkNvbnRl
bnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKTsKICAgICB3ZWJDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5
T3JEZWxldGUoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxl
Y3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3Jt
YXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9y
bWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lk
IEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRX
cml0ZXJEYXRhKQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OnNlbGVjdGlvbkluV2Vi
QXJjaGl2ZUZvcm1hdCgpCiB7Ci0gICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlRnJvbVNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5
V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAg
IGlmICghYXJjaGl2ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpKTsK
QEAgLTE3MSwxMSArMTcxLDExIEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rp
b25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAg
ICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1f
ZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBpZiAo
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50
LmZyYW1lKCksIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSW5z
ZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21l
bnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5n
KTsKICAgICAgICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVk
aXRvcjo6ZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQogLy8gT3Ig
cmVmYWN0b3Igc28gaXQgZG9lcyBub3QgZG8gdGhhdC4KIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
LCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCiB7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgY29udGV4dCwgYWxs
b3dQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZy
YW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKICAgICBwYXN0ZWJvYXJkLnJlYWQocmVh
ZGVyKTsKICAgICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5U
ZXh0OwogICAgIHJldHVybiBXVEZNb3ZlKHJlYWRlci5mcmFnbWVudCk7CkBAIC0yMzQsNyArMjM0
LDcgQEAgdm9pZCBFZGl0b3I6OnRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0cmluZ0Zyb21TZWxlY3Rpb24gPSBtX2ZyYW1l
LmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5z
ZmVyKCkpOworICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuZnJhbWUo
KS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJh
bnNmZXIoKSk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwog
ICAgIHR5cGVzLmFwcGVuZChTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKaW5kZXggNzA2ZTgyNjczZjA4
MTMzMzczNWU1ODcxMjc4YzhkNDUwZDBiNjliYy4uMWRhODFmNzE4ZDkyMzU4MjNiMDM4MWZlMmJi
ZGUxMTlkODI1MDZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRp
dG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3Bw
CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3Rl
Ym9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJu
OwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2Fy
ZCwgbV9mcmFtZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1Bs
YWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwg
Km1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAm
JiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1
b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2
b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVi
b2FyZCkKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAgICBw
YXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCk7CiAgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFU
cmFuc2ZlcigpOwotICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJl
c29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAg
bV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVk
KCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdW
aXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29s
dmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9k
b2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVk
KCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
Tm8pOwogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQogCiBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFz
dGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQs
IGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkRGF0YShwYXN0ZWJvYXJkLCBtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4
dCwgY2hvc2VQbGFpblRleHQpOworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJv
YXJkRGF0YShwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1Bs
YWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggZjJhMmQ1MmFjNWFiZjRl
NGYxMzExM2NhMjVkMWIyMGExNzM4ZmE2OS4uMWJmY2E1OTEzZDY0NjQxYzA4MmZlZjc2NWFiYTE5
ZTkwOTBhZDE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAt
ODMsNyArODMsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNl
V3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgIC8vIElmIHRoZSB0ZXh0
IGhhcyBsZWZ0IG9yIHJpZ2h0IGFsaWdubWVudCwgZmxpcCBsZWZ0LT5yaWdodCBhbmQgcmlnaHQt
PmxlZnQuIAogICAgIC8vIE90aGVyd2lzZSwgZG8gbm90aGluZy4KIAotICAgIGF1dG8gc2VsZWN0
aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0eWxlID0gRWRpdGlu
Z1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0
eWxlKCkpCiAgICAgICAgICByZXR1cm47CiAKQEAgLTEyNywxNCArMTI3LDE0IEBAIHZvaWQgRWRp
dG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRp
bmdEaXJlY3Rpb24gZGlyCiAgICAgaWYgKCFuZXdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRF
bGVtZW50KCk7CisgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LmZvY3Vz
ZWRFbGVtZW50KCk7CiAgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIChpczxIVE1MVGV4dEFyZWFF
bGVtZW50PigqZm9jdXNlZEVsZW1lbnQpIHx8IChpczxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpCiAgICAgICAgICYmIChkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpLmlzVGV4dEZpZWxkKCkKICAgICAgICAgICAgIHx8IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNTZWFyY2hGaWVsZCgpKSkpKSB7CiAgICAgICAg
IGlmIChkaXJlY3Rpb24gPT0gV3JpdGluZ0RpcmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCku
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhbGlnbkF0dHIsIG5ld1ZhbHVlKTsK
LSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAg
ICAgIG1fZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJs
ZVN0eWxlcygpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZW1vdmVzIHN0eWxlcyB0aGF0IHRo
ZSB1c2VyIGNhbm5vdCBtb2RpZnkgYnkgYXBwbHlpbmcgdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCiAg
ICAgCi0gICAgYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2ZyYW1l
LmRvY3VtZW50KCktPmJvZHlPckZyYW1lc2V0KCkpOworICAgIGF1dG8gZWRpdGluZ1N0eWxlID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUobV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpKTsKICAgICBh
dXRvIGRlZmF1bHRTdHlsZSA9IGVkaXRpbmdTdHlsZS0+c3R5bGUoKS0+bXV0YWJsZUNvcHkoKTsK
ICAgICAKICAgICAvLyBUZXh0IHdpZGdldHMgaW1wbGVtZW50IGJhY2tncm91bmQgY29sb3Igdmlh
IHRoZSBVSVZpZXcgcHJvcGVydHkuIFRoZWlyIGJvZHkgZWxlbWVudCB3aWxsIG5vdCBoYXZlIG9u
ZS4KQEAgLTIxOSw3ICsyMTksNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiB7CiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5U
ZXh0ID0gb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwotICAg
IFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKG1fZnJhbWUsICpyYW5nZSwgYWxsb3dQbGFpblRleHQp
OworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5n
ZSwgYWxsb3dQbGFpblRleHQpOwogICAgIGludCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNs
aWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXM7ICsraSkgewogICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxl
Z2F0ZShpKTsKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVi
b2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAKIHZv
aWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4m
JiBkaWN0YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0YSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRpY3RhdGlvblBocmFzZXMuaXNFbXB0eSgp
KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXND
aGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgLy8gU29t
ZSBkYXkgd2UgY291bGQgbWFrZSB0aGVtIFVuZG9hYmxlLCBhbmQgbGV0IGNhbGxlcnMgY2xlYXIg
dGhlIFVuZG8gc3RhY2sgZXhwbGljaXRseSBpZiB0aGV5IHdpc2guCiAgICAgY2xlYXJVbmRvUmVk
b09wZXJhdGlvbnMoKTsKIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICBlbGVtZW50LnJlbW92ZUNoaWxk
cmVuKCk7CiAKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRP
ZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogCiAgICAgLy8g
QXMgYSBzaWRlIGVmZmVjdCB0aGlzIGZ1bmN0aW9uIHNldHMgYSBjYXJldCBzZWxlY3Rpb24gYWZ0
ZXIgdGhlIGluc2VydGVkIGNvbnRlbnQuIE11Y2ggb2Ygd2hhdAogICAgIC8vIGZvbGxvd3MgaXMg
bW9yZSBleHBlbnNpdmUgaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24sIHNvIGNsZWFyIGl0IHNpbmNl
IGl0J3MgZ29pbmcgdG8gY2hhbmdlIGFueXdheS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNs
ZWFyKCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgLy8gY2xl
YXIgb3V0IGFsbCBjdXJyZW50IGNoaWxkcmVuIG9mIGVsZW1lbnQKICAgICBlbGVtZW50LnJlbW92
ZUNoaWxkcmVuKCk7CkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKICAgICBz
ZWxlY3Rpb24uc2V0QmFzZSh2aXNpYmxlUG9zKTsKICAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KHZp
c2libGVQb3MpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24p
OwogCiAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpAQCAtMzg5
LDcgKzM4OSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBT
dHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAvLyBoYXZlIGEgc3RhbGUgc2VsZWN0aW9u
Lgogdm9pZCBFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25J
Zk9wZW5Gb3JNb3JlVHlwaW5nKCkKIHsKLSAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRp
dENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygmbV9mcmFtZSwg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZW5z
dXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmco
bV9kb2N1bWVudCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQppbmRleCAyOTE4MjQ2NWQ4Y2YyOTM5Y2IyMTYwMjQ5ZmVhMmFlMTFlYTE3YzdjLi45ODQxYzk0
ZmFhMjEzZmQwODJlNTgxMjBlMWEyYjc0ZmEzODY5OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0
aW9uPgogdm9pZCBFZGl0b3I6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0
ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAg
ICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJk
KTsKQEAgLTEzNywxNiArMTM3LDE2IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZyb21QYXN0
ZWJvYXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAg
QVNTRVJUKG5vZGUpOwogCi0gICAgaWYgKCZub2RlLT5kb2N1bWVudCgpICE9IG1fZnJhbWUuZG9j
dW1lbnQoKSkKKyAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKSAhPSBtX2RvY3VtZW50KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKyAgICBSZWY8
RG9jdW1lbnQ+IHByb3RlY3RvcihtX2RvY3VtZW50KTsKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0
ZXJBbmNob3IpKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKHJhbmdlLmdldCgpKSwgRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMpOwor
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
cmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAKICAgICBQYXN0
ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwogCi0gICAgaWYgKCFtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICBp
ZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSkgewogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVi
b2FyZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGlj
IHZvaWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVtZW50LCBSZWZQdHI8SW1hZ2U+JiBpbWFn
ZSwgQ2FjaGVkSW1hZ2UqJgogCiB2b2lkIEVkaXRvcjo6c2VsZWN0aW9uV2lsbENoYW5nZSgpCiB7
Ci0gICAgaWYgKCFoYXNDb21wb3NpdGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8
fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghaGFzQ29tcG9zaXRpb24o
KSB8fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FuY2VsQ29tcG9zaXRpb24oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4IDA5NjRjY2I0ZmJkN2Fj
MzZiMThmMzQxNmY0MjBhMjdkYmU5NjkxNzguLjJmNzJjYjRmMDA0NTFjYmJlNDQyYzBlOWEzMTI2
N2M4YjhjMjBkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRv
cldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcApA
QCAtNDIsNyArNDIsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJv
YXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsK
IAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudChtX2ZyYW1lLCAqcmFuZ2Us
IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFp
blRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9h
cmQtPmRvY3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsK
IAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1
b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBA
IC02OSw5ICs2OSw5IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGcm9tUGxhdGZvcm1EYXRhKFBsYXRmb3JtRHJhZ0RhdGEmCiBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFz
dGVib2FyZCwgUmFuZ2UmLCBib29sIC8qYWxsb3dQbGFpblRleHQqLywgYm9vbCYgLypjaG9zZVBs
YWluVGV4dCovKQogewogICAgIGlmIChDT01QdHI8SURhdGFPYmplY3Q+IHBsYXRmb3JtRHJhZ0Rh
dGEgPSBwYXN0ZWJvYXJkLmRhdGFPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdt
ZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EcmFnRGF0YSwgbV9mcmFtZSk7CisgICAgICAg
IHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEs
ICptX2RvY3VtZW50LmZyYW1lKCkpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBs
YXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRhTWFwKCksIG1fZnJhbWUpOworICAgIHJldHVy
biBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0YU1hcCgp
LCAqbV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYzcxNmQ3MjgwZjQ2MmNiNTY3Mzc1
N2I0YmE0ZTNiMjRhYmVlOGRlMC4uY2E2NGIxOWMyZWFkMTYyZTNmNWE1NGRlYmQ3MzgzZDg4ZGJl
OGE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC01NDEsMTEgKzU0
MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wKCkKIHZvaWQgRnJhbWVMb2FkZXI6OndpbGxU
cmFuc2l0aW9uVG9Db21taXR0ZWQoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IHdoZW4gYSBmcmFtZSBpcyBzdGlsbCBmdWxseSBpbiBwbGFjZSAobm90IGNhY2hlZCwgbm90IGRl
dGFjaGVkKSwgYnV0IHdpbGwgYmUgcmVwbGFjZWQuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
bV9mcmFtZS5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX2ZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICBpZiAo
ZG9jdW1lbnQtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gVGhlIHRl
eHQgd2FzIGFscmVhZHkgcHJlc2VudCBpbiBET00sIHNvIGl0J3MgYmV0dGVyIHRvIGNvbmZpcm0g
dGhhbiB0byBjYW5jZWwgdGhlIGNvbXBvc2l0aW9uLgotICAgICAgICBtX2ZyYW1lLmVkaXRvcigp
LmNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JD
bGllbnQgPSBtX2ZyYW1lLmVkaXRvcigpLmNsaWVudCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5l
ZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICAgICAgaWYgKEVkaXRvckNsaWVudCog
ZWRpdG9yQ2xpZW50ID0gZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKSB7CiAgICAgICAgICAg
ICBlZGl0b3JDbGllbnQtPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOwogICAg
ICAgICAgICAgZWRpdG9yQ2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CiAg
ICAgICAgIH0KQEAgLTU2OCw3ICs1NzEsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgp
CiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGljeSk7CiAgICAgCi0gICAgbV9mcmFt
ZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOworICAgIGlmIChjdXJyZW50RG9j
dW1lbnQpCisgICAgICAgIGN1cnJlbnREb2N1bWVudC0+ZWRpdG9yKCkuY2xlYXJVbmRvUmVkb09w
ZXJhdGlvbnMoKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTCgpCkBAIC01ODAs
NyArNTg0LDYgQEAgYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTCgpCiAgICAgfQogCiAgICAg
bV9mcmFtZS5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuY2FuY2VsKCk7Ci0gICAgbV9mcmFtZS5lZGl0
b3IoKS5jbGVhckxhc3RFZGl0Q29tbWFuZCgpOwogCiAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7
CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9zZSA9IGZhbHNlOwpAQCAtNjQzLDggKzY0Niw2IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRDbGVhcldpbmRvd05hbWUoY29uc3QgRnJhbWUmIGZy
YW1lLCBjb25zdCBEb2N1bWVudCYgbmV3CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3Vt
ZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJT
Y3JpcHRPYmplY3RzLCBib29sIGNsZWFyRnJhbWVWaWV3LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBoYW5kbGVET01XaW5kb3dDcmVhdGlvbikKIHsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFy
KCk7Ci0KICAgICBib29sIG5lZWRlZENsZWFyID0gbV9uZWVkc0NsZWFyOwogICAgIG1fbmVlZHND
bGVhciA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDM4NWUzN2E2ZDBjOTBlNjMz
YTNiN2I0Mjg3MmM2MTZlMzgwODY0MjYuLjI5MDdiNDg1Yjk0YzY2YWM1MDY4NWM5OWRjMTVkZDVl
ZWVmZmNkMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0xNTYsOCArMTU2LDYgQEAgRnJhbWU6
OkZyYW1lKFBhZ2UmIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBV
bmlxdWVSZWY8RnJhbWVMb2EKICAgICAsIG1fbmF2aWdhdGlvblNjaGVkdWxlcihtYWtlVW5pcXVl
UmVmPE5hdmlnYXRpb25TY2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93
bmVyRWxlbWVudCkKICAgICAsIG1fc2NyaXB0KG1ha2VVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxl
cj4oKnRoaXMpKQotICAgICwgbV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkK
LSAgICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KHRoaXMpKQog
ICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKG1ha2VVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29u
dHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9wYWdlWm9vbUZhY3RvcihwYXJlbnRQYWdlWm9vbUZh
Y3Rvcih0aGlzKSkKICAgICAsIG1fdGV4dFpvb21GYWN0b3IocGFyZW50VGV4dFpvb21GYWN0b3Io
dGhpcykpCkBAIC01NTQsNyArNTUyLDcgQEAgYm9vbCBGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNj
ZXNzKCkKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpEZW5pZWQ6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpOb3RSZXF1ZXN0ZWRZ
ZXQ6IHsKLSAgICAgICAgYXV0byogY2xpZW50ID0gbV9lZGl0b3ItPmNsaWVudCgpOworICAgICAg
ICBhdXRvKiBjbGllbnQgPSBlZGl0b3IoKS5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkzNyw3ICs5MzUsNyBAQCB2b2lkIEZy
YW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9h
dCB0ZXh0Wm9vbUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZWRpdG9yLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CisgICAgZWRp
dG9yKCkuZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAgLy8gUmVzcGVj
dCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNWRyBk
b2N1bWVudHMuCiAgICAgLy8gRklYTUU6IEhvdyB0byBoYW5kbGUgY29tcG91bmQgZG9jdW1lbnRz
ICsgem9vbUFuZFBhbj0iZGlzYWJsZWQiPyBOZWVkcyBTVkcgV0cgY2xhcmlmaWNhdGlvbi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaAppbmRleCAzZDQzYTk0YmVhOTU1NmM5OGRjNzQyM2FiN2VhZDlhOTJhNTJjNmZl
Li4wOTMyYTgzY2I2NzRmNmY4Yzk2MTFlZDlmNjk5OWQxN2I2MmQxNTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdEZyYW1lLmgiCiAjaW5j
bHVkZSAiQWRqdXN0Vmlld1NpemVPck5vdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVk
ZSAiUGFnZUlkZW50aWZpZXIuaCIKQEAgLTE2MywxNCArMTY0LDE0IEBAIHB1YmxpYzoKICAgICBE
b2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKICAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsK
IAotICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gbV9lZGl0b3I7IH0KLSAgICBjb25zdCBF
ZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgRWRpdG9yJiBl
ZGl0b3IoKSB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQorICAgIGNvbnN0IEVkaXRv
ciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0KICAgICBF
dmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAg
ICAgY29uc3QgRXZlbnRIYW5kbGVyJiBldmVudEhhbmRsZXIoKSBjb25zdCB7IHJldHVybiBtX2V2
ZW50SGFuZGxlcjsgfQogICAgIEZyYW1lTG9hZGVyJiBsb2FkZXIoKSBjb25zdDsKICAgICBOYXZp
Z2F0aW9uU2NoZWR1bGVyJiBuYXZpZ2F0aW9uU2NoZWR1bGVyKCkgY29uc3Q7Ci0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9Ci0gICAgY29uc3Qg
RnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9
CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50KCktPnNl
bGVjdGlvbigpOyB9CisgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CiAgICAgRnJhbWVUcmVlJiB0cmVl
KCkgY29uc3Q7CiAgICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkgeyByZXR1
cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CiAgICAgY29uc3QgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlciYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9
CkBAIC0zMzgsOCArMzM5LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9j
OwogCiAgICAgVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+IG1fc2NyaXB0OwotICAgIFVuaXF1
ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwotICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9z
ZWxlY3Rpb247CiAgICAgVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0
aW9uQ29udHJvbGxlcjsKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IGViMDJmOGVjNDRkOTNhZDdhNmNiOTUxZjY5NzA2
ZmM0ZDZmODBlMGUuLjNlZWU0MmZmMGNkMWU3M2NmMDFiMjk1ZTk4ZDI4NTRlOWJiN2NmZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtNjgsMjEgKzY4LDE2IEBAIFJl
ZjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGljYXRv
ckRhdGEmIGRhdGEpCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRp
b25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFu
c2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIFJlZjxEb2N1bWVudD4gZG9j
dW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCk7CiAKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KCpmcmFtZSk7Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlv
biA9IGRvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBPcHRpb25TZXQ8VGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zOwogICAgIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9O
b3RTZXRGb2N1cyk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB0ZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlv
bkNoYW5nZXMpOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpOwogI2VuZGlmCi0gICAgVGVt
cG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgU2ltcGxlUmFu
Z2UgeyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOworICAgIFRlbXBvcmFy
eVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoZG9jdW1lbnQsIHsgU2ltcGxlUmFuZ2Ug
eyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOwogCiAgICAgVGV4dEluZGlj
YXRvckRhdGEgZGF0YTsKIApAQCAtOTEsNyArODYsNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4g
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dElu
ZAogCiAgICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwo
JnJhbmdlLCBvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAKLSAgICBp
ZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRp
Y2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0
YSwgKmRvY3VtZW50LT5mcmFtZSgpLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2Vs
ZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlKGRhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397178</attachid>
            <date>2020-04-22 00:52:54 -0700</date>
            <delta_ts>2020-04-22 22:11:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200422005253.patch</filename>
            <type>text/plain</type>
            <size>212977</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li42MDQ2
ZDA2MTE2ZWQ2Zjg5ZmFiOTBhM2VjODQ4NzU0MDQ2ZDQzMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDM0
ZmQwMGUxNWI4OGQ3MjJlOTVhOTliNWNjYmYwYjAwNWI3ZjgyN2UuLjc3MzdmZDk4NDhlYTA3ZDM4
NmExYjFlMWY1NDIxYmRiNzg2YzNlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOwogY2xhc3MgRG9jdW1lbnRU
aW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEVkaXRpbmdCZWhhdmlvcjsKK2Ns
YXNzIEVkaXRvcjsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
IGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRzOwpAQCAtMTI3LDYgKzEyOCw3IEBAIGNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEZvbnRGYWNlU2V0OwogY2xhc3MgRm9ybUNvbnRyb2xsZXI7CiBjbGFz
cyBGcmFtZTsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3Mg
RnVsbHNjcmVlbk1hbmFnZXI7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwpAQCAtMTU3Niw2ICsx
NTc4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21D
b250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3ImIGVk
aXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBj
b25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFj
ZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5z
aWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3Mg
PSAwKTsKQEAgLTIxMTYsNiArMjEyMyw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRpZmll
ZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2Iz
YWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li5hOWFjOTM4OTcyNTRlNmY4NDkyNTdk
MDBiYmYxMjBjMDM3OWVmMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGljIGJv
b2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5n
IGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAo
Y3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNz
cGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cisg
ICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpAQCAt
MjIwLDEyICsyMjAsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBG
cmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZG9jdW1lbnQuZnJhbWUoKSk7Cisg
ICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50
Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CkBAIC0y
MzYsMTIgKzIzNiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKLSAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc2Vs
ZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAs
IHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY0
LDcgKzI2NCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJh
Z3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7
CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0
LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdn
ZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAo
IXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcg
PSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIg
bW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywg
d2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29y
cmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBjYW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8g
dW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBIZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVs
IHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYg
KGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1
dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3Ip
OworICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3Jp
Z2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29t
bWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7Ci0gICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRp
dG9yQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdl
KCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdl
KCkgPyAmbV9kb2N1bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAog
VGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChl
bmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OwogICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Up
OwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00
NzksMTIgKzQ3OSwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VyQ29udHJvbGxlciA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmIChtYXJrZXJDb250
cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxh
Y2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUCiAKICAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRv
IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKICAgICBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICgh
c2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBl
bmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQo
d29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NTgsNyArNTU4LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKIAog
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphbHRlcm5h
dGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUu
cGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1lbnQucGFnZSgp
LT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0
aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5
NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiA9
IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
dHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAgICBhdXRvIHVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgdXBkYXRl
ZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldElu
UGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjE3LDExICs2MTcsMTEgQEAg
Ym9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50KQogICAgICAg
ICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UKLSAgICAgICAg
dGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoJm1fZG9j
dW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJhbWUud2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIGV2ZW50ID0g
VGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUoKS0+d2luZG93
UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwpAQCAtNjUzLDcgKzY1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FM
VEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigpOworICAgIGF1
dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxlY3Rpb24gPSBl
ZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTQ3NzRhNzZi
MjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4ZGMyNzdiM2Y3
OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOwogY2xhc3Mg
RWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShmcmFtZSkgeyB9
KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkKICAgICB+QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19F
TkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFsdGVybmF0aXZl
VGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3VuZGVmIFVOTEVT
U19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkxNTAuLmE3
ZDFiOTY1MjQ2NDIwZDExODI2NmM1M2E1ZmQ1MWJlYzc5NDY4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgsMTcgKzIyOCwx
NyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAgIC8vIHVwIHRo
ZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9zaXRpb24sIGFz
IGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhhbmRsZXMgdGhp
cyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdLCBidXQg
dGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1lLT5lZGl0b3Io
KS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNhbmNlbENv
bXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndpbGxVbmFw
cGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qgc2l6ZSA9
IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpOyAtLWkpCiAg
ICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0
b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS51
bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246
OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigpLndp
bGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1JlYXBwbHkoKTsK
IAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2RvY3VtZW50LT5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigp
LndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1l
bnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7Ci0gICAgYXV0
byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
IC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhl
cmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5k
LCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBk
ZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgp
KTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlKTsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBmcmFtZSgpLmVk
aXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsK
KyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVu
ZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1w
dHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBo
IHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBh
cmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUz
YzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uMTE5N2YxMmY2N2NiZjk3ZWViNjRmMzQwZWFmYWI4
NzJhY2I4OGJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwgaWYgdHlwaW5n
IHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2RlIGF0IHRoZSBw
cmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQw
LDcgKzc0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhz
KCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVS
ZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQu
cHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2ls
bCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE0LDcgKzgxNCw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgp
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0
VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOwogfQogCiB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUoKQpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKICAgICAgICAg
aWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBm
cmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIg
bWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0MCw3ICs5NDAsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkUmViYWxh
Y2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgeworICAgIGlmICgh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkgewogICAgICAg
ICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBAIC05NTQsNyAr
OTU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdpbmFsU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5k
aW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRpbmdTZWxlY3Rp
b24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2RhMTdjNzg5NGUy
Y2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZjNzczNzcwMGUy
YjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9u
KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGlu
Z1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKIH0KIAogRWRp
dENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVkaXRDb21tYW5k
OjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJu
ICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21tYW5kOjplZGl0
aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9uOwpAQCAtMTY4
LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVkaXRDb21tYW5k
Ojppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRhaW5lciA9IG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
OwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNyw3
ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAppbmRl
eCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3Y2Q3MzM0YzJj
OGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihFZGl0QWN0aW9u
KTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRWRpdENvbW1h
bmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQpOwogICAg
IEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNvbnN0OwotICAg
IEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJl
ZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi45YjdjZmQyYTZlM2I1YjNjYTJj
Y2QwNTk1MzU1NWFhMjJiMjZmZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAg
LTg2OSw3ICs4NjksNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkK
IAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3VtZW50LmVkaXRv
cigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzUDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi4yYzc2YWFmMTlkYzI0NmFhNGZkZGUxNjYxYmJlZDEyNTQz
MTZhNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CiAg
ICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKCpk
b2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJm
NjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLmUyYzI5ZmNjNmU3ZTc0MzE0YmUzOTkxZDBkZmNk
N2Y5MTdmMjUxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3Myw4ICsxNzMs
OCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29tbWFuZCA6IHB1
YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVhclRleHRDb21t
YW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRlQW5kQXBwbHko
Y29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBAQCBFZGl0QWN0
aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBF
ZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQgc3RhbGUgY29t
cG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7CisgICAgZG9jdW1l
bnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJl
ZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKKyAgICBhdXRv
IGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChkb2N1bWVudCkp
OwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsK
ICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywyNCBAQCB2b2lk
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJh
bWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxl
Y3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9u
PiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhmcmFt
ZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkp
CisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKG9w
dGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMp
Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1
ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9u
VG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIG1fc2Vs
ZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAg
ICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0byByZXZlYWxT
ZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OlJldmVhbFNl
bGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6OlJldmVhbFNl
bGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7CiAgICAgfQog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBk
YXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0VXBk
YXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKICNl
bmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAg
ICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05v
dFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwg
b3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBoYXMgbW92ZWQg
dGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBzaG91bGQgdXNl
IHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5nIG9wZXJhdGlv
bi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb247CiAgICAg
Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50KiBldmVu
dCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBhIGZhbGxiYWNr
IHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGluZ0JlaGF2aW9y
IEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3Io
bV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgp
KTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVudCgpOwogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAog
ZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRp
YyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYgdGFyZ2V0LCBD
bGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlw
Ym9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50
S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuREhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQo
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9y
ZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBj
b25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChkb2N1bWVudCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBh
c3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcgKzQ5OCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNtYXJ0RGVsZXRl
KCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9vbCBFZGl0b3I6
OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAgYm9vbCBFZGl0
b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChpc1R5cGluZ0Fj
dGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChkb2N1
bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21hcnREZWxl
dGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRl
V2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJp
dHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wg
c21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFj
dGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAgIENsZWFyVGV4
dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCkBA
IC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxhY2Ugc21hcnRS
ZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5LDE5ICs2ODks
MTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9M
b2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBhc3RlKSB7CiAg
ICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgp
KTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAg
ICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAgU3RyaW5nIHRl
eHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRC
eVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQogCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKiByYW5nZSkgY29uc3QKQEAgLTc0NCw3ICs3NDQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
b3B5KCkKIHsgICAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q29weSk7CkBAIC03NTIsNyArNzUyLDcgQEAgYm9vbCBF
ZGl0b3I6OnRyeURIVE1MQ29weSgpCiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmV0dXJuICFkaXNw
YXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJv
YXJkRXZlbnRLaW5kOjpDdXQpOwpAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgUmFuZ2UqIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKSBjb25zdAogewot
ICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElu
cHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkK
KyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRT
dXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwgYWN0aW9uKTsKQEAg
LTc4MiwxNyArNzgyLDE3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogCiBib29sIEVkaXRvcjo6
aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBp
ZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhlbmROb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxMiwxMiArODEyLDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0
aW9uKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3Rh
dGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewot
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFn
KTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKKyAgICB9IGVsc2UgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSwgdWxUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2Rl
ID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAg
LTgyNywxMiArODI3LDEyIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlz
dFN0YXRlKCkgY29uc3QKIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIG9sVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04NzIsNyArODcyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTg4Miw3ICs4ODIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlz
dCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogCiBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiB7
Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4g
bmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtOTAyLDcgKzkwMiw3IEBA
IFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkKIAogdm9pZCBFZGl0b3I6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCZkb2N1bWVudCgpKTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCBFbGVtZW50KiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb20oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAogCiBFbGVtZW50KiBFZGl0b3I6OmZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmaW5kRXZlbnRU
YXJnZXRGcm9tKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJldHVybiBm
aW5kRXZlbnRUYXJnZXRGcm9tKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
fQogCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC05NDYsMTMgKzk0NiwxMyBAQCB2b2lkIEVkaXRvcjo6
YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBz
ZWxlY3Rpb25UeXBlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CisgICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBpbnB1dFR5cGVOYW1lID0gaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbik7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0
aW5nU3R5bGVBbmRBY3Rpb24oKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVs
ZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFt
ZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2OSw3ICs5NjksOCBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNs
aWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBkaXNwYXRj
aElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKTsKIH0K
QEAgLTk4NCwxMyArOTg1LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZWxlY3Rpb25UeXBlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25UeXBlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCk7CiAgICAgaWYgKHNlbGVjdGlvblR5cGUgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBpbnB1dFR5cGVOYW1lID0gaW5w
dXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbik7CiAgICAgU3RyaW5nIGlu
cHV0RXZlbnREYXRhID0gaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZv
cmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0
IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xp
ZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNv
bHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0
cigpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5n
QWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwyNSBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwg
ZWRpdGluZ0FjdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rp
b25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkKKyAgICBpZiAoYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZS0+aGFzU3R5bGUocHJvcGVydHlJRCwgdmFsdWUp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNT
dHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+
dHJpU3RhdGVPZlN0eWxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZT
dHlsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAogICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTEzNiw3ICsxMTM3LDcgQEAgdm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kJiBjb21tYW5kKQogICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKCZj
b21tYW5kKTsKIAogICAgICAgICBpZiAoIWNvbW1hbmQucHJlc2VydmVzVHlwaW5nU3R5bGUoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAg
ICAgICAgLy8gQ29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkg
aW4gdGhlIGNhc2Ugb2YgdHlwaW5nCiAgICAgICAgIGlmIChtX2xhc3RFZGl0Q29tbWFuZC5nZXQo
KSA9PSAmY29tbWFuZCkKQEAgLTEyMDAsMTEgKzEyMDEsMTEgQEAgdm9pZCBFZGl0b3I6OnJlYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiYgY29tcG9zaXRpb24pCiAgICAgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9CiAKLUVkaXRvcjo6RWRpdG9y
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitFZGl0b3I6OkVkaXRvcihEb2N1
bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9raWxs
UmluZyhtYWtlVW5pcXVlPFBBTDo6S2lsbFJpbmc+KCkpCi0gICAgLCBtX3NwZWxsQ2hlY2tlciht
YWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4oZnJhbWUpKQotICAgICwgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZnJhbWUpKQor
ICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+KGRvY3VtZW50KSkK
KyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI+KGRvY3VtZW50KSkKICAgICAsIG1fZWRpdG9yVUlVcGRhdGVUaW1lcigq
dGhpcywgJkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKQogI2lmIEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLCBt
X3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycykKQEAgLTEyMjAsNyArMTIyMSw3IEBAIHZvaWQg
RWRpdG9yOjpjbGVhcigpCiAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CiAgICAgICAgIG1f
Y29tcG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKEVkaXRvckNsaWVudCogY2xp
ZW50ID0gdGhpcy0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBv
c2l0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRp
b24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICB9CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVu
ZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVh
cigpOwpAQCAtMTIzOCwxMiArMTIzOSwxMiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29s
IEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQsIFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2
ZW50LCBpbnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRU
eXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlv
bihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVy
KCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlv
bik7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxl
VGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAK
IGJvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2
ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAzLDEwICsxMzA0LDggQEAgYm9vbCBFZGl0b3I6
Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRp
b25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3Vz
ZWQgZnJhbWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJl
dmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGF1dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdl
KCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMTksMTAgKzEzMTgsMTAgQEAg
Ym9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBj
YXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRh
YmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25J
c0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29t
bWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTEzMzksMTAgKzEz
MzgsMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYg
KCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKIAot
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDYsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI1LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzQsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1NCw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzksNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNyw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUxLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODIsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNyw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUyLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4NCw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0yMDAwLDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNSw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMywxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODIsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDksNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjMsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChz
ZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTM5LDcg
KzIxMzgsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8v
IEZJWE1FOiBPbiBNYWMgT1MgWCwgd2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5n
IGFuZCBHcmFtbWFyIiBwYW5lbCwgd2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91
bGQgcmVtb3ZlIG1pc3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVk
UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpOwogCkBAIC0yMTUyLDE0ICsyMTUxLDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNw
ZWxsaW5nKCkKIAogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1l
KTsKLQorICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7Cisg
ICAgCiAgICAgLy8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2Vz
IC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAg
IC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94
aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5k
IG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcg
YXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxp
bmciIGNvbW1hbmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBz
cGVsbGluZ1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAg
Ym9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsyMzA3LDggQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNv
bmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBo
CiAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpn
cmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwu
cmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1t
YXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0
aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMyMCw4
ICsyMzE5LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSBy
ZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFu
Z2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVs
bGluZ09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5n
ZSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAg
IGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRX
b3JkKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5n
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIzMzQsNyBAQCBT
dHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWRO
b2RlKSBjb25zdAogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8
fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM4OCw3IEBAIFN0cmlu
ZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcp
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xp
ZW50KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0MDMsNyBAQCBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwg
U3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1
ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyArMjQxMSw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9v
CiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAg
aWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5n
U3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7
CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdy
YW51bGFyaXR5KTsKQEAgLTI0NzIsNyArMjQ3MSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3Rp
CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQo
bV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5NCwxOSArMjU5MywxOSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
d29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJl
cGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29y
cmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdT
ZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFu
Z2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9j
dW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNz
cGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJl
cGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRv
cigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RS
ZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAK
ICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAg
ICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51
bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
Rm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc4LDcgKzI2NzcsNyBAQCBib29sIEVkaXRvcjo6
aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJl
dHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNr
aW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCku
ZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKQpAQCAtMjcyNiw3ICsyNzI1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5
cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7Cisg
ICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAog
ICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFn
cmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVz
b2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9u
cyk7CkBAIC0yNzQxLDcgKzI3NDAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0K
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNv
bHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwor
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNr
LnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25O
dWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg3LDcgKzI3ODYsNyBAQCBzdGF0aWMgdm9pZCBj
b3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENo
ZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxD
aGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiBy
ZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8
RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0
Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRl
eHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJl
cXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKQEAgLTI4MTEsOSArMjgxMCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAg
Ym9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAg
ICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBz
aG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0
U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikg
ewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3
ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNh
cmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAg
ICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3Jh
cGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAg
ICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0
KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBu
ZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTUsMTMgKzI4OTQsMTMgQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBW
ZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVj
dGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0
b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2Fu
RWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3ICsyOTA5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8
VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsg
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hl
LT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25P
Y2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5NDAsMTMgKzI5MzksMTMgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFu
Z2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAm
JiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewog
ICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJh
bmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwor
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2Ut
PmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVj
dGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25G
b3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sg
aXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRv
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zMDIzLDggKzMwMjIsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vy
c0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQog
ICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90
ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMg
b2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0
aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUg
c3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5NiwxMSArMzA5NSw3IEBAIHZvaWQgRWRpdG9yOjpk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwg
Y29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IElu
dFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAg
ICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXco
KTsKICAgICBpZiAoIWZyYW1lVmlldykKQEAgLTMxMTcsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1Miw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzUsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjAwLDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NSw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjUsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODIsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk2LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwNCw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzE0LDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMiw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMzMzAsNyArMzMyNSw3IEBAIFJlZlB0
cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihj
b25zdCBJbnRTaXplJiBzaXplCiAgICAgcmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29w
eVJlZigpKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25C
ZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xk
ZXIucHRyKCkpIH07Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRy
aWdnZXJlZCkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJU
cmlnZ2VyZWQpKTsKIAogICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNTAsOCArMzM0
NSw4IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVy
RWxlbWVudCYgcGxhY2Vob2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAv
LyBUbyBtYXRjaCB0aGUgTGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0
IGluc2VydGlvbiBwb2ludCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0
byBiZS4KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAm
JiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQp
Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZ
IH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dl
cmVkKSk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZl
KCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVt
ZW50KQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9B
RkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNl
clRyaWdnZXJlZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRo
KEludFJlY3QmIHJlY3QpCkBAIC0zNDAzLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmly
c3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGll
bnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFm
ZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CkBAIC0zNDEyLDE3ICszNDA3LDE3IEBAIGJvb2wgRWRp
dG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uLCBjb25zdCBWCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVk
aXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBpZiAo
c3R5bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5
bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgY3Vy
cmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGU7
Ci0gICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkKKyAgICBpZiAoYXV0byBleGlzdGluZ1R5cGluZ1N0eWxlID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQogICAgICAgICB0eXBpbmdTdHlsZSA9IGV4
aXN0aW5nVHlwaW5nU3R5bGUtPmNvcHkoKTsKICAgICBlbHNlCiAgICAgICAgIHR5cGluZ1N0eWxl
ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKLSAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBp
bmdTdHlsZUF0KHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOworICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGlu
Z1N0eWxlQXQoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICAvLyBIYW5kbGUgYmxvY2sgc3R5bGVz
LCBzdWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxF
ZGl0aW5nU3R5bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHlsZS0+ZXh0cmFjdEFuZFJlbW92ZUJs
b2NrUHJvcGVydGllcygpOwpAQCAtMzQzMCw3ICszNDI1LDcgQEAgdm9pZCBFZGl0b3I6OmNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICAgICAgQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBibG9j
a1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKIAogICAgIC8vIFNldCB0aGUg
cmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CisgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CiB9CiAK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkBAIC0zNDg5LDE5ICszNDg0LDE5
IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAog
CiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlv
bnMgb3B0aW9ucykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAg
UmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAotICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0
cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwogCiAg
ICAgaWYgKCFyZXN1bHRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2Us
IERPV05TVFJFQU0pKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVBTSkpOwogCiAgICAgaWYgKCEo
b3B0aW9ucy5jb250YWlucyhEb05vdFJldmVhbFNlbGVjdGlvbikpKQotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zNTk4
LDcgKzM1OTMsNyBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogICAgIGlmIChyYW5nZSkgewog
ICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0gJmRvY3VtZW50KCkpCiAgICAg
ICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOwotICAgICAgICBlbHNlIGlmICghaXNGcmFtZUlu
UmFuZ2UobV9mcmFtZSwgKnJhbmdlKSkKKyAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdl
KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKQEAgLTM2NjgsNyArMzY2Myw3IEBAIHZvaWQgRWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBP
cHRpb25TZXQ8RnJhbWVTCiAjZW5kaWYKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOworICAgICAgICBjbGll
bnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogCiAj
aWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpKQpAQCAtMzY5MSw4
ICszNjg2LDYgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMKIAogYm9vbCBFZGl0b3I6OnNob3Vs
ZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKQogewotICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuaXNUZWxlcGhv
bmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1
cHBvcnRlZCgpOwogfQogCkBAIC0zNzA1LDkgKzM2OTgsOSBAQCB2b2lkIEVkaXRvcjo6c2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogCiAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+
IG1hcmtlZFJhbmdlczsKIAotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWZyYW1lU2VsZWN0aW9uLmlzUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBp
ZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hh
bmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyOSw3ICszNzIyLDcgQEAgdm9p
ZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBSZWZQdHI8
UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2Vs
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNzQyLDcgKzM3MzUsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKQogICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJh
bmdlcy5hcHBlbmQocmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFt
ZS5wYWdlKCkpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAg
ICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVt
YmVyUmFuZ2VzQ2hhbmdlZCgpOwogfQogCkBAIC0zODAxLDkgKzM3OTQsOSBAQCB2b2lkIEVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGphY2VudFdv
cmRzOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGVkU2VudGVuY2U7Ci0gICAg
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOwotICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKLSAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXdTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpKTsKKyAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0
aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24o
c3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5l
d1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICNlbHNlCkBAIC0zODU2LDcgKzM4NDks
NyBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBpZiAoIW1f
ZWRpdG9yVUlVcGRhdGVUaW1lcldhc1RyaWdnZXJlZEJ5RGljdGF0aW9uKQogICAgICAgICBtX2Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKIAotICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlV
cGRhdGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAjaWYgRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBub3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRhdGVz
KCk7CkBAIC0zODgzLDcgKzM4NzYsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUo
Tm9kZSogbm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3Ro
KSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9k
ZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMzk1MCwxMCArMzk0MywxMCBAQCBPcHRpb25TZXQ8VGV4dENo
ZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9k
ZSYgcm9vdAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJh
bmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCitzdGF0aWMgUmVm
UHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQp
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3Jk
UmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gc2VsZWN0
aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkg
OiBkb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiBzdGF0aWMg
Ym9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKQEAgLTM5NjcsOCArMzk2MCw4IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxk
UmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNh
bmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOworICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRl
UmFuZ2VGb3JTZWxlY3Rpb24obV9kb2N1bWVudCk7CiAgICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5
VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsKIApA
QCAtMzk3Nyw3ICszOTcwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVx
dWVzdCgpIGNvbnN0CiAgICAgCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7
CiB9CiAKQEAgLTQwNDQsNyArNDAzNyw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0
dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBGb250QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7Ci0gICAgYXV0byog
c3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOwor
ICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1l
KCksIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBpZiAobm9kZVRv
UmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKQEAgLTQwODUsNyAr
NDA3OCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXR0cmlidXRlcy50
ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlciht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF0dHJpYnV0ZXMu
dGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIAogICAgIHN3aXRj
aCAoc3R5bGUtPnRleHRBbGlnbigpKSB7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoK
QEAgLTQxMTEsNyArNDEwNCw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0
ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
YXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdT
dHlsZSgpKTsKKyAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpOwogICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdT
dHlsZS0+c3R5bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVlID0gdHlwaW5nU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpA
QCAtNDE5OSwxMiArNDE5Miw4IEBAIHZvaWQgRWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFjaG1l
bnRVcGRhdGVzKCkKICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiByZW1vdmVkQXR0YWNobWVu
dElkZW50aWZpZXJzKQogICAgICAgICBjbGllbnQoKS0+ZGlkUmVtb3ZlQXR0YWNobWVudFdpdGhJ
ZGVudGlmaWVyKGlkZW50aWZpZXIpOwogCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9y
IChhdXRvJiBpZGVudGlmaWVyIDogaW5zZXJ0ZWRBdHRhY2htZW50SWRlbnRpZmllcnMpIHsKLSAg
ICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IGRvY3VtZW50LT5hdHRhY2htZW50Rm9ySWRlbnRp
ZmllcihpZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IG1fZG9jdW1l
bnQuYXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCiAgICAgICAgICAgICBjbGll
bnQoKS0+ZGlkSW5zZXJ0QXR0YWNobWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXIsIGF0dGFj
aG1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRy
KSwgYXR0YWNobWVudC0+aGFzRW5jbG9zaW5nSW1hZ2UoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDIyNyw3ICs0MjE2LDcgQEAgdm9pZCBF
ZGl0b3I6Omluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBPcHRpb25h
bDx1aW50NjRfdD4mJiBmaWwKIAogdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKLSAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSA9IHRydWU7CiAKQEAgLTQyNDYsNyArNDIzNSw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2Nl
cHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKIGJv
b2wgRWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgmbV9mcmFtZSk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9kb2N1bWVudC5mcmFtZSgp
KTsKIH0KIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JN
YXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKQEAgLTQyNjIsMTMgKzQyNTEsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2ZWx0ZXJuYXRpdmUoY29uc3Qg
U3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZwogdm9pZCBFZGl0b3I6OnRvZ2dsZU92ZXJ3cml0ZU1v
ZGVFbmFibGVkKCkKIHsKICAgICBtX292ZXJ3cml0ZU1vZGVFbmFibGVkID0gIW1fb3ZlcndyaXRl
TW9kZUVuYWJsZWQ7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tD
dXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7Ci19Ci0KLURvY3VtZW50JiBFZGl0b3I6OmRv
Y3VtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9mcmFtZS5kb2N1bWVudCgpKTsKLSAgICBy
ZXR1cm4gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFNob3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVkKTsKIH0KIAogUmVm
UHRyPFJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQpAQCAtNDMyMSw5ICs0
MzA0LDkgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCi0g
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmICghbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3Zl
OwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUs
IG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LmZyYW1lKCksIG5vZGVUb1JlbW92
ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogZm9udCA9IG51
bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkgewpAQCAtNDMzNSwxMSArNDMxOCwxMSBAQCBjb25z
dCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9k
ZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24o
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBO
b2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDM3MSw3
ICs0MzU0LDcgQEAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0RWRpdGFi
bGVJbWFnZSgpCiAKIGJvb2wgRWRpdG9yOjpjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9uZUltYWdl
cygpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXgg
YWQ5ZWRhMjYxOGM5YTg4MGJlY2JiMWNlNGQ2OGJiNTliODljMjBjMC4uZmZhNzdkMGU1NDhlN2Nl
NzdkY2Q0N2JiMGU2MWMxMGE4NDc3ZjAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiRWRpdG9y
SW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFdy
aXRlckRhdGEuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKQEAgLTExOSwxMyArMTIwLDEz
IEBAIGVudW0gY2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uIDogdWludDhfdCB7CiAKIGNs
YXNzIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVj
dGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9j
dW1lbnQmLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JU
IH5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJh
bWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIE9wdGlvblNldDxUZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb24+IG1fb3B0aW9uczsKICAgICBib29sIG1fd2FzSWdub3JpbmdT
ZWxlY3Rpb25DaGFuZ2VzOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzcsNyArMTM4
LDcgQEAgcHJpdmF0ZToKIGNsYXNzIElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlIHsKIHB1
YmxpYzoKICAgICBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZShGcmFtZSYgZnJhbWUpCi0g
ICAgICAgIDogbV9zZWxlY3Rpb25DaGFuZ2UoZnJhbWUsIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQorICAgICAgICA6IG1fc2Vs
ZWN0aW9uQ2hhbmdlKCpmcmFtZS5kb2N1bWVudCgpLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKICAgICB7CiAgICAgfQogCkBA
IC0xNTAsNyArMTUxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEVkaXRvciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRWRpdG9yKEZyYW1lJik7Cisg
ICAgZXhwbGljaXQgRWRpdG9yKERvY3VtZW50Jik7CiAgICAgfkVkaXRvcigpOwogCiAgICAgZW51
bSBjbGFzcyBQYXN0ZU9wdGlvbiA6IHVpbnQ4X3QgewpAQCAtMjcxLDcgKzI3Miw3IEBAIHB1Ymxp
YzoKICAgICBjbGFzcyBDb21tYW5kIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFdFQkNPUkVfRVhQ
T1JUIENvbW1hbmQoKTsKLSAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1h
bmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBGcmFtZSYpOworICAgICAgICBDb21tYW5kKGNvbnN0
IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIERvY3VtZW50Jik7
CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyID0gU3RyaW5nKCksIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQgPSBudWxscHRyKSBjb25z
dDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVjdXRlKEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQpIGNvbnN0OwpAQCAtMjg4LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgog
ICAgICAgICBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIG1fY29tbWFuZCB7IG51bGxwdHIg
fTsKICAgICAgICAgRWRpdG9yQ29tbWFuZFNvdXJjZSBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRy
PERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAg
ICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kIGNvbW1hbmQoY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSk7IC8vIENvbW1hbmQgc291cmNlIGlzIENvbW1hbmRGcm9tTWVudU9yS2V5Qmlu
ZGluZy4KQEAgLTU2Nyw3ICs1NjksNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYpOwogCiBwcml2
YXRlOgotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0OworICAgIERvY3VtZW50JiBkb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAogICAgIGJvb2wgY2FuRGVsZXRl
UmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQmKTsKQEAgLTYxOCw3ICs2MjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3Vt
ZW50JiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbV9sYXN0
RWRpdENvbW1hbmQ7CiAgICAgUmVmUHRyPFRleHQ+IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIHVu
c2lnbmVkIG1fY29tcG9zaXRpb25TdGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2RjM2I5MGZiNmMwNDcxZmFhMTBmYjhjNDQu
LmJkNTE4MGViNDAwZWE3OTIxNTFiNmY3OThiNjBlY2I4Y2ZmZGFlYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTEwOSw2ICsxMTA5LDcgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlIHNvdXJjZSwKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVN3YXBXaXRoTWFyayhGcmFt
ZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
KyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rpb24oZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAg
UmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCk7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC0xODM2LDEy
ICsxODM3LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGludGVybmFs
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogCiBFZGl0b3I6OkNvbW1hbmQgRWRp
dG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiB7Ci0gICAgcmV0dXJuIENv
bW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlC
aW5kaW5nLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29t
bWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZG9jdW1lbnQpOwogfQog
CiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewotICAgIHJldHVybiBDb21tYW5kKGlu
dGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9mcmFtZSk7CisgICAgcmV0dXJu
IENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgc291cmNlLCBtX2RvY3VtZW50
KTsKIH0KIAogYm9vbCBFZGl0b3I6OmNvbW1hbmRJc1N1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5k
aW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCkBAIC0xODUzLDEyICsxODU0LDEzIEBAIEVk
aXRvcjo6Q29tbWFuZDo6Q29tbWFuZCgpCiB7CiB9CiAKLUVkaXRvcjo6Q29tbWFuZDo6Q29tbWFu
ZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1hbmQsIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBGcmFtZSYgZnJhbWUpCitFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3Qg
RWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJj
ZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jb21tYW5kKGNvbW1hbmQpCiAgICAgLCBt
X3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyAmZnJhbWUgOiBudWxscHRy
KQorICAgICwgbV9kb2N1bWVudChjb21tYW5kID8gJmRvY3VtZW50IDogbnVsbHB0cikKKyAgICAs
IG1fZnJhbWUoY29tbWFuZCA/IGRvY3VtZW50LmZyYW1lKCkgOiBudWxscHRyKQogewotICAgIEFT
U0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKKyAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9kb2N1
bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYg
cGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjb25zdApAQCAtMTg2OCw5ICsxODcw
LDkgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0
ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGMKICAgICAgICAgaWYgKCFhbGxvd0V4ZWN1dGlv
bldoZW5EaXNhYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBh
dXRvIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudC0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3Vt
ZW50KCkgIT0gZG9jdW1lbnQpCisKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAhPSBtX2Zy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gbV9jb21tYW5kLT5leGVj
dXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQsIG1fc291cmNlLCBwYXJhbWV0ZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJm
ZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li5iYmNmY2NlN2FlY2JmZGY3MGMzZmZiOGY2YzJm
ZjhjMmJkMjA0YzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtMTM5LDEzICsxMzksMTQgQEAgSW50UmVjdCBEcmFnQ2FyZXRDb250cm9sbGVyOjplZGl0
YWJsZUVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCkgY29uc3QKICAgICByZXR1cm4g
eyB9OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxT
ZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1Vz
ZURpcmVjdGlvbmFsU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4g
IWZyYW1lIHx8IGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0
aW9uQXNEaXJlY3Rpb25hbCgpOworICAgIHJldHVybiAhZG9jdW1lbnQgfHwgZG9jdW1lbnQtPmVk
aXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7
CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCi0gICAg
OiBtX2ZyYW1lKGZyYW1lKQorRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKERvY3VtZW50
KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2ZyYW1lKGRv
Y3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQog
ICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICNpZiBFTkFCTEUoVEVY
VF9DQVJFVCkKQEAgLTE1Niw3ICsxNTcsNyBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCiAgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZh
bHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gZnJhbWUpCisgICAgLCBt
X2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICwgbV9zaG91
bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUo
ZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2Vs
ZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjYsMjQgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1l
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fY2FyZXRCbGlua3ModHJ1ZSkKICNlbmRp
ZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1l
KSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CisgICAgCisg
ICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CisgICAgaWYg
KGFjdGl2ZUFuZEZvY3VzZWQpCisgICAgICAgIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisjaWYg
VVNFKFVJS0lUX0VESVRJTkcpCisgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMg
bm90IGJsaW5rKQorICAgIHNldENhcmV0VmlzaWJsZShhY3RpdmVBbmRGb2N1c2VkKTsKKyNlbHNl
CisgICAgc2V0Q2FyZXRWaXNpYmlsaXR5KGFjdGl2ZUFuZEZvY3VzZWQgPyBWaXNpYmxlIDogSGlk
ZGVuKTsKKyNlbmRpZgogfQogCiBFbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6cm9vdEVkaXRhYmxl
RWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiBzZWxlY3Rp
b25Sb290ID0gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIHJldHVybiBz
ZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpOworICAgIHJldHVybiBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6
IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
Ojptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQsNyArMjk1LDcgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlmZmVyZW50KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3RtZW50TW9kZSBlbmRw
b2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlv
biA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdTZWxlY3Rpb24uaXNE
aXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlvbi5pc0RpcmVjdGlv
bmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2luYWxCYXNlLmlzTm90
TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJsZUJhc2UoKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsNyArMzMzLDcgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBib29sIHNob3VsZENsZWFyVHlwaW5nU3R5bGUgPSBv
cHRpb25zLmNvbnRhaW5zKENsZWFyVHlwaW5nU3R5bGUpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBuZXdTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb25Qb3NzaWJseVdpdGhvdXREaXJlY3Rpb247Ci0g
ICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAg
IGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAg
ICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CiAKICAgICBpZiAoIW1f
ZnJhbWUpIHsKQEAgLTMzNCw3ICszNDUsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2FuIGdldCBpbnRvIGFuIGlu
ZmluaXRlIGxvb3AKICAgICBpZiAoRG9jdW1lbnQqIG5ld1NlbGVjdGlvbkRvY3VtZW50ID0gbmV3
U2VsZWN0aW9uLmJhc2UoKS5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8RnJhbWU+
IG5ld1NlbGVjdGlvbkZyYW1lID0gbmV3U2VsZWN0aW9uRG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAg
ICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlv
bkRvY3VtZW50ICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChuZXdT
ZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9IG1fZG9j
dW1lbnQpIHsKICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25GcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucywgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQoKSwgYWxpZ24sIGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3Np
YmxlIHRoYXQgZHVyaW5nIHRoZSBhYm92ZSBzZXQgc2VsZWN0aW9uLCB0aGlzIEZyYW1lU2VsZWN0
aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5CiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0RnJhbWVF
bGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQsIGJ1dCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMg
bm8gbG9uZ2VyIHZhbGlkIHNpbmNlCkBAIC0zNDksNyArMzYwLDcgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxl
U2VsZWN0aW8KICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CiAKICAgICBpZiAoY2xv
c2VUeXBpbmcpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZnJhbWUpOwor
ICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygqbV9kb2N1bWVudCk7CiAKICAgICBp
ZiAoc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSkKICAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwpA
QCAtMzU3LDcgKzM2OCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhv
dXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKICAgICBib29sIGRpZE11dGF0ZVNl
bGVjdGlvbiA9IG9sZFNlbGVjdGlvbiAhPSBuZXdTZWxlY3Rpb247CiAgICAgaWYgKGRpZE11dGF0
ZVNlbGVjdGlvbikKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5n
ZSgpOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7
CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDM1ICszODIsMzEg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFy
YW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgp
OwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25zICYgRG9Ob3RT
ZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxl
bWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgICAgIHNldEZvY3VzZWRF
bGVtZW50SWZOZWVkZWQoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbmVlZGVk
LgotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBv
bGRGb2N1c2VkRWxlbWVudCkKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCisgICAgICAgICAgICBtX2RvY3VtZW50LT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0
aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQgd2lsbCBi
ZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlmIG5lY2Vz
c2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJ
ZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9y
KCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOwogICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3Rpb24tYXBpLyNzZWxlY3Rpb25jaGFuZ2Ut
ZXZlbnQKICAgICAvLyBGSVhNRTogU3BlYyBkb2Vzbid0IHNwZWNpZnkgd2hpY2ggdGFzayBzb3Vy
Y2UgdG8gdXNlLgotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnF1ZXVlVGFza1RvRGlzcGF0Y2hF
dmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6Oklz
Q2FuY2VsYWJsZTo6Tm8pKTsKKyAgICBtX2RvY3VtZW50LT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZl
bnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0
aW9uU2V0PFNldFNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQgaW50ZW50LCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduLCBUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCiB7Ci0gICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsK
KyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3RvcihtX2RvY3VtZW50KTsKICAgICBpZiAoIXNl
dFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2Uoc2VsZWN0aW9uLCBvcHRpb25zLCBh
bGlnbiwgZ3JhbnVsYXJpdHkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGlmIChvcHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uVXBUb01haW5GcmFt
ZSkKICAgICAgICAgbV9zZWxlY3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6
UmV2ZWFsVXBUb01haW5GcmFtZTsKICAgICBlbHNlIGlmIChvcHRpb25zICYgUmV2ZWFsU2VsZWN0
aW9uKQpAQCAtNDExLDI3ICs0MTgsMjcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBt
X3NlbGVjdGlvblJldmVhbEludGVudCA9IGludGVudDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25V
cGRhdGUgPSB0cnVlOwogCi0gICAgaWYgKGRvY3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNhbGMo
KSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAo
ZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+bGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0UGVuZGluZygp
KQogICAgICAgICByZXR1cm47CiAKICAgICB1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oaW50ZW50
KTsKIAogICAgIGlmIChvcHRpb25zICYgSXNVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBjbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAgaWYgKGF1
dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICAgICAg
Y2xpZW50LT5kaWRFbmRVc2VyVHJpZ2dlcmVkU2VsZWN0aW9uQ2hhbmdlcygpOwogICAgIH0KIH0K
IAotc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRnJh
bWUmIGZyYW1lKQorc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9y
U3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50KQogewogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAg
IGZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
I2Vsc2UKLSAgICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAg
ZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ0MSw3ICs0
NDgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZShSZXZl
YWxTZWxlY3Rpb25BZnRlclVwZGF0ZSByZXZlYWxNbwogICAgIGlmIChyZXZlYWxNb2RlID09IFJl
dmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlOjpGb3JjZWQpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2
ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRpbmdTZWxl
Y3Rpb25VcGRhdGUgPSB0cnVlOwotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50
LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9u
KCk7CiB9CiAKQEAgLTQ1Nyw3ICs0NjQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVB
bmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAg
IGlmIChtX3NlbGVjdGlvblJldmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RS
ZXZlYWwpIHsKICAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBp
ZiAobV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxl
Y3Rpb25Jc1JldmVhbGVkKCkpCisgICAgICAgIGlmIChtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhh
dmlvcigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKICAgICAg
ICAgICAgIGFsaWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxp
bmdTZWxlY3Rpb24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Nyb2xs
QWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2Vs
ZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFsd2F5cyA6IFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKQEAgLTQ3MSw3ICs0NzgsNyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQmIGludAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlRGF0YURldGVjdG9yc0ZvclNl
bGVjdGlvbigpCiB7CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zY2FuU2VsZWN0aW9u
Rm9yVGVsZXBob25lTnVtYmVycygpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNjYW5TZWxl
Y3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCk7CiAjZW5kaWYKIH0KIApAQCAtNzAzLDcgKzcxMCw3
IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6cG9zaXRpb25Gb3JQbGF0Zm9ybShi
b29sIGlzR2V0U3RhcnQpIGNvbnN0CiAgICAgLy8gYmFzZS9leHRlbnQgYWx3YXlzIHBvaW50IHRv
IHRoZSBzYW1lIG5vZGVzIGFzIHN0YXJ0L2VuZCwgYnV0IHdoaWNoIHBvaW50cwogICAgIC8vIHRv
IHdoaWNoIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIGlzQmFzZUZpcnN0LiBUaGVuIHRoaXMgY2Fu
IGJlIGNoYW5nZWQKICAgICAvLyB0byBqdXN0IHJldHVybiBtX3NlbC5leHRlbnQoKS4KLSAgICBp
ZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4
dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2ludCgpKQorICAgIGlmIChtX2RvY3VtZW50ICYm
IG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5kU2VsZWN0
aW9uRnJvbUV4dGVudEVuZHBvaW50KCkpCiAgICAgICAgIHJldHVybiBtX3NlbGVjdGlvbi5pc0Jh
c2VGaXJzdCgpID8gbV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpIDogbV9zZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7CiAKICAgICByZXR1cm4gaXNHZXRTdGFydCA/IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpIDogbV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpOwpAQCAtNzIzLDcgKzczMCw3IEBAIFZp
c2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bmV4dFdvcmRQb3NpdGlvbkZvclBsYXRmb3Jt
KGNvbnN0IFZpc2libGVQb3NpdGlvCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0
ZXJDdXJyZW50V29yZCA9IG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7CiAKLSAg
ICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBT
cGFjZVdoZW5Nb3ZpbmdSaWdodCgpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVu
dC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKSkg
ewogICAgICAgICAvLyBJbiBvcmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyByaWdodCwg
d2UgYWR2YW5jZSBvbmUKICAgICAgICAgLy8gd29yZCBmdXJ0aGVyIGFuZCB0aGVuIG1vdmUgb25l
IHdvcmQgYmFjay4gR2l2ZW4gdGhlCiAgICAgICAgIC8vIHNlbWFudGljcyBvZiBwcmV2aW91c1dv
cmRQb3NpdGlvbigpIHRoaXMgd2lsbCBwdXQgdXMgYXQgdGhlCkBAIC04NTUsNyArODYyLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGIKICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlv
bihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkucmlnaHQodHJ1
ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVs
YXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9mcmFt
ZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3Zp
bmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2Rv
Y3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNl
V2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAg
ICBwb3MgPSByaWdodFdvcmRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVu
TW92aW5nUmlnaHQpOwogICAgICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTA3Niw3ICsx
MDgzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm8KICAgICAgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSku
bGVmdCh0cnVlLCByZWFjaGVkQm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdv
cmRHcmFudWxhcml0eTogewotICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQg
PSBtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNl
V2hlbk1vdmluZ1JpZ2h0KCk7CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCA9IG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRT
a2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJl
bnRQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7
CiAgICAgICAgIHBvcyA9IGxlZnRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1Nw
YWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEz
NjIsNyArMTM2OSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBh
bHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAotICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJp
Z2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKSB7CisgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5n
ZSgpICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2RvY3VtZW50ICYmIEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNj
ZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVj
dGlvbkJvdW5kYXJ5LCB0ZXh0U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC0xMzc0LDggKzEzODEsOCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRp
b24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBpZiAo
IXdhc1JhbmdlICYmIGFsdGVyID09IEFsdGVyYXRpb25Nb3ZlICYmIHBvc2l0aW9uID09IG9yaWdp
bmFsU3RhcnRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICht
X2ZyYW1lICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNoZTo6
YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgICAgIGNh
Y2hlLT5zZXRUZXh0U2VsZWN0aW9uSW50ZW50KHRleHRTZWxlY3Rpb25JbnRlbnQoYWx0ZXIsIGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHkpKTsKICAgICB9CiAKQEAgLTEzODQsNyArMTM5MSw3IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgLy8gTm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5
cGUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3VsZCBiZQogICAgIC8v
IHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gdHlwZSBpZiB0aGVyZSB3ZXJlIG5vIHhQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbiBzZXQuCiAgICAgTGF5b3V0VW5pdCB4ID0gbGluZURpcmVjdGlv
blBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFNUQVJUKTsKLSAgICBtX3NlbGVjdGlv
bi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1f
ZnJhbWUpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNl
dElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1
bWVudCkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICBzd2l0Y2ggKGFsdGVy
KSB7CiAgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKQEAgLTEzOTQsNyArMTQwMSw3IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAgICAgICAgaWYgKCFtX3NlbGVjdGlvbi5pc0NhcmV0KCkK
ICAgICAgICAgICAgICYmIChncmFudWxhcml0eSA9PSBXb3JkR3JhbnVsYXJpdHkgfHwgZ3JhbnVs
YXJpdHkgPT0gUGFyYWdyYXBoR3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gTGluZUdyYW51
bGFyaXR5KQotICAgICAgICAgICAgJiYgbV9mcmFtZSAmJiAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7
CisgICAgICAgICAgICAmJiBtX2RvY3VtZW50ICYmICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhh
dmlvcigpLnNob3VsZEV4dGVuZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsK
ICAgICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgc2VsZWN0aW9uIGdvIGFjcm9zcyB0aGUgYmFz
ZSBwb3NpdGlvbiBkaXJlY3RseS4gTmVlZGVkIHRvIG1hdGNoIG1hYwogICAgICAgICAgICAgLy8g
YmVoYXZpb3Igd2hlbiwgZm9yIGluc3RhbmNlLCB3b3JkLXNlbGVjdGluZyBiYWNrd2FyZHMgc3Rh
cnRpbmcgd2l0aCB0aGUgY2FyZXQgaW4KICAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgYSB3
b3JkIGFuZCB0aGVuIHdvcmQtc2VsZWN0aW5nIGZvcndhcmQsIGxlYXZpbmcgdGhlIGNhcmV0IGlu
IHRoZQpAQCAtMTQwNyw3ICsxNDE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVB
bHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAogICAg
ICAgICAvLyBTdGFuZGFyZCBNYWMgYmVoYXZpb3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3VuZGFy
eSBpcyBncm93IHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gbGVhdmluZyB0aGUKICAgICAgICAg
Ly8gYmFzZSBpbiBwbGFjZSBhbmQgbW92aW5nIHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0Vmll
dy4KLSAgICAgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigp
LnNob3VsZEFsd2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1f
c2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCisgICAgICAg
IGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91
bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVj
dGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQogICAgICAgICAgICAg
c2V0RXh0ZW50KHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2lu
Z0Jsb2NrKCk7CkBAIC0xNTE3LDcgKzE1MjQsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2Rp
ZnkoRUFsdGVyYXRpb24gYWx0ZXIsIHVuc2lnbmVkIHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwog
ICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVs
YXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKIAotICAgIG1fc2VsZWN0aW9uLnNldElzRGly
ZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwg
YWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rp
b25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBh
bHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU3
NSw3ICsxNTgyLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9u
KCkKICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIGlmIChhdXRv
KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKGF1dG8qIHZpZXcg
PSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNs
ZWFyU2VsZWN0aW9uKCk7CiAKICAgICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJh
bmNlKFZpc2libGVTZWxlY3Rpb24oKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSwgQWxp
Z25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CkBAIC0xNjU1
LDkgKzE2NjIsOSBAQCBzdGF0aWMgYm9vbCBpc05vbk9ycGhhbmVkQ2FyZXQoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBJbnRSZWN0IEZyYW1lU2VsZWN0aW9uOjphYnNvbHV0
ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKQogewotICAgIGlmICghbV9mcmFtZSkKKyAg
ICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgdXBkYXRl
U2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIHVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKICAgICByZWNvbXB1
dGVDYXJldFJlY3QoKTsKICAgICBpZiAoaW5zaWRlRml4ZWQpCiAgICAgICAgICppbnNpZGVGaXhl
ZCA9IG1fY2FyZXRJbnNpZGVQb3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwxMCArMTY4MiwxMCBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgIGlmICghc2hvdWxk
VXBkYXRlQ2FyZXRSZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9m
cmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEZyYW1lVmlldyogdiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZp
ZXcqIHYgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTE2OTAsNyArMTY5Nyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29t
cHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgICAgICBjbGVhckNhcmV0UmVjdCgpOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBtX3NlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgICAgIGlmICh1cGRhdGVDYXJldFJlY3QobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgdmlzaWJsZVN0YXJ0KSkgeworICAgICAgICAgICAgaWYgKHVwZGF0
ZUNhcmV0UmVjdChtX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAg
Y2FyZXROb2RlID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICAgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAg
ICAgICAgfQpAQCAtMTcxNSw3ICsxNzIyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21w
dXRlQ2FyZXRSZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRf
Q0FSRVQpCi0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5y
ZW5kZXJWaWV3KCkpIHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJl
bmRlclZpZXcoKSkgewogICAgICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRl
bnRFZGl0YWJsZSA9IG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlv
dXNDYXJldE5vZGUgJiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7
CiAgICAgICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmlldywgcHJldmlvdXNPck5ld0NhcmV0
Tm9kZUlzQ29udGVudEVkaXRhYmxlKSkgewogICAgICAgICAgICAgaWYgKG1fcHJldmlvdXNDYXJl
dE5vZGUpCkBAIC0xODk0LDEyICsxOTAxLDExIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRh
aW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKICAgICBpZiAoIWlzUmFuZ2UoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9kb2N1bWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBv
aW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOwor
ICAgIG1fZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKICAgICBO
b2RlKiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYgKCFpbm5lck5vZGUg
fHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2
OCw5ICsxOTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQo
KTsKICAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAg
ICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5j
YW5TZWxlY3RBbGwoKSkgewpAQCAtMjAwMCw4ICsyMDA0LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6c2VsZWN0QWxsKCkKICAgICAgICAgaWYgKHJvb3QpCiAgICAgICAgICAgICBzZWxlY3RTdGFy
dFRhcmdldCA9IHJvb3QtPnNoYWRvd0hvc3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2VsZWN0
U3RhcnRUYXJnZXQgPSBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKKyAgICAgICAgICAgIHJv
b3QgPSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdFN0
YXJ0VGFyZ2V0ID0gbV9kb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAg
IH0KICAgICBpZiAoIXJvb3QpCkBAIC0yMDU4LDkgKzIwNjIsOCBAQCBib29sIEZyYW1lU2VsZWN0
aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBT
aG91bGRDbAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2Vk
KCkKIHsKICAgICBib29sIGFjdGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsK
LSAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KCptX2ZyYW1lLT5kb2N1bWVudCgpKTsKIAotICAg
IGRvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogCiAjaWYgVVNFKFVJS0lUX0VESVRJTkcpCiAgICAgLy8gQ2FyZXQg
YmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQpAQCAtMjA3MSw3ICsyMDc0LDcgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAv
LyBCZWNhdXNlIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgYW5kCiAg
ICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0
aGUgZnJhbWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9z
ZSBjb2xvcnMgd2VyZSBwYWludGVkLgotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1l
bnQtPnJlbmRlclZpZXcoKSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQt
PnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAg
ICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDg1
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkK
ICAgICAvLyBCZWNhdXNlIFN0eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAog
ICAgIC8vIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0
aXZlLCB3ZSBoYXZlIHRvCiAgICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0
IGRlcGVuZGVkIG9uIHRob3NlLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQt
PmZvY3VzZWRFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1l
bnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1l
bnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0
eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQpAQCAtMjEwNywxMyArMjExMCwxMyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXRGb2N1c2VkKGJvb2wgZmxhZykKIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6
aXNGb2N1c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1f
ZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0
aXZlKCk7CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50LT5wYWdlKCkgJiYgbV9k
b2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYg
RU5BQkxFKFRFWFRfQ0FSRVQpCi1pbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5n
RHVlVG9UeXBpbmdDb21tYW5kKEZyYW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91
bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewot
ICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVk
aXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAg
IHJldHVybiBkb2N1bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQt
PmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwog
fQogI2VuZGlmCiAKQEAgLTIxMzIsMTIgKzIxMzUsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRT
aG93QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRP
ZkxpbmUobV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5n
ZWRPckNsZWFyZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93
c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBi
b29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdF
bmFibGVkKCk7CiAgICAgYm9vbCBzaG91bGRCbGluayA9ICFwYWludEJsb2NrQ3Vyc29yICYmIGNh
cmV0SXNWaXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRp
dGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKIAogICAgIC8vIElmIHRoZSBjYXJldCBtb3ZlZCwg
c3RvcCB0aGUgYmxpbmsgdGltZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCiAgICAgLy8gYmxh
Y2sgY2FyZXQgaW4gdGhlIG5ldyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9y
Q2xlYXJlZCB8fCAhc2hvdWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdD
b21tYW5kKG1fZnJhbWUpKQorICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFz
aG91bGRCbGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9kb2N1
bWVudCkpCiAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0
IGJsaW5raW5nIHdpdGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3
ZSdyZQpAQCAtMjE1Myw3ICsyMTU2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBw
ZWFyYW5jZSgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQt
PnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIw
Miw4ICsyMjA1LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNpYmlsaXR5KENh
cmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KLSAgICBp
ZiAobV9mcmFtZSkKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5
bGUoKm1fZnJhbWUpOworICAgIGlmIChtX2RvY3VtZW50KQorICAgICAgICB1cGRhdGVTZWxlY3Rp
b25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoVEVY
VF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsyMjUwLDEwIEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgIGlm
IChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wg
Y2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQo
KTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0
QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYg
KEVsZW1lbnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFz
ZSgpKSkgewotICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1l
bnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAq
bV9mcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjYy
LDE2ICsyMjY1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sg
aGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCiAgICAgICAg
ICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4
IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUo
KSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIG1fZnJhbWUt
PnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9m
cmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQtPnBh
cmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKICAgICAgICAgfQotICAgICAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVu
dC0+c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJv
d3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9j
dXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50LT5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1l
KTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFtZSog
ZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsMTYgKzIzMDMsMTYg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hh
bmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAg
ICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gbV9kb2N1bWVu
dC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxl
Y3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghbV9kb2N1bWVu
dCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAgIHVwZGF0ZVNlbGVjdGlvbkJ5
VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKLSAgICBhdXRvKiByZW5kZXJWaWV3ID0g
bV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGlu
Z0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2Rv
Y3VtZW50LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogCkBAIC0yMzI1LDE0ICsyMzI4LDE0IEBAIEZsb2F0UmVjdCBGcmFt
ZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zp
c2libGVDb250CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJl
Y3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWln
aHQgdGV4dFJlY3RIZWlnaHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVu
ZGVyZXIoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB2aXNpYmxlQ29udGVu
dFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJl
YTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgYXV0byB2aXNpYmxlQ29udGVu
dFJlY3QgPSBtX2RvY3VtZW50LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxl
QXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0
IDogYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwg
dGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkp
IHsKICAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZp
c2libGVDb250ZW50UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5
KCkpCkBAIC0yMzY0LDcgKzIzNjcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9y
Rm9ybShFbGVtZW50KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtKCkgY29uc3QKIHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUg
YWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMu
Ci0gICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVu
dCgpOworICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsK
ICAgICBpZiAoIXN0YXJ0KQogICAgICAgICBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZWxl
bWVudCgpOwogICAgIGlmICghc3RhcnQpCkBAIC0yNDA3LDggKzI0MTAsOCBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2Rl
LCBjb25zdCBTY3JvbAogICAgICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxl
KHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxpZ25tZW50LCBT
aG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAgICAgICAgICAgICAgICAg
bGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAg
ICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1l
LT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCku
Y2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2ZyYW1l
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAg
ICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVh
bGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICNlbHNlCkBAIC0yNDI2LDE3ICsyNDI5LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKICAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhl
IGJvZHkgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZQogICAgIC8v
IGVudGlyZSBXZWJWaWV3IGlzIGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMg
ZG9jdW1lbnQpLgogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKCFpc05v
bmUoKSB8fCAhKGRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykp
CisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJy
b3dzaW5nRW5hYmxlZCgpOworICAgIGlmICghaXNOb25lKCkgfHwgIShtX2RvY3VtZW50LT5oYXNF
ZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNl
Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZp
c2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgp
KSkpIHx8ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghbV9kb2N1bWVu
dCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50
LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgaWYg
KGF1dG8qIGJvZHkgPSBkb2N1bWVudC0+Ym9keSgpKQorICAgIGlmIChhdXRvKiBib2R5ID0gbV9k
b2N1bWVudC0+Ym9keSgpKQogICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoYm9keSksIERPV05TVFJFQU0pKTsKIH0KIApAQCAt
MjQ0Niw3ICsyNDQ4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKICAgICBpZiAobV9mcmFt
ZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgp
LCBmYWxzZSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHko
KSwgZmFsc2UpOwogfQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjpkaXNwYXRjaFNlbGVjdFN0YXJ0
KCkKQEAgLTI0NjQsNyArMjQ2Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNob3VsZFNo
b3dCbG9ja0N1cnNvcihib29sIHNob3VsZFNob3dCbG9ja0N1cnNvcikKIHsKICAgICBtX3Nob3Vs
ZFNob3dCbG9ja0N1cnNvciA9IHNob3VsZFNob3dCbG9ja0N1cnNvcjsKIAotICAgIG1fZnJhbWUt
PmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAg
IG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAg
ICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ4NCwxMyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCkK
IAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogewot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVu
dD4gcHJvdGVjdG9yKCptX2RvY3VtZW50KTsKICAgICB1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlv
dXRPclN0eWxlQ2hhbmdlKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVh
cmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UoKQogewotICAgIGlmIChhdXRvKiBjbGllbnQg
PSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICBpZiAoYXV0byogY2xpZW50ID0gbV9k
b2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+dXBkYXRlRWRpdG9y
U3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKCk7CiAKICAgICBzZXRDYXJldFJl
Y3ROZWVkc1VwZGF0ZSgpOwpAQCAtMjcyMyw3ICsyNzI1LDcgQEAgUmVmUHRyPFJhbmdlPiBGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkg
Y29uc3QKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWdu
ZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8
UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlUmFuZ2UoKTsK
KyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9kb2N1bWVudC0+Y3JlYXRlUmFuZ2Uo
KTsKICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRpb24pOwogICAgIHJlc3Vs
dFJhbmdlLT5zZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5ndGgpOwogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIFNFTF9ERUZB
VUxUX0FGRklOSVRZKTsKQEAgLTI5MDQsNyArMjkwNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MpCiAgICAgaWYgKG1fY2FyZXRCbGlua3Mg
PT0gY2FyZXRCbGlua3MpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkK
LSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsgCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAgICAgaWYgKG1fY2FyZXRQYWludCkgewogICAgICAgICBtX2NhcmV0UGFpbnQg
PSBmYWxzZTsgCiAgICAgICAgIGludmFsaWRhdGVDYXJldFJlY3QoKTsgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1OWIzMGJmYjU3ZWZkZmUz
MmNhZWQxNjVhMDUwOC4uNWFhZjlhMDg5YjNiMTlkZmEwMTBlZDA3MDlkNDJkZWVhZTBiNWViMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMTQwLDcgKzE0MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7CiAgICAgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0gbnVsbHB0cik7CisgICAg
V0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqID0gbnVsbHB0
cik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JE
b2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAgICAgCkBAIC0zMzgsNiArMzM4LDcgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisgICAgRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBMYXlvdXRVbml0IG1feFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggNzMwNzZkZTFiNzliOWYwOWZm
OWYzMTI3YTgzZTViMDgzZDU3ODU5My4uNjYwMWRiOGZjYjRlMzdmNGFkYjIwYWYxNzgyZTIyMTI0
Y2YxM2JkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWdu
ZWQKIAogdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBi
b29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBmcmFtZSgpLnNldHRpbmdzKCkucGFzc3dvcmRFY2hv
RW5hYmxlZCgpOworICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGRvY3VtZW50KCkuc2V0
dGluZ3MoKS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CiAgICAgaWYgKHBhc3N3b3JkRWNob0VuYWJs
ZWQpCiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0Nv
bW1hbmQuY3BwCmluZGV4IDE3NmQ4ZjA4OWFmNTAyNjZkZDg5OGZhOTc3NGY5NzQxZGIzOTlkZmIu
LjI3MzU1ZTY2ZmI4OWQ1NTQyY2Q2YTliZWE4OGUyYzI2MmY1MDc4M2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcApAQCAtMTQyLDcg
KzE0Miw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAv
LyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCiAKLSAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlw
aW5nU3R5bGUoKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKIAogICAgIGlmICh0eXBpbmdTdHlsZSAm
JiAhdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBcHBseSB0aGUgdHlwaW5n
IHN0eWxlIHRvIHRoZSBpbnNlcnRlZCBsaW5lIGJyZWFrLCBzbyB0aGF0IGlmIHRoZSBzZWxlY3Rp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXgg
ZTkxMzFmNmZiZjMyZDg2MzA1MGFhMWVmMjA4ZTViNGY0NDA0OWI2YS4uMWJiMGQwNTI4NzBjNDUx
MzY5OTQ3MTlkMGVjMDY1YjNlZDA5NmQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEluc2VydFRleHRD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gYW55dGhpbmcgb3RoZXIgdGhhbiBOb1NlbGVj
dGlvbi4gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhIHJlYWwgZW5kaW5nU2Vs
ZWN0aW9uLCBzbyBiYWlsIG91dC4KICAgICAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9u
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZnJhbWUoKS5lZGl0b3Io
KS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKKyAgICB9IGVsc2UgaWYgKGRvY3VtZW50KCku
ZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChwZXJmb3Jt
T3ZlcndyaXRlKG1fdGV4dCwgbV9zZWxlY3RJbnNlcnRlZFRleHQpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpk
b0FwcGx5KCkKICAgICBzZXRFbmRpbmdTZWxlY3Rpb25XaXRob3V0VmFsaWRhdGlvbihzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbik7CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhl
cmUgaXMgYSB0eXBpbmcgc3R5bGUuCi0gICAgaWYgKFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGlu
Z1N0eWxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7CisgICAgaWYgKFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50
eXBpbmdTdHlsZSgpKSB7CiAgICAgICAgIHR5cGluZ1N0eWxlLT5wcmVwYXJlVG9BcHBseUF0KGVu
ZFBvc2l0aW9uLCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CiAgICAg
ICAgIGlmICghdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIGFwcGx5U3R5bGUo
dHlwaW5nU3R5bGUuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDU0NjBiNzVjYWJkMjNkZDU1YWQ5
MzlkMDE0YjU4MjkyZWQ5ZDRlYTIuLjY4ZTA4MzUyYTRjMTBkODY4YmYxZTQ2OWJmNzVjOTU2ZDEz
ZjA1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5n
ZVdpdGhUZXh0Q29tbWFuZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBSZXBsYWNlUmFuZ2VX
aXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9yYW5nZVRvQmVSZXBsYWNlZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQorICAgIGlmICghZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNlZCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDUy
NzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcuLjQ5Njk5MTlkOTFhMTE0OTVj
Mjk4YzkyYTc2NjcyNmI5MmUxNjk1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMTgxLDcgKzExODEsNyBAQCB2b2lk
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBGSVhNRTog
Q2FuIHRoaXMgd2FpdCB1bnRpbCBhZnRlciB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIHBlcmZvcm1l
ZD8gIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQogICAgIC8vIGFueSB3b3JrIHBlcmZvcm1lZCBh
ZnRlciB0aGlzIHRoYXQgcXVlcmllcyBvciB1c2VzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgZnJh
bWUoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBk
ZXN0aW5hdGlvbiB0byBlbmQgdXAgaW5zaWRlIG5vZGVzIHRoYXQgd2VyZW4ndCBzZWxlY3RlZC4g
IFRvIGF2b2lkIHRoYXQsIHdlIG1vdmUgdGhlCiAgICAgLy8gcG9zaXRpb24gZm9yd2FyZCB3aXRo
b3V0IGNoYW5naW5nIHRoZSB2aXNpYmxlIHBvc2l0aW9uIHNvIHdlJ3JlIHN0aWxsIGF0IHRoZSBz
YW1lIHZpc2libGUgbG9jYXRpb24sIGJ1dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0
U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYzA2NWMwMmNhMTNmZDI1MTcwZDZiMjFiMWY4OThl
OWJhNzliZTYzOC4uMGRkMjZhODFlOTBiNjc4NzRjMzM1Y2VmMTIxMDdlMjE0YmRmZDg2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00
MCw3ICs0MCw3IEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpCiAKIHZvaWQgU2V0U2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZy
YW1lKCkuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVj
dGlvbihtX3NlbGVjdGlvblRvU2V0KSAmJiAhbV9zZWxlY3Rpb25Ub1NldC5pc05vbmVPck9ycGhh
bmVkKCkpIHsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvblRvU2V0
LCBtX29wdGlvbnMpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoKQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0g
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCkuc2VsZWN0aW9uKCk7CisgICAg
RnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCk7CiAKICAg
ICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigp
KSAmJiAhc3RhcnRpbmdTZWxlY3Rpb24oKS5pc05vbmVPck9ycGhhbmVkKCkpCiAgICAgICAgIHNl
bGVjdGlvbi5zZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9vcHRpb25zKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAxNzJkODVmZDQ2NmYyODM2
NmI1NTgwNmQwOWJmNjAxZmUxYzVmODE5Li41MGMxNzUzZjE2ZDk2OGZhOTZiYzJiYzZiNjExYjQ5
OGZmMjQ5NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC05
OCw4ICs5OCw4IEBAIHZvaWQgU3BlbGxDaGVja1JlcXVlc3Q6OnJlcXVlc3RlckRlc3Ryb3llZCgp
CiAgICAgbV9jaGVja2VyID0gbnVsbHB0cjsKIH0KIAotU3BlbGxDaGVja2VyOjpTcGVsbENoZWNr
ZXIoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1NwZWxsQ2hlY2tlcjo6U3Bl
bGxDaGVja2VyKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQp
CiAgICAgLCBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgqdGhpcywgJlNwZWxsQ2hlY2tl
cjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QpCiB7CiB9CkBAIC0xMTQsNyArMTE0
LDcgQEAgU3BlbGxDaGVja2VyOjp+U3BlbGxDaGVja2VyKCkKIAogVGV4dENoZWNrZXJDbGllbnQq
IFNwZWxsQ2hlY2tlcjo6Y2xpZW50KCkgY29uc3QKIHsKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFt
ZS5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHBhZ2UtPmVkaXRvckNs
aWVudCgpLnRleHRDaGVja2VyKCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBTcGVsbENoZWNr
ZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KCkKIAogYm9vbCBTcGVsbENoZWNr
ZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUu
c2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHJldHVy
biBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KTsKIH0KIAogYm9vbCBTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2Um
IHJhbmdlKSBjb25zdApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjppbnZv
a2VSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogICAgIGlmICghY2xp
ZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gV1RGTW92
ZShyZXF1ZXN0KTsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNs
aWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgU3BlbGxDaGVja2Vy
OjplbnF1ZXVlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKQEAgLTE5
OSw3ICsxOTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVjdAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQW5kUmVwbGFjZUZvcigqbV9wcm9jZXNz
aW5nUmVxdWVzdCwgcmVzdWx0cyk7CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQW5kUmVw
bGFjZUZvcigqbV9wcm9jZXNzaW5nUmVxdWVzdCwgcmVzdWx0cyk7CiAKICAgICBpZiAobV9sYXN0
UHJvY2Vzc2VkSWRlbnRpZmllci50b1VJbnQ2NCgpIDwgaWRlbnRpZmllci50b1VJbnQ2NCgpKQog
ICAgICAgICBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKQEAgLTIxOSw3
ICsyMTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKFRleHRDaGVja2lu
Z1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgogICAgICAgICBpZiAocmVxdWVzdERh
dGEuY2hlY2tpbmdUeXBlcygpLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKQog
ICAgICAgICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAg
ICAgICAgaWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2ZyYW1lLmRv
Y3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNo
ZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOworICAgICAgICAgICAgbV9kb2N1bWVudC5tYXJr
ZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCks
IG1hcmtlclR5cGVzKTsKICAgICB9CiAgICAgZGlkQ2hlY2soaWRlbnRpZmllciwgcmVzdWx0cyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAppbmRleCBjMzZhZTJjMzBmZTlm
YjViZWY2NzA3MzIyMmVjNDNlNDRhZDdmMmMwLi5kMTlmY2ZkZTM4NDE1YjAxMTVjZjhjZGFhNDhh
ODY2MDhhODExOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hl
Y2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKQEAgLTc2
LDcgKzc2LDcgQEAgY2xhc3MgU3BlbGxDaGVja2VyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xh
c3MgU3BlbGxDaGVja1JlcXVlc3Q7CiAKLSAgICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRnJhbWUm
KTsKKyAgICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRG9jdW1lbnQmKTsKICAgICB+U3BlbGxDaGVj
a2VyKCk7CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0OwpAQCAtMTA2
LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDaGVja0NhbmNlbChUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRDaGVjayhUZXh0Q2hlY2tpbmdSZXF1
ZXN0SWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKIAotICAg
IEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogICAgIFRleHRDaGVj
a2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOwogICAgIFRleHRD
aGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwCmluZGV4IDk5ZThmMTU4ODhlYWU5M2YzZDY4ZTA0ZDg5ZWZmNTc1NjQ2YmMzNzkuLjU5MjA4
NDUzNTFlYTQwM2I4Yzg3MzQzYWRhNzZiNzQzNjNkZjA1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApAQCAtNjUsNyAr
NjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGlmICghbV9oYXNCZWVuVW5kb25lKSB7Ci0gICAgICAgICAgICBmcmFtZSgpLmVkaXRv
cigpLnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJl
Y3RlZCwgbV9jb3JyZWN0aW9uKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudW5h
cHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fY29ycmVjdGVkLCBt
X2NvcnJlY3Rpb24pOwogICAgICAgICAgICAgbV9oYXNCZWVuVW5kb25lID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24obV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKKyAgICBpZiAoIWRvY3VtZW50KCku
c2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3Rl
ZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNldFNl
bGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQsIEZyYW1lU2Vs
ZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNw
ZWxsQ29ycmVjdGlvblRyaWdnZXJlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAKaW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRmNTYxOGZiYWJiMjVhZS4u
ZjMxMjhkN2VhNTdkNTY3NjM5MThhMzEzYWI3N2I2NjQ5ZTViNjQwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNjMsMTMgKzE2MywxMCBAQCBUeXBpbmdD
b21tYW5kOjpUeXBpbmdDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQg
Y29tbWFuZFR5cGUsIGNvbgogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihE
b2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBj
b21wb3NpdGlvblR5cGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsK
LSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5n
ZSgpKQorICAgIGlmICghZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5k
ID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAg
aWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdD
b21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9u
KTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShjb21wb3Np
dGlvblR5cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNw
ZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTE4Myw4ICsx
ODAsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCYgZG9j
dW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbQogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxl
dGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3Rl
ckdyYW51bGFyaXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5
cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1
bWVudC5mcmFtZSgpKSkgewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRG
cm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQuZnJh
bWUoKSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1h
bmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewor
ICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlv
bihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRp
b24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShU
ZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRT
aG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcp
OwpAQCAtMTk5LDEwICsxOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcgogdm9pZCBUeXBp
bmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9w
dGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIC8vIEZJ
WE1FOiBGb3J3YXJkIGRlbGV0ZSBpbiBUZXh0RWRpdCBhcHBlYXJzIHRvIG9wZW4gYW5kIGNsb3Nl
IGEgbmV3IHR5cGluZyBjb21tYW5kLgotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1l
KCk7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5KSB7Ci0gICAg
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKLSAgICAgICAgICAgIHVw
ZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0Nv
bW1hbmQuZ2V0KCksIGZyYW1lKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
ZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21D
dXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudCk7CiAgICAg
ICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYg
SXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29t
cG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50
U3BlbGxDaGVja2luZyk7CkBAIC0yMTQsMTAgKzIxMCw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlv
bnMsCiAgICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBGb3J3YXJkRGVsZXRlS2V5
LCBlbXB0eVN0cmluZygpLCBvcHRpb25zLCBncmFudWxhcml0eSktPmFwcGx5KCk7CiB9CiAKLXZv
aWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNl
bGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBGcmFtZSogZnJhbWUpCit2b2lk
IFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxl
Y3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRG9jdW1lbnQmIGRvY3VtZW50KQog
ewotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0
aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rp
b24gY3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwog
ICAgIGlmIChjdXJyZW50U2VsZWN0aW9uID09IHR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlv
bigpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyNywzMSArMjIyLDI1IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihU
eXBpbmdDb21tYW5kCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYg
ZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9z
aXRpb25UeXBlIGNvbXBvc2l0aW9uKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZy
YW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0g
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKKyAgICAgICAgZG9jdW1lbnQuZWRpdG9y
KCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGlu
ZSh0ZXh0WzBdKSk7CiAgICAgCi0gICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3NpdGlvbik7CisgICAgaW5z
ZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IG9wdGlvbnMsIGNvbXBvc2l0aW9uKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZG4ndCBuZWVk
IHRvIHRha2Ugc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLiBJdCBzaG91bGQgYmUgaWRlbnRpY2FsIHRv
IEZyYW1lU2VsZWN0aW9uJ3MgY3VycmVudCBzZWxlY3Rpb24uCiB2b2lkIFR5cGluZ0NvbW1hbmQ6
Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2VydGlvbiwgT3B0aW9ucyBvcHRpb25z
LCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBSZWZQdHI8RnJh
bWU+IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAgICAg
TE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0ICh0ZXh0ICVzKSIsIHRleHQu
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBj
dXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAg
ICBTdHJpbmcgbmV3VGV4dCA9IGRpc3BhdGNoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQodGV4dCwg
c2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBvc2l0aW9u
UGVuZGluZyk7CiAgICAgCiAgICAgLy8gU2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHNlbGVj
dGlvbiBhcHByb3ByaWF0ZWx5IGlmIHdlIGFyZSB1c2luZyBhIHNlbGVjdGlvbgogICAgIC8vIHRo
YXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSW4gdGhlIGZ1dHVy
ZSwgd2Ugc2hvdWxkIGNoYW5nZSBFZGl0Q29tbWFuZAogICAgIC8vIHRvIGRlYWwgd2l0aCBjdXN0
b20gc2VsZWN0aW9ucyBpbiBhIGdlbmVyYWwgd2F5IHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsIG9m
IHRoZSBjb21tYW5kcy4KLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdD
b21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7
CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlm
IChsYXN0VHlwaW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkgIT0gc2VsZWN0aW9uRm9ySW5z
ZXJ0aW9uKSB7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxl
Y3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKQEAgLTI2Niwx
MiArMjU1LDEyIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzCiAgICAgfQogCiAgICAgYXV0byBj
bWQgPSBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEluc2VydFRleHQsIG5ld1RleHQs
IG9wdGlvbnMsIGNvbXBvc2l0aW9uVHlwZSk7Ci0gICAgYXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFu
ZChmcmFtZS5nZXQoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJlbnRT
ZWxlY3Rpb24pOworICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQoZG9jdW1lbnQuZnJhbWUo
KSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJlbnRTZWxlY3Rpb24pOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9jdW1l
bnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygq
ZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1
bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24o
b3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9u
cyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTI4NCw3ICsyNzMsNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9jdW1lbnQsIE9w
dGlvbnMgb3B0aW9ucykKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChSZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQdHI8
VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0SXNBdXRvY29tcGxldGlvbihmYWxzZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5z
ZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRBbmROb3Rp
ZnlBY2Nlc3NpYmlsaXR5KCk7CkBAIC0yOTYsNyArMjg1LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1
bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0Nv
bW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZv
clR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0
b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAg
ICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3Iob3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTMwNyw5
ICsyOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihE
b2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucwogICAgIFR5cGluZ0NvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yLCBlbXB0eVN0cmluZygpLCBv
cHRpb25zKS0+YXBwbHkoKTsKIH0KIAotUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1h
bmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmIGZyYW1lKQor
UmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZT
dGlsbE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIFJlZlB0cjxDb21w
b3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0gZnJhbWUuZWRpdG9yKCkubGFzdEVk
aXRDb21tYW5kKCk7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENv
bW1hbmQgPSBkb2N1bWVudC5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAoIWxh
c3RFZGl0Q29tbWFuZCB8fCAhbGFzdEVkaXRDb21tYW5kLT5pc1R5cGluZ0NvbW1hbmQoKSB8fCAh
c3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmlzT3Bl
bkZvck1vcmVUeXBpbmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMyMSwxNiAr
MzEwLDE2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6c2hvdWxkRGVmZXJXaWxsQXBwbHlDb21tYW5k
VW50aWxBZGRpbmdUeXBpbmdDb21tYW5kKCkgY29uc3QKICAgICByZXR1cm4gIW1faXNIYW5kbGlu
Z0luaXRpYWxUeXBpbmdDb21tYW5kIHx8IGVkaXRBY3Rpb25Jc0RlbGV0ZUJ5VHlwaW5nKGVkaXRp
bmdBY3Rpb24oKSk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRnJhbWUq
IGZyYW1lKQordm9pZCBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhEb2N1bWVudCYgZG9jdW1l
bnQpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkKKyAgICBpZiAo
UmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1h
bmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpCiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5jbG9zZVR5cGluZygpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQg
VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklm
T3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBu
ZXdTZWxlY3Rpb24pCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhh
c0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQogewotICAgIGlmIChSZWZQdHI8
VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+
IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
Zyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVj
dGlvbihuZXdTZWxlY3Rpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0RW5kaW5n
U2VsZWN0aW9uT25MYXN0SW5zZXJ0Q29tbWFuZChuZXdTZWxlY3Rpb24pOwogICAgIH0KQEAgLTQz
NiwxOSArNDI1LDE3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKCkKIAog
dm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0Nv
bW1hbmQgY29tbWFuZFR5cGUpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsK
LQogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0
b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRv
cigpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUu
ZWRpdG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYm
ICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKSkKKyAg
ICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1F1b3RlU3Vi
c3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0
b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0
b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRv
Y3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1lLmVkaXRvcigpLmlzSGFuZGxpbmdBY2Nl
cHRlZENhbmRpZGF0ZSgpKQorICAgIGlmIChkb2N1bWVudCgpLmVkaXRvcigpLmlzSGFuZGxpbmdB
Y2NlcHRlZENhbmRpZGF0ZSgpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZnJh
bWUuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBpZiAo
IWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgLy8gVGFrZSBhIGxvb2sgYXQgdGhlIHNlbGVj
dGlvbiB0aGF0IHJlc3VsdHMgYWZ0ZXIgdHlwaW5nIGFuZCBkZXRlcm1pbmUgd2hldGhlciB3ZSBu
ZWVkIHRvIHNwZWxsY2hlY2suIApAQCAtNDY2LDkgKzQ1Myw5IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBl
KQogICAgICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAgICAg
aWYgKHJhbmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0IHx8
IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21tYW5k
VHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29tbWFu
ZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRD
b250ZW50KSkKICAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4
dCgqcmFuZ2UpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCku
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwg
IXN0cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBkb2N1bWVudCgp
LmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2Vs
ZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOwogICAgICAgICB9IGVs
c2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQpCi0gICAgICAg
ICAgICBmcmFtZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7
CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oY29tbWFuZFR5cGUpOwogICAgICAgICAvLyBJ
ZiB0aGlzIGJ1ZyBnZXRzIGZpeGVkLCB0aGlzIFBMQVRGT1JNKElPU19GQU1JTFkpIGNvZGUgY291
bGQgYmUgcmVtb3ZlZDoKQEAgLTQ4Myw3ICs0NzAsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQocHJldmlvdXMsIHN0YXJ0V29y
ZFNpZGUpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwg
c3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikKLSAgICAgICAgICAgIGZyYW1l
LmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2Vs
ZWN0aW9uKCksIGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2Up
OwogI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIH0KIH0KQEAgLTQ5NywyNiAr
NDg0LDI2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQo
RVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIFRleHRHCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgaWYgKCFyYW5nZSB8fCBpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpCi0gICAg
ICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAgICAgICAgcmV0
dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogCi0gICAgcmV0dXJuIGZy
YW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6
Y3JlYXRlKCpyYW5nZSkgfSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFw
cGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpyYW5nZSkgfSk7CiB9
CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZy
YW1lKCkpOwogCiAgICAgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoY29tbWFuZFR5cGVGb3JB
ZGRlZFR5cGluZyk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBmcmFtZS5lZGl0b3IoKS5h
cHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRp
dGluZygqdGhpcyk7CiAgICAgLy8gU2luY2UgdGhlIHNwZWxsY2hlY2tpbmcgY29kZSBtYXkgYWxz
byBwZXJmb3JtIGNvcnJlY3Rpb25zIGFuZCBvdGhlciByZXBsYWNlbWVudHMsIGl0IHNob3VsZCBo
YXBwZW4gYWZ0ZXIgdGhlIHR5cGluZyBjaGFuZ2VzLgogICAgIGlmICghbV9zaG91bGRQcmV2ZW50
U3BlbGxDaGVja2luZykKICAgICAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1h
bmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAvLyBUaGUgb2xkIHNwZWxsY2hlY2tp
bmcgY29kZSByZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRvbmUgZmlyc3QsIHRvIHByZXZlbnQg
aXNzdWVzIGxpa2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8ZG9lc24ndD4gaXMgbWFya2VkIGFz
IG1pc3NwZWxsZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRUeXBl
Rm9yQWRkZWRUeXBpbmcpOwotICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlz
KTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICNlbmRp
ZgogfQogCkBAIC01MzUsOSArNTIyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0
QW5kTm90aWZ5QWNjZXNzaWJpbGl0eShjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2UKIHsKICAg
ICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQgJXAgaW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vz
c2liaWxpdHkgKHRleHQgJXMsIHNlbGVjdEluc2VydGVkVGV4dCAlZCkiLCB0aGlzLCB0ZXh0LnV0
ZjgoKS5kYXRhKCksIHNlbGVjdEluc2VydGVkVGV4dCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5UmVw
bGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRUZXh0KHRleHQsIHNlbGVjdEluc2Vy
dGVkVGV4dCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRp
b24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBp
bmcsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCB0ZXh0LCBkb2N1bWVudCgpLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0
ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTU1MCw5
ICs1MzcsNiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGlu
ZXMoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAogICAgICAgICBtX2NvbXBvc2l0aW9u
VHlwZSA9PSBUZXh0Q29tcG9zaXRpb25Ob25lID8gSW5zZXJ0VGV4dENvbW1hbmQ6OlJlYmFsYW5j
ZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzIDogSW5zZXJ0VGV4dENvbW1hbmQ6OlJlYmFs
YW5jZUFsbFdoaXRlc3BhY2VzLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNlcnRUZXh0KTsKIAogICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCksIGVuZGluZ1NlbGVjdGlv
bigpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRU
ZXh0KTsKIH0KIApAQCAtNTY1LDE3ICs1NDksMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRMaW5lQnJlYWsoKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotCi0gICAg
RnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rvcihm
cmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydExpbmVCcmVhayk7CiB9
CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJp
bGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgaW5zZXJ0TGluZUJyZWFrKCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0
RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwor
ICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50
KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5z
ZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9
CiAKQEAgLTU4OCwxNyArNTY5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCks
IGZhbHNlLCBmYWxzZSwgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0UGFyYWdyYXBoKSk7Ci0KLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRU
ZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBB
Y2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKLSAgICBy
ZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUo
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBs
YWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNjE1LDE3ICs1OTMsMTQgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQo
KQogICAgIH0KICAgICAgICAgCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtCbG9j
a3F1b3RlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5
cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENv
bnRlbnQpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vzc2li
aWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFncmFwaFNlcGFy
YXRvckluUXVvdGVkQ29udGVudCgpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
fQogCkBAIC02NTIsMTAgKzYyNyw5IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFrZUVkaXRhYmxl
Um9vdEVtcHR5KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGRUb0tpbGxSaW5nKQogewotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
ZnJhbWUpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7
CiAKLSAgICBmcmFtZS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyhmYWxzZSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29y
ZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvblRvRGVsZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwpA
QCAtNzQ4LDIwICs3MjIsMjAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIGJ1ZzoKICAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ2NTM3NTU+IFVJS2l0IHRleHQgd2lkZ2V0cyBzaG91bGQg
dXNlIFdlYktpdCBlZGl0aW5nIEFQSSB0byBtYW5pcHVsYXRlIHRleHQKLSAgICAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICAgICAgY2xv
c2VUeXBpbmcoJmZyYW1lKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRvY3VtZW50KCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBjbG9zZVR5cGluZyhkb2N1bWVudCgp
KTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rp
b25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlz
Q2FyZXQoKSB8fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24o
c2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKCF3aWxs
QWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2ls
bFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRv
cjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50
KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVu
ZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVm
b3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRl
IGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRl
bGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwg
Ym9vbCBzaG91bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJl
c3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmlu
ZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgp
LmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZm
ZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFm
dGVyVW5kbzsKQEAgLTg1NSwxMyArODI4LDEzIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2Fy
ZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBi
dWc6CiAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdl
dHMgc2hvdWxkIHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0g
ICAgICAgIGNsb3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmco
ZG9jdW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBp
ZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91
bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25U
b0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRl
U2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0
eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQpAQCAtODcxLDcgKzg0NCw3
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlm
aWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRB
ZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmco
KnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2ls
bFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5lZGl0
b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsK
ICAgICAvLyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGlu
Z1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1l
cmdlQmxvY2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZv
clNwZWNpYWxFbGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAppbmRleCA3NmU1Zjk5YmY5MjUzODU3NWNhYTM4NzZiYjli
NmI1NTRiOWZiNzVjLi44OTZiZjBiZDE1ZGJlM2Q0ODE4NDg5NWY2NDNmMWM4NjlkNThlYjc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaApAQCAtNjUsOSArNjUsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERvY3VtZW50JiwgT3B0aW9u
cyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50Jiwg
T3B0aW9ucyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90
ZWRDb250ZW50KERvY3VtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRnJhbWUq
KTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhEb2N1bWVudCYpOwogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3Vy
cmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJik7CiAjZW5kaWYKIAogICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcgJnRl
eHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgaXNPcGVuRm9yTW9yZVR5cGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkZv
ck1vcmVUeXBpbmc7IH0KICAgICB2b2lkIGNsb3NlVHlwaW5nKCkgeyBtX29wZW5Gb3JNb3JlVHlw
aW5nID0gZmFsc2U7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhGcmFtZSYpOworICAgIHN0YXRpYyBSZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhE
b2N1bWVudCYpOwogCiAgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAgICAgYm9vbCBpc1R5cGlu
Z0NvbW1hbmQoKSBjb25zdCBmaW5hbDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxEYXRhVHJhbnNmZXI+IGlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSBjb25zdCBmaW5h
bDsKICAgICBib29sIGlzQmVmb3JlSW5wdXRFdmVudENhbmNlbGFibGUoKSBjb25zdCBmaW5hbDsK
IAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgdXBkYXRl
U2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwg
RG9jdW1lbnQmKTsKIAogICAgIHZvaWQgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoRVR5cGlu
Z0NvbW1hbmQpOwogICAgIGJvb2wgd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0Nv
bW1hbmQsIFRleHRHcmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiA9IGVtcHR5U3RyaW5nKCksIFJl
ZlB0cjxSYW5nZT4mJiA9IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4NGRiNTYxMjkyZTc5NDI3N2JmYjc2
ZDU5ZS4uOTEwZGVlZjcwODRkMWZkYzhlMGY5YWUwNmU5MTNhMTFjNzYzZjE5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC04MCw4ICs4MCw4IEBA
IHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3Ry
aW5nKE5TQXR0cmlidXRlZFN0cmluZyAqCiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvbkluSFRN
TEZvcm1hdCgpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJh
bmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNs
dWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0aW5ncygp
LnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21w
b3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHJldHVybiBz
ZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclBy
aXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFk
b3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJp
YWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKIH0KIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCkBAIC0xMDcsMTAgKzEwNywxMCBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5cGVz
QW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgogCiB2b2lk
IEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2Fy
ZCkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1
dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3Ry
aW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIAog
ICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0gICAgY29udGVudC5jb250ZW50T3Jp
Z2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgp
OworICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmll
ckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2Fu
U21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQg
PSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblJURkRG
b3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZE
Rm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTEyNSwxMCArMTI1LDEwIEBA
IHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkKQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRh
dGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRl
ZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOwogCiAgICAgUGFzdGVib2FyZFdyaXRlckRhdGE6OldlYkNvbnRl
bnQgd2ViQ29udGVudDsKLSAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgd2ViQ29udGVu
dC5jb250ZW50T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2Fy
ZCgpOwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVj
dGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1h
dCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3Jt
YXQoYXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQg
RWRpdG9yOjp3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdy
aXRlckRhdGEpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJB
cmNoaXZlRm9ybWF0KCkKIHsKLSAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGVGcm9tU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lX
ZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAg
aWYgKCFhcmNoaXZlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkpOwpA
QCAtMTcxLDExICsxNzEsMTEgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nU2VsZWN0aW9uRm9yUGFz
dGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKQogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlv
bldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmlu
ZywgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAg
ICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMobV9m
cmFtZSwgYXR0cmlidXRlZFN0cmluZykpIHsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChh
dXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoKm1fZG9jdW1lbnQu
ZnJhbWUoKSwgYXR0cmlidXRlZFN0cmluZykpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVu
dC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcp
OwogICAgICAgICB9CkBAIC0yMjEsNyArMjIxLDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRp
dG9yOjpkYXRhSW5SVEZGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCiAvLyBPciBy
ZWZhY3RvciBzbyBpdCBkb2VzIG5vdCBkbyB0aGF0LgogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQs
IFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4
dCkKIHsKLSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCBjb250ZXh0LCBhbGxv
d1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJh
bWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQpOwogICAgIHBhc3RlYm9hcmQucmVhZChyZWFk
ZXIpOwogICAgIGNob3NlUGxhaW5UZXh0ID0gcmVhZGVyLm1hZGVGcmFnbWVudEZyb21QbGFpblRl
eHQ7CiAgICAgcmV0dXJuIFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKQEAgLTIzNCw3ICsyMzQs
NyBAQCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZnJhbWUu
ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNm
ZXIoKSk7CisgICAgYXV0byBzdHJpbmdGcm9tU2VsZWN0aW9uID0gbV9kb2N1bWVudC5mcmFtZSgp
LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkVGV4dEZvckRhdGFUcmFu
c2ZlcigpKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAg
ICAgdHlwZXMuYXBwZW5kKFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCA3MDZlODI2NzNmMDgx
MzMzNzM1ZTU4NzEyNzhjOGQ0NTBkMGI2OWJjLi4xZGE4MWY3MThkOTIzNTgyM2IwMzgxZmUyYmJk
ZTExOWQ4MjUwNmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0
b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAK
QEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJk
LCBtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxh
aW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYm
IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVv
dGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZv
aWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJv
YXJkKQogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250ZW50OwogICAgIHBh
c3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxl
dGUoKTsKICAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRy
YW5zZmVyKCk7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVz
b2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBt
X2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zp
c3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2
ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0
ZWJvYXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwg
Ym9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBh
c3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsIG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0
LCBjaG9zZVBsYWluVGV4dCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9h
cmREYXRhKHBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksIGNvbnRleHQsIGFsbG93UGxh
aW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBmMmEyZDUyYWM1YWJmNGU0
ZjEzMTEzY2EyNWQxYjIwYTE3MzhmYTY5Li4xYmZjYTU5MTNkNjQ2NDFjMDgyZmVmNzY1YWJhMTll
OTA5MGFkMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VX
cml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgLy8gSWYgdGhlIHRleHQg
aGFzIGxlZnQgb3IgcmlnaHQgYWxpZ25tZW50LCBmbGlwIGxlZnQtPnJpZ2h0IGFuZCByaWdodC0+
bGVmdC4gCiAgICAgLy8gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLgogCi0gICAgYXV0byBzZWxlY3Rp
b25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5
bGUoKSkKICAgICAgICAgIHJldHVybjsKIApAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCBFZGl0
b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGlu
Z0RpcmVjdGlvbiBkaXIKICAgICBpZiAoIW5ld1ZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVs
ZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNl
ZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhUTUxUZXh0QXJlYUVs
ZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2Vk
RWxlbWVudCkKICAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2Vk
RWxlbWVudCkuaXNUZXh0RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKICAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsaWduQXR0ciwgbmV3VmFsdWUpOwot
ICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAg
ICAgbV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5jaGFuZ2VhYmxl
U3R5bGVzKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgc3R5bGVzIHRoYXQgdGhl
IHVzZXIgY2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KICAg
ICAKLSAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgYXV0byBlZGl0aW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0KCkpOwogICAgIGF1
dG8gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHlsZSgpLT5tdXRhYmxlQ29weSgpOwog
ICAgIAogICAgIC8vIFRleHQgd2lkZ2V0cyBpbXBsZW1lbnQgYmFja2dyb3VuZCBjb2xvciB2aWEg
dGhlIFVJVmlldyBwcm9wZXJ0eS4gVGhlaXIgYm9keSBlbGVtZW50IHdpbGwgbm90IGhhdmUgb25l
LgpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIHsKICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGJvb2wgYWxsb3dQbGFpblRl
eHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCk7Ci0gICAg
V2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7
CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdl
LCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zID0gY2xp
ZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVn
YXRlKGkpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIAogdm9p
ZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYm
IGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZGljdGF0aW9uUGhyYXNlcy5pc0VtcHR5KCkp
CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQKICAgICAvLyBTb21l
IGRheSB3ZSBjb3VsZCBtYWtlIHRoZW0gVW5kb2FibGUsIGFuZCBsZXQgY2FsbGVycyBjbGVhciB0
aGUgVW5kbyBzdGFjayBleHBsaWNpdGx5IGlmIHRoZXkgd2lzaC4KICAgICBjbGVhclVuZG9SZWRv
T3BlcmF0aW9ucygpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhcigpOworICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRy
ZW4oKTsKIApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9m
RWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAKICAgICAvLyBB
cyBhIHNpZGUgZWZmZWN0IHRoaXMgZnVuY3Rpb24gc2V0cyBhIGNhcmV0IHNlbGVjdGlvbiBhZnRl
ciB0aGUgaW5zZXJ0ZWQgY29udGVudC4gTXVjaCBvZiB3aGF0CiAgICAgLy8gZm9sbG93cyBpcyBt
b3JlIGV4cGVuc2l2ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgc28gY2xlYXIgaXQgc2luY2Ug
aXQncyBnb2luZyB0byBjaGFuZ2UgYW55d2F5LgotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xl
YXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICAvLyBjbGVh
ciBvdXQgYWxsIGN1cnJlbnQgY2hpbGRyZW4gb2YgZWxlbWVudAogICAgIGVsZW1lbnQucmVtb3Zl
Q2hpbGRyZW4oKTsKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hp
bGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogICAgIHNl
bGVjdGlvbi5zZXRCYXNlKHZpc2libGVQb3MpOwogICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQodmlz
aWJsZVBvcyk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rp
b24pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7
CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CiB9CkBAIC0zODks
NyArMzg5LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0
cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIC8vIGhhdmUgYSBzdGFsZSBzZWxlY3Rpb24u
CiB2b2lkIEVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklm
T3BlbkZvck1vcmVUeXBpbmcoKQogewotICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCZtX2ZyYW1lLCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBUeXBpbmdDb21tYW5kOjplbnN1
cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyht
X2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9s
aWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0Vk
aXRvckxpYldQRS5jcHAKaW5kZXggNWQxNWE2NDYxYzU2OWI2M2FjYzYxNTc5NWUzNDQ3NzA4YTRk
NTU3Ny4uMTJmZDZhNDNlYTA1YTJhMGU3MmI3NGJhNzJkOTYyODY0NzA1YmFlMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCkBAIC02Nyw4ICs2
Nyw4IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJk
JiBwYXN0ZWJvYXJkKQogewogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250
ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRhVHJh
bnNmZXIoKTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2
aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNv
bHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1f
ZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgp
ID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5v
KTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZl
VVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisgICAgICAgIG1fZG9j
dW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgp
ID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5v
KTsKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsKIH0KIApAQCAtODQs
NyArODQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBw
YXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAg
IGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsIG1fZnJh
bWUsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQp
LCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3Vt
ZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQ
bGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdt
ZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCmluZGV4IDI5MTgyNDY1ZDhjZjI5MzljYjIxNjAyNDlmZWEyYWUxMWVhMTdjN2MuLjk4
NDFjOTRmYWEyMTNmZDA4MmU1ODEyMGUxYTJiNzRmYTM4Njk5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFz
dGVPcHRpb24+CiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0
aFBhc3RlYm9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0IH0p
OwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmQpOwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJv
bVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsK
ICAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBpZiAoJm5vZGUtPmRvY3VtZW50KCkgIT0gbV9mcmFt
ZS5kb2N1bWVudCgpKQorICAgIGlmIChub2RlLT5kb2N1bWVudCgpICE9IG1fZG9jdW1lbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQmVmb3JlQW5jaG9yKSwgUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBvc2l0aW9u
SXNBZnRlckFuY2hvcikpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1
cyk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihyYW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAogICAg
IFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CiAKLSAgICBpZiAoIW1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewor
ICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChw
YXN0ZWJvYXJkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCBz
dGF0aWMgdm9pZCBnZXRJbWFnZShFbGVtZW50JiBpbWFnZUVsZW1lbnQsIFJlZlB0cjxJbWFnZT4m
IGltYWdlLCBDYWNoZWRJbWFnZSomCiAKIHZvaWQgRWRpdG9yOjpzZWxlY3Rpb25XaWxsQ2hhbmdl
KCkKIHsKLSAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hhbmdl
cygpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFoYXNDb21wb3Np
dGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYW5jZWxDb21wb3NpdGlvbigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggMDk2NGNjYjRm
YmQ3YWMzNmIxOGYzNDE2ZjQyMGEyN2RiZTk2OTE3OC4uMmY3MmNiNGYwMDQ1MWNiYmU0NDJjMGU5
YTMxMjY3YzhiOGMyMGQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4v
RWRpdG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4u
Y3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0
dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KG1fZnJhbWUsICpy
YW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9z
ZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFz
dGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9w
dGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRl
eHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246
OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50
KTsKQEAgLTY5LDkgKzY5LDkgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVh
dGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoUGxhdGZvcm1EcmFnRGF0YSYKIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJk
JiBwYXN0ZWJvYXJkLCBSYW5nZSYsIGJvb2wgLyphbGxvd1BsYWluVGV4dCovLCBib29sJiAvKmNo
b3NlUGxhaW5UZXh0Ki8pCiB7CiAgICAgaWYgKENPTVB0cjxJRGF0YU9iamVjdD4gcGxhdGZvcm1E
cmFnRGF0YSA9IHBhc3RlYm9hcmQuZGF0YU9iamVjdCgpKQotICAgICAgICByZXR1cm4gY3JlYXRl
RnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURyYWdEYXRhLCBtX2ZyYW1lKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EcmFn
RGF0YSwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRG
cm9tUGxhdGZvcm1EYXRhKHBhc3RlYm9hcmQuZHJhZ0RhdGFNYXAoKSwgbV9mcmFtZSk7CisgICAg
cmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRh
TWFwKCksICptX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBjNzE2ZDcyODBmNDYyY2I1
NjczNzU3YjRiYTRlM2IyNGFiZWU4ZGUwLi5jYTY0YjE5YzJlYWQxNjJlM2Y1YTU0ZGViZDczODNk
ODhkYmU4YTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTU0MSwx
MSArNTQxLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogdm9pZCBGcmFtZUxvYWRlcjo6
d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgd2hlbiBhIGZyYW1lIGlzIHN0aWxsIGZ1bGx5IGluIHBsYWNlIChub3QgY2FjaGVkLCBu
b3QgZGV0YWNoZWQpLCBidXQgd2lsbCBiZSByZXBsYWNlZC4KKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1fZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgeworICAg
IGlmIChkb2N1bWVudC0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAvLyBU
aGUgdGV4dCB3YXMgYWxyZWFkeSBwcmVzZW50IGluIERPTSwgc28gaXQncyBiZXR0ZXIgdG8gY29u
ZmlybSB0aGFuIHRvIGNhbmNlbCB0aGUgY29tcG9zaXRpb24uCi0gICAgICAgIG1fZnJhbWUuZWRp
dG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVk
aXRvckNsaWVudCA9IG1fZnJhbWUuZWRpdG9yKCkuY2xpZW50KCkpIHsKKyAgICAgICAgZG9jdW1l
bnQtPmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOworICAgICAgICBpZiAoRWRpdG9yQ2xp
ZW50KiBlZGl0b3JDbGllbnQgPSBkb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpIHsKICAgICAg
ICAgICAgIGVkaXRvckNsaWVudC0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7
CiAgICAgICAgICAgICBlZGl0b3JDbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1l
KTsKICAgICAgICAgfQpAQCAtNTY4LDcgKzU3MSw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsb3Nl
VVJMKCkKIAogICAgIHN0b3BMb2FkaW5nKHVubG9hZEV2ZW50UG9saWN5KTsKICAgICAKLSAgICBt
X2ZyYW1lLmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CisgICAgaWYgKGN1cnJl
bnREb2N1bWVudCkKKyAgICAgICAgY3VycmVudERvY3VtZW50LT5lZGl0b3IoKS5jbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpOwogfQogCiBib29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKCkKQEAg
LTU4MCw3ICs1ODQsNiBAQCBib29sIEZyYW1lTG9hZGVyOjpkaWRPcGVuVVJMKCkKICAgICB9CiAK
ICAgICBtX2ZyYW1lLm5hdmlnYXRpb25TY2hlZHVsZXIoKS5jYW5jZWwoKTsKLSAgICBtX2ZyYW1l
LmVkaXRvcigpLmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CiAKICAgICBtX2lzQ29tcGxldGUgPSBm
YWxzZTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0gZmFsc2U7CkBAIC02NDMsOCArNjQ2
LDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZENsZWFyV2luZG93TmFtZShjb25zdCBGcmFt
ZSYgZnJhbWUsIGNvbnN0IERvY3VtZW50JiBuZXcKIAogdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIo
RG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbCBj
bGVhclNjcmlwdE9iamVjdHMsIGJvb2wgY2xlYXJGcmFtZVZpZXcsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIGhhbmRsZURPTVdpbmRvd0NyZWF0aW9uKQogewotICAgIG1fZnJhbWUuZWRpdG9yKCku
Y2xlYXIoKTsKLQogICAgIGJvb2wgbmVlZGVkQ2xlYXIgPSBtX25lZWRzQ2xlYXI7CiAgICAgbV9u
ZWVkc0NsZWFyID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMzg1ZTM3YTZkMGM5
MGU2MzNhM2I3YjQyODcyYzYxNmUzODA4NjQyNi4uMjkwN2I0ODViOTRjNjZhYzUwNjg1Yzk5ZGMx
NWRkNWVlZWZmY2QwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBG
cmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAgICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VV
bmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxlcj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1l
bnQob3duZXJFbGVtZW50KQogICAgICwgbV9zY3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250
cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2VkaXRvcihtYWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRo
aXMpKQotICAgICwgbV9zZWxlY3Rpb24obWFrZVVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhp
cykpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRp
b25Db250cm9sbGVyPigqdGhpcykpCiAgICAgLCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Va
b29tRmFjdG9yKHRoaXMpKQogICAgICwgbV90ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZh
Y3Rvcih0aGlzKSkKQEAgLTU1NCw3ICs1NTIsNyBAQCBib29sIEZyYW1lOjpyZXF1ZXN0RE9NUGFz
dGVBY2Nlc3MoKQogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6OkRlbmllZDoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6Ok5vdFJlcXVl
c3RlZFlldDogewotICAgICAgICBhdXRvKiBjbGllbnQgPSBtX2VkaXRvci0+Y2xpZW50KCk7Cisg
ICAgICAgIGF1dG8qIGNsaWVudCA9IGVkaXRvcigpLmNsaWVudCgpOwogICAgICAgICBpZiAoIWNs
aWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTM3LDcgKzkzNSw3IEBAIHZv
aWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3Is
IGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9lZGl0b3ItPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAg
ICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICAgICAvLyBS
ZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0YW5kYWxvbmUg
U1ZHIGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTogSG93IHRvIGhhbmRsZSBjb21wb3VuZCBkb2N1
bWVudHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFyaWZpY2F0aW9u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5oCmluZGV4IDNkNDNhOTRiZWE5NTU2Yzk4ZGM3NDIzYWI3ZWFkOWE5MmE1
MmM2ZmUuLjA5MzJhODNjYjY3NGY2ZjhjOTYxMWVkOWY2OTk5ZDE3YjYyZDE1M2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0RnJhbWUuaCIK
ICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJGcmFtZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNp
bmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgpAQCAtMTYzLDE0ICsxNjQsMTQgQEAgcHVibGljOgog
ICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwogICAgIEZyYW1lVmlldyogdmlldygpIGNv
bnN0OwogCi0gICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQotICAgIGNv
bnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBFZGl0
b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9CisgICAgY29uc3Qg
RWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQog
ICAgIEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgeyByZXR1cm4gbV9ldmVudEhhbmRsZXI7
IH0KICAgICBjb25zdCBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgRnJhbWVMb2FkZXImIGxvYWRlcigpIGNvbnN0OwogICAg
IE5hdmlnYXRpb25TY2hlZHVsZXImIG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsKLSAgICBG
cmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KLSAgICBj
b25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b247IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQo
KS0+c2VsZWN0aW9uKCk7IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBGcmFtZVRyZWUm
IHRyZWUoKSBjb25zdDsKICAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSB7
IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KICAgICBjb25zdCBDU1NBbmltYXRpb25D
b250cm9sbGVyJiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXI7IH0KQEAgLTMzOCw4ICszMzksNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4g
bV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAg
VW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7Ci0gICAgVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9u
PiBtX3NlbGVjdGlvbjsKICAgICBVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9h
bmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFm
Njk3MDZmYzRkNmY4MGUwZS4uM2VlZTQyZmYwY2QxZTczY2YwMWIyOTVlOThkMjg1NGU5YmI3Y2Zk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC02OCwyMSArNjgsMTYg
QEAgUmVmPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBUZXh0SW5k
aWNhdG9yRGF0YSYgZGF0YSkKIAogUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6
OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25z
IG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlv
blRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmFu
Z2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgUmVmPERvY3VtZW50
PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKIAotICAgIGlm
ICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmPEZyYW1lPiBwcm90
ZWN0b3IoKmZyYW1lKTsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2Vs
ZWN0aW9uID0gZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9wdGlvblNl
dDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnM7CiAg
ICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9u
OjpEb05vdFNldEZvY3VzKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHRlbXBvcmFy
eVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9y
YXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5kaWYKLSAg
ICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwgeyBTaW1w
bGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVt
cG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZShkb2N1bWVudCwgeyBTaW1wbGVS
YW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0
SW5kaWNhdG9yRGF0YSBkYXRhOwogCkBAIC05MSw3ICs4Niw3IEBAIFJlZlB0cjxUZXh0SW5kaWNh
dG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBU
ZXh0SW5kCiAKICAgICBib29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNF
cXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIAot
ICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4s
IGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRv
cihkYXRhLCAqZG9jdW1lbnQtPmZyYW1lKCksIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJl
bnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0
SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397318</attachid>
            <date>2020-04-22 22:11:33 -0700</date>
            <delta_ts>2020-04-23 11:00:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200422221132.patch</filename>
            <type>text/plain</type>
            <size>213524</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li45MTlh
M2E4NTk0ZDAwYTNiNGVkNzAzYzljZTBhMzY2MTkyZjQ4YTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0yNTkwLDYgKzI1OTIsOCBAQCB2b2lk
IERvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgICAgICBwYWdlKCktPnVwZGF0
ZUlzUGxheWluZ01lZGlhKEhUTUxNZWRpYUVsZW1lbnRJbnZhbGlkSUQpOwogICAgIH0KIAorICAg
IGVkaXRvcigpLmNsZWFyKCk7CisgICAgc2VsZWN0aW9uKCkucHJlcGFyZUZvckRlc3RydWN0aW9u
KCk7CiAgICAgZGV0YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQ
SSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMzRmZDAwZTE1Yjg4ZDcyMmU5NWE5OWI1Y2NiZjBi
MDA1YjdmODI3ZS4uNzczN2ZkOTg0OGVhMDdkMzg2YTFiMWUxZjU0MjFiZGI3ODZjM2UwZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKQEAgLTExOSw2ICsxMTksNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJl
ZE9iamVjdFBvb2w7CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBl
OwogY2xhc3MgRWRpdGluZ0JlaGF2aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29w
OwogY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7
CkBAIC0xMjcsNiArMTI4LDcgQEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7
CiBjbGFzcyBGb3JtQ29udHJvbGxlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rp
b247CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQ
VUNhbnZhc0NvbnRleHQ7CkBAIC0xNTc2LDYgKzE1NzgsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSB7IG1faGFzVmlzdWFsbHlOb25F
bXB0eUN1c3RvbUNvbnRlbnQgPSB0cnVlOyB9CiAgICAgYm9vbCBoYXNWaXN1YWxseU5vbkVtcHR5
Q3VzdG9tQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmlzdWFsbHlOb25FbXB0eUN1c3Rv
bUNvbnRlbnQ7IH0KIAorICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gbV9lZGl0b3I7IH0K
KyAgICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yOyB9Cisg
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9Cisg
ICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0aW9uOyB9CisKIHByb3RlY3RlZDoKICAgICBlbnVtIENvbnN0cnVjdGlvbkZsYWdzIHsgU3lu
dGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVyID0gMSA8PCAxIH07CiAgICAgRG9j
dW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9IERlZmF1bHREb2N1bWVudENsYXNz
LCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpAQCAtMjExNiw2ICsyMTIzLDkgQEAg
cHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+
IG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiAKICAgICBIYXNoTWFwPEVsZW1lbnQqLCBF
bGVtZW50SWRlbnRpZmllcj4gbV9pZGVudGlmaWVkRWxlbWVudHNNYXA7CisKKyAgICBVbmlxdWVS
ZWY8RWRpdG9yPiBtX2VkaXRvcjsKKyAgICBVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+IG1fc2Vs
ZWN0aW9uOwogfTsKIAogRWxlbWVudCogZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoRG9j
dW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCmluZGV4IDNmNGZjYjNhYTY5ZmNiNWFjODExYjRlOGM3OTFhODE0N2Iz
NGZkNjkuLmE5YWM5Mzg5NzI1NGU2Zjg0OTI1N2QwMGJiZjEyMGMwMzc5ZWYwNDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cApAQCAtODIsOSArODIsOSBAQCBzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2Ny
aXB0aW9uKGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKgogICAgIHJldHVybiB0
cnVlOwogfQogCi1BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKEZyYW1lJiBmcmFtZSkKK0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV90aW1lcigqdGhp
cywgJkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpCi0gICAgLCBtX2ZyYW1l
KGZyYW1lKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKIHsKIH0KIApAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcEFsdGVybmF0aXZlVGV4
dFVJVGltZXIoKQogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wUGVuZGluZ0Nv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewogICAgIC8v
IE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNh
bGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGlmIChjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVj
dGlvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0CiAKIGJvb2wg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUmFuZ2Um
IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX2ZyYW1lLmRvY3VtZW50
KCktPm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICByZXR1cm4gIW1fZG9jdW1lbnQubWFya2Vy
cygpLmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hl
Y2tpbmdFeGVtcHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNo
b3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQpAQCAt
MjAyLDcgKzIwMiw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRv
Y29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQogICAgIGlmIChtX3R5cGUgIT0g
QWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCk7CisgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKIAogICAgIGlmIChtX3JhbmdlV2l0aEFsdGVy
bmF0aXZlLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKICAgICAgICAgaGFuZGxl
QWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7CkBAIC0yMjAsMTIgKzIyMCwxMiBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihj
b25zdCBWaXNpYmxlUwogICAgIGlmIChBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGNsaWVudCA9IGFs
dGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICBjbGllbnQtPnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKLSAgICBt
X2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVm
YXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rp
b25UcmlnZ2VyZWQpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRv
Y3VtZW50KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90
ZWN0b3IobV9kb2N1bWVudC5mcmFtZSgpKTsKKyAgICBtX2RvY3VtZW50LnVwZGF0ZUxheW91dCgp
OworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29y
cmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZy
YW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7
CiAKLSAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Cisg
ICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtlcnMucmVt
b3ZlTWFya2VycyhyYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQg
fSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCk7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKQEAgLTIzNiwxMiArMjM2LDEyIEBAIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgbV9pc0Rpc21pc3NlZEJ5RWRp
dGluZyA9IGZhbHNlOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBBbHRlcm5hdGl2
ZVRleHRUeXBlQ29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFm
ZmluaXR5KCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0
LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNl
bnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAgICAgICBhdXRvIGFkamFj
ZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAg
ICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5n
ZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFj
ZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIG51bGxwdHIp
OworICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5n
VHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwg
fSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVm
KCksIG51bGxwdHIpOwogICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2
ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
Km1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0
b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQobV9vcmlnaW5hbFRleHQsIHBhcmFncmFwaFRleHQsIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCksIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0
R3Vlc3Nlc0ZvcldvcmQobV9vcmlnaW5hbFRleHQsIHBhcmFncmFwaFRleHQsIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHN1Z2dlc3Rpb25zKTsKICAgICAgICAgaWYgKHN1Z2dl
c3Rpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9
IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcm
IHJlc3VsdCkKIHsKICAgICBSYW5nZSogcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBtX3JhbmdlV2l0
aEFsdGVybmF0aXZlLmdldCgpOwotICAgIGlmICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgbV9m
cmFtZS5kb2N1bWVudCgpICE9ICZyYW5nZVdpdGhBbHRlcm5hdGl2ZS0+b3duZXJEb2N1bWVudCgp
KQorICAgIGlmICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgbV9kb2N1bWVudCAhPSByYW5nZVdp
dGhBbHRlcm5hdGl2ZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBT
dHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQoKnJhbmdlV2l0aEFsdGVybmF0aXZlKTsKQEAg
LTM0MCw3ICszNDAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiAKIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UpIGNvbnN0CiB7Ci0gICAgYXV0byogdmlldyA9IG1fZnJhbWUudmlldygpOworICAgIGF1dG8q
IHZpZXcgPSBtX2RvY3VtZW50LmZyYW1lKCktPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0
ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7
CkBAIC0zNDgsNyArMzQ4LDcgQEAgRmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW4KIAogdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1
dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAogICAgIC8vIGNv
bnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNh
biBxdWlja2x5IHJldmVydCB0aGUKICAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhl
cmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQK
QEAgLTM4Myw3ICszODMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbgogdm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0
Q29tbWFuZCogY29tbWFuZCkKIHsKICAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQo
KSAmJiAhY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAg
ICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgIG1fZG9jdW1lbnQubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwog
CiAgICAgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRl
ckNvbW1hbmQoY29tbWFuZCk7CiAgICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0
b2NvcnJlY3Rpb24gPSBTdHJpbmcoKTsKQEAgLTM5NSwxNSArMzk1LDE1IEBAIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uCiB7CiAgICAgaWYgKCFjb21tYW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJh
bWUuZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21t
YW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKLSAgICBhdXRvJiBtYXJrZXJzID0gbV9m
cmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVh
dGUobV9kb2N1bWVudCwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21t
YW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9k
b2N1bWVudC5tYXJrZXJzKCk7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogRWRpdG9yQ2xpZW50KiBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQoKQogewotICAgIHJldHVybiBt
X2ZyYW1lLnBhZ2UoKSA/ICZtX2ZyYW1lLnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiBudWxscHRy
OworICAgIHJldHVybiBtX2RvY3VtZW50LnBhZ2UoKSA/ICZtX2RvY3VtZW50LnBhZ2UoKS0+ZWRp
dG9yQ2xpZW50KCkgOiBudWxscHRyOwogfQogCiBUZXh0Q2hlY2tlckNsaWVudCogQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6dGV4dENoZWNrZXIoKQpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxl
dGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0No
YXJhY3RlclBvc2l0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHByZWNlZGluZ0No
YXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRp
bmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOworICAgIGF1dG8gcHJlY2VkaW5n
Q2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7CiAgICAgU3RyaW5nIHN0cmluZyA9IHBsYWlu
VGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSk7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkg
fHwgIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJpbmcubGVuZ3RoKCkg
LSAxXSkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ3OSwxMiArNDc5LDEyIEBAIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BCiAgICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8gaW5kaWNhdGUgd2Ug
aGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlzCiAgICAgLy8gd2hp
dGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2luYWwgd29yZCBhZ2Fp
biBhdCB0aGlzIHBvc2l0aW9uLCB3ZQogICAgIC8vIHdvbid0IGF1dG9jb3JyZWN0IGl0IGFnYWlu
LgotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdD
aGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9v
cmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIG1fZG9jdW1l
bnQubWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxl
dGVkQXV0b2NvcnJlY3Rpb24pOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNr
aW5nUmVzdWx0JiByZXN1bHQsIFJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCiB7Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
JiBtYXJrZXJDb250cm9sbGVyID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gbV9kb2N1bWVudC5t
YXJrZXJzKCk7CiAgICAgaWYgKG1hcmtlckNvbnRyb2xsZXIuaGFzTWFya2VycyhyYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgewogICAgICAgICBpZiAo
cmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikKICAgICAgICAgICAg
IHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlV2l0
aEFsdGVybmF0aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3VsdC5yZXBsYWNlbWVudCk7CkBA
IC00OTksNyArNDk5LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNz
TWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFQKIAogICAgIFBvc2l0aW9u
IGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydFBvc2l0aW9uKCk7
CiAgICAgUG9zaXRpb24gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24gPSBiZWdpbm5pbmdPZlJh
bmdlLnByZXZpb3VzKCk7Ci0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24s
IGJlZ2lubmluZ09mUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdp
bm5pbmdPZlJhbmdlKTsKIAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFy
a2VycyA9IG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOwogICAgIGZvciAo
Y29uc3QgYXV0byogbWFya2VyIDogbWFya2VycykgewpAQCAtNTIwLDcgKzUyMCw3IEBAIGJvb2wg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29u
c3QgRG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9yKG1hcmtlciwg
ZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKTsKLSAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1l
bnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQo
KSk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIG5vZGUs
IG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwogICAgIFN0
cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UpOwogICAgIGlmICghY3VycmVu
dFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU1OCw3ICs1NTgsNyBA
QCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZX
b3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogCiBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCgpCiB7Ci0gICAgcmV0
dXJuIG1fZnJhbWUucGFnZSgpID8gbV9mcmFtZS5wYWdlKCktPmFsdGVybmF0aXZlVGV4dENsaWVu
dCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpICYmIG1fZG9jdW1l
bnQucGFnZSgpID8gbV9kb2N1bWVudC5wYWdlKCktPmFsdGVybmF0aXZlVGV4dENsaWVudCgpIDog
bnVsbHB0cjsKIH0KIAogU3RyaW5nIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtlckRl
c2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChBbHRlcm5hdGl2ZVRleHRUeXBlIGFs
dGVybmF0aXZlVGV4dFR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUp
CkBAIC01OTUsNyArNTk1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogCiAgICAgLy8gUmVj
YWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBzaW5jZSBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00sIHN1Y2ggdGhhdCB0aGUgb3JpZ2lu
YWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQu
IFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKICAgICBhdXRvIHVwZGF0ZWRQYXJhZ3Jh
cGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyh0cmVlU2NvcGVSb290KSwgcGFyYWdyYXBoT2Zm
c2V0SW5UcmVlU2NvcGUpOwotICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdD
b3JyZWN0aW9uID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpKTsKKyAgICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29y
cmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSk7CiAgICAgaWYgKCF1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0Nv
cnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29y
cmVjdGlvbiwgKnVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiB9LCBDaGFy
YWN0ZXJSYW5nZShjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0
aCgpKSk7CkBAIC02MTcsMTEgKzYxNywxMSBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlYwogICAg
IGlmICh0cmlnZ2VyaW5nRXZlbnQpCiAgICAgICAgIHRhcmdldCA9IHRyaWdnZXJpbmdFdmVudC0+
dGFyZ2V0KCk7CiAgICAgZWxzZQotICAgICAgICB0YXJnZXQgPSBldmVudFRhcmdldEVsZW1lbnRG
b3JEb2N1bWVudChtX2ZyYW1lLmRvY3VtZW50KCkpOworICAgICAgICB0YXJnZXQgPSBldmVudFRh
cmdldEVsZW1lbnRGb3JEb2N1bWVudCgmbV9kb2N1bWVudCk7CiAgICAgaWYgKCF0YXJnZXQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0
ZUZvckRpY3RhdGlvbigmbV9mcmFtZS53aW5kb3dQcm94eSgpLCB0ZXh0LCBkaWN0YXRpb25BbHRl
cm5hdGl2ZXMpOworICAgIGF1dG8gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlv
bigmbV9kb2N1bWVudC5mcmFtZSgpLT53aW5kb3dQcm94eSgpLCB0ZXh0LCBkaWN0YXRpb25BbHRl
cm5hdGl2ZXMpOwogICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodHJpZ2dlcmluZ0V2ZW50
KTsKIAogICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CkBAIC02NTMsNyArNjUzLDcg
QEAgVmVjdG9yPFN0cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGljdGF0aW9uQWx0
ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IEQKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlU3Ry
aW5nKQogewogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQotICAgIGF1dG8mIGVkaXRv
ciA9IG1fZnJhbWUuZWRpdG9yKCk7CisgICAgYXV0byYgZWRpdG9yID0gbV9kb2N1bWVudC5lZGl0
b3IoKTsKICAgICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7CiAgICAg
aWYgKCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3Ry
aW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaAppbmRleCA5NDc3NGE3NmIyMDdlZTg3MTAxZDgzYTIzYmQ5M2NmZGY2ZGU2
NDI5Li5lM2RmOWI1NzZmYzMwODhkYzI3N2IzZjc5MWNmODIzMWI5MDYzM2NiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAt
MzUsMTEgKzM1LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbXBvc2l0ZUVk
aXRDb21tYW5kOworY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNzIEVk
aXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBFZGl0b3JDbGllbnQ7CiBjbGFzcyBFdmVudDsK
LWNsYXNzIEZyYW1lOwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIGNs
YXNzIFZpc2libGVTZWxlY3Rpb247CkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKSBVTkxFU1Nf
RU5BQkxFRCggOiBtX2ZyYW1lKGZyYW1lKSB7IH0pCisgICAgZXhwbGljaXQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcihEb2N1bWVudCYgZG9jdW1lbnQpIFVOTEVTU19FTkFCTEVEKDogbV9kb2N1
bWVudChkb2N1bWVudCkgeyB9KQogICAgIH5BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKCkgVU5M
RVNTX0VOQUJMRUQoeyB9KQogCiAgICAgdm9pZCBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIo
QWx0ZXJuYXRpdmVUZXh0VHlwZSkgVU5MRVNTX0VOQUJMRUQoeyB9KQpAQCAtMTQ1LDcgKzE0NSw3
IEBAIHByaXZhdGU6CiAgICAgQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBhbHRlcm5hdGl2ZVRleHRD
bGllbnQoKTsKICNlbmRpZgogCi0gICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CiB9OwogCiAjdW5kZWYgVU5MRVNTX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggMTRlM2M3ODZjNGZmMWRi
N2I4NTYwMTUxNDg3MzkwZGMzNzMxOTE1MC4uYTdkMWI5NjUyNDY0MjBkMTE4MjY2YzUzYTVmZDUx
YmVjNzk0NjgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAKQEAgLTIyOCwxNyArMjI4LDE3IEBAIHZvaWQgRWRpdENvbW1hbmRDb21wb3Np
dGlvbjo6dW5hcHBseSgpCiAgICAgLy8gdXAgdGhlIGNvbXBvc2l0aW9uIHdpbGwgbGVhdmUgYSBz
dGFsZSwgaW52YWxpZCBjb21wb3NpdGlvbiwgYXMgaW4gPHJkYXI6Ly9wcm9ibGVtLzY4MzE2Mzc+
LgogICAgIC8vIERlc2t0b3AgaGFuZGxlcyB0aGlzIGluIC1bV2ViSFRNTFZpZXcgX3VwZGF0ZVNl
bGVjdGlvbkZvcklucHV0TWFuYWdlcl0sIGJ1dCB0aGUgcGhvbmUKICAgICAvLyBnb2VzIGFub3Ro
ZXIgcm91dGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAg
bV9kb2N1bWVudC0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAg
aWYgKCFmcmFtZS0+ZWRpdG9yKCkud2lsbFVuYXBwbHlFZGl0aW5nKCp0aGlzKSkKKyAgICBpZiAo
IW1fZG9jdW1lbnQtPmVkaXRvcigpLndpbGxVbmFwcGx5RWRpdGluZygqdGhpcykpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHNpemVfdCBzaXplID0gbV9jb21tYW5kcy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IHNpemU7IGk7IC0taSkKICAgICAgICAgbV9jb21tYW5kc1tpIC0gMV0tPmRv
VW5hcHBseSgpOwogCi0gICAgZnJhbWUtPmVkaXRvcigpLnVuYXBwbGllZEVkaXRpbmcoKnRoaXMp
OworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnVuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogCiAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIG1f
cmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JVbmFwcGx5KG1f
ZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKTsKQEAgLTI1OCwxMyArMjU4LDEzIEBA
IHZvaWQgRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSgpCiAgICAgLy8gaWYgb25lIGlz
IG5lY2Vzc2FyeSAobGlrZSBmb3IgdGhlIGNyZWF0aW9uIG9mIFZpc2libGVQb3NpdGlvbnMpLgog
ICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
Ci0gICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCkud2lsbFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKKyAg
ICBpZiAoIW1fZG9jdW1lbnQtPmVkaXRvcigpLndpbGxSZWFwcGx5RWRpdGluZygqdGhpcykpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byYgY29tbWFuZCA6IG1fY29tbWFuZHMpCiAg
ICAgICAgIGNvbW1hbmQtPmRvUmVhcHBseSgpOwogCi0gICAgZnJhbWUtPmVkaXRvcigpLnJlYXBw
bGllZEVkaXRpbmcoKnRoaXMpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnJlYXBwbGllZEVk
aXRpbmcoKnRoaXMpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpCiAgICAgICAgIG1fcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb25Gb3JSZWFwcGx5KG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKTsKQEAg
LTMxOSw3ICszMTksNyBAQCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6fkNvbXBvc2l0ZUVkaXRDb21t
YW5kKCkKIAogYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCgpCiB7
Ci0gICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgdGFy
Z2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCku
d2lsbEFwcGx5RWRpdGluZygqdGhpcywgdGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CiB9CiAK
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5KCkKQEAgLTM3OCwxMyArMzc4LDEzIEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5KCkKIAogdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKCkKIHsKLSAgICBmcmFtZSgpLmVkaXRvcigpLmFwcGxp
ZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5n
KCp0aGlzKTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IENvbXBvc2l0ZUVkaXRD
b21tYW5kOjp0YXJnZXRSYW5nZXMoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNFZGl0aW5nVGV4
dEFyZWFPclRleHRJbnB1dCgpKTsKLSAgICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIGZpcnN0UmFuZ2UgPSBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAo
IWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTE0NjgsNyArMTQ2OCw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgLy8gRklYTUUgKDUwOTg5MzEpOiBXZSBzaG91
bGQgYWRkIGEgbmV3IGluc2VydCBhY3Rpb24gIldlYlZpZXdJbnNlcnRBY3Rpb25Nb3ZlZCIgYW5k
IGNhbGwgc2hvdWxkSW5zZXJ0RnJhZ21lbnQgaGVyZS4KIAogICAgIHNldEVuZGluZ1NlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQsIERPV05TVFJFQU0pKTsKLSAgICBmcmFtZSgp
LmVkaXRvcigpLmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24o
KSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXIoZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgIGRlbGV0ZVNlbGVjdGlvbihmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSk7CiAKICAgICBBU1NFUlQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5hbmNob3JOb2RlKCktPmlzQ29ubmVjdGVkKCkpOwpAQCAtMTUwNCw3ICsxNTA0LDcgQEAgdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAgICAgb3B0aW9ucy5hZGQoUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6Ok1hdGNoU3R5bGUpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92ZShmcmFnbWVudCks
IG9wdGlvbnMpKTsKIAotICAgIGZyYW1lKCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFy
a01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOwogCiAgICAgLy8g
SWYgdGhlIHNlbGVjdGlvbiBpcyBpbiBhbiBlbXB0eSBwYXJhZ3JhcGgsIHJlc3RvcmUgc3R5bGVz
IGZyb20gdGhlIG9sZCBlbXB0eSBwYXJhZ3JhcGggdG8gdGhlIG5ldyBlbXB0eSBwYXJhZ3JhcGgu
CiAgICAgYm9vbCBzZWxlY3Rpb25Jc0VtcHR5UGFyYWdyYXBoID0gZW5kaW5nU2VsZWN0aW9uKCku
aXNDYXJldCgpICYmIGlzU3RhcnRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKSkgJiYgaXNFbmRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAppbmRleCA2OGQxNTA2MTJiMGNlZTNjMzk3MTE2MzVjODViMTdkMmRlMzg4YWIyLi4x
MTk3ZjEyZjY3Y2JmOTdlZWI2NGYzNDBlYWZhYjg3MmFjYjg4YmU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTMzNCw3ICsz
MzQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRl
KCkKICAgICAvLyBIb3dldmVyLCBpZiB0eXBpbmcgc3R5bGUgd2FzIHByZXZpb3VzbHkgc2V0IGZy
b20gYW5vdGhlciB0ZXh0IG5vZGUgYXQgdGhlIHByZXZpb3VzCiAgICAgLy8gcG9zaXRpb24gKG5v
dyBkZWxldGVkKSwgd2UgbmVlZCB0byBjbGVhciB0aGF0IHN0eWxlIGFzIHdlbGwuCiAgICAgaWYg
KG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpID09IG1fZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkTm9kZSgpICYmIG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHRO
b2RlKCkpIHsKLSAgICAgICAgZnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7
CisgICAgICAgIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NDAsNyArNzQwLDcgQEAgdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgIAogICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2
YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUu
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgYXV0byBy
YW5nZVRvQmVSZXBsYWNlZCA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0aW5h
dGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJnZURl
c3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwot
ICAgIGlmICghZnJhbWUoKS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJE
ZWxldGUocmFuZ2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2VkLnB0cigpKSkKKyAgICBpZiAoIWRv
Y3VtZW50KCkuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJh
bmdlLnB0cigpLCByYW5nZVRvQmVSZXBsYWNlZC5wdHIoKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICAvLyBtb3ZlUGFyYWdyYXBocyB3aWxsIGluc2VydCBwbGFjZWhvbGRlcnMgaWYgaXQg
cmVtb3ZlcyBibG9ja3MgdGhhdCB3b3VsZCByZXF1aXJlIHRoZWlyIHVzZSwgZG9uJ3QgbGV0IGJs
b2NrCkBAIC04MTQsNyArODE0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxj
dWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCkKICAgICAvLyBJbiB0aGlzIGNhc2UgaWYgd2Ug
c3RhcnQgdHlwaW5nLCB0aGUgbmV3IGNoYXJhY3RlcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc3R5
bGUgYXMgdGhlIGp1c3QgZGVsZXRlZCBvbmVzLAogICAgIC8vIGJ1dCwgaWYgd2UgY2hhbmdlIHRo
ZSBzZWxlY3Rpb24sIGNvbWUgYmFjayBhbmQgc3RhcnQgdHlwaW5nIHRoYXQgc3R5bGUgc2hvdWxk
IGJlIGxvc3QuICBBbHNvIHNlZSAKICAgICAvLyBwcmVzZXJ2ZVR5cGluZ1N0eWxlKCkgYmVsb3cu
Ci0gICAgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlLmNv
cHlSZWYoKSk7CisgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShtX3R5
cGluZ1N0eWxlLmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y2xlYXJUcmFuc2llbnRTdGF0ZSgpCkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmVwbGFjZSkgewogICAgICAgICBF
bGVtZW50KiB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChtX3NlbGVjdGlv
blRvRGVsZXRlLnN0YXJ0KCkpOwogICAgICAgICBpZiAodGV4dENvbnRyb2wgJiYgdGV4dENvbnRy
b2wtPmZvY3VzZWQoKSkKLSAgICAgICAgICAgIGZyYW1lKCkuZWRpdG9yKCkudGV4dFdpbGxCZURl
bGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVk
aXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wpOwogICAgIH0K
IAogICAgIC8vIHNhdmUgdGhpcyB0byBsYXRlciBtYWtlIHRoZSBzZWxlY3Rpb24gd2l0aApAQCAt
OTQwLDcgKzk0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgfQogCiAgICAgYm9vbCBzaG91bGRSZWJhbGFjZVdoaXRlU3BhY2UgPSB0cnVlOwotICAgIGlm
ICghZnJhbWUoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2Vz
SW5TZWN1cmVGaWVsZCgpKSB7CisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkpIHsKICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAg
aWYgKGlzPFRleHQ+KG5vZGUpKSB7CiAgICAgICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25j
YXN0PFRleHQ+KCpub2RlKTsKQEAgLTk1NCw3ICs5NTQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUo
KTsKIAogICAgIGlmICghb3JpZ2luYWxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBmcmFtZSgp
LmVkaXRvcigpLmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24obV9lbmRpbmdQb3NpdGlv
biwgb3JpZ2luYWxTdHJpbmcpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmRlbGV0ZWRB
dXRvY29ycmVjdGlvbkF0UG9zaXRpb24obV9lbmRpbmdQb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcp
OwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9lbmRpbmdQb3Np
dGlvbiwgYWZmaW5pdHksIGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwogICAg
IGNsZWFyVHJhbnNpZW50U3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5j
cHAKaW5kZXggZGYwOThjM2Y3ZGExN2M3ODk0ZTJjZjc4NTU1OWJjODc2Yzg4NDYxMi4uMWY1YjZh
Y2I5ZGIxODhlYTY5MGY2MDA1NmM3NzM3NzAwZTJiOGY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgi
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0
QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCkBAIC0xMjcsMzMgKzEy
NiwxOSBAQCBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwg
bV9lZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50LmZy
YW1lKCkpOwotICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPmZyYW1lKCktPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihtX2RvY3Vt
ZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKG1f
c3RhcnRpbmdTZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogICAgIDogbV9kb2N1bWVu
dChkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgc2V0U3Rh
cnRpbmdTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24pOwogICAgIHNldEVuZGluZ1NlbGVjdGlv
bihlbmRpbmdTZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFuZDo6fkVkaXRDb21tYW5kKCkgPSBk
ZWZhdWx0OwogCi1GcmFtZSYgRWRpdENvbW1hbmQ6OmZyYW1lKCkKLXsKLSAgICBBU1NFUlQoZG9j
dW1lbnQoKS5mcmFtZSgpKTsKLSAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQot
Y29uc3QgRnJhbWUmIEVkaXRDb21tYW5kOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGRv
Y3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJuICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0K
IEVkaXRBY3Rpb24gRWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogewogICAgIHJl
dHVybiBtX2VkaXRpbmdBY3Rpb247CkBAIC0xNjgsMTEgKzE1Myw3IEBAIHN0YXRpYyBpbmxpbmUg
RWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tcG9zaXRpb25JZlBvc3NpYmxlKEVkaXRDb21tYW5k
KiBjb21tYW5kCiAKIGJvb2wgRWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5w
dXQoKSBjb25zdAogewotICAgIGF1dG8qIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBjb250YWlu
ZXIgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2Rl
KCk7CisgICAgYXV0byogY29udGFpbmVyID0gbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCk7CiAgICAgaWYgKCFjb250YWluZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjE3LDcgKzE5OCw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6
OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29u
c3QgU3RyCiB7CiAgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbih0
eXBlLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAg
IHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgbV9kb2N1bWVudC0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiB9CiAKIHZvaWQgRWRpdENvbW1hbmQ6
OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCmluZGV4IGRlYmNmZjAyNDVlZGYwZGVlN2RmYmVmZWQ1
ZjY0MDgxYjUxMmEzNjcuLjJmNjdjZDczMzRjMmM4YmQ1NjkwZjExMzVjMTBkMDAwZGMzMDQzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKQEAgLTM4LDcgKzM4LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CiBjbGFzcyBEb2N1
bWVudDsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZTsKIAogU3RyaW5nIGlucHV0VHlwZU5h
bWVGb3JFZGl0aW5nQWN0aW9uKEVkaXRBY3Rpb24pOwogCkBAIC02NCw4ICs2Myw2IEBAIHByb3Rl
Y3RlZDoKICAgICBleHBsaWNpdCBFZGl0Q29tbWFuZChEb2N1bWVudCYsIEVkaXRBY3Rpb24gPSBF
ZGl0QWN0aW9uOjpVbnNwZWNpZmllZCk7CiAgICAgRWRpdENvbW1hbmQoRG9jdW1lbnQmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgY29u
c3QgRnJhbWUmIGZyYW1lKCkgY29uc3Q7Ci0gICAgRnJhbWUmIGZyYW1lKCk7CiAgICAgY29uc3Qg
RG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIERv
Y3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBDb21wb3NpdGVF
ZGl0Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGZjMmVmYTk1MWZmNTBhNmZhZDM2OTQ4MzU5OTZiODU5
Y2U1NzlmYjEuLjliN2NmZDJhNmUzYjViM2NhMmNjZDA1OTUzNTU1YWEyMmIyNmZkMDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtODY5LDcgKzg2OSw3IEBAIGJvb2wgaXNFbXB0
eVRhYmxlQ2VsbChjb25zdCBOb2RlKiBub2RlKQogCiBSZWY8SFRNTEVsZW1lbnQ+IGNyZWF0ZURl
ZmF1bHRQYXJhZ3JhcGhFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBzd2l0Y2gg
KGRvY3VtZW50LmZyYW1lKCktPmVkaXRvcigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkg
eworICAgIHN3aXRjaCAoZG9jdW1lbnQuZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRv
cigpKSB7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc0RpdjoKICAgICAgICAg
cmV0dXJuIEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIGNhc2UgRWRpdG9y
UGFyYWdyYXBoU2VwYXJhdG9ySXNQOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCmluZGV4IDBlYTg5OTA3NzljMjMzZTgxNDQ4N2M3MTBlYjMwZWU1OTIwYmQ1OGQuLjJjNzZh
YWYxOWRjMjQ2YWE0ZmRkZTE2NjFiYmVkMTI1NDMxNmE1MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE2ODYsNyArMTY4Niw3IEBAIFN0eWxlQ2hhbmdlOjpT
dHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24p
CiAgICAgICAgIGdldFByb3BlcnRpZXNOb3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5
bGUpIDogTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAKICAgICByZWNvbmNpbGVU
ZXh0RGVjb3JhdGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxlLmdldCgpKTsKLSAgICBib29sIHNo
b3VsZFN0eWxlV2l0aENTUyA9IGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS5zaG91bGRTdHls
ZVdpdGhDU1MoKTsKKyAgICBib29sIHNob3VsZFN0eWxlV2l0aENTUyA9IGRvY3VtZW50LT5lZGl0
b3IoKS5zaG91bGRTdHlsZVdpdGhDU1MoKTsKICAgICBpZiAoIXNob3VsZFN0eWxlV2l0aENTUykK
ICAgICAgICAgZXh0cmFjdFRleHRTdHlsZXMoKmRvY3VtZW50LCAqbXV0YWJsZVN0eWxlLCBjb21w
dXRlZFN0eWxlLnVzZUZpeGVkRm9udERlZmF1bHRTaXplKCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKaW5kZXggMTE0MzkzMWI4YjI0YmY2M2MwN2E5YTA5ZTM3OWJmMTkzOGRjNThhMi4u
ZTJjMjlmY2M2ZTdlNzQzMTRiZTM5OTFkMGRmY2Q3ZjkxN2YyNTE0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcApAQCAtMTczLDggKzE3Myw4IEBAIHN0YXRpYyBTdHJpbmcgaW5wdXRFdmVu
dERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFj
CiBjbGFzcyBDbGVhclRleHRDb21tYW5kIDogcHVibGljIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQg
ewogcHVibGljOgogICAgIENsZWFyVGV4dENvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50KTsKLSAg
ICBzdGF0aWMgdm9pZCBDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZyYW1lKTsK
LSAgICAKKyAgICBzdGF0aWMgdm9pZCBDcmVhdGVBbmRBcHBseShEb2N1bWVudCYpOworCiBwcml2
YXRlOgogICAgIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogfTsK
QEAgLTE4OSwxNyArMTg5LDE3IEBAIEVkaXRBY3Rpb24gQ2xlYXJUZXh0Q29tbWFuZDo6ZWRpdGlu
Z0FjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIEVkaXRBY3Rpb246OkRlbGV0ZTsKIH0KIAotdm9p
ZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZy
YW1lKQordm9pZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShEb2N1bWVudCYgZG9j
dW1lbnQpCiB7Ci0gICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAo
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERvbid0IGxlYXZlIGFyb3VuZCBzdGFsZSBjb21wb3NpdGlvbiBzdGF0ZS4KLSAgICBmcmFtZS0+
ZWRpdG9yKCkuY2xlYXIoKTsKKyAgICBkb2N1bWVudC5lZGl0b3IoKS5jbGVhcigpOwogICAgIAot
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKLSAg
ICBhdXRvIGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZCgqZnJh
bWUtPmRvY3VtZW50KCkpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlv
biA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGRvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdEFsbCgpOworICAgIGF1dG8gY2xlYXJDb21tYW5kID0gYWRvcHRSZWYoKm5l
dyBDbGVhclRleHRDb21tYW5kKGRvY3VtZW50KSk7CiAgICAgY2xlYXJDb21tYW5kLT5zZXRTdGFy
dGluZ1NlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogICAgIGNsZWFyQ29tbWFuZC0+YXBwbHkoKTsK
IH0KQEAgLTIwNywyNCArMjA3LDI0IEBAIHZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5k
QXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogCi1UZW1wb3JhcnlTZWxlY3Rpb25D
aGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYgZnJhbWUsIE9wdGlvbmFsPFZp
c2libGVTZWxlY3Rpb24+IHRlbXBvcmFyeVNlbGVjdGlvbiwgT3B0aW9uU2V0PFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbj4gb3B0aW9ucykKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitUZW1wb3JhcnlT
ZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShEb2N1bWVudCYgZG9jdW1l
bnQsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+IHRlbXBvcmFyeVNlbGVjdGlvbiwgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucykKKyAgICA6IG1fZG9jdW1lbnQo
UmVmUHRyKCZkb2N1bWVudCkpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKLSAgICAsIG1fd2Fz
SWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzKGZyYW1lLmVkaXRvcigpLmlnbm9yZVNlbGVjdGlvbkNo
YW5nZXMoKSkKKyAgICAsIG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzKGRvY3VtZW50LmVk
aXRvcigpLmlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSkKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGZyYW1lLnNlbGVjdGlvbigp
LmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKKyAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZChkb2N1bWVudC5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVk
KCkpCiAjZW5kaWYKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChvcHRpb25z
ICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAg
ICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50LnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVk
KHRydWUpOwogI2VuZGlmCiAKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9w
dGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuc2V0
SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuZWRpdG9yKCku
c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKIAogICAgIGlmICh0ZW1wb3JhcnlTZWxl
Y3Rpb24pIHsKLSAgICAgICAgbV9zZWxlY3Rpb25Ub1Jlc3RvcmUgPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKKyAgICAgICAgbV9zZWxlY3Rpb25Ub1Jlc3RvcmUgPSBkb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAgc2V0U2VsZWN0aW9uKHRlbXBvcmFyeVNl
bGVjdGlvbi52YWx1ZSgpKTsKICAgICB9CiB9CkBAIC0yMzYsMTIgKzIzNiwxMiBAQCBUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoKQogCiAgICAgaWYg
KG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hh
bmdlcykgewogICAgICAgICBhdXRvIHJldmVhbFNlbGVjdGlvbiA9IG1fb3B0aW9ucyAmIFRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbjo6UmV2ZWFsU2VsZWN0aW9uID8gRWRpdG9yOjpSZXZlYWxTZWxl
Y3Rpb246OlllcyA6IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpObzsKLSAgICAgICAgbV9mcmFt
ZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhtX3dhc0lnbm9yaW5nU2VsZWN0
aW9uQ2hhbmdlcywgcmV2ZWFsU2VsZWN0aW9uKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9y
KCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdl
cywgcmV2ZWFsU2VsZWN0aW9uKTsKICAgICB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJsZUFwcGVh
cmFuY2VVcGRhdGVzKQotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBl
YXJhbmNlRW5hYmxlZChtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQpOworICAgICAgICBt
X2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChtX2FwcGVh
cmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQpOwogI2VuZGlmCiB9CiAKQEAgLTI1MCwxNCArMjUwLDE0
IEBAIHZvaWQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogICAgIGF1dG8gb3B0aW9ucyA9IEZyYW1lU2VsZWN0
aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpOwogICAgIGlmIChtX29wdGlvbnMgJiBU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkRvTm90U2V0Rm9jdXMpCiAgICAgICAgIG9wdGlvbnMu
YWRkKEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKKyAgICBtX2RvY3VtZW50LT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKIH0KIAogLy8gV2hl
biBhbiBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0
ZXh0IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0
aW9uIGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6
OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogewotICAgIGF1dG8gc2VsZWN0aW9u
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFldmVudCkKICAg
ICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgdGV4dCBj
b250cm9sLCBhbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIG91dHNpZGUgb2YgaXRzIHNoYWRv
dyB0cmVlLApAQCAtMjc2LDEyICsyNzYsMTIgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNl
bGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogLy8gRnVuY3Rpb24gY29uc2lkZXJzIE1h
YyBlZGl0aW5nIGJlaGF2aW9yIGEgZmFsbGJhY2sgd2hlbiBQYWdlIG9yIFNldHRpbmdzIGlzIG5v
dCBhdmFpbGFibGUuCiBFZGl0aW5nQmVoYXZpb3IgRWRpdG9yOjpiZWhhdmlvcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEVkaXRpbmdCZWhhdmlvcihtX2ZyYW1lLnNldHRpbmdzKCkuZWRpdGluZ0Jl
aGF2aW9yVHlwZSgpKTsKKyAgICByZXR1cm4gRWRpdGluZ0JlaGF2aW9yKG1fZG9jdW1lbnQuc2V0
dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOwogfQogCiBFZGl0b3JDbGllbnQqIEVkaXRv
cjo6Y2xpZW50KCkgY29uc3QKIHsKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgp
KQorICAgIGlmIChQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgIHJldHVy
biAmcGFnZS0+ZWRpdG9yQ2xpZW50KCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0zNDQs
MTIgKzM0NCwxMiBAQCBib29sIEVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KFRleHRFdmVudCYgZXZl
bnQpCiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgcmV0
dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwogfQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdFJpY2hseSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFi
bGUoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZSgpOwogfQogCiBlbnVtIGNsYXNzIENsaXBib2FyZEV2ZW50S2lu
ZCB7CkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIGJvb2wgZGlzcGF0Y2hDbGlwYm9hcmRFdmVu
dChSZWZQdHI8RWxlbWVudD4mJiB0YXJnZXQsIENsaXBib2FyZEV2ZW50S2luZAogCiBib29sIEVk
aXRvcjo6Y2FuREhUTUxDdXQoKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZy
b21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpCZWZvcmVDdXQpOwpAQCAtNDUwLDcg
KzQ1MCw3IEBAIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpjYW5E
SFRNTENvcHkoKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6QmVmb3JlQ29weSk7CiB9CkBAIC00ODQsMTMgKzQ4NCwx
MyBAQCBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlRWxlbWVu
dEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5p
c1JhbmdlKCkgJiYgIXNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQogCiBib29sIEVk
aXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSkKKyAgICBpZiAobV9k
b2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJ
bnB1dEZyb21FZGl0aW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBj
YW5FZGl0KCk7CkBAIC00OTgsNyArNDk4LDcgQEAgYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29u
c3QKIAogYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHNl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCBi
b29sIEVkaXRvcjo6c2hvdWxkU21hcnREZWxldGUoKQogewogICAgIGlmIChiZWhhdmlvcigpLnNo
b3VsZEFsd2F5c1NtYXJ0RGVsZXRlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBtX2ZyYW1lLnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5Owor
ICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdy
YW51bGFyaXR5OwogfQogCiBib29sIEVkaXRvcjo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkK
QEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZwogICAgIGlmICghY2Fu
RWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1Jhbmdl
KCkpIHsKICAgICAgICAgaWYgKGlzVHlwaW5nQWN0aW9uKSB7CiAgICAgICAgICAgICBUeXBpbmdD
b21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGRvY3VtZW50KCksIGNhblNtYXJ0Q29weU9yRGVsZXRl
KCkgPyBUeXBpbmdDb21tYW5kOjpTbWFydERlbGV0ZSA6IDAsIGdyYW51bGFyaXR5KTsKICAgICAg
ICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwpAQCAtNTg3LDcg
KzU4Nyw3IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAKIHZvaWQgRWRpdG9yOjpkZWxldGVT
ZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc21hcnREZWxl
dGUsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CkBA
IC01OTUsNyArNTk1LDcgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERl
bGV0ZShib29sIHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmcKIAogdm9pZCBFZGl0b3I6
OmNsZWFyVGV4dCgpCiB7Ci0gICAgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoJm1f
ZnJhbWUpOworICAgIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KG1fZG9jdW1lbnQp
OwogfQogCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcmIHBhc3Rp
bmdUZXh0LCBib29sIHNtYXJ0UmVwbGFjZSkKQEAgLTY2MSw3ICs2NjEsNyBAQCBib29sIEVkaXRv
cjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdl
KiByZXBsYWNpbmdETwogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZWN0UmVw
bGFjZW1lbnQsIFNtYXJ0UmVwbGFjZSBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGUgbWF0Y2hTdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxC
bG9ja3F1b3RlSGFuZGxpbmcpCiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2Vs
ZWN0aW9uLmlzTm9uZSgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02ODksMTkgKzY4OSwxOSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNl
bGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVw
bAogICAgIGlmIChtX2ltYWdlRWxlbWVudHNUb0xvYWRCZWZvcmVSZXZlYWxpbmdTZWxlY3Rpb24u
aXNFbXB0eSgpKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24o
KTsKIAotICAgIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBp
ZiAoc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rp
b24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb21tYW5kLT52aXNp
YmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOwotICAgICAgICByZXBsYWNlZFRleHQucG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RD
YWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5
cGVQYXN0ZSwgdGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAg
ICAgIGNvbW1hbmQtPmNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBs
YWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKICAgICB9CiAKICAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246
Okluc2VydCkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGNvbW1hbmQtPmRvY3VtZW50RnJhZ21l
bnRQbGFpblRleHQoKTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VO
b3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRp
dFR5cGVJbnNlcnQsIHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
ICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4dCwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGNvbW1hbmQtPmNv
bXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFj
ZWRSYW5nZSgpKTsKICAgICB9CiAKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIEVkaXRvcjo6cmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU2VsZWN0UmVwbGFjZW1l
bnQgc2VsZQogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCiB7Ci0gICAg
cmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiBib29s
IEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtNzQ0LDcg
Kzc0NCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNv
bnN0CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTENvcHkoKQogeyAgIAotICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50
KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDb3B5
KTsKQEAgLTc1Miw3ICs3NTIsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIAogYm9v
bCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50
VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkN1dCk7CkBAIC03NjAs
NyArNzYwLDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OnNo
b3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvcklu
c2VydEFjdGlvbiBhY3Rpb24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCku
bG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9
PSBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkt
Pm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmco
KSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRU
ZXh0KHRleHQsIHJhbmdlLCBhY3Rpb24pOwpAQCAtNzgyLDE3ICs3ODIsMTcgQEAgdm9pZCBFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRp
bmdTZWxlY3Rpb24pCiAKIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIHsK
LSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9k
ZSogc3RhcnROb2RlOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewot
ICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUg
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVj
YXRlZE5vZGUoKTsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsK
KyAgICAgICAgc3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBOb2RlKiBlbmRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUp
ICE9IGVuY2xvc2luZ0Jsb2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0gZWxzZQotICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsK
KyAgICAgICAgc3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBp
ZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODEyLDEyICs4MTIsMTIg
QEAgYm9vbCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0
b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50
V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYg
KGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKSwgdWxUYWcpKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAg
ICB9IGVsc2UgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1
dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0g
ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5l
bmQoKSwgdWxUYWcpOworICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpIHsKKyAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhU
YWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7Cisg
ICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CiAgICAgICAgIGlmIChzdGFy
dE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJl
dHVybiBUcnVlVHJpU3RhdGU7CiAgICAgfQpAQCAtODI3LDEyICs4MjcsMTIgQEAgVHJpU3RhdGUg
RWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogCiBUcmlTdGF0ZSBF
ZGl0b3I6OnNlbGVjdGlvbk9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykp
CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlm
IChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCksIG9sVGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0g
ICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBh
dXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9
IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCksIG9sVGFnKTsKKyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRo
VGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOwor
ICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOwogICAgICAgICBpZiAoc3Rh
cnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAgLTg3Miw3ICs4NzIsNyBAQCBib29sIEVkaXRv
cjo6Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9y
OjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5
KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNo
bHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50
KCkpOwpAQCAtODgyLDcgKzg4Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxPcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoJmRvY3VtZW50KCkp
OwpAQCAtODkyLDcgKzg5Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsT3JkZXJlZCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8
fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgp
IHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgmZG9j
dW1lbnQoKSk7CkBAIC05MDIsNyArOTAyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKQogCiB2b2lkIEVkaXRvcjo6ZGVjcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAtOTMyLDcgKzkzMiw3IEBAIEVsZW1lbnQqIEVkaXRvcjo6
ZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNv
bnN0CiAKIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
KFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTk0
NiwxMyArOTQ2LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5
bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICBpZiAoIXN0eWxlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5
cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsK
ICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVO
YW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVu
dERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbigqc3R5bGUsIGVk
aXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1
dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtOTY5LDcgKzk2OSw4IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJl
ZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2xpZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKKyAg
ICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CiAgICAg
aWYgKGVsZW1lbnQpCiAgICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRU
eXBlTmFtZSwgaW5wdXRFdmVudERhdGEpOwogfQpAQCAtOTg0LDEzICs5ODUsMTMgQEAgdm9pZCBF
ZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW8KICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNl
bGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0aW9uVHlw
ZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihl
ZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2ZW50RGF0
YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbihzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAg
IGlmIChlbGVtZW50ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0
VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA1LDcg
KzEwMDYsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5
bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNs
aWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGFwcGx5U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAxNiw3ICsxMDE3
LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxl
PiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxl
U3R5bGUgaXMgZW1wdHkuCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCks
IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYg
KCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0
aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5
U3R5bGUoV1RGTW92ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24sIGNvbG9yRmlsdGVyTW9kZSk7CkBA
IC0xMDI3LDI1ICsxMDI4LDI1IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9T
ZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlCiAgICAgaWYgKCFz
dHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5
bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkp
CisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQogICAgICAg
ICBhcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogYm9vbCBF
ZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9
IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQor
ICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlv
blN0YXJ0KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0g
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQogICAgICAgICByZXR1cm4gZWRpdGluZ1N0eWxl
LT5oYXNTdHlsZShwcm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBU
cmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ1N0eWxl
OjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHBy
b3BlcnR5SUQsIHZhbHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydENTU1Byb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3Rh
cnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKKyAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCiAgICAgICAgIHByb3BlcnR5SUQg
PT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUg
fHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMTM2LDcgKzExMzcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoQ29tcG9zaXRl
RWRpdENvbW1hbmQmIGNvbW1hbmQpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci0+cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoJmNvbW1hbmQpOwogCiAgICAgICAgIGlmICghY29t
bWFuZC5wcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpKQotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKIAogICAgICAgICAvLyBDb21tYW5kIHdpbGwgYmUgZXF1
YWwgdG8gbGFzdCBlZGl0IGNvbW1hbmQgb25seSBpbiB0aGUgY2FzZSBvZiB0eXBpbmcKICAgICAg
ICAgaWYgKG1fbGFzdEVkaXRDb21tYW5kLmdldCgpID09ICZjb21tYW5kKQpAQCAtMTIwMCwxMSAr
MTIwMSwxMSBAQCB2b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBv
c2l0aW9uJiBjb21wb3NpdGlvbikKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMobmV3U2Vs
ZWN0aW9uKTsKIH0KIAotRWRpdG9yOjpFZGl0b3IoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFt
ZShmcmFtZSkKK0VkaXRvcjo6RWRpdG9yKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2tpbGxSaW5nKG1ha2VVbmlxdWU8UEFMOjpLaWxsUmlu
Zz4oKSkKLSAgICAsIG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihmcmFt
ZSkpCi0gICAgLCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyPihmcmFtZSkpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5p
cXVlPFNwZWxsQ2hlY2tlcj4oZG9jdW1lbnQpKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZG9jdW1lbnQpKQog
ICAgICwgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjplZGl0b3JVSVVwZGF0
ZVRpbWVyRmlyZWQpCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAsIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBk
YXRlVGltZXIoKnRoaXMsICZFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJz
KQpAQCAtMTIyMCw3ICsxMjIxLDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKICAgICBpZiAobV9j
b21wb3NpdGlvbk5vZGUpIHsKICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBudWxscHRyOwog
ICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkKLSAgICAg
ICAgICAgIGNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOworICAgICAgICAg
ICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAg
IH0KICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3Vz
dG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0xMjM4LDEyICsxMjM5LDEyIEBA
IHZvaWQgRWRpdG9yOjpjbGVhcigpCiAKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCwgVGV4dEV2ZW50SW5wdXRUeXBlIGlu
cHV0VHlwZSkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5ldmVudEhhbmRsZXIoKS5oYW5kbGVUZXh0
SW5wdXRFdmVudCh0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlwZSk7CisgICAgcmV0dXJu
IG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQo
dGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1dFR5cGUpOwogfQogCiBib29sIEVkaXRvcjo6aW5z
ZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAg
ICByZXR1cm4gbV9mcmFtZS5ldmVudEhhbmRsZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0
LCAwLCBUZXh0RXZlbnRJbnB1dENvbXBvc2l0aW9uKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCAwLCBUZXh0
RXZlbnRJbnB1dENvbXBvc2l0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydERpY3RhdGVk
VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2
ZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcywgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkKQEAgLTEz
MDMsMTAgKzEzMDQsOCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4
dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgICAgICAgICAgLy8g
dGhlbiB0aGlzIGNvZGUgc2hvdWxkIGNvbmRpdGlvbmFsaXplIHJldmVhbGluZyBzZWxlY3Rpb24g
b24gd2hldGhlciB0aGUgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIGJpdAogICAgICAgICAgICAg
Ly8gaXMgc2V0IGZvciB0aGUgbmV3bHkgZm9jdXNlZCBmcmFtZS4KICAgICAgICAgICAgIGlmIChj
bGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkUmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5z
ZXJ0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogZWRpdGVkRnJhbWUgPSBkb2N1
bWVudC0+ZnJhbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGVk
aXRlZEZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwYWdlLT5yZXZlYWxD
dXJyZW50U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFn
ZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMTMxOSwxMCArMTMxOCwxMCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJyZWFr
KCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91
bGRJbnNlcnRUZXh0KCJcbiIsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwogICAgIGJv
b2wgYWxpZ25Ub0VkZ2UgPSBpc0VuZE9mRWRpdGFibGVPck5vbkVkaXRhYmxlQ29udGVudChjYXJl
dCk7CiAgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoZG9jdW1lbnQoKSwgYXV0b2Nv
cnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvciA6IDApOwpAQCAtMTMzOSwxMCArMTMzOCwxMCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAg
cmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJc
biIsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgVmlzaWJsZVBv
c2l0aW9uIGNhcmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwogICAgIGJvb2wgYWxpZ25Ub0VkZ2UgPSBpc0Vu
ZE9mRWRpdGFibGVPck5vbkVkaXRhYmxlQ29udGVudChjYXJldCk7CiAgICAgYm9vbCBhdXRvY29y
cmVjdGlvbklzQXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRv
Y29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5k
OjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0Fw
cGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDAp
OwpAQCAtMTQwNiw3ICsxNDA1LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRp
dG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcodHJ1ZSk7CiAgICAgfQogCi0gICAgaWYgKGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKQorICAg
IGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBh
c3RlKCktPndyaXRlUGxhaW5UZXh0KHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpLCBjYW5T
bWFydENvcHlPckRlbGV0ZSgpID8gUGFzdGVib2FyZDo6Q2FuU21hcnRSZXBsYWNlIDogUGFzdGVi
b2FyZDo6Q2Fubm90U21hcnRSZXBsYWNlKTsKICAgICBlbHNlIHsKICAgICAgICAgSFRNTEltYWdl
RWxlbWVudCogaW1hZ2VFbGVtZW50ID0gbnVsbHB0cjsKQEAgLTE0MjUsNyArMTQyNCw3IEBAIHZv
aWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24p
CiAgICAgICAgICAgICB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgqUGFzdGVib2FyZDo6Y3Jl
YXRlRm9yQ29weUFuZFBhc3RlKCkpOwogI2Vsc2UKICAgICAgICAgICAgIC8vIEZJWE1FOiBEZWxl
dGUgYWZ0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc3NjE4PiBsYW5kcy4KLSAgICAgICAgICAg
IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVNlbGVjdGlvbigqc2Vs
ZWN0aW9uLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBtX2ZyYW1lLCBJbmNsdWRlSW1hZ2VBbHRU
ZXh0Rm9yRGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNv
cHlBbmRQYXN0ZSgpLT53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uLCBjYW5TbWFydENvcHlPckRl
bGV0ZSgpLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRy
YW5zZmVyKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQpAQCAtMTQzNCwxMCArMTQzMywxMCBA
QCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0
aW9uKQogICAgIGlmIChhY3Rpb24gPT0gQ3V0QWN0aW9uKSB7CiAgICAgICAgIFN0cmluZyB0ZXh0
OwogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAg
ICAgICAgICAgIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgICAg
IHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgZGVsZXRlU2Vs
ZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIEVkaXRBY3Rpb246
OkN1dCk7CiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KQotICAgICAgICAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dCh0ZXh0
LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgfQogfQogCkBAIC0xNDU0LDcgKzE0NTMsNyBAQCB2b2lkIEVk
aXRvcjo6cGFzdGUoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICAgICAgcmV0dXJuOwogICAg
IHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBSZXNv
dXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IoZG9jdW1l
bnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAg
ICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFs
bG93UGxhaW5UZXh0IH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQ
YXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwpAQCAtMTQ3OSw3ICsxNDc4LDcgQEAgdm9pZCBFZGl0b3I6
OnBhc3RlQXNRdW90YXRpb24oKQogICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKGZhbHNlKTsKICAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgdmFs
aWRhdGlvblN1cHByZXNzb3IoZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKICAg
ICBhdXRvIHBhc3RlYm9hcmQgPSBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKTsK
LSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQocGFz
dGVib2FyZC5nZXQoKSwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQsIFBhc3RlT3B0aW9u
OjpBc1F1b3RhdGlvbiB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRo
UGFzdGVib2FyZCgqcGFzdGVib2FyZCk7CkBAIC0xNjE3LDcgKzE2MTYsNyBAQCB2b2lkIEVkaXRv
cjo6cmVuZGVyTGF5ZXJEaWRTY3JvbGwoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlm
IChtX2ltYWdlRWxlbWVudHNUb0xvYWRCZWZvcmVSZXZlYWxpbmdTZWxlY3Rpb24uaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHN0YXJ0Q29udGFpbmVyID0gbWFrZVJlZlB0
cihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
KTsKKyAgICBhdXRvIHN0YXJ0Q29udGFpbmVyID0gbWFrZVJlZlB0cihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAoIXN0
YXJ0Q29udGFpbmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE4NTEsOCArMTg1MCw4IEBAIHZv
aWQgRWRpdG9yOjp0b2dnbGVVbmRlcmxpbmUoKQogdm9pZCBFZGl0b3I6OnNldEJhc2VXcml0aW5n
RGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKGluU2FtZVBhcmFncmFwaChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnZpc2libGVFbmQoKSkgJiYgCi0gICAgICAgIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0
aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCisgICAgaWYgKGluU2FtZVBhcmFncmFwaChtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVFbmQoKSkKKyAgICAgICAgJiYgYmFzZVdyaXRp
bmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpID09IGRpcmVjdGlvbikKICAgICAgICAgcmV0
dXJuOwogI2VuZGlmCiAgICAgICAgIApAQCAtMTg4Miw3ICsxODgxLDcgQEAgV3JpdGluZ0RpcmVj
dGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25z
dAogewogICAgIGF1dG8gcmVzdWx0ID0gV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7CiAK
LSAgICBQb3NpdGlvbiBwb3MgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcG9zID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgp
OwogICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xOTE3LDcgKzE5MTYsNyBAQCB2b2lkIEVkaXRv
cjo6c2VsZWN0Q29tcG9zaXRpb24oKQogICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODE+CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb247
CiAgICAgc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9u
KCksIHJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOwogfQogCiB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBv
c2l0aW9uKCkKQEAgLTE5NTIsMjggKzE5NTEsMjggQEAgdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21w
b3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiAKIGNsYXNzIFNldENvbXBvc2l0aW9uU2NvcGUg
ewogcHVibGljOgotICAgIFNldENvbXBvc2l0aW9uU2NvcGUoRnJhbWUmIGZyYW1lKQotICAgICAg
ICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgICAgICwgbV90eXBpbmdHZXN0dXJlSW5kaWNhdG9yKGZy
YW1lKQorICAgIFNldENvbXBvc2l0aW9uU2NvcGUoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgICAg
ICA6IG1fZG9jdW1lbnQoUmVmUHRyKCZkb2N1bWVudCkpCisgICAgICAgICwgbV90eXBpbmdHZXN0
dXJlSW5kaWNhdG9yKCpkb2N1bWVudC5mcmFtZSgpKQogICAgIHsKLSAgICAgICAgbV9mcmFtZS0+
ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKKyAgICAgICAgbV9kb2N1
bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKICAgICB9CiAK
ICAgICB+U2V0Q29tcG9zaXRpb25TY29wZSgpCiAgICAgewotICAgICAgICBtX2ZyYW1lLT5lZGl0
b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKLSAgICAgICAgaWYgKGF1dG8q
IGVkaXRvckNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKKyAgICAg
ICAgaWYgKGF1dG8qIGVkaXRvckNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgp
KQogICAgICAgICAgICAgZWRpdG9yQ2xpZW50LT5kaWRVcGRhdGVDb21wb3NpdGlvbigpOwogICAg
IH0KIAotICAgIFJlZjxGcmFtZT4gbV9mcmFtZTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9j
dW1lbnQ7CiAgICAgVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IgbV90eXBpbmdHZXN0dXJlSW5k
aWNhdG9yOwogfTsKIAogdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
dGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1vZGUgPT0gQ29u
ZmlybUNvbXBvc2l0aW9uIHx8IG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pOwotICAgIFNldENv
bXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21w
b3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICBpZiAo
bW9kZSA9PSBDYW5jZWxDb21wb3NpdGlvbikKICAgICAgICAgQVNTRVJUKHRleHQgPT0gZW1wdHlT
dHJpbmcoKSk7CkBAIC0xOTg0LDcgKzE5ODMsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKICAgICBtX2N1
c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRp
b25IaWdobGlnaHRzLmNsZWFyKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05v
bmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gQWx3YXlzIGRlbGV0ZSB0aGUgY3VycmVudCBjb21wb3NpdGlvbiBi
ZWZvcmUgaW5zZXJ0aW5nIHRoZSBmaW5hbGl6ZWQgY29tcG9zaXRpb24gdGV4dCBpZiB3ZSdyZSBj
b25maXJtaW5nIG91ciBjb21wb3NpdGlvbi4KQEAgLTIwMDAsMTMgKzE5OTksMTMgQEAgdm9pZCBF
ZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25N
b2RlIG1vZGUpCiAKICAgICBpZiAobW9kZSA9PSBDYW5jZWxDb21wb3NpdGlvbikgewogICAgICAg
ICAvLyBBbiBvcGVuIHR5cGluZyBjb21tYW5kIHRoYXQgZGlzYWdyZWVzIGFib3V0IGN1cnJlbnQg
c2VsZWN0aW9uIHdvdWxkIGNhdXNlIGlzc3VlcyB3aXRoIHR5cGluZyBsYXRlciBvbi4KLSAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoJm1fZnJhbWUpOworICAgICAgICBUeXBpbmdD
b21tYW5kOjpjbG9zZVR5cGluZyhtX2RvY3VtZW50KTsKICAgICB9CiB9CiAKIHZvaWQgRWRpdG9y
OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvbkhpZ2hs
aWdodD4mIGhpZ2hsaWdodHMsIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCBzZWxl
Y3Rpb25FbmQpCiB7Ci0gICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3Bl
KG1fZnJhbWUpOworICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZSht
X2RvY3VtZW50KTsKIAogICAgIC8vIFVwZGF0ZXMgc3R5bGVzIGJlZm9yZSBzZXR0aW5nIHNlbGVj
dGlvbiBmb3IgY29tcG9zaXRpb24gdG8gcHJldmVudAogICAgIC8vIGluc2VydGluZyB0aGUgcHJl
dmlvdXMgY29tcG9zaXRpb24gdGV4dCBpbnRvIHRleHQgbm9kZXMgb2RkbHkuCkBAIC0yMDE1LDcg
KzIwMTQsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogCiAgICAgc2VsZWN0Q29tcG9zaXRp
b24oKTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBT
dHJpbmcgb3JpZ2luYWxUZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CkBAIC0yMDIzLDEwICsyMDIyLDEw
IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgaWYgKGlzU3RhcnRpbmdUb1JlY29tcG9z
ZUV4aXN0aW5nUmFuZ2UpIHsKICAgICAgICAgLy8gV2UgcGFzcyBUeXBpbmdDb21tYW5kOjpUZXh0
Q29tcG9zaXRpb25GaW5hbCBoZXJlIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlIHJlbW92aW5nIGNv
bXBvc2l0aW9uIHRleHQgdGhhdCBoYXMgYmVlbiBmaW5hbGl6ZWQuCiAgICAgICAgIFR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihkb2N1bWVudCgpLCAwLCBUeXBpbmdDb21tYW5kOjpUZXh0
Q29tcG9zaXRpb25GaW5hbCk7Ci0gICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaXNSYW5n
ZSgpKSB7CiAgICAgICAgICAgICAvLyBJZiBkZWxldGlvbiB3YXMgcHJldmVudGVkLCB0aGVuIHdl
IG5lZWQgdG8gY29sbGFwc2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgZW5kIHNvIHRoYXQgdGhlIG9y
aWdpbmFsIHRleHQgd2lsbCBub3QgYmUgcmVjb21wb3NlZC4KLSAgICAgICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHsgY3VycmVudFNlbGVjdGlvbi5lbmQoKSwgY3VycmVu
dFNlbGVjdGlvbi5lbmQoKSB9KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHsgY3VycmVudFNlbGVjdGlvbi5lbmQoKSwgY3VycmVudFNlbGVjdGlvbi5l
bmQoKSB9KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA4Miw4ICsyMDgxLDggQEAgdm9pZCBF
ZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChkb2N1
bWVudCgpLCB0ZXh0LCBUeXBpbmdDb21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQgfCBUeXBpbmdD
b21tYW5kOjpQcmV2ZW50U3BlbGxDaGVja2luZywgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0
aW9uUGVuZGluZyk7CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29t
cG9zaXRpb24gbm93LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRl
bnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQ
b3NpdGlvbiBiYXNlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCku
ZG93bnN0cmVhbSgpOworICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOwogICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGJh
c2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5zaWduZWQgYmFzZU9mZnNldCA9IGJhc2Uu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAgICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4
dGVudC5kZXByZWNhdGVkTm9kZSgpOwpAQCAtMjEwOSw3ICsyMTA4LDcgQEAgdm9pZCBFZGl0b3I6
OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0
aW9uVW5kZXJsaW4KICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4oYmFzZU9m
ZnNldCArIHNlbGVjdGlvblN0YXJ0LCBleHRlbnRPZmZzZXQpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgoc3RhcnQsIGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25F
bmQpLCBleHRlbnRPZmZzZXQpOwogICAgICAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShiYXNlTm9kZS0+ZG9jdW1lbnQoKSwgYmFzZU5vZGUsIHN0YXJ0LCBiYXNlTm9k
ZSwgZW5kKTsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShzZWxlY3RlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6Ok5vKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEy
Myw3ICsyMTIyLDcgQEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7CiAKQEAgLTIxMzksNyArMjEzOCw3IEBAIHZvaWQgRWRpdG9yOjpsZWFy
blNwZWxsaW5nKCkKICAgICAgICAgCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVz
ZSAibGVhcm4iIGJ1dHRvbiBvbiAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24n
dCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2Vy
cyBhcm91bmQgdGhlIGxlYXJuZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4K
IAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVj
dGVkUmFuZ2UpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNl
bGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKQEAgLTIxNTIsMTQgKzIx
NTEsMTQgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmcoKQogCiB2b2lkIEVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiB7Ci0gICAg
UmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOwotCisgICAgUmVmPERvY3VtZW50PiBwcm90
ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKKyAgICAKICAgICAvLyBUaGUgYmFzaWMgYXBwcm9h
Y2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFzZXMgLSBmcm9tIHRoZSBzZWxlY3Rpb24gZW5kIHRv
IHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCiAgICAgLy8gdGhlbiB3ZSB3cmFwIGFuZCBzZWFyY2gg
ZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHByb3hpbWF0ZWx5KSB3aGVyZSB3ZSBzdGFydGVkLgog
ICAgIAogICAgIC8vIFN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIHRv
IGVkZ2Ugb2YgZG9jdW1lbnQuICBTdGFydGluZyBhdCB0aGUgc2VsZWN0aW9uIGVuZCBtYWtlcwog
ICAgIC8vIHJlcGVhdGVkICJjaGVjayBzcGVsbGluZyIgY29tbWFuZHMgd29yay4KLSAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICBSZWY8UmFuZ2U+IHNwZWxsaW5nU2VhcmNoUmFuZ2UgPSByYW5nZU9m
Q29udGVudHMoZG9jdW1lbnQoKSk7CiAKICAgICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0g
ZmFsc2U7CkBAIC0yMzA4LDggKzIzMDcsOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIAogICAgICAgICAv
LyBGSVhNRSA0ODU5MTkwOiBUaGlzIGdldHMgY29uZnVzZWQgd2l0aCBkb3VibGVkIHB1bmN0dWF0
aW9uIGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGgKICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFu
Z2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmdyYW1tYXJTZWFyY2hSYW5nZSwgeyBncmFtbWFy
UGhyYXNlT2Zmc2V0ICsgZ3JhbW1hckRldGFpbC5yYW5nZS5sb2NhdGlvbiwgZ3JhbW1hckRldGFp
bC5yYW5nZS5sZW5ndGggfSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklU
WSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNs
aWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFz
ZSwgZ3JhbW1hckRldGFpbCk7CiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBncmFtbWFyRGV0YWls
LnVzZXJEZXNjcmlwdGlvbik7CkBAIC0yMzIwLDggKzIzMTksOCBAQCB2b2lkIEVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAg
IC8vIGEgbWFya2VyIHNvIHdlIGRyYXcgdGhlIHJlZCBzcXVpZ2dsZSBsYXRlci4KICAgICAgICAg
CiAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShz
cGVsbGluZ1NlYXJjaFJhbmdlLCB7IG1pc3NwZWxsaW5nT2Zmc2V0LCBtaXNzcGVsbGVkV29yZC5s
ZW5ndGgoKSB9KTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihtaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKSk7Ci0gICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5n
ZSwgRE9XTlNUUkVBTSkpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNl
bGVjdGlvbigpOwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOwogICAgICAgICBkb2N1bWVudCgpLm1h
cmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
aW5nKTsKQEAgLTIzMzUsNyArMjMzNCw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRXb3Jk
QXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tlZE5vZGUpIGNvbnN0CiAgICAgaWYgKCFpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIHx8ICFjbGlja2VkTm9kZSB8fCAhaXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvcihjbGlja2VkTm9kZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRp
dGFibGUoKSB8fCBzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IApAQCAtMjM4OSw3ICsyMzg4LDcgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFNlbGVjdGlv
blN0cmluZygpIGNvbnN0CiBib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkK
IHsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFyYW5nZSB8fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGlj
YWwoKTsKQEAgLTI0MDQsNyArMjQwMyw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nl
c0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkgY29uc3QKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXM7CiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICB0ZXh0Q2hlY2tl
cigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CisgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNz
ZXNGb3JXb3JkKHdvcmQsIFN0cmluZygpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLCBndWVzc2VzKTsKICAgICByZXR1cm4gZ3Vlc3NlczsKIH0KIApAQCAtMjQxMiw3ICsyNDEx
LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFt
bWF0aWNhbChib29sJiBtaXNzcGVsbGVkLCBib28KIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBi
ZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24o
KSkgewogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uID0gVmlzaWJs
ZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKICAgICAgICAgICAgIHdvcmRTZWxlY3Rpb24u
ZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOwpAQCAtMjQ3Miw3ICsyNDcx
LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGkKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBs
YWNlbWVudCkKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVm
PERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAogICAgIGlmIChwbGF0
Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNTk0
LDE5ICsyNTkzLDE5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgLy8gSWYgYXV0b2Nv
cnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3BlbGxlZCB3b3JkIGJ5
IHRoaXMgd29yZC4KICAgICBpZiAoIWF1dG9jb3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCptaXNzcGVsbGluZ1JhbmdlLCBE
T1dOU1RSRUFNKTsKLSAgICAgICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCku
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgIGlmIChuZXdTZWxl
Y3Rpb24gIT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICAg
ICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgICAgICBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFtX2ZyYW1lLmVkaXRvcigpLnNob3VsZEluc2VydFRleHQoYXV0b2Nv
cnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRU
ZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1l
LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBT
ZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2Vy
dCk7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNl
OjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIAogICAgICAgICAvLyBSZXNldCB0aGUgY2hhcmV0
IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3Zl
VG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLm1vdmVUbyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVu
ZCgpKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rp
b246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAgICAgfQogCiAgICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKQEAgLTI2
NzgsNyArMjY3Nyw3IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5v
ZGUqIG5vZGUpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5G
b2N1c2VkTm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRG
b3IobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOworICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCkBAIC0yNzI2LDcgKzI3
MjUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNr
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBhc3luY2hyb25vdXMgPSBt
X2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAh
c2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKKyAgICBib29sIGFzeW5jaHJvbm91cyA9IG1fZG9j
dW1lbnQuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpICYmICFz
aG91bGRTaG93Q29ycmVjdGlvblBhbmVsOwogCiAgICAgLy8gSW4gYXN5bmNocm9ub3VzIG1vZGUs
IHdlIGludGVudGlvbmFsbHkgY2hlY2sgcGFyYWdyYXBoLXdpZGUgc2VudGVuY2UuCiAgICAgY29u
c3QgYXV0byByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soZWRp
dGFibGVOb2RlLCB0ZXh0Q2hlY2tpbmdPcHRpb25zKTsKQEAgLTI3NDEsNyArMjc0MCw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlv
blNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgfQogCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4gcmVzdWx0czsKLSAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIoKSwg
cGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVkT3B0aW9ucywgcmVzdWx0cywgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRl
eHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJl
c3VsdHMsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRS
ZXBsYWNlRm9yKHJlcXVlc3QucmVsZWFzZU5vbk51bGwoKSwgcmVzdWx0cyk7CiB9CiAKQEAgLTI3
ODcsNyArMjc4Niw3IEBAIHN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2Vydmlu
Z1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhCiAKIHZvaWQgRWRpdG9yOjpt
YXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7Ci0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQo
bV9kb2N1bWVudCk7CiAKICAgICBhdXRvIHRleHRDaGVja2luZ09wdGlvbnMgPSByZXF1ZXN0LmRh
dGEoKS5jaGVja2luZ1R5cGVzKCk7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFw
aChyZXF1ZXN0LmNoZWNraW5nUmFuZ2UoKSwgcmVxdWVzdC5hdXRvbWF0aWNSZXBsYWNlbWVudFJh
bmdlKCksICZyZXF1ZXN0LnBhcmFncmFwaFJhbmdlKCkpOwpAQCAtMjgxMSw5ICsyODEwLDkgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICBib29sIGFkanVzdFNlbGVjdGlvbkZvclBhcmFn
cmFwaEJvdW5kYXJpZXMgPSBmYWxzZTsKIAogICAgIGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1l
bnQgfHwgc2hvdWxkTWFya1NwZWxsaW5nIHx8IHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbikgewot
ICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBl
KCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2li
bGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRv
IHNhdmUgdGhlIGNhcmV0IHBvc2l0aW9uIHNvIHdlIGNhbiByZXN0b3JlIGl0IGxhdGVyIGlmIG5l
ZWRlZAotICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CisgICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICAgICAg
ICAgIHNlbGVjdGlvbk9mZnNldCA9IHBhcmFncmFwaC5vZmZzZXRUbyhjYXJldFBvc2l0aW9uKS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNo
YW5nZSA9IHRydWU7CiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiAoc2Vs
ZWN0aW9uT2Zmc2V0ID4gcGFyYWdyYXBoLnRleHQoKS5sZW5ndGgoKSB8fCBwYXJhZ3JhcGgudGV4
dCgpW3NlbGVjdGlvbk9mZnNldCAtIDFdID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjg5NSwx
MyArMjg5NCwxMyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxD
aGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvUmVwbGFjZShyYW5nZVRvUmVw
bGFjZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVw
bGFjZSkpCisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSB7Ci0gICAgICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBs
YWNlKTsKKyAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihzZWxlY3Rpb25Ub1JlcGxhY2UpOwogICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCkBAIC0yOTEwLDcgKzI5
MDksNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1Jl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgICAgIGNvcnJlY3RT
cGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJh
bmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCwgeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3Ro
IH0pOwogCiAgICAgICAgICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
RWxlbWVudCogcm9vdCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcm9vdCA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmljYXRpb24ocm9vdCwgQVhP
YmplY3RDYWNoZTo6QVhBdXRvY29ycmVjdGlvbk9jY3VyZWQpOwogICAgICAgICAgICAgICAgIH0K
IApAQCAtMjk0MCwxMyArMjkzOSwxMyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3Io
Y29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAg
ICBleHRlbmRlZFBhcmFncmFwaC5leHBhbmRSYW5nZVRvTmV4dEVuZCgpOwogICAgICAgICBpZiAo
cmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlICYmIHNlbGVjdGlvbk9mZnNldCA8PSBleHRlbmRl
ZFBhcmFncmFwaC5yYW5nZUxlbmd0aCgpKSB7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJh
bmdlID0gZXh0ZW5kZWRQYXJhZ3JhcGguc3VicmFuZ2UoeyAwLCBzZWxlY3Rpb25PZmZzZXQgfSk7
Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVUbyhzZWxlY3Rpb25SYW5nZS0+
ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLm1vdmVUbyhzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7
CiAgICAgICAgICAgICBpZiAoYWRqdXN0U2VsZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcykK
LSAgICAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlv
bjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5
KTsKKyAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51
bGFyaXR5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMg
Zm9yIGFueSByZWFzb24sIHRoZSBmYWxsYmFjayBpcyB0byBnbyBvbmUgcG9zaXRpb24gYmV5b25k
IHRoZSBsYXN0IHJlcGxhY2VtZW50Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1v
dmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKLSAgICAgICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92
ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMwMjMsOCArMzAyMiw4
IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhi
b29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgLy8gT2YgY291cnNlLCBpZiBjdXJyZW50
IHNlbGVjdGlvbiBpcyBhIHJhbmdlLCB3ZSBwb3RlbnRpYWxseSB3aWxsIGVkaXQgdHdvIHdvcmRz
IHRoYXQgZmFsbCBvbiB0aGUgYm91bmRhcmllcyBvZgogICAgIC8vIHNlbGVjdGlvbiwgYW5kIHJl
bW92ZSB3b3JkcyBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gYm91bmRhcmllcy4KICAgICAvLwotICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICBpZiAoc3RhcnRPZlNlbGVjdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZpcnN0IHdvcmQgaXMgdGhlIHdv
cmQgdGhhdCBlbmRzIGFmdGVyIG9yIG9uIHRoZSBzdGFydCBvZiBzZWxlY3Rpb24uCkBAIC0zMDk2
LDExICszMDk1LDcgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRp
b24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHIKIAogUmVmUHRyPFJhbmdlPiBF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewotICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50
KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IGZy
YW1lID0gbV9kb2N1bWVudC5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQpAQCAt
MzExNyw3ICszMTEyLDcgQEAgdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWUKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFs
TW9kZTo6UmV2ZWFsOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKHJl
dmVhbE1vZGUsIGFsaWdubWVudCwgcmV2ZWFsRXh0ZW50T3B0aW9uKTsKKyAgICBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVh
bEV4dGVudE9wdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFu
Z2VzKGJvb2wgaWdub3JlLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsRXhpc3RpbmdTZWxl
Y3Rpb24pCkBAIC0zMTI5LDcgKzMxMjQsNyBAQCB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0
aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gRklYTUU6IFNob3VsZCBzdXBwcmVzcyBzZWxl
Y3Rpb24gY2hhbmdlIG5vdGlmaWNhdGlvbnMgZHVyaW5nIGEgY29tcG9zaXRpb24gY2hhbmdlIDxo
dHRwczovL3dlYmtpdC5vcmcvYi8zODgzMD4gCiAgICAgaWYgKCFpZ25vcmUpCi0gICAgICAgIHJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwg
eyB9KTsKKyAgICAgICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLCB7IH0pOwogI2VuZGlmCiAgICAgaWYgKCFpZ25vcmUgJiYgc2hv
dWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24gPT0gUmV2ZWFsU2VsZWN0aW9uOjpZZXMpCiAgICAg
ICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQsIFJldmVhbEV4dGVudCk7CkBAIC0zMTUyLDcgKzMxNDcsNyBA
QCBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlv
blN0YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aQogewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBpZiAoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzE3NSw3ICszMTcwLDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAg
ICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTMyMDAsMTAgKzMxOTUsMTAgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAgU3RyaW5n
IHRyYW5zcG9zZWQgPSB0ZXh0LnJpZ2h0KDEpICsgdGV4dC5sZWZ0KDEpOwogCiAgICAgLy8gU2Vs
ZWN0IHRoZSB0d28gY2hhcmFjdGVycy4KLSAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKLSAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlv
bigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgIGlmIChuZXdTZWxl
Y3Rpb24gIT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICBp
ZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVj
dGlvbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgfQogCiAgICAgLy8gSW5zZXJ0IHRo
ZSB0cmFuc3Bvc2VkIGNoYXJhY3RlcnMuCkBAIC0zMjU1LDcgKzMyNTAsNyBAQCB2b2lkIEVkaXRv
cjo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpCiAKIHZvaWQgRWRpdG9yOjpjaGFu
Z2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0
aW9uLCBPcHRpb25TZXQ8RnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbj4gb3B0aW9u
cykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3Vt
ZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAogICAgIC8vIElmIHRoZSBuZXcg
c2VsZWN0aW9uIGlzIG9ycGhhbmVkLCB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLgog
ICAgIGlmIChuZXdTZWxlY3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5l
bmQoKS5pc09ycGhhbigpKQpAQCAtMzI2NSw5ICszMjYwLDkgQEAgdm9pZCBFZGl0b3I6OmNoYW5n
ZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24sIE8KICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIHdvcmsgdGhhdCBpdCBtdXN0IGRvIGluIHRo
aXMgc2l0dWF0aW9uLgogICAgIC8vIFRoZSBvbGQgc2VsZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhl
cmUgYW5kIGNhbGxpbmcgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3Ry
YW5nZSBjYWxscy4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU3MjkzMTU+IFNvbWUgc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSBjb250YWluIFJhbmdlcyBmb3Igc2VsZWN0aW9ucyB0
aGF0IGFyZSBubyBsb25nZXIgdmFsaWQKLSAgICBib29sIHNlbGVjdGlvbkRpZE5vdENoYW5nZURP
TVBvc2l0aW9uID0gbmV3U2VsZWN0aW9uID09IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7Ci0gICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCi0gICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7
CisgICAgYm9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlv
biA9PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rp
b25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOwogCiAgICAgLy8gU29t
ZSBlZGl0aW5nIG9wZXJhdGlvbnMgY2hhbmdlIHRoZSBzZWxlY3Rpb24gdmlzdWFsbHkgd2l0aG91
dCBhZmZlY3RpbmcgaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgRE9NLgogICAgIC8vIEZvciBleGFt
cGxlIHdoZW4geW91IHByZXNzIHJldHVybiBpbiB0aGUgZm9sbG93aW5nICh0aGUgY2FyZXQgaXMg
bWFya2VkIGJ5IF4pOgpAQCAtMzI4MiwxMyArMzI3NywxMyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdl
U2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlv
biwgTwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gJiYgY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAogU3RyaW5nIEVkaXRvcjo6
c2VsZWN0ZWRUZXh0KCkgY29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlv
ciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcjsKLSAgICBpZiAobV9mcmFtZS5zZXR0aW5n
cygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxl
ZCgpKQogICAgICAgICBiZWhhdmlvciB8PSBUZXh0SXRlcmF0b3JUcmF2ZXJzZXNGbGF0VHJlZTsK
ICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0KGJlaGF2aW9yKTsKIH0KQEAgLTMyOTYsNyArMzI5MSw3
IEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25zdAogewogICAgIFRleHRJdGVyYXRvckJl
aGF2aW9yIGJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRW1pdHNJbWFnZUFsdFRleHQ7Ci0gICAgaWYg
KG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxl
ZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJh
dmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBA
IC0zMzA0LDcgKzMyOTksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRhVHJh
bnNmZXIoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJl
aGF2aW9yIGJlaGF2aW9yKSBjb25zdAogewogICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNoYXJhY3Rl
cnMgYmVjYXVzZSB0aGV5IGFyZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KLSAg
ICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgYXV0byBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwogICAgIGF1dG8gZW5kID0gc2VsZWN0
aW9uLmVuZCgpOwogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8
IGVuZC5pc051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKQEAgLTMzMTQsNyArMzMwOSw3IEBAIFN0
cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikg
Y29uc3QKIAogUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4
dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSB8fCAhbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZjxEb2N1bWVudD4gZG9jdW1l
bnQgeyB0aGlzLT5kb2N1bWVudCgpIH07CkBAIC0zMzIyLDcgKzMzMTcsNyBAQCBSZWZQdHI8VGV4
dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZQogICAgIC8vIEZJWE1FOiBXcml0ZSBpbiB0ZXJtcyBvZiByZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50KCkuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwODc0ND4uCiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZh
bHNlKTsKIAotICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApAQCAtMzMzMCw3ICszMzI1LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVk
aXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICByYW5n
ZS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5jb3B5UmVmKCkpOwogCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24geyBwb3NpdGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIucHRyKCkp
LCBwb3NpdGlvbkFmdGVyTm9kZShwbGFjZWhvbGRlci5wdHIoKSkgfTsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVm
YXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogCiAgICAgcmV0dXJuIHBs
YWNlaG9sZGVyOwogfQpAQCAtMzM1MCw4ICszMzQ1LDggQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVRl
eHRQbGFjZWhvbGRlcihUZXh0UGxhY2Vob2xkZXJFbGVtZW50JiBwbGFjZWhvbGRlcikKICAgICBw
bGFjZWhvbGRlci5yZW1vdmUoKTsKIAogICAgIC8vIFRvIG1hdGNoIHRoZSBMZWdhY3kgV2ViS2l0
IGltcGxlbWVudGF0aW9uLCBzZXQgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHRvIGJlIGJlZm9y
ZSB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgdXNlIHRvIGJlLgotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgp
ID09IHNhdmVkUm9vdEVkaXRhYmxlRWxlbWVudCkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbiB7IHNhdmVkUG9zaXRpb25CZWZvcmVQbGFj
ZWhvbGRlciwgU0VMX0RFRkFVTFRfQUZGSU5JVFkgfSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRT
ZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKKyAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1l
bnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVm
b3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lkdGgoSW50UmVjdCYgcmVjdCkKQEAgLTM0MDMsNyAr
MzM5OCw3IEBAIEludFJlY3QgRWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2Up
IGNvbnN0CiBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0
aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CiB7CiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb25DaGFuZ2VD
YWxsYmFja3NEaXNhYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPnNlbGVjdGlv
bkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlm
CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJh
bmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKQEAg
LTM0MTIsMTcgKzM0MDcsMTcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKIHZvaWQgRWRpdG9y
Ojpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uKQogewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHlsZS4KICAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZTsKLSAgICBpZiAoYXV0byBleGlzdGluZ1R5cGlu
Z1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQorICAgIGlmIChhdXRv
IGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxl
KCkpCiAgICAgICAgIHR5cGluZ1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHlsZS0+Y29weSgpOwog
ICAgIGVsc2UKICAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwot
ICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUsIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7Cisg
ICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsK
IAogICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVzZSBmcm9tIHRo
ZSB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxvY2tTdHlsZSA9IHR5
cGluZ1N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0zNDMwLDcg
KzM0MjUsNyBAQCB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdT
dHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgICAgICBBcHBseVN0eWxlQ29t
bWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24p
LT5hcHBseSgpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGlu
ZyBzdHlsZS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKFdURk1vdmUo
dHlwaW5nU3R5bGUpKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxl
KFdURk1vdmUodHlwaW5nU3R5bGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRU
eXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbikKQEAgLTM0ODksMTkgKzM0ODQsMTkgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGlu
Z1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3Vt
ZW50KG1fZG9jdW1lbnQpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogICAgIFJlZlB0cjxS
YW5nZT4gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgc2VsZWN0aW9uLmZpcnN0
UmFuZ2UoKS5nZXQoKSwgb3B0aW9ucyk7CiAKICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVBTSkpOworICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdl
LCBET1dOU1RSRUFNKSk7CiAKICAgICBpZiAoIShvcHRpb25zLmNvbnRhaW5zKERvTm90UmV2ZWFs
U2VsZWN0aW9uKSkpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9u
KCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1OTgsNyArMzU5Myw3IEBAIHVuc2lnbmVkIEVkaXRv
cjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdl
LCBGaW5kT3B0CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGlmICgmcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKICAgICAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2U7
Ci0gICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZShtX2ZyYW1lLCAqcmFuZ2UpKQorICAg
ICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdl
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIXNlYXJjaFJhbmdlKQpA
QCAtMzY2OCw3ICszNjYzLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMKICNlbmRpZgogCiAg
ICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9E
RVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChzaG91bGREZXRlY3RU
ZWxlcGhvbmVOdW1iZXJzKCkpCkBAIC0zNjkxLDggKzM2ODYsNiBAQCB2b2lkIEVkaXRvcjo6cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0
PEZyYW1lUwogCiBib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpCiB7
Ci0gICAgaWYgKCFtX2ZyYW1lLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gZG9jdW1lbnQoKS5pc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYg
VGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6OmlzU3VwcG9ydGVkKCk7CiB9CiAKQEAgLTM3MDUsOSAr
MzY5OCw5IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygp
CiAKICAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gbWFya2VkUmFuZ2VzOwogCi0gICAgRnJhbWVT
ZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBGcmFt
ZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpOwogICAg
IGlmICghZnJhbWVTZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2Vs
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNzI5LDcgKzM3MjIsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKQogICAgIFJlZlB0cjxSYW5nZT4gZXh0ZW5kZWRSYW5nZSA9IGV4dGVu
ZGVkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBpZiAoIWV4dGVuZGVkUmFu
Z2UpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0No
YW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3NDIsNyArMzczNSw3IEBAIHZv
aWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAg
ICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7CiAgICAgfQog
Ci0gICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoYXV0byogcGFn
ZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9CiAKQEAg
LTM4MDEsOSArMzc5NCw5IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQo
KQogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld0FkamFjZW50V29yZHM7CiAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0ZWRTZW50ZW5jZTsKLSAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9m
cmFtZS5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRC
cm93c2luZykgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOworICAgICAgICBib29sIGNh
cmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQo
KTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9z
aXRpb24gbmV3U3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBuZXdBZGph
Y2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFy
eSkpOwogI2Vsc2UKQEAgLTM4NTYsNyArMzg0OSw3IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVw
ZGF0ZVRpbWVyRmlyZWQoKQogICAgIGlmICghbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dl
cmVkQnlEaWN0YXRpb24pCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogCi0gICAgbV9vbGRTZWxlY3Rp
b25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgbV9vbGRTZWxlY3Rpb25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIG5v
dGlmeUNsaWVudE9mQXR0YWNobWVudFVwZGF0ZXMoKTsKQEAgLTM4ODMsNyArMzg3Niw3IEBAIHN0
YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBub2RlKQogCiBib29sIEVkaXRvcjo6
c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFy
a2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9
IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTUwLDEw
ICszOTQzLDEwIEBAIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBFZGl0b3I6OnJlc29sdmVU
ZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2RlJiByb290CiAgICAgcmV0dXJuIGNoZWNraW5n
VHlwZXM7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0
aW9uKEZyYW1lJiBmcmFtZSkKK3N0YXRpYyBSZWZQdHI8UmFuZ2U+IGNhbmRpZGF0ZVJhbmdlRm9y
U2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1
cm4gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24u
c3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOworICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJv
bVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGRvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiB9CiAKIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRl
eHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQpAQCAtMzk2Nyw4ICszOTYwLDgg
QEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pCiAKIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJl
cXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24obV9m
cmFtZSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3Vy
cmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihtX2RvY3VtZW50
KTsKICAgICBpZiAocmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyAmJiBjYW5kaWRhdGVXb3Vs
ZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdl
Rm9yQ3VycmVudGx5VHlwZWRTdHJpbmcpOwogCkBAIC0zOTc3LDcgKzM5NzAsNyBAQCBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKICAgICAKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsK
LSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIG1ha2VSYW5n
ZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFyYWdy
YXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKIH0KIApAQCAtNDA0NCw3ICs0MDM3LDcgQEAg
Rm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBj
b25zdAogewogICAgIEZvbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgTm9kZSogbm9kZVRv
UmVtb3ZlID0gbnVsbHB0cjsKLSAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNl
bGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAo
IXN0eWxlKSB7CiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9S
ZW1vdmUtPnJlbW92ZSgpOwpAQCAtNDA4NSw3ICs0MDc4LDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRp
dG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBhdHRyaWJ1dGVzLnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExpc3Rz
QXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKSk7CisgICAgYXR0cmlidXRlcy50ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0
c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkpOwogCiAgICAgc3dpdGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsKICAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgpAQCAtNDExMSw3ICs0MTA0LDcgQEAgRm9udEF0
dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAog
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJlZlB0
cihtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpOworICAgIGF1dG8gdHlwaW5nU3R5
bGUgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSk7CiAg
ICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5zdHlsZSgpKSB7CiAgICAgICAgIGF1
dG8gdmFsdWUgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKICAgICAgICAgaWYgKHZhbHVl
ICYmIHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC00MTk5LDEyICs0MTkyLDggQEAgdm9pZCBF
ZGl0b3I6Om5vdGlmeUNsaWVudE9mQXR0YWNobWVudFVwZGF0ZXMoKQogICAgIGZvciAoYXV0byYg
aWRlbnRpZmllciA6IHJlbW92ZWRBdHRhY2htZW50SWRlbnRpZmllcnMpCiAgICAgICAgIGNsaWVu
dCgpLT5kaWRSZW1vdmVBdHRhY2htZW50V2l0aElkZW50aWZpZXIoaWRlbnRpZmllcik7CiAKLSAg
ICBhdXRvKiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICByZXR1cm47Ci0KICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBpbnNlcnRl
ZEF0dGFjaG1lbnRJZGVudGlmaWVycykgewotICAgICAgICBpZiAoYXV0byBhdHRhY2htZW50ID0g
ZG9jdW1lbnQtPmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQorICAgICAgICBp
ZiAoYXV0byBhdHRhY2htZW50ID0gbV9kb2N1bWVudC5hdHRhY2htZW50Rm9ySWRlbnRpZmllcihp
ZGVudGlmaWVyKSkKICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRJbnNlcnRBdHRhY2htZW50V2l0
aElkZW50aWZpZXIoaWRlbnRpZmllciwgYXR0YWNobWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0dHIpLCBhdHRhY2htZW50LT5oYXNFbmNsb3NpbmdJ
bWFnZSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC00MjI3LDcgKzQyMTYsNyBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudChjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIE9wdGlvbmFsPHVpbnQ2NF90PiYmIGZpbAogCiB2b2lkIEVk
aXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVk
Q2FuZGlkYXRlKQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogICAg
IG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gdHJ1ZTsKIApAQCAtNDI0Niw3ICs0MjM1
LDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jl
c3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIAogYm9vbCBFZGl0b3I6OnVuaWZpZWRUZXh0Q2hlY2tl
ckVuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCZtX2ZyYW1lKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZChtX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBFZGl0
b3I6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYg
bWFya2VyKQpAQCAtNDI2MiwxMyArNDI1MSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseURpY3RhdGlv
bkFsdGVybmF0aXZlbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlU3RyaW5nCiB2
b2lkIEVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKQogewogICAgIG1fb3Zlcndy
aXRlTW9kZUVuYWJsZWQgPSAhbV9vdmVyd3JpdGVNb2RlRW5hYmxlZDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFibGVk
KTsKLX0KLQotRG9jdW1lbnQmIEVkaXRvcjo6ZG9jdW1lbnQoKSBjb25zdAotewotICAgIEFTU0VS
VChtX2ZyYW1lLmRvY3VtZW50KCkpOwotICAgIHJldHVybiAqbV9mcmFtZS5kb2N1bWVudCgpOwor
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3Zl
cndyaXRlTW9kZUVuYWJsZWQpOwogfQogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRT
ZWxlY3Rpb25SYW5nZSgpCkBAIC00MzIxLDkgKzQzMDQsOSBAQCBjb25zdCBGb250KiBFZGl0b3I6
OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKIHsKICAgICBo
YXNNdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAKLSAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCku
aXNSYW5nZSgpKSB7CisgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
ewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIGF1dG8qIHN0eWxlID0gc3R5
bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2Rl
VG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG1f
ZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKIAog
ICAgICAgICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKSB7
CkBAIC00MzM1LDExICs0MzE4LDExIEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogICAgICAgICByZXR1cm4gZm9udDsK
ICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVj
dGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKS5kZXByZWNhdGVkTm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2Vs
ZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCkBAIC00MzcxLDcgKzQzNTQsNyBAQCBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4gRWRpdG9yOjppbnNlcnRFZGl0YWJsZUltYWdlKCkKIAogYm9vbCBFZGl0b3I6OmNh
bkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKCkgY29uc3QKIHsKLSAgICBhdXRvJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVj
dGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNl
bGVjdGlvbi5pc1JhbmdlKCkgJiYgIXNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBhZDllZGEyNjE4YzlhODgwYmVjYmIxY2U0ZDY4
YmI1OWI4OWMyMGMwLi5mZmE3N2QwZTU0OGU3Y2U3N2RjZDQ3YmIwZTYxYzEwYTg0NzdmMDMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFZGl0
aW5nU3R5bGUuaCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKICNpbmNsdWRlICJG
aW5kT3B0aW9ucy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkV3JpdGVyRGF0YS5oIgogI2luY2x1ZGUgIlRleHRD
aGVja2luZy5oIgpAQCAtMTE5LDEzICsxMjAsMTMgQEAgZW51bSBjbGFzcyBUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb24gOiB1aW50OF90IHsKIAogY2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Uo
RnJhbWUmLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9IFdURjo6bnVsbG9wdCwgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShEb2N1bWVudCYsIE9wdGlvbmFsPFZpc2libGVTZWxl
Y3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9u
PiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgflRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKTsKIAotICAgIFJlZjxGcmFtZT4gbV9mcmFtZTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1f
ZG9jdW1lbnQ7CiAgICAgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gbV9vcHRp
b25zOwogICAgIGJvb2wgbV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXM7CiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKQEAgLTEzNyw3ICsxMzgsNyBAQCBwcml2YXRlOgogY2xhc3MgSWdub3Jl
U2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUgewogcHVibGljOgogICAgIElnbm9yZVNlbGVjdGlvbkNo
YW5nZUZvclNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX3NlbGVjdGlvbkNoYW5nZShm
cmFtZSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVj
dGlvbkNoYW5nZXMpCisgICAgICAgIDogbV9zZWxlY3Rpb25DaGFuZ2UoKmZyYW1lLmRvY3VtZW50
KCksIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKQogICAgIHsKICAgICB9CiAKQEAgLTE1MCw3ICsxNTEsNyBAQCBwcml2YXRlOgog
Y2xhc3MgRWRpdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBFZGl0b3IoRnJhbWUmKTsKKyAgICBleHBsaWNpdCBFZGl0b3IoRG9jdW1lbnQm
KTsKICAgICB+RWRpdG9yKCk7CiAKICAgICBlbnVtIGNsYXNzIFBhc3RlT3B0aW9uIDogdWludDhf
dCB7CkBAIC0yNzEsNyArMjcyLDcgQEAgcHVibGljOgogICAgIGNsYXNzIENvbW1hbmQgewogICAg
IHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCgpOwotICAgICAgICBDb21t
YW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIEZy
YW1lJik7CisgICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgRG9jdW1lbnQmKTsKIAogICAgICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIgPSBTdHJpbmcoKSwgRXZlbnQqIHRy
aWdnZXJpbmdFdmVudCA9IG51bGxwdHIpIGNvbnN0OwogICAgICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGV4ZWN1dGUoRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3Q7CkBAIC0yODgsNiArMjg5
LDcgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEVkaXRvckludGVybmFs
Q29tbWFuZCogbV9jb21tYW5kIHsgbnVsbHB0ciB9OwogICAgICAgICBFZGl0b3JDb21tYW5kU291
cmNlIG1fc291cmNlOworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAg
ICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICB9OwogICAgIFdFQkNPUkVfRVhQT1JUIENv
bW1hbmQgY29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsgLy8gQ29tbWFuZCBzb3Vy
Y2UgaXMgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLgpAQCAtNTY3LDcgKzU2OSw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVRleHRQbGFjZWhvbGRlcihUZXh0
UGxhY2Vob2xkZXJFbGVtZW50Jik7CiAKIHByaXZhdGU6Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50
KCkgY29uc3Q7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1
bWVudDsgfQogCiAgICAgYm9vbCBjYW5EZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJv
b2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCYpOwpAQCAtNjE4LDcg
KzYyMCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb25Gb3JDdXQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0g
ICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAgICAgUmVmUHRy
PENvbXBvc2l0ZUVkaXRDb21tYW5kPiBtX2xhc3RFZGl0Q29tbWFuZDsKICAgICBSZWZQdHI8VGV4
dD4gbV9jb21wb3NpdGlvbk5vZGU7CiAgICAgdW5zaWduZWQgbV9jb21wb3NpdGlvblN0YXJ0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOWRiYTcwNjlhZDE0
MjhjZGMzYjkwZmI2YzA0NzFmYWExMGZiOGM0NC4uYmQ1MTgwZWI0MDBlYTc5MjE1MWI2Zjc5OGI2
MGVjYjhjZmZkYWVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CkBAIC0xMTA5LDYgKzExMDksNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU3VwZXJzY3JpcHQoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLAogCiBzdGF0aWMg
Ym9vbCBleGVjdXRlU3dhcFdpdGhNYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogeworICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVj
dGlvbihmcmFtZS5kb2N1bWVudCgpKTsKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7
CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmso
KTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKQEAgLTE4MzYsMTIgKzE4MzcsMTIgQEAgc3RhdGljIGNvbnN0IEVk
aXRvckludGVybmFsQ29tbWFuZCogaW50ZXJuYWxDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUpCiAKIEVkaXRvcjo6Q29tbWFuZCBFZGl0b3I6OmNvbW1hbmQoY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSkKIHsKLSAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFu
ZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1fZnJhbWUpOworICAgIHJldHVy
biBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9tTWVudU9y
S2V5QmluZGluZywgbV9kb2N1bWVudCk7CiB9CiAKIEVkaXRvcjo6Q29tbWFuZCBFZGl0b3I6OmNv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UpCiB7Ci0gICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwg
c291cmNlLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29t
bWFuZE5hbWUpLCBzb3VyY2UsIG1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Y29tbWFu
ZElzU3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFt
ZSkKQEAgLTE4NTMsMTIgKzE4NTQsMTMgQEAgRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKCkKIHsK
IH0KIAotRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFu
ZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEZyYW1lJiBmcmFtZSkKK0Vk
aXRvcjo6Q29tbWFuZDo6Q29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1h
bmQsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAg
OiBtX2NvbW1hbmQoY29tbWFuZCkKICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fZnJh
bWUoY29tbWFuZCA/ICZmcmFtZSA6IG51bGxwdHIpCisgICAgLCBtX2RvY3VtZW50KGNvbW1hbmQg
PyAmZG9jdW1lbnQgOiBudWxscHRyKQorICAgICwgbV9mcmFtZShjb21tYW5kID8gZG9jdW1lbnQu
ZnJhbWUoKSA6IG51bGxwdHIpCiB7Ci0gICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1fZnJhbWUpOwor
ICAgIEFTU0VSVChjb21tYW5kIHx8ICFtX2RvY3VtZW50KTsKIH0KIAogYm9vbCBFZGl0b3I6OkNv
bW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIsIEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQpIGNvbnN0CkBAIC0xODY4LDkgKzE4NzAsOSBAQCBib29sIEVkaXRvcjo6Q29tbWFuZDo6
ZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkg
YwogICAgICAgICBpZiAoIWFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGF1dG8gZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpOwotICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKLSAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSBkb2N1bWVudCkKKworICAgIG1f
ZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIGlm
IChtX2RvY3VtZW50LT5mcmFtZSgpICE9IG1fZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHJldHVybiBtX2NvbW1hbmQtPmV4ZWN1dGUoKm1fZnJhbWUsIHRyaWdnZXJpbmdFdmVu
dCwgbV9zb3VyY2UsIHBhcmFtZXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCmluZGV4IDQ1MTZlNTA2NTA3MmZmNTFjM2M5MDFiNzg1MjQ1M2ZiZmE5N2IzNTku
LmJiY2ZjY2U3YWVjYmZkZjcwYzNmZmI4ZjZjMmZmOGMyYmQyMDRjMWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xMzksMTMgKzEzOSwxNCBAQCBJbnRS
ZWN0IERyYWdDYXJldENvbnRyb2xsZXI6OmVkaXRhYmxlRWxlbWVudFJlY3RJblJvb3RWaWV3Q29v
cmRpbmF0ZXMoKSBjb25zdAogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihGcmFtZSogZnJhbWUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRG9jdW1l
bnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiAhZnJhbWUgfHwgZnJhbWUtPmVkaXRvcigpLmJl
aGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7CisgICAgcmV0
dXJuICFkb2N1bWVudCB8fCBkb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25z
aWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKIH0KIAotRnJhbWVTZWxlY3Rpb246OkZyYW1l
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitGcmFtZVNlbGVj
dGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVu
dChkb2N1bWVudCkKKyAgICAsIG1fZnJhbWUoZG9jdW1lbnQ/IGRvY3VtZW50LT5mcmFtZSgpIDog
bnVsbHB0cikKICAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3Rl
ckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhUX0NBUkVUKQpAQCAtMTU2LDcgKzE1Nyw3IEBA
IEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2Fi
c0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAsIG1fY2FyZXRQYWludCh0cnVlKQogICAgICwg
bV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2ZvY3VzZWQoZnJhbWUg
JiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1fZm9jdXNlZChtX2ZyYW1lICYmIG1fZnJhbWUt
PnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFt
ZSgpID09IG1fZnJhbWUpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihmYWxzZSkKICAg
ICAsIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3YXlzQWxpZ25D
dXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0xNjUsMTQgKzE2
NiwyNCBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAg
ICwgbV9jYXJldEJsaW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAgaWYgKHNob3VsZEFsd2F5c1Vz
ZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91bGRBbHdheXNVc2VE
aXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0
SXNEaXJlY3Rpb25hbCh0cnVlKTsKKyAgICAKKyAgICBib29sIGFjdGl2ZUFuZEZvY3VzZWQgPSBp
c0ZvY3VzZWRBbmRBY3RpdmUoKTsKKyAgICBpZiAoYWN0aXZlQW5kRm9jdXNlZCkKKyAgICAgICAg
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKKyNpZiBVU0UoVUlLSVRfRURJVElORykKKyAgICAvLyBD
YXJldCBibGlua2luZyAoYmxpbmtzIHwgZG9lcyBub3QgYmxpbmspCisgICAgc2V0Q2FyZXRWaXNp
YmxlKGFjdGl2ZUFuZEZvY3VzZWQpOworI2Vsc2UKKyAgICBzZXRDYXJldFZpc2liaWxpdHkoYWN0
aXZlQW5kRm9jdXNlZCA/IFZpc2libGUgOiBIaWRkZW4pOworI2VuZGlmCiB9CiAKIEVsZW1lbnQq
IEZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBj
b25zdAogewogICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBtX3NlbGVjdGlvbi5yb290RWRp
dGFibGVFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290
IDogbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgcmV0dXJuIHNl
bGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50
KCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnBvcywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9s
bCBhbGlnbikKQEAgLTI4NCw3ICsyOTUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25CeU1vdXNlSWZEaWZmZXJlbnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcGFzcwogICAg
IEVuZFBvaW50c0FkanVzdG1lbnRNb2RlIGVuZHBvaW50c0FkanVzdG1lbnRNb2RlKQogewogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gcGFzc2VkTmV3U2VsZWN0aW9uOwotICAg
IGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9u
KG1fZnJhbWUpIHx8IG5ld1NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCk7CisgICAgYm9vbCBpc0Rp
cmVjdGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dCkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsKIAogICAgIFZpc2libGVQb3NpdGlv
biBiYXNlID0gbV9vcmlnaW5hbEJhc2UuaXNOb3ROdWxsKCkgPyBtX29yaWdpbmFsQmFzZSA6IG5l
d1NlbGVjdGlvbi52aXNpYmxlQmFzZSgpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXdCYXNlID0g
YmFzZTsKQEAgLTMyMiw3ICszMzMsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rp
b25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGJv
b2wgc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSA9IG9wdGlvbnMuY29udGFpbnMoQ2xlYXJUeXBpbmdT
dHlsZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG5ld1NlbGVjdGlv
blBvc3NpYmx5V2l0aG91dERpcmVjdGlvbjsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlv
bmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpKQogICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJl
Y3Rpb25hbCh0cnVlKTsKIAogICAgIGlmICghbV9mcmFtZSkgewpAQCAtMzM0LDcgKzM0NSw3IEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFu
Y2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0g
bV9mcmFtZSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVu
dCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdTZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkp
IHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4gbmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxl
Y3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZy
YW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYg
bmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkgewogICAgICAgICAgICAgICAgIG5l
d1NlbGVjdGlvbkZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBv
cHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwog
ICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNl
dCBzZWxlY3Rpb24sIHRoaXMgRnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAg
ICAgICAgICAgICAgICAvLyBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3Rl
ZCwgYnV0IHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKQEAgLTM0
OSw3ICszNjAsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBk
YXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIG1fZ3JhbnVsYXJpdHkg
PSBncmFudWxhcml0eTsKIAogICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgVHlwaW5nQ29t
bWFuZDo6Y2xvc2VUeXBpbmcobV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3Nl
VHlwaW5nKCptX2RvY3VtZW50KTsKIAogICAgIGlmIChzaG91bGRDbGVhclR5cGluZ1N0eWxlKQog
ICAgICAgICBjbGVhclR5cGluZ1N0eWxlKCk7CkBAIC0zNTcsNyArMzY4LDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBW
aXNpYmxlU2VsZWN0aW8KICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IG1fc2Vs
ZWN0aW9uOwogICAgIGJvb2wgZGlkTXV0YXRlU2VsZWN0aW9uID0gb2xkU2VsZWN0aW9uICE9IG5l
d1NlbGVjdGlvbjsKICAgICBpZiAoZGlkTXV0YXRlU2VsZWN0aW9uKQotICAgICAgICBtX2ZyYW1l
LT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVk
aXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2UoKTsKIAogICAgIG1fc2VsZWN0aW9uID0gbmV3U2Vs
ZWN0aW9uOwogCkBAIC0zNzEsMzUgKzM4MiwzMSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRT
ZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpbwog
ICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAKICAgICBpZiAoIW5ld1NlbGVjdGlvbi5p
c05vbmUoKSAmJiAhKG9wdGlvbnMgJiBEb05vdFNldEZvY3VzKSkgewotICAgICAgICBhdXRvKiBv
bGRGb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7
CisgICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVs
ZW1lbnQoKTsKICAgICAgICAgc2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpOwogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1
bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBp
ZiAobV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBvbGRGb2N1c2VkRWxlbWVudCkKKyAg
ICAgICAgICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICB9CiAKICAg
ICAvLyBBbHdheXMgY2xlYXIgdGhlIHggcG9zaXRpb24gdXNlZCBmb3IgdmVydGljYWwgYXJyb3cg
bmF2aWdhdGlvbi4KICAgICAvLyBJdCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHRoZSB2ZXJ0aWNhbCBh
cnJvdyBuYXZpZ2F0aW9uIGNvZGUgaWYgbmVjZXNzYXJ5LgogICAgIG1feFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uID0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKTsKICAg
ICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwotICAgIG1fZnJh
bWUtPmVkaXRvcigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRp
b25zKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3Nl
bGVjdGlvbi1hcGkvI3NlbGVjdGlvbmNoYW5nZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRv
ZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNrIHNvdXJjZSB0byB1c2UuCi0gICAgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFj
dGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2
ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9j
dW1lbnQtPnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rp
b24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVu
dDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCBpbnRlbnQsIEN1cnNvckFsaWduT25TY3Jv
bGwgYWxpZ24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKLSAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOworICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVj
dG9yKG1fZG9jdW1lbnQpOwogICAgIGlmICghc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBw
ZWFyYW5jZShzZWxlY3Rpb24sIG9wdGlvbnMsIGFsaWduLCBncmFudWxhcml0eSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7
Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG9wdGlvbnMg
JiBSZXZlYWxTZWxlY3Rpb25VcFRvTWFpbkZyYW1lKQogICAgICAgICBtX3NlbGVjdGlvblJldmVh
bE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lOwogICAgIGVs
c2UgaWYgKG9wdGlvbnMgJiBSZXZlYWxTZWxlY3Rpb24pCkBAIC00MTEsMjcgKzQxOCwyNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBPcHRpb25TZXQ8UwogICAgIG1fc2VsZWN0aW9uUmV2ZWFsSW50ZW50ID0gaW50
ZW50OwogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7CiAKLSAgICBpZiAoZG9j
dW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQorICAgIGlmIChtX2RvY3VtZW50LT5oYXNQ
ZW5kaW5nU3R5bGVSZWNhbGMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBkb2N1bWVudC0+dmlldygpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bV9kb2N1bWVudC0+dmlldygpOwogICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlv
dXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVw
ZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQpOwogCiAgICAgaWYgKG9wdGlvbnMgJiBJc1Vz
ZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRv
cigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbV9kb2N1bWVudC0+ZWRp
dG9yKCkuY2xpZW50KCkpCiAgICAgICAgICAgICBjbGllbnQtPmRpZEVuZFVzZXJUcmlnZ2VyZWRT
ZWxlY3Rpb25DaGFuZ2VzKCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rp
b25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZShGcmFtZSYgZnJhbWUpCitzdGF0aWMgdm9pZCB1cGRh
dGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7
CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAjZWxzZQotICAgIGZyYW1lLmRvY3VtZW50KCkt
PnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBkb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAjZW5kaWYKIH0KIApAQCAtNDQxLDcgKzQ0OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlIHJldmVh
bE1vCiAgICAgaWYgKHJldmVhbE1vZGUgPT0gUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGU6OkZv
cmNlZCkKICAgICAgICAgbV9zZWxlY3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9k
ZTo6UmV2ZWFsOwogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7Ci0gICAgaWYg
KFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAo
UmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgdmll
dy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKIH0KIApAQCAtNDU3LDcgKzQ2NCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRl
eHRTdGF0ZUNoYW5nZUludGVudCYgaW50CiAgICAgaWYgKG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSAh
PSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpEb05vdFJldmVhbCkgewogICAgICAgICBTY3JvbGxBbGln
bm1lbnQgYWxpZ25tZW50OwogCi0gICAgICAgIGlmIChtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlv
cigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKKyAgICAgICAg
aWYgKG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVu
U2VsZWN0aW9uSXNSZXZlYWxlZCgpKQogICAgICAgICAgICAgYWxpZ25tZW50ID0gbV9hbHdheXNB
bGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVjdGlvbiA/IFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVk
ZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFsaWdubWVudCA9IG1fYWx3YXlzQWxpZ25D
dXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkOwpAQCAt
NDcxLDcgKzQ3OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFuZFJldmVhbFNlbGVj
dGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50CiB2b2lkIEZyYW1lU2VsZWN0
aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKCkKIHsKICNpZiBFTkFCTEUoVEVM
RVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1f
ZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCk7CisgICAg
bV9kb2N1bWVudC0+ZWRpdG9yKCkuc2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKTsK
ICNlbmRpZgogfQogCkBAIC03MDMsNyArNzEwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2Vs
ZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3QKICAgICAv
LyBiYXNlL2V4dGVudCBhbHdheXMgcG9pbnQgdG8gdGhlIHNhbWUgbm9kZXMgYXMgc3RhcnQvZW5k
LCBidXQgd2hpY2ggcG9pbnRzCiAgICAgLy8gdG8gd2hpY2ggZGVwZW5kcyBvbiB0aGUgdmFsdWUg
b2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhpcyBjYW4gYmUgY2hhbmdlZAogICAgIC8vIHRvIGp1c3Qg
cmV0dXJuIG1fc2VsLmV4dGVudCgpLgotICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBv
aW50KCkpCisgICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRBbHdheXNFeHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKICAg
ICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBtX3NlbGVjdGlvbi52aXNp
YmxlRW5kKCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKIAogICAgIHJldHVybiBpc0dl
dFN0YXJ0ID8gbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgOiBtX3NlbGVjdGlvbi52aXNpYmxl
RW5kKCk7CkBAIC03MjMsNyArNzMwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9u
OjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0oY29uc3QgVmlzaWJsZVBvc2l0aW8KIHsKICAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3Np
dGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKIAotICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmVk
aXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKKyAg
ICBpZiAobV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3Vs
ZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpKSB7CiAgICAgICAgIC8vIEluIG9yZGVyIHRvIHNr
aXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3ZSBhZHZhbmNlIG9uZQogICAgICAgICAvLyB3
b3JkIGZ1cnRoZXIgYW5kIHRoZW4gbW92ZSBvbmUgd29yZCBiYWNrLiBHaXZlbiB0aGUKICAgICAg
ICAgLy8gc2VtYW50aWNzIG9mIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgdGhpcyB3aWxsIHB1dCB1
cyBhdCB0aGUKQEAgLTg1NSw3ICs4NjIsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rp
b246Om1vZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYgogICAg
ICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKS5yaWdodCh0cnVlLCByZWFjaGVkQm91bmRhcnkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eTogewotICAgICAgICBib29sIHNraXBz
U3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CisgICAgICAgIGJvb2wgc2tp
cHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9z
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IHJpZ2h0V29yZFBvc2l0aW9uKGN1
cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChy
ZWFjaGVkQm91bmRhcnkpCkBAIC0xMDc2LDcgKzEwODMsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJh
bWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBibwogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVu
dCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5sZWZ0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJv
b2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAg
Ym9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudCAmJiBtX2RvY3VtZW50
LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVu
dCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgcG9zID0gbGVmdFdvcmRQb3Np
dGlvbihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAgICAg
ICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTM2Miw3ICsxMzY5LDcgQEAgYm9vbCBGcmFtZVNl
bGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGly
ZWN0aW9uLCBUZXgKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHJlYWNoZWRCb3Vu
ZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBt
X2ZyYW1lICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICBp
ZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2Vy
VHJpZ2dlcmVkICYmIG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkgewogICAgICAgICBub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdl
KHsgQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uQm91bmRhcnksIHRleHRTZWxlY3Rpb25X
aXRoRGlyZWN0aW9uQW5kR3JhbnVsYXJpdHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSkgfSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEzNzQsOCArMTM4MSw4IEBAIGJvb2wgRnJh
bWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGlmICghd2FzUmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJh
dGlvbk1vdmUgJiYgcG9zaXRpb24gPT0gb3JpZ2luYWxTdGFydFBvc2l0aW9uKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKKyAgICBpZiAo
bV9kb2N1bWVudCAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Cisg
ICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldFRleHRTZWxlY3Rpb25JbnRlbnQo
dGV4dFNlbGVjdGlvbkludGVudChhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSkpOwogICAg
IH0KIApAQCAtMTM4NCw3ICsxMzkxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVB
bHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAv
LyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBp
cyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiB0eXBl
IGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uIHNldC4KICAg
ICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmln
YXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3
YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlv
bkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9u
RXh0ZW5kKTsKIAogICAgIHN3aXRjaCAoYWx0ZXIpIHsKICAgICBjYXNlIEFsdGVyYXRpb25Nb3Zl
OgpAQCAtMTM5NCw3ICsxNDAxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRl
cmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAogICAgICAg
ICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKQogICAgICAgICAgICAgJiYgKGdyYW51bGFyaXR5
ID09IFdvcmRHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFudWxhcml0
eSB8fCBncmFudWxhcml0eSA9PSBMaW5lR3JhbnVsYXJpdHkpCi0gICAgICAgICAgICAmJiBtX2Zy
YW1lICYmICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVuZFNlbGVjdGlv
bkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKKyAgICAgICAgICAgICYmIG1fZG9jdW1lbnQg
JiYgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9u
QnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IHRo
ZSBzZWxlY3Rpb24gZ28gYWNyb3NzIHRoZSBiYXNlIHBvc2l0aW9uIGRpcmVjdGx5LiBOZWVkZWQg
dG8gbWF0Y2ggbWFjCiAgICAgICAgICAgICAvLyBiZWhhdmlvciB3aGVuLCBmb3IgaW5zdGFuY2Us
IHdvcmQtc2VsZWN0aW5nIGJhY2t3YXJkcyBzdGFydGluZyB3aXRoIHRoZSBjYXJldCBpbgogICAg
ICAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiBhIHdvcmQgYW5kIHRoZW4gd29yZC1zZWxlY3Rpbmcg
Zm9yd2FyZCwgbGVhdmluZyB0aGUgY2FyZXQgaW4gdGhlCkBAIC0xNDA3LDcgKzE0MTQsNyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAgICAgIC8vIFN0YW5kYXJkIE1hYyBiZWhhdmlv
ciB3aGVuIGV4dGVuZGluZyB0byBhIGJvdW5kYXJ5IGlzIGdyb3cgdGhlIHNlbGVjdGlvbiByYXRo
ZXIgdGhhbiBsZWF2aW5nIHRoZQogICAgICAgICAvLyBiYXNlIGluIHBsYWNlIGFuZCBtb3Zpbmcg
dGhlIGV4dGVudC4gTWF0Y2hlcyBOU1RleHRWaWV3LgotICAgICAgICBpZiAoIW1fZnJhbWUgfHwg
IW1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldo
ZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0Jv
dW5kYXJ5KGdyYW51bGFyaXR5KSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3Vt
ZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0
ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFy
eShncmFudWxhcml0eSkpCiAgICAgICAgICAgICBzZXRFeHRlbnQocG9zaXRpb24sIHVzZXJUcmln
Z2VyZWQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERp
cmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKQEAgLTE1MTcsNyArMTUyNCw3
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgdW5zaWdu
ZWQgdmVydGljYWxEaXN0YW5jZSwgVmVydGljCiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNl
clRyaWdnZXJlZCkKICAgICAgICAgbV9ncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5
OwogCi0gICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJl
Y3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsK
KyAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlv
bmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNTc1LDcgKzE1ODIsNyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0
b3AoKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVu
ZGVyZXIoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkK
ICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKIAogICAgIHNldFNl
bGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENo
YXJhY3RlckdyYW51bGFyaXR5KTsKQEAgLTE2NTUsOSArMTY2Miw5IEBAIHN0YXRpYyBib29sIGlz
Tm9uT3JwaGFuZWRDYXJldChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIElu
dFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4
ZWQpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JT
dHlsZSgqbV9mcmFtZSk7CisgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5
bGUoKm1fZG9jdW1lbnQpOwogICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogICAgIGlmIChpbnNp
ZGVGaXhlZCkKICAgICAgICAgKmluc2lkZUZpeGVkID0gbV9jYXJldEluc2lkZVBvc2l0aW9uRml4
ZWQ7CkBAIC0xNjc1LDEwICsxNjgyLDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0
ZUNhcmV0UmVjdCgpCiAgICAgaWYgKCFzaG91bGRVcGRhdGVDYXJldFJlY3QoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9kb2N1bWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRnJhbWVWaWV3KiB2ID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+dmlldygpOworICAgIEZyYW1lVmlldyogdiA9IG1fZG9jdW1lbnQtPnZpZXcoKTsK
ICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTY5MCw3ICsxNjk3LDcg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAgICAg
IGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgICAg
ICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2ZyYW1lLT5kb2N1bWVudCgpLCB2aXNpYmxlU3Rh
cnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KG1fZG9jdW1lbnQsIHZpc2li
bGVTdGFydCkpIHsKICAgICAgICAgICAgICAgICBjYXJldE5vZGUgPSB2aXNpYmxlU3RhcnQuZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAgICAgICAgIG1fYWJzQ2Fy
ZXRCb3VuZHNEaXJ0eSA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNzE1LDcgKzE3MjIsNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkgeworICAgIGlmIChSZW5k
ZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgIGJvb2wg
cHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0gbV9zZWxlY3Rpb24uaXND
b250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAmJiBtX3ByZXZpb3VzQ2Fy
ZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFJlcGFpbnRD
YXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUpKSB7CiAg
ICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKQEAgLTE4OTQsMTIgKzE5MDEsMTEg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
KSBjb25zdAogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9j
dW1lbnQpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOwotICAgIGRvY3VtZW50LT5oaXRUZXN0
KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7CisgICAgbV9kb2N1bWVudC0+aGl0VGVzdChIaXRU
ZXN0UmVxdWVzdCgpLCByZXN1bHQpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC5pbm5l
ck5vZGUoKTsKICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTY4LDkgKzE5NzQsNyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiAKIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0g
ZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CisgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQg
PSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmIChpczxIVE1MU2VsZWN0RWxl
bWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxl
Y3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7
CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LmNhblNlbGVjdEFsbCgpKSB7CkBAIC0yMDAwLDgg
KzIwMDQsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogICAgICAgICBpZiAo
cm9vdCkKICAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gcm9vdC0+c2hhZG93SG9zdCgp
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IGRvY3VtZW50LT5ib2R5
T3JGcmFtZXNldCgpOworICAgICAgICAgICAgcm9vdCA9IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxl
bWVudCgpOworICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBtX2RvY3VtZW50LT5ib2R5
T3JGcmFtZXNldCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghcm9vdCkKQEAgLTIwNTgs
OSArMjA2Miw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2Uq
IHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsCiB2b2lkIEZyYW1lU2VsZWN0aW9u
Ojpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wgYWN0aXZlQW5kRm9j
dXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQo
Km1fZnJhbWUtPmRvY3VtZW50KCkpOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKKyAgICBtX2RvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICNpZiBVU0Uo
VUlLSVRfRURJVElORykKICAgICAvLyBDYXJldCBibGlua2luZyAoYmxpbmtzIHwgZG9lcyBub3Qg
YmxpbmspCkBAIC0yMDcxLDcgKzIwNzQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2Vk
T3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgIC8vIEJlY2F1c2UgUmVuZGVyT2JqZWN0OjpzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBhbmQKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8g
d2UgaGF2ZSB0byB1cGRhdGUgcGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCi0gICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgIGlmIChS
ZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3
LT5zZWxlY3Rpb24oKS5yZXBhaW50KCk7CiAKICAgICAvLyBDYXJldCBhcHBlYXJzIGluIHRoZSBh
Y3RpdmUgZnJhbWUuCkBAIC0yMDgyLDcgKzIwODUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgIC8vIEJlY2F1c2UgU3R5bGU6OlJlc29s
dmVyOjpjaGVja09uZVNlbGVjdG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyVGhlbWU6OmlzRm9jdXNl
ZCgpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsIHdlIGhhdmUgdG8KICAgICAvLyB1cGRh
dGUgc3R5bGUgYW5kIHRoZW1lIHN0YXRlIHRoYXQgZGVwZW5kZWQgb24gdGhvc2UuCi0gICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSkgeworICAgIGlm
IChFbGVtZW50KiBlbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSkgewogICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCkBAIC0y
MTA3LDEzICsyMTEwLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWQoYm9vbCBm
bGFnKQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9mb2N1c2Vk
ICYmIG1fZG9jdW1lbnQtPnBhZ2UoKSAmJiBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmlzQWN0aXZlKCk7CiB9CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLWlubGluZSBz
dGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRnJhbWUqIGZy
YW1lKQoraW5saW5lIHN0YXRpYyBib29sIHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29t
bWFuZChEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS5s
YXN0RWRpdENvbW1hbmQoKSAmJiBmcmFtZS0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCktPnNo
b3VsZFN0b3BDYXJldEJsaW5raW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5lZGl0b3IoKS5s
YXN0RWRpdENvbW1hbmQoKSAmJiBkb2N1bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkt
PnNob3VsZFN0b3BDYXJldEJsaW5raW5nKCk7CiB9CiAjZW5kaWYKIApAQCAtMjEzMiwxMiArMjEz
NSwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICBib29s
IHBhaW50QmxvY2tDdXJzb3IgPSBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciAmJiBtX3NlbGVjdGlv
bi5pc0NhcmV0KCkgJiYgIWlzTG9naWNhbEVuZE9mTGluZShtX3NlbGVjdGlvbi52aXNpYmxlRW5k
KCkpOwogICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCA9IHJlY29tcHV0ZUNhcmV0
UmVjdCgpOwogCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5j
YXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1l
bnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNob3VsZEJs
aW5rID0gIXBhaW50QmxvY2tDdXJzb3IgJiYgY2FyZXRJc1Zpc2libGUoKSAmJiBpc0NhcmV0KCkg
JiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwog
CiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBzbyB3ZSBj
YW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxvY2F0aW9u
LgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBz
aG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9mcmFtZSkpCisgICAgaWYgKGNh
cmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlu
a2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChtX2RvY3VtZW50KSkKICAgICAgICAgbV9jYXJldEJsaW5r
VGltZXIuc3RvcCgpOwogCiAgICAgLy8gU3RhcnQgYmxpbmtpbmcgd2l0aCBhIGJsYWNrIGNhcmV0
LiBCZSBzdXJlIG5vdCB0byByZXN0YXJ0IGlmIHdlJ3JlCkBAIC0yMTUzLDcgKzIxNTYsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICB9CiAjZW5kaWYKIAot
ICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlmICghdmll
dykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAyLDggKzIyMDUsOCBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dlciBhIHN5
bmNocm9ub3VzIGxheW91dCBoZXJlLgotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICB1cGRhdGVT
ZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgaWYgKG1fZG9j
dW1lbnQpCisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCpt
X2RvY3VtZW50KTsKIAogI2lmIEVOQUJMRShURVhUX0NBUkVUKQogICAgIGlmIChtX2NhcmV0UGFp
bnQpIHsKQEAgLTIyNDcsMTAgKzIyNTAsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9j
dXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgaWYgKGlzTm9uZSgpIHx8ICFpc0ZvY3VzZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBpZiAo
Y2FyZXRCcm93c2luZykgewogICAgICAgICBpZiAoRWxlbWVudCogYW5jaG9yID0gZW5jbG9zaW5n
QW5jaG9yRWxlbWVudChtX3NlbGVjdGlvbi5iYXNlKCkpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1l
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1f
ZnJhbWUpOworICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KQEAgLTIyNjIsMTYgKzIyNjUsMTYgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgICAgICAgICAvLyBzbyBh
ZGQgdGhlICFpc0ZyYW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0
dGVyIHdheSB0byBtYWtlIHRoaXMKICAgICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxvbmcgdGVy
bSwgYnV0IHRoaXMgaXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0aW1lLgogICAgICAgICAgICAg
aWYgKHRhcmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQp
KSB7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBtX2Rv
Y3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdl
dCwgKm1fZnJhbWUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwog
ICAgICAgICB9Ci0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50
KG51bGxwdHIpOworICAgICAgICBtX2RvY3VtZW50LT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRy
KTsKICAgICB9CiAKICAgICBpZiAoY2FyZXRCcm93c2luZykKLSAgICAgICAgbV9mcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFt
ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9j
dXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOwogfQogCiB2b2lkIERyYWdDYXJldENvbnRy
b2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0JiBwLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0
KSBjb25zdApAQCAtMjMwMCwxNiArMjMwMywxNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91
bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwog
ICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5j
bGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxk
RGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCiBG
bG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29u
dGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRv
Y3VtZW50KCkpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgpOwogCi0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJh
bWUpOwotICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsK
KyAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7
CisgICAgYXV0byogcmVuZGVyVmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBp
ZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKQEAgLTIzMjUs
MTQgKzIzMjgsMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMo
Q2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnQKIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0UmVjdEhlaWdodCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmICghbV9kb2N1bWVu
dC0+cmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gdG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIHZpc2libGVDb250ZW50UmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVS
ZWN0KTsKKyAgICBhdXRvIHZpc2libGVDb250ZW50UmVjdCA9IG1fZG9jdW1lbnQtPnZpZXcoKS0+
dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2li
bGVSZWN0KTsKICAgICBmb3IgKGF1dG8mIHJlY3QgOiBib3VuZGluZ0JveGVzKFJlbmRlck9iamVj
dDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlLCB0ZXh0UmVjdEhlaWdodCA9PSBUZXh0UmVjdGFu
Z2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpKSkgewogICAgICAgICBhdXRvIGludGVyc2VjdGlv
blJlY3QgPSBpbnRlcnNlY3Rpb24ocmVjdCwgdmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAg
aWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHkoKSkKQEAgLTIzNjQsNyArMjM2Nyw3IEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKEVsZW1lbnQqIHN0YXJ0KQogSFRNTEZv
cm1FbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6Y3VycmVudEZvcm0oKSBjb25zdAogewogICAgIC8v
IFN0YXJ0IGxvb2tpbmcgZWl0aGVyIGF0IHRoZSBhY3RpdmUgKGZpcnN0IHJlc3BvbmRlcikgbm9k
ZSwgb3Igd2hlcmUgdGhlIHNlbGVjdGlvbiBpcy4KLSAgICBFbGVtZW50KiBzdGFydCA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CisgICAgRWxlbWVudCogc3RhcnQgPSBt
X2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHN0
YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKQEAg
LTI0MDcsOCArMjQxMCw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihT
ZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFs
TW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxp
bmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVj
dGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1l
KCptX2ZyYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKQEAgLTI0MjYsMTcg
KzI0MjksMTYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQog
ICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlz
IGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUg
b3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVudCkuCiAKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRh
YmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKCFp
c05vbmUoKSB8fCAhKG1fZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dz
aW5nKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWRvY3VtZW50IHx8ICEoaXNO
b25lKCkgfHwgaXNTdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0
YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkgfHwgIWRvY3VtZW50LT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9m
RG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpKSkgfHwgIW1fZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50LT5ib2R5
KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5KCkpCiAgICAgICAgIHNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShi
b2R5KSwgRE9XTlNUUkVBTSkpOwogfQogCkBAIC0yNDQ2LDcgKzI0NDgsNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uKQogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2Zy
YW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVj
dGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gbV9kb2N1
bWVudC0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxl
Y3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CiB9CiAKIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OmRpc3BhdGNoU2VsZWN0U3RhcnQoKQpAQCAtMjQ2NCw3ICsyNDY2LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKGJvb2wgc2hvdWxkU2hv
d0Jsb2NrQ3Vyc29yKQogewogICAgIG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yID0gc2hvdWxkU2hv
d0Jsb2NrQ3Vyc29yOwogCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiB9CkBA
IC0yNDgyLDEzICsyNDg0LDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNjaGVkdWxlQXBwZWFy
YW5jZVVwZGF0ZUFmdGVyU3R5bGVDaGFuZ2UoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjphcHBl
YXJhbmNlVXBkYXRlVGltZXJGaXJlZCgpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFt
ZSgqbV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IoKm1fZG9jdW1lbnQpOwog
ICAgIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UoKTsKIH0KIAogdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5n
ZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgp
KQorICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkK
ICAgICAgICAgY2xpZW50LT51cGRhdGVFZGl0b3JTdGF0ZUFmdGVyTGF5b3V0SWZFZGl0YWJpbGl0
eUNoYW5nZWQoKTsKIAogICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CkBAIC0yNzIzLDcg
KzI3MjUsNyBAQCBSZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5n
Q3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdAogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
LCBOb2RlJiBub2RlKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFu
Z2UgPSBtX2RvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwogICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFy
dChub2RlLCBsb2NhdGlvbik7CiAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZChub2RlLCBsb2NhdGlv
biArIGxlbmd0aCk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBWaXNpYmxlU2Vs
ZWN0aW9uKCpyZXN1bHRSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOwpAQCAtMjkwNCw3ICsy
OTA2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJs
aW5rcykKICAgICBpZiAobV9jYXJldEJsaW5rcyA9PSBjYXJldEJsaW5rcykKICAgICAgICAgcmV0
dXJuOwogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOyAKKyAgICBtX2RvY3VtZW50LT51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBpZiAobV9jYXJldFBh
aW50KSB7CiAgICAgICAgIG1fY2FyZXRQYWludCA9IGZhbHNlOyAKICAgICAgICAgaW52YWxpZGF0
ZUNhcmV0UmVjdCgpOyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRl
eCBlNmE3MDhiMDU0ZjU5YjMwYmZiNTdlZmRmZTMyY2FlZDE2NWEwNTA4Li41YWFmOWEwODliM2Ix
OWRmYTAxMGVkMDcwOWQ0MmRlZWFlMGI1ZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
b3B0aW9uczsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGcmFtZVNlbGVj
dGlvbihGcmFtZSogPSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGcmFt
ZVNlbGVjdGlvbihEb2N1bWVudCogPSBudWxscHRyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwogICAg
ICAKQEAgLTMzOCw2ICszMzgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBkaXNwYXRjaFNlbGVj
dFN0YXJ0KCk7CiAKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBGcmFtZSogbV9mcmFt
ZTsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
LmNwcAppbmRleCA3MzA3NmRlMWI3OWI5ZjA5ZmY5ZjMxMjdhODNlNWIwODNkNTc4NTkzLi42NjAx
ZGI4ZmNiNGUzN2Y0YWRiMjBhZjE3ODJlMjIxMjRjZjEzYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKQEAgLTUwLDcg
KzUwLDcgQEAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZChSZWY8VGV4dD4mJiBub2RlLCB1bnNpZ25lZAogCiB2b2lkIEluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGZy
YW1lKCkuc2V0dGluZ3MoKS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CisgICAgYm9vbCBwYXNzd29y
ZEVjaG9FbmFibGVkID0gZG9jdW1lbnQoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0VuYWJsZWQo
KTsKICAgICBpZiAocGFzc3dvcmRFY2hvRW5hYmxlZCkKICAgICAgICAgZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXggMTc2ZDhmMDg5YWY1
MDI2NmRkODk4ZmE5Nzc0Zjk3NDFkYjM5OWRmYi4uMjczNTVlNjZmYjg5ZDU1NDJjZDZhOWJlYTg4
ZTJjMjYyZjUwNzgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aW5lQnJlYWtDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExp
bmVCcmVha0NvbW1hbmQuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJl
YWtDb21tYW5kOjpkb0FwcGx5KCkKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVy
ZSBpcyBhIHR5cGluZyBzdHlsZS4KIAotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0
eWxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHls
ZSgpOwogCiAgICAgaWYgKHR5cGluZ1N0eWxlICYmICF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKSB7
CiAgICAgICAgIC8vIEFwcGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGluc2VydGVkIGxpbmUg
YnJlYWssIHNvIHRoYXQgaWYgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFRleHRDb21tYW5kLmNwcAppbmRleCBlOTEzMWY2ZmJmMzJkODYzMDUwYWExZWYyMDhl
NWI0ZjQ0MDQ5YjZhLi4xYmIwZDA1Mjg3MGM0NTEzNjk5NDcxOWQwZWMwNjViM2VkMDk2ZDQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMTQ2
LDcgKzE0Niw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAv
LyBhbnl0aGluZyBvdGhlciB0aGFuIE5vU2VsZWN0aW9uLiBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0
aW9uIHJlcXVpcmVzIGEgcmVhbCBlbmRpbmdTZWxlY3Rpb24sIHNvIGJhaWwgb3V0LgogICAgICAg
ICBpZiAoZW5kaW5nU2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgfSBlbHNlIGlmIChmcmFtZSgpLmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkg
eworICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFi
bGVkKCkpIHsKICAgICAgICAgaWYgKHBlcmZvcm1PdmVyd3JpdGUobV90ZXh0LCBtX3NlbGVjdElu
c2VydGVkVGV4dCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIyLDcgKzIyMiw3
IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIHNldEVuZGluZ1NlbGVj
dGlvbldpdGhvdXRWYWxpZGF0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAogICAg
IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KLSAgICBp
ZiAoUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpIHsKKyAgICBpZiAoUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5
bGUgPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpIHsKICAgICAgICAgdHlw
aW5nU3R5bGUtPnByZXBhcmVUb0FwcGx5QXQoZW5kUG9zaXRpb24sIEVkaXRpbmdTdHlsZTo6UHJl
c2VydmVXcml0aW5nRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCF0eXBpbmdTdHlsZS0+aXNFbXB0
eSgpKQogICAgICAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5j
cHAKaW5kZXggNTQ2MGI3NWNhYmQyM2RkNTVhZDkzOWQwMTRiNTgyOTJlZDlkNGVhMi4uNjhlMDgz
NTJhNGMxMGQ4NjhiZjFlNDY5YmY3NWM5NTZkMTNmMDU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAtNjAs
NyArNjAsNyBAQCB2b2lkIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgaWYgKCFtX3JhbmdlVG9CZVJlcGxhY2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCisg
ICAgaWYgKCFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxl
Y3Rpb24pKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWNoYXJhY3RlckNvdW50KCptX3Jh
bmdlVG9CZVJlcGxhY2VkKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRhMjFjOTkx
NzAyZjY1ZTc4Ny4uNDk2OTkxOWQ5MWExMTQ5NWMyOThjOTJhNzY2NzI2YjkyZTE2OTUwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKQEAgLTExODEsNyArMTE4MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIAogICAgIC8vIEZJWE1FOiBDYW4gdGhpcyB3YWl0IHVudGlsIGFmdGVyIHRo
ZSBvcGVyYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkPyAgVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJl
CiAgICAgLy8gYW55IHdvcmsgcGVyZm9ybWVkIGFmdGVyIHRoaXMgdGhhdCBxdWVyaWVzIG9yIHVz
ZXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5n
U3R5bGUoKTsKKyAgICBkb2N1bWVudCgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsK
IAogICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIGRlc3RpbmF0aW9uIHRvIGVuZCB1cCBpbnNpZGUg
bm9kZXMgdGhhdCB3ZXJlbid0IHNlbGVjdGVkLiAgVG8gYXZvaWQgdGhhdCwgd2UgbW92ZSB0aGUK
ICAgICAvLyBwb3NpdGlvbiBmb3J3YXJkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZpc2libGUgcG9z
aXRpb24gc28gd2UncmUgc3RpbGwgYXQgdGhlIHNhbWUgdmlzaWJsZSBsb2NhdGlvbiwgYnV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBj
MDY1YzAyY2ExM2ZkMjUxNzBkNmIyMWIxZjg5OGU5YmE3OWJlNjM4Li4wZGQyNmE4MWU5MGI2Nzg3
NGMzMzVjZWYxMjEwN2UyMTRiZGZkODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgU2V0U2VsZWN0aW9uQ29t
bWFuZDo6U2V0U2VsZWN0aW9uQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24sIE9wdGkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBG
cmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUoKS5zZWxlY3Rpb24oKTsKKyAgICBGcmFt
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKTsKIAogICAgIGlm
IChzZWxlY3Rpb24uc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQpICYmICFt
X3NlbGVjdGlvblRvU2V0LmlzTm9uZU9yT3JwaGFuZWQoKSkgewogICAgICAgICBzZWxlY3Rpb24u
c2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CkBAIC01MCw3ICs1MCw3
IEBAIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU2V0U2VsZWN0
aW9uQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUoKS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0g
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rpb24uc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCkpICYmICFzdGFydGluZ1NlbGVjdGlvbigpLmlz
Tm9uZU9yT3JwaGFuZWQoKSkKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihzdGFydGlu
Z1NlbGVjdGlvbigpLCBtX29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCmluZGV4IDE3MmQ4NWZkNDY2ZjI4MzY2YjU1ODA2ZDA5YmY2MDFmZTFjNWY4MTkuLjUw
YzE3NTNmMTZkOTY4ZmE5NmJjMmJjNmI2MTFiNDk4ZmYyNDk0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKQEAgLTk4LDggKzk4LDggQEAgdm9pZCBTcGVsbENoZWNr
UmVxdWVzdDo6cmVxdWVzdGVyRGVzdHJveWVkKCkKICAgICBtX2NoZWNrZXIgPSBudWxscHRyOwog
fQogCi1TcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tlcihGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2Zy
YW1lKGZyYW1lKQorU3BlbGxDaGVja2VyOjpTcGVsbENoZWNrZXIoRG9jdW1lbnQmIGRvY3VtZW50
KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fdGltZXJUb1Byb2Nlc3NRdWV1
ZWRSZXF1ZXN0KCp0aGlzLCAmU3BlbGxDaGVja2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVk
UmVxdWVzdCkKIHsKIH0KQEAgLTExNCw3ICsxMTQsNyBAQCBTcGVsbENoZWNrZXI6On5TcGVsbENo
ZWNrZXIoKQogCiBUZXh0Q2hlY2tlckNsaWVudCogU3BlbGxDaGVja2VyOjpjbGllbnQoKSBjb25z
dAogewotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0g
bV9kb2N1bWVudC5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gcGFnZS0+ZWRpdG9yQ2xpZW50KCkudGV4dENoZWNrZXIoKTsKQEAgLTEz
MSw3ICsxMzEsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVl
ZFJlcXVlc3QoKQogCiBib29sIFNwZWxsQ2hlY2tlcjo6aXNBc3luY2hyb25vdXNFbmFibGVkKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3lu
Y2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwogfQogCiBib29sIFNwZWxsQ2hlY2tlcjo6
Y2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5nZSYgcmFuZ2UpIGNvbnN0CkBAIC0xNzQsNyArMTc0
LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1
ZXN0PiYmIHJlcXVlc3QpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpOwotICAgIGNsaWVudCgpLT5y
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKIH0KIAogdm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFJlZjxTcGVsbENo
ZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU3BlbGxDaGVj
a2VyOjpkaWRDaGVjayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBj
b25zdCBWZWN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2ZyYW1lLmVkaXRvcigp
Lm1hcmtBbmRSZXBsYWNlRm9yKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCByZXN1bHRzKTsKKyAgICBt
X2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbmRSZXBsYWNlRm9yKCptX3Byb2Nlc3NpbmdSZXF1ZXN0
LCByZXN1bHRzKTsKIAogICAgIGlmIChtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyLnRvVUludDY0
KCkgPCBpZGVudGlmaWVyLnRvVUludDY0KCkpCiAgICAgICAgIG1fbGFzdFByb2Nlc3NlZElkZW50
aWZpZXIgPSBpZGVudGlmaWVyOwpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgU3BlbGxDaGVja2Vy
OjpkaWRDaGVja1N1Y2NlZWQoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uCiAgICAgICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2luZ1R5cGVzKCkuY29udGFpbnMo
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpCiAgICAgICAgICAgICBtYXJrZXJUeXBlcy5hZGQo
RG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1h
cmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7
CisgICAgICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vz
c2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOwogICAgIH0KICAgICBk
aWRDaGVjayhpZGVudGlmaWVyLCByZXN1bHRzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
Q2hlY2tlci5oCmluZGV4IGMzNmFlMmMzMGZlOWZiNWJlZjY3MDczMjIyZWM0M2U0NGFkN2YyYzAu
LmQxOWZjZmRlMzg0MTViMDExNWNmOGNkYWE0OGE4NjYwOGE4MTE5M2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuaApAQCAtNzYsNyArNzYsNyBAQCBjbGFzcyBTcGVsbENoZWNr
ZXIgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKIAotICAg
IGV4cGxpY2l0IFNwZWxsQ2hlY2tlcihGcmFtZSYpOworICAgIGV4cGxpY2l0IFNwZWxsQ2hlY2tl
cihEb2N1bWVudCYpOwogICAgIH5TcGVsbENoZWNrZXIoKTsKIAogICAgIGJvb2wgaXNBc3luY2hy
b25vdXNFbmFibGVkKCkgY29uc3Q7CkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRpZENoZWNrQ2FuY2VsKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyKTsKICAgICB2
b2lkIGRpZENoZWNrKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYpOwogCi0gICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1l
bnQmIG1fZG9jdW1lbnQ7CiAgICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0
UmVxdWVzdElkZW50aWZpZXI7CiAgICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9s
YXN0UHJvY2Vzc2VkSWRlbnRpZmllcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggOTllOGYxNTg4OGVhZTkzZjNk
NjhlMDRkODllZmY1NzU2NDZiYzM3OS4uNTkyMDg0NTM1MWVhNDAzYjhjODczNDNhZGE3NmI3NDM2
M2RmMDVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
b1VuYXBwbHkoKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2hhc0JlZW5VbmRvbmUp
IHsKLSAgICAgICAgICAgIGZyYW1lKCkuZWRpdG9yKCkudW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9u
KHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOworICAgICAg
ICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRp
bmdTZWxlY3Rpb24oKSwgbV9jb3JyZWN0ZWQsIG1fY29ycmVjdGlvbik7CiAgICAgICAgICAgICBt
X2hhc0JlZW5VbmRvbmUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTAzLDcgKzEw
Myw3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYg
KCFtX2NvcnJlY3RlZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFt
ZSgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3Jy
ZWN0ZWQpKQorICAgIGlmICghZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2Vs
ZWN0aW9uVG9CZUNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25P
cHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA1YTZjNTNjMDM4Mzcw
Y2ZiMGEzOGFiMGRhNGY1NjE4ZmJhYmIyNWFlLi5mMzEyOGQ3ZWE1N2Q1Njc2MzkxOGEzMTNhYjc3
YjY2NDllNWI2NDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAK
QEAgLTE2MywxMyArMTYzLDEwIEBAIFR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQoRG9jdW1l
bnQmIGRvY3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uCiAKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBv
cHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBp
ZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCisgICAgaWYgKCFkb2N1bWVudC5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxP
cGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhk
b2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRp
b24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0Q29tcG9zaXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVu
dFNwZWxsQ2hlY2tpbmcpOwpAQCAtMTgzLDggKzE4MCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
ZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0
Q29tCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAg
ICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpIHsKLSAgICAgICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7Ci0gICAgICAgICAg
ICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBp
bmdDb21tYW5kLmdldCgpLCBkb2N1bWVudC5mcmFtZSgpKTsKKyAgICAgICAgaWYgKFJlZlB0cjxU
eXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGls
bE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25J
ZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBk
b2N1bWVudCk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxl
dGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9w
dGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xOTksMTAgKzE5Niw5IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlv
bnMgb3B0aW9ucywgVGV4dEdyCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgLy8gRklYTUU6IEZvcndhcmQgZGVsZXRlIGluIFRleHRF
ZGl0IGFwcGVhcnMgdG8gb3BlbiBhbmQgY2xvc2UgYSBuZXcgdHlwaW5nIGNvbW1hbmQuCi0gICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0g
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoKmZyYW1lKSkgewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZnJhbWUpOworICAgICAg
ICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGlu
Z0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIHVw
ZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0Nv
bW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5z
ZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAg
ICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9u
Tm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNw
ZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTIxNCwxMCAr
MjEwLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1
bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywKICAgICBUeXBpbmdDb21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQsIEZvcndhcmREZWxldGVLZXksIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMsIGdy
YW51bGFyaXR5KS0+YXBwbHkoKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxl
Y3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGlu
Z0NvbW1hbmQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0
aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdD
b21tYW5kLCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0g
dHlwaW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjI3LDMxICsyMjIsMjUgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRp
ZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQKIAogdm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb24pCiB7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwot
CiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnVwZGF0
ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFsw
XSkpOworICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKICAgICAKLSAgICBpbnNl
cnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9w
dGlvbnMsIGNvbXBvc2l0aW9uKTsKKyAgICBpbnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBkb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQog
CiAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IG5lZWQgdG8gdGFrZSBzZWxlY3Rpb25Gb3JJbnNlcnRp
b24uIEl0IHNob3VsZCBiZSBpZGVudGljYWwgdG8gRnJhbWVTZWxlY3Rpb24ncyBjdXJyZW50IHNl
bGVjdGlvbi4KIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
Rm9ySW5zZXJ0aW9uLCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9z
aXRpb25UeXBlKQogewotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgp
OwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQ6
Omluc2VydFRleHQgKHRleHQgJXMpIiwgdGV4dC51dGY4KCkuZGF0YSgpKTsKIAotICAgIFZpc2li
bGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogICAgIFN0cmluZyBuZXdUZXh0ID0gZGlzcGF0Y2hC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCh0ZXh0LCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGNvbXBv
c2l0aW9uVHlwZSA9PSBUZXh0Q29tcG9zaXRpb25QZW5kaW5nKTsKICAgICAKICAgICAvLyBTZXQg
dGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgc2VsZWN0aW9uIGFwcHJvcHJpYXRlbHkgaWYgd2UgYXJl
IHVzaW5nIGEgc2VsZWN0aW9uCiAgICAgLy8gdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3Vy
cmVudCBzZWxlY3Rpb24uICBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgY2hhbmdlIEVkaXRDb21t
YW5kCiAgICAgLy8gdG8gZGVhbCB3aXRoIGN1c3RvbSBzZWxlY3Rpb25zIGluIGEgZ2VuZXJhbCB3
YXkgdGhhdCBjYW4gYmUgdXNlZCBieSBhbGwgb2YgdGhlIGNvbW1hbmRzLgotICAgIGlmIChSZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5
cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgaWYgKGxhc3RUeXBpbmdDb21tYW5kLT5lbmRpbmdT
ZWxlY3Rpb24oKSAhPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24pIHsKICAgICAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNlcnRpb24p
OwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihzZWxl
Y3Rpb25Gb3JJbnNlcnRpb24pOwpAQCAtMjY2LDEyICsyNTUsMTIgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBWaXMKICAgICB9CiAKICAgICBhdXRvIGNtZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShk
b2N1bWVudCwgSW5zZXJ0VGV4dCwgbmV3VGV4dCwgb3B0aW9ucywgY29tcG9zaXRpb25UeXBlKTsK
LSAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGZyYW1lLmdldCgpLCBjbWQuZ2V0KCksIHNl
bGVjdGlvbkZvckluc2VydGlvbiwgY3VycmVudFNlbGVjdGlvbik7CisgICAgYXBwbHlUZXh0SW5z
ZXJ0aW9uQ29tbWFuZChkb2N1bWVudC5mcmFtZSgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvcklu
c2VydGlvbiwgY3VycmVudFNlbGVjdGlvbik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAg
IGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7
CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBv
c2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3IpOwpAQCAtMjg0LDcgKzI3Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGlu
ZUJyZWFrKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogCiB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50
LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29t
bWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7
CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKGZhbHNlKTsK
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9z
aXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFBhcmFncmFwaFNl
cGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKTsKQEAgLTI5Niw3
ICsyODUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcklu
UXVvdGVkQ29udGVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRp
b25zKQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgp
KSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAg
ICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRv
Y29tcGxldGlvbik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5
cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRT
aG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2Nv
cnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAtMzA3LDkgKzI5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBv
cHRpb25zCiAgICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3IsIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMpLT5hcHBseSgpOwogfQogCi1SZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gVHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZyhGcmFtZSYgZnJhbWUpCitSZWZQdHI8VHlwaW5nQ29tbWFuZD4gVHlwaW5n
Q29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYg
ZG9jdW1lbnQpCiB7Ci0gICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENv
bW1hbmQgPSBmcmFtZS5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKKyAgICBSZWZQdHI8Q29t
cG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGRvY3VtZW50LmVkaXRvcigpLmxh
c3RFZGl0Q29tbWFuZCgpOwogICAgIGlmICghbGFzdEVkaXRDb21tYW5kIHx8ICFsYXN0RWRpdENv
bW1hbmQtPmlzVHlwaW5nQ29tbWFuZCgpIHx8ICFzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4o
bGFzdEVkaXRDb21tYW5kLmdldCgpKS0+aXNPcGVuRm9yTW9yZVR5cGluZygpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApAQCAtMzIxLDE2ICszMTAsMTYgQEAgYm9vbCBUeXBpbmdDb21tYW5k
OjpzaG91bGREZWZlcldpbGxBcHBseUNvbW1hbmRVbnRpbEFkZGluZ1R5cGluZ0NvbW1hbmQoKSBj
b25zdAogICAgIHJldHVybiAhbV9pc0hhbmRsaW5nSW5pdGlhbFR5cGluZ0NvbW1hbmQgfHwgZWRp
dEFjdGlvbklzRGVsZXRlQnlUeXBpbmcoZWRpdGluZ0FjdGlvbigpKTsKIH0KIAotdm9pZCBUeXBp
bmdDb21tYW5kOjpjbG9zZVR5cGluZyhGcmFtZSogZnJhbWUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6
OmNsb3NlVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZygqZnJhbWUpKQorICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5
cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3Vt
ZW50KSkKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmNsb3NlVHlwaW5nKCk7CiB9CiAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRp
dENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhGcmFtZSogZnJh
bWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKK3ZvaWQgVHlwaW5nQ29t
bWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1v
cmVUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdT
ZWxlY3Rpb24pCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29t
bWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgewor
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAg
IGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb25Pbkxhc3RJbnNlcnRDb21tYW5k
KG5ld1NlbGVjdGlvbik7CiAgICAgfQpAQCAtNDM2LDE5ICs0MjUsMTcgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjpkaWRBcHBseUNvbW1hbmQoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKIHsKLSAgICBG
cmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlm
ICghZnJhbWUuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQotICAg
ICAgICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJs
ZWQoKQotICAgICAgICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9u
RW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJz
dGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGlj
VGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgp
LmVkaXRvcigpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAg
JiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgp
CisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
ZnJhbWUuZWRpdG9yKCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCisgICAgaWYgKGRv
Y3VtZW50KCkuZWRpdG9yKCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCiAgICAgICAg
IHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAg
ICAvLyBUYWtlIGEgbG9vayBhdCB0aGUgc2VsZWN0aW9uIHRoYXQgcmVzdWx0cyBhZnRlciB0eXBp
bmcgYW5kIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gc3BlbGxjaGVjay4gCkBAIC00NjYs
OSArNDUzLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBp
bmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBw
ZWRQcmV2aW91c1dvcmQ7CiAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09
IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFu
ZDo6SW5zZXJ0TGluZUJyZWFrIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvciB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpKQogICAgICAgICAgICAgICAgIHN0
cmlwcGVkUHJldmlvdXNXb3JkID0gcGxhaW5UZXh0KCpyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCk7
Ci0gICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNX
b3JkLmlzRW1wdHkoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5n
Q29tbWFuZDo6SW5zZXJ0VGV4dCkKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLnN0YXJ0QWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcigpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5z
dGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJB
TShjb21tYW5kVHlwZSk7CiAgICAgICAgIC8vIElmIHRoaXMgYnVnIGdldHMgZml4ZWQsIHRoaXMg
UExBVEZPUk0oSU9TX0ZBTUlMWSkgY29kZSBjb3VsZCBiZSByZW1vdmVkOgpAQCAtNDgzLDcgKzQ3
MCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVU
eXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDEgPSBz
dGFydE9mV29yZChwcmV2aW91cywgc3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwMiA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBzdGFydFdvcmRTaWRlKTsKICAgICAgICAgaWYg
KHAxICE9IHAyKQotICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2UpOworICAgICAgICAg
ICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQo
cDEsIGVuZGluZ1NlbGVjdGlvbigpLCBmYWxzZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgfQogfQpAQCAtNDk3LDI2ICs0ODQsMjYgQEAgYm9vbCBUeXBpbmdDb21tYW5k
Ojp3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwg
VGV4dEcKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoIXJhbmdlIHx8IGlzRWRpdGlu
Z1RleHRBcmVhT3JUZXh0SW5wdXQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCku
d2lsbEFwcGx5RWRpdGluZygqdGhpcywgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdl
c0ZvckJpbmRpbmdzKCkpOworICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxs
QXBwbHlFZGl0aW5nKCp0aGlzLCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9y
QmluZGluZ3MoKSk7CiAKLSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0
aW5nKCp0aGlzLCB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoKnJhbmdlKSB9KTsKKyAgICByZXR1
cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB7IDEsIFN0YXRp
Y1JhbmdlOjpjcmVhdGUoKnJhbmdlKSB9KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBp
bmdBZGRlZFRvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGVGb3JBZGRlZFR5
cGluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIFJlZlB0cjxG
cmFtZT4gcHJvdGVjdG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKICAgICB1cGRhdGVQcmVzZXJ2
ZXNUeXBpbmdTdHlsZShjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBk
b2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICAgICAvLyBTaW5jZSB0
aGUgc3BlbGxjaGVja2luZyBjb2RlIG1heSBhbHNvIHBlcmZvcm0gY29ycmVjdGlvbnMgYW5kIG90
aGVyIHJlcGxhY2VtZW50cywgaXQgc2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgdHlwaW5nIGNoYW5n
ZXMuCiAgICAgaWYgKCFtX3Nob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKQogICAgICAgICBtYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAjZWxz
ZQogICAgIC8vIFRoZSBvbGQgc3BlbGxjaGVja2luZyBjb2RlIHJlcXVpcmVzIHRoYXQgY2hlY2tp
bmcgYmUgZG9uZSBmaXJzdCwgdG8gcHJldmVudCBpc3N1ZXMgbGlrZSB0aGF0IGluIDY4NjQwNzIs
IHdoZXJlIDxkb2Vzbid0PiBpcyBtYXJrZWQgYXMgbWlzc3BlbGxlZC4KICAgICBtYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7Ci0gICAgZnJhbWUu
ZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
YXBwbGllZEVkaXRpbmcoKnRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTUzNSw5ICs1MjIsOSBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KGNvbnN0
IFN0cmluZyAmdGV4dCwgYm9vbCBzZQogewogICAgIExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFu
ZCAlcCBpbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSAodGV4dCAlcywgc2VsZWN0SW5z
ZXJ0ZWRUZXh0ICVkKSIsIHRoaXMsIHRleHQudXRmOCgpLmRhdGEoKSwgc2VsZWN0SW5zZXJ0ZWRU
ZXh0KTsKIAotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRl
eHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAg
IGluc2VydFRleHQodGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKLSAgICByZXBsYWNlZFRleHQu
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5
cGVUeXBpbmcsIHRleHQsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAg
IGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVw
bGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNTUwLDkgKzUzNyw2IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wg
c2VsZWN0CiAgICAgICAgIG1fY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvbk5vbmUg
PyBJbnNlcnRUZXh0Q29tbWFuZDo6UmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFj
ZXMgOiBJbnNlcnRUZXh0Q29tbWFuZDo6UmViYWxhbmNlQWxsV2hpdGVzcGFjZXMsIEVkaXRBY3Rp
b246OlR5cGluZ0luc2VydFRleHQpOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RG
TW92ZShjb21tYW5kKSwgZW5kaW5nU2VsZWN0aW9uKCkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlw
aW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFRleHQpOwogfQogCkBAIC01NjUsMTcgKzU0OSwx
NCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhaygpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgp
OwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3Bl
bkNvbW1hbmQoSW5zZXJ0TGluZUJyZWFrKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRMaW5lQnJlYWtBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5
UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRMaW5lQnJlYWsoKTsKLSAgICBy
ZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUo
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwg
QVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBs
YWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNTg4LDE3ICs1NjksMTQgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgICAgICByZXR1
cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uOjpU
eXBpbmdJbnNlcnRQYXJhZ3JhcGgpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1l
KCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9P
cGVuQ29tbWFuZChJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOwogfQogCiB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQog
ewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVw
bGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcigpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
fQogCkBAIC02MTUsMTcgKzU5MywxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpCiAgICAgfQogICAgICAgICAKICAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpjcmVhdGUoZG9jdW1l
bnQoKSkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJh
bWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5QWNj
ZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRl
eHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJl
cGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7Ci0gICAg
cmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVw
bGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTY1MiwxMCArNjI3LDkgQEAgYm9v
bCBUeXBpbmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IHNob3VsZEFkZFRvS2lsbFJpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBw
cm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0
ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgp
LmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsK
IAogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87CkBAIC03NDgsMjAgKzcyMiwyMCBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBib29sIHNob3VsZEFkZAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdv
cmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1
NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1h
bmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJh
bWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkK
KyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVj
dGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0
ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAg
IGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlBy
ZXBlbmRUZXh0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJp
bmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6
S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CiAKICAgICAvLyBQb3N0IHRoZSBh
Y2Nlc3NpYmlsaXR5IG5vdGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIGNv
bnRlbnQgd2hpbGUgc2VsZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKICAgICBwb3N0VGV4
dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxldGUpOwpA
QCAtNzc4LDEwICs3NTIsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQo
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogCiB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSwgYm9vbCBzaG91bGRBZGRUb0tpbGxSaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOworICAgIFJlZlB0
cjxGcmFtZT4gcHJvdGVjdG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKLSAgICBmcmFtZS5lZGl0
b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CisgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
ZyhmYWxzZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVsZXRlOwogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwpAQCAtODU1LDEzICs4MjgsMTMg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
ICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIGJ1ZzoKICAgICAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzQ2NTM3NTU+IFVJS2l0IHRleHQgd2lkZ2V0cyBzaG91bGQgdXNlIFdlYktpdCBlZGl0aW5n
IEFQSSB0byBtYW5pcHVsYXRlIHRleHQKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICAgICAgY2xvc2VUeXBpbmcoJmZyYW1lKTsK
KyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgICAgICBjbG9zZVR5cGluZyhkb2N1bWVudCgpKTsKICNlbmRpZgogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0
KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25U
b0RlbGV0ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5k
KEZvcndhcmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRvRGVsZXRlLmZp
cnN0UmFuZ2UoKSkpCkBAIC04NzEsNyArODQ0LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3
YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gK
ICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9u
VG9EZWxldGUpOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1l
LmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRl
eHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2Vs
ZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmlu
Z0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAgIC8vIG1ha2UgdW5kbyBzZWxlY3Qgd2hh
dCB3YXMgZGVsZXRlZAogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkFmdGVyVW5k
byk7CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25U
b0RlbGV0ZSwgbV9zbWFydERlbGV0ZSwgLyogbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSovIHRydWUs
IC8qIHJlcGxhY2UqLyBmYWxzZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzLCAvKnNhbml0aXpl
TWFya3VwKi8gdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCmluZGV4
IDc2ZTVmOTliZjkyNTM4NTc1Y2FhMzg3NmJiOWI2YjU1NGI5ZmI3NWMuLjg5NmJmMGJkMTVkYmUz
ZDQ4MTg0ODk1ZjY0M2YxYzg2OWQ1OGViNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5oCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnNl
cnRMaW5lQnJlYWsoRG9jdW1lbnQmLCBPcHRpb25zKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQmLCBPcHRpb25zKTsKICAgICBzdGF0aWMgdm9pZCBp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmKTsKLSAgICBz
dGF0aWMgdm9pZCBjbG9zZVR5cGluZyhGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlw
aW5nKERvY3VtZW50Jik7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgdm9p
ZCBlbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5
cGluZyhGcmFtZSosIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBl
bnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGlu
ZyhEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICNlbmRpZgogCiAgICAgdm9p
ZCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQp
OwpAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc09wZW5Gb3JNb3JlVHlw
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRm9yTW9yZVR5cGluZzsgfQogICAgIHZvaWQgY2xv
c2VUeXBpbmcoKSB7IG1fb3BlbkZvck1vcmVUeXBpbmcgPSBmYWxzZTsgfQogCi0gICAgc3RhdGlj
IFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlw
aW5nKEZyYW1lJik7CisgICAgc3RhdGljIFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50Jik7CiAKICAgICB2b2lkIGRvQXBw
bHkoKSBmaW5hbDsKICAgICBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0IGZpbmFsOwpAQCAt
MTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRF
dmVudERhdGFUcmFuc2ZlcigpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNCZWZvcmVJbnB1dEV2
ZW50Q2FuY2VsYWJsZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlU2Vs
ZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwgRnJh
bWUqKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJy
ZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBEb2N1bWVudCYpOwogCiAgICAgdm9pZCB1cGRh
dGVQcmVzZXJ2ZXNUeXBpbmdTdHlsZShFVHlwaW5nQ29tbWFuZCk7CiAgICAgYm9vbCB3aWxsQWRk
VHlwaW5nVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCwgVGV4dEdyYW51bGFyaXR5LCBjb25z
dCBTdHJpbmcmID0gZW1wdHlTdHJpbmcoKSwgUmVmUHRyPFJhbmdlPiYmID0gbnVsbHB0cik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBjYzllMTQ0
YzljNzViNzg0ZGI1NjEyOTJlNzk0Mjc3YmZiNzZkNTllLi45MTBkZWVmNzA4NGQxZmRjOGUwZjlh
ZTA2ZTkxM2ExMWM3NjNmMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0KQEAgLTgwLDggKzgwLDggQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICoKIAog
U3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uSW5IVE1MRm9ybWF0KCkKIHsKLSAgICByZXR1cm4gc2Vy
aWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5
LAotICAgICAgICBtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRh
cmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpObyk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBl
YXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZ
ZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5z
ZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJp
YWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogfQog
CiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTEwNywxMCArMTA3LDEwIEBAIHZv
aWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChFbGVtZW50
JiBlbGVtZW50LCBWZWN0b3I8U3RyCiAKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewotICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogCiAgICAgUGFzdGVib2FyZFdlYkNvbnRlbnQgY29u
dGVudDsKLSAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50KCktPm9y
aWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgY29udGVudC5jb250ZW50T3JpZ2lu
ID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwogICAgIGNvbnRl
bnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIGNv
bnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1h
dCgpOwogICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29u
dGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiBu
dWxscHRyOwpAQCAtMTI1LDEwICsxMjUsMTAgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAKIHZvaWQgRWRpdG9yOjp3cml0
ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiB7
Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0
cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zy
b21TZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAKICAgICBQ
YXN0ZWJvYXJkV3JpdGVyRGF0YTo6V2ViQ29udGVudCB3ZWJDb250ZW50OwotICAgIHdlYkNvbnRl
bnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZv
clBhc3RlYm9hcmQoKTsKKyAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2RvY3VtZW50
Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgd2ViQ29udGVudC5jYW5TbWFy
dENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgd2ViQ29udGVudC5k
YXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAg
ICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWlu
c0F0dGFjaG1lbnRzID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxw
dHI7CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3Rl
Ym9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIAogUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gRWRpdG9yOjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKQogewotICAgIGF1dG8g
YXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUp
OworICAgIGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rp
b24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICBpZiAoIWFyY2hpdmUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShhcmNoaXZlLT5yYXdE
YXRhUmVwcmVzZW50YXRpb24oKS5nZXQoKSk7CkBAIC0xNzEsMTEgKzE3MSwxMSBAQCBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAK
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1h
aWxCbG9ja3F1b3RlSGFuZGxpbmcpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhtX2ZyYW1lLCBhdHRyaWJ1dGVkU3RyaW5nKSkgewor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEFuZEFkZFJlc291cmNlcygqbV9kb2N1bWVudC5mcmFtZSgpLCBhdHRyaWJ1dGVkU3RyaW5nKSkg
ewogICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0
ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAg
ICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBm
YWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0KQEAgLTIyMSw3ICsyMjEs
NyBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJURkZvcm1hdChOU0F0dHJp
YnV0ZWRTdHJpbmcgKnN0cmluZykKIC8vIE9yIHJlZmFjdG9yIHNvIGl0IGRvZXMgbm90IGRvIHRo
YXQuCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQ
bGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewotICAgIFdlYkNvbnRlbnRSZWFkZXIg
cmVhZGVyKG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKKyAgICBXZWJDb250ZW50
UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4
dCk7CiAgICAgcGFzdGVib2FyZC5yZWFkKHJlYWRlcik7CiAgICAgY2hvc2VQbGFpblRleHQgPSBy
ZWFkZXIubWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dDsKICAgICByZXR1cm4gV1RGTW92ZShyZWFk
ZXIuZnJhZ21lbnQpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgRWRpdG9yOjp0YWtlRmluZFN0
cmluZ0Zyb21TZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBz
dHJpbmdGcm9tU2VsZWN0aW9uID0gbV9mcmFtZS5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29k
aW5nKHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpKTsKKyAgICBhdXRvIHN0cmluZ0Zyb21T
ZWxlY3Rpb24gPSBtX2RvY3VtZW50LmZyYW1lKCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5j
b2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkpOwogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKICAgICB0eXBlcy5hcHBlbmQoU3RyaW5nKGxlZ2Fj
eVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0
b3JHdGsuY3BwCmluZGV4IDcwNmU4MjY3M2YwODEzMzM3MzVlNTg3MTI3OGM4ZDQ1MGQwYjY5YmMu
LjFkYTgxZjcxOGQ5MjM1ODIzYjAzODFmZTJiYmRlMTE5ZDgyNTA2ZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEVkaXRv
cjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8
UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7
Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsIG1fZnJhbWUsICpyYW5nZSwgb3B0aW9ucy5j
b250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7Cisg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
UGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwg
b3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWlu
VGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlv
bjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21l
bnQpOwpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgUGFzdGVib2FyZFdlYkNvbnRl
bnQgcGFzdGVib2FyZENvbnRlbnQ7CiAgICAgcGFzdGVib2FyZENvbnRlbnQuY2FuU21hcnRDb3B5
T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIHBhc3RlYm9hcmRDb250ZW50
LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKTsKLSAgICBwYXN0ZWJvYXJkQ29u
dGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxG
aWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25B
Y3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZ
ZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5t
YXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxl
VVJMc0ZvclByaXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25B
Y3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZ
ZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBh
c3RlYm9hcmRDb250ZW50KTsKIH0KIAogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6
d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIFJhbmdlJiBj
b250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEocGFzdGVib2FyZCwgbV9m
cmFtZSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKKyAgICByZXR1
cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEocGFzdGVib2FyZCwgKm1fZG9jdW1l
bnQuZnJhbWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCmluZGV4IGYyYTJkNTJhYzVhYmY0ZTRmMTMxMTNjYTI1ZDFiMjBhMTczOGZhNjkuLjFi
ZmNhNTkxM2Q2NDY0MWMwODJmZWY3NjVhYmExOWU5MDkwYWQxNzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBFZGl0b3I6OnNl
dFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVj
dGlvbiBkaXIKICAgICAvLyBJZiB0aGUgdGV4dCBoYXMgbGVmdCBvciByaWdodCBhbGlnbm1lbnQs
IGZsaXAgbGVmdC0+cmlnaHQgYW5kIHJpZ2h0LT5sZWZ0LiAKICAgICAvLyBPdGhlcndpc2UsIGRv
IG5vdGhpbmcuCiAKLSAgICBhdXRvIHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHls
ZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
YXV0byBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGlmICghc2VsZWN0aW9u
U3R5bGUgfHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKQogICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMjcsMTQgKzEyNywxNCBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5n
ZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgIGlmICghbmV3
VmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0g
bV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGZvY3Vz
ZWRFbGVtZW50ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmIChmb2N1c2Vk
RWxlbWVudCAmJiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KSB8fCAo
aXM8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KQogICAgICAgICAmJiAoZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1RleHRGaWVsZCgpCiAgICAg
ICAgICAgICB8fCBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLmlz
U2VhcmNoRmllbGQoKSkpKSkgewogICAgICAgICBpZiAoZGlyZWN0aW9uID09IFdyaXRpbmdEaXJl
Y3Rpb246Ok5hdHVyYWwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRvd25jYXN0PEhU
TUxFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oYWxpZ25BdHRyLCBuZXdWYWx1ZSk7Ci0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBtX2RvY3VtZW50LnVwZGF0ZVN0eWxlSWZO
ZWVkZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZv
aWQgRWRpdG9yOjpyZW1vdmVVbmNoYW5nZWFibGVTdHlsZXMoKQogewogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gcmVtb3ZlcyBzdHlsZXMgdGhhdCB0aGUgdXNlciBjYW5ub3QgbW9kaWZ5IGJ5IGFwcGx5
aW5nIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgogICAgIAotICAgIGF1dG8gZWRpdGluZ1N0eWxlID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUobV9mcmFtZS5kb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgp
KTsKKyAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG1fZG9jdW1l
bnQuYm9keU9yRnJhbWVzZXQoKSk7CiAgICAgYXV0byBkZWZhdWx0U3R5bGUgPSBlZGl0aW5nU3R5
bGUtPnN0eWxlKCktPm11dGFibGVDb3B5KCk7CiAgICAgCiAgICAgLy8gVGV4dCB3aWRnZXRzIGlt
cGxlbWVudCBiYWNrZ3JvdW5kIGNvbG9yIHZpYSB0aGUgVUlWaWV3IHByb3BlcnR5LiBUaGVpciBi
b2R5IGVsZW1lbnQgd2lsbCBub3QgaGF2ZSBvbmUuCkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBF
ZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9u
U2V0PFBhc3RlT3B0aW9uPgogewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJh
bmdlKCk7CiAgICAgYm9vbCBhbGxvd1BsYWluVGV4dCA9IG9wdGlvbnMuY29udGFpbnMoUGFzdGVP
cHRpb246OkFsbG93UGxhaW5UZXh0KTsKLSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2Zy
YW1lLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0KTsKKyAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRl
cigqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0KTsKICAgICBpbnQg
bnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXMgPSBjbGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291
bnQoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zOyAr
K2kpIHsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY2xpZW50
KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaSk7CkBAIC0yNDMsNyArMjQzLDcgQEAg
dm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwg
T3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogCiB2b2lkIEVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhy
YXNlcyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRh
dGEpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChkaWN0YXRpb25QaHJhc2VzLmlzRW1wdHkoKSkKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIEVk
aXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZl
Y3RvcjxTdHJpbmc+PiYgZAogICAgIC8vIFNvbWUgZGF5IHdlIGNvdWxkIG1ha2UgdGhlbSBVbmRv
YWJsZSwgYW5kIGxldCBjYWxsZXJzIGNsZWFyIHRoZSBVbmRvIHN0YWNrIGV4cGxpY2l0bHkgaWYg
dGhleSB3aXNoLgogICAgIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CiAKLSAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhcigp
OwogCiAgICAgZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCkBAIC0zMzksNyArMzM5LDcgQEAg
dm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwg
RWxlbWVudCYgZWxlbWVudCkKIAogICAgIC8vIEFzIGEgc2lkZSBlZmZlY3QgdGhpcyBmdW5jdGlv
biBzZXRzIGEgY2FyZXQgc2VsZWN0aW9uIGFmdGVyIHRoZSBpbnNlcnRlZCBjb250ZW50LiBNdWNo
IG9mIHdoYXQKICAgICAvLyBmb2xsb3dzIGlzIG1vcmUgZXhwZW5zaXZlIGlmIHRoZXJlIGlzIGEg
c2VsZWN0aW9uLCBzbyBjbGVhciBpdCBzaW5jZSBpdCdzIGdvaW5nIHRvIGNoYW5nZSBhbnl3YXku
Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhcigpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuY2xlYXIoKTsKIAogICAgIC8vIGNsZWFyIG91dCBhbGwgY3VycmVudCBjaGlsZHJlbiBv
ZiBlbGVtZW50CiAgICAgZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwpAQCAtMzgwLDcgKzM4MCw3
IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRl
eHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgc2VsZWN0aW9uLnNldEJhc2UodmlzaWJsZVBvcyk7
CiAgICAgc2VsZWN0aW9uLnNldEV4dGVudCh2aXNpYmxlUG9zKTsKIAotICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIAogICAgIGNsaWVudCgpLT5yZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoKTsKIH0KQEAgLTM4OSw3ICszODksNyBAQCB2b2lkIEVkaXRvcjo6c2V0
VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50
KQogLy8gaGF2ZSBhIHN0YWxlIHNlbGVjdGlvbi4KIHZvaWQgRWRpdG9yOjplbnN1cmVMYXN0RWRp
dENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygpCiB7Ci0gICAg
VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklm
T3BlbkZvck1vcmVUeXBpbmcoJm1fZnJhbWUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOworICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRT
ZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKG1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcAppbmRleCA1ZDE1YTY0
NjFjNTY5YjYzYWNjNjE1Nzk1ZTM0NDc3MDhhNGQ1NTc3Li4xMmZkNmE0M2VhMDVhMmEwZTcyYjc0
YmE3MmQ5NjI4NjQ3MDViYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xp
YndwZS9FZGl0b3JMaWJXUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3Bl
L0VkaXRvckxpYldQRS5jcHAKQEAgLTY3LDggKzY3LDggQEAgdm9pZCBFZGl0b3I6OndyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7CiAgICAgUGFzdGVi
b2FyZFdlYkNvbnRlbnQgcGFzdGVib2FyZENvbnRlbnQ7CiAgICAgcGFzdGVib2FyZENvbnRlbnQu
dGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpOwotICAgIHBhc3RlYm9hcmRDb250
ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZp
bGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6Olll
cyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50Lm1h
cmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVV
UkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6Olll
cyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogICAgIHBhc3RlYm9hcmQud3JpdGUocGFz
dGVib2FyZENvbnRlbnQpOwogfQogCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9w
dGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0
ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgbV9mcmFtZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJv
YXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsK
IAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1
b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMjkxODI0NjVkOGNmMjkz
OWNiMjE2MDI0OWZlYTJhZTExZWExN2M3Yy4uOTg0MWM5NGZhYTIxM2ZkMDgyZTU4MTIwZTFhMmI3
NGZhMzg2OTkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAt
MTAzLDcgKzEwMyw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIHZvaWQgRWRpdG9yOjpyZWFk
U2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsK
ICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisg
ICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgeyBQ
YXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQgfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFz
UGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7CkBAIC0xMzcsMTYgKzEzNywxNiBA
QCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZChOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIEFTU0VSVChub2RlKTsKIAotICAgIGlm
ICgmbm9kZS0+ZG9jdW1lbnQoKSAhPSBtX2ZyYW1lLmRvY3VtZW50KCkpCisgICAgaWYgKG5vZGUt
PmRvY3VtZW50KCkgIT0gbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9k
b2N1bWVudCk7CiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQo
KSwgUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpLCBQb3Np
dGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKSk7Ci0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSks
IEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgpKSwgRnJhbWVTZWxl
Y3Rpb246OkRvTm90U2V0Rm9jdXMpOwogCiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKTsKIAotICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgcGFz
dGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjIwLDcgKzIyMCw3IEBAIHN0YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQm
IGltYWdlRWxlbWVudCwgUmVmUHRyPEltYWdlPiYgaW1hZ2UsIENhY2hlZEltYWdlKiYKIAogdm9p
ZCBFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UoKQogewotICAgIGlmICghaGFzQ29tcG9zaXRp
b24oKSB8fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKKyAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hh
bmdlcygpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNhbmNlbENvbXBvc2l0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4v
RWRpdG9yV2luLmNwcAppbmRleCAwOTY0Y2NiNGZiZDdhYzM2YjE4ZjM0MTZmNDIwYTI3ZGJlOTY5
MTc4Li4yZjcyY2I0ZjAwNDUxY2JiZTQ0MmMwZTlhMzEyNjdjOGI4YzIwZDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBF
ZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9u
U2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5U
ZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQt
PmRvY3VtZW50RnJhZ21lbnQobV9mcmFtZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3Rl
T3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KCpt
X2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6
QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYg
b3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90
ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpAQCAtNjksOSArNjksOSBAQCBzdGF0aWMg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YShQ
bGF0Zm9ybURyYWdEYXRhJgogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29u
dGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIFJhbmdlJiwgYm9vbCAv
KmFsbG93UGxhaW5UZXh0Ki8sIGJvb2wmIC8qY2hvc2VQbGFpblRleHQqLykKIHsKICAgICBpZiAo
Q09NUHRyPElEYXRhT2JqZWN0PiBwbGF0Zm9ybURyYWdEYXRhID0gcGFzdGVib2FyZC5kYXRhT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoKnBs
YXRmb3JtRHJhZ0RhdGEsIG1fZnJhbWUpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRG
cm9tUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURyYWdEYXRhLCAqbV9kb2N1bWVudC5mcmFtZSgpKTsK
IAotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5k
cmFnRGF0YU1hcCgpLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxh
dGZvcm1EYXRhKHBhc3RlYm9hcmQuZHJhZ0RhdGFNYXAoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCmluZGV4IGM3MTZkNzI4MGY0NjJjYjU2NzM3NTdiNGJhNGUzYjI0YWJlZThkZTAuLjI5
Mjc0NzNhNGE1OTYzOGJjODJhZmJiOTA0YmVhNjNhZDA1MjM0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNTQxLDExICs1NDEsMTQgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6c3RvcCgpCiB2b2lkIEZyYW1lTG9hZGVyOjp3aWxsVHJhbnNpdGlvblRvQ29tbWl0dGVkKCkK
IHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZnJhbWUgaXMgc3RpbGwg
ZnVsbHkgaW4gcGxhY2UgKG5vdCBjYWNoZWQsIG5vdCBkZXRhY2hlZCksIGJ1dCB3aWxsIGJlIHJl
cGxhY2VkLgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKKyAg
ICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5lZGl0
b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgaWYgKGRvY3VtZW50LT5lZGl0b3IoKS5oYXND
b21wb3NpdGlvbigpKSB7CiAgICAgICAgIC8vIFRoZSB0ZXh0IHdhcyBhbHJlYWR5IHByZXNlbnQg
aW4gRE9NLCBzbyBpdCdzIGJldHRlciB0byBjb25maXJtIHRoYW4gdG8gY2FuY2VsIHRoZSBjb21w
b3NpdGlvbi4KLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsK
LSAgICAgICAgaWYgKEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS5lZGl0b3Io
KS5jbGllbnQoKSkgeworICAgICAgICBkb2N1bWVudC0+ZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0
aW9uKCk7CisgICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCA9IGRvY3VtZW50
LT5lZGl0b3IoKS5jbGllbnQoKSkgewogICAgICAgICAgICAgZWRpdG9yQ2xpZW50LT5yZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOwogICAgICAgICB9CkBAIC01NjgsNyArNTcx
LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogCiAgICAgc3RvcExvYWRpbmcodW5s
b2FkRXZlbnRQb2xpY3kpOwogICAgIAotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXJVbmRvUmVk
b09wZXJhdGlvbnMoKTsKKyAgICBpZiAoY3VycmVudERvY3VtZW50KQorICAgICAgICBjdXJyZW50
RG9jdW1lbnQtPmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CiB9CiAKIGJvb2wg
RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQpAQCAtNTgwLDcgKzU4NCw2IEBAIGJvb2wgRnJhbWVM
b2FkZXI6OmRpZE9wZW5VUkwoKQogICAgIH0KIAogICAgIG1fZnJhbWUubmF2aWdhdGlvblNjaGVk
dWxlcigpLmNhbmNlbCgpOwotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXJMYXN0RWRpdENvbW1h
bmQoKTsKIAogICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgIG1fZGlkQ2FsbEltcGxpY2l0
Q2xvc2UgPSBmYWxzZTsKQEAgLTY0Myw4ICs2NDYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hv
dWxkQ2xlYXJXaW5kb3dOYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRG9jdW1lbnQmIG5l
dwogCiB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJvb2wg
Y2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cywgYm9vbCBjbGVh
ckZyYW1lVmlldywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlRE9NV2luZG93Q3JlYXRp
b24pCiB7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhcigpOwotCiAgICAgYm9vbCBuZWVkZWRD
bGVhciA9IG1fbmVlZHNDbGVhcjsKICAgICBtX25lZWRzQ2xlYXIgPSBmYWxzZTsKIApAQCAtNjcz
LDcgKzY3NCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVu
dCwgYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wKICAgICAgICAgICAgIG1fZnJhbWUu
dHJlZSgpLnNldE5hbWUobnVsbEF0b20oKSk7CiAgICAgfQogCi0gICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKICAgICBtX2ZyYW1lLmV2ZW50SGFuZGxlcigp
LmNsZWFyKCk7CiAKICAgICBpZiAoY2xlYXJGcmFtZVZpZXcgJiYgbV9mcmFtZS52aWV3KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCmluZGV4IDM4NWUzN2E2ZDBjOTBlNjMzYTNiN2I0Mjg3MmM2MTZlMzgw
ODY0MjYuLjI5MDdiNDg1Yjk0YzY2YWM1MDY4NWM5OWRjMTVkZDVlZWVmZmNkMDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC0xNTYsOCArMTU2LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UmIHBhZ2Us
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBVbmlxdWVSZWY8RnJhbWVMb2EK
ICAgICAsIG1fbmF2aWdhdGlvblNjaGVkdWxlcihtYWtlVW5pcXVlUmVmPE5hdmlnYXRpb25TY2hl
ZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVudCkKICAgICAs
IG1fc2NyaXB0KG1ha2VVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4oKnRoaXMpKQotICAgICwg
bV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKLSAgICAsIG1fc2VsZWN0aW9u
KG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KHRoaXMpKQogICAgICwgbV9hbmltYXRpb25D
b250cm9sbGVyKG1ha2VVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMpKQog
ICAgICwgbV9wYWdlWm9vbUZhY3RvcihwYXJlbnRQYWdlWm9vbUZhY3Rvcih0aGlzKSkKICAgICAs
IG1fdGV4dFpvb21GYWN0b3IocGFyZW50VGV4dFpvb21GYWN0b3IodGhpcykpCkBAIC01NTQsNyAr
NTUyLDcgQEAgYm9vbCBGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKCkKICAgICBjYXNlIERP
TVBhc3RlQWNjZXNzUG9saWN5OjpEZW5pZWQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBj
YXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpOb3RSZXF1ZXN0ZWRZZXQ6IHsKLSAgICAgICAgYXV0
byogY2xpZW50ID0gbV9lZGl0b3ItPmNsaWVudCgpOworICAgICAgICBhdXRvKiBjbGllbnQgPSBl
ZGl0b3IoKS5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTkzNyw3ICs5MzUsNyBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4
dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3Rvcgog
ICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZWRpdG9yLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CisgICAgZWRpdG9yKCkuZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAgLy8gUmVzcGVjdCBTVkdzIHpvb21BbmRQYW49
ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNWRyBkb2N1bWVudHMuCiAgICAgLy8g
RklYTUU6IEhvdyB0byBoYW5kbGUgY29tcG91bmQgZG9jdW1lbnRzICsgem9vbUFuZFBhbj0iZGlz
YWJsZWQiPyBOZWVkcyBTVkcgV0cgY2xhcmlmaWNhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCAz
ZDQzYTk0YmVhOTU1NmM5OGRjNzQyM2FiN2VhZDlhOTJhNTJjNmZlLi4wOTMyYTgzY2I2NzRmNmY4
Yzk2MTFlZDlmNjk5OWQxN2I2MmQxNTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdEZyYW1lLmgiCiAjaW5jbHVkZSAiQWRqdXN0Vmlld1Np
emVPck5vdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVJZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiUGFnZUlkZW50aWZpZXIu
aCIKQEAgLTE2MywxNCArMTY0LDE0IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCogZG9jdW1lbnQo
KSBjb25zdDsKICAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsKIAotICAgIEVkaXRvciYgZWRp
dG9yKCkgeyByZXR1cm4gbV9lZGl0b3I7IH0KLSAgICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBk
b2N1bWVudCgpLT5lZGl0b3IoKTsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3Qg
eyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0KICAgICBFdmVudEhhbmRsZXImIGV2ZW50
SGFuZGxlcigpIHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgY29uc3QgRXZlbnRIYW5k
bGVyJiBldmVudEhhbmRsZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50SGFuZGxlcjsgfQogICAg
IEZyYW1lTG9hZGVyJiBsb2FkZXIoKSBjb25zdDsKICAgICBOYXZpZ2F0aW9uU2NoZWR1bGVyJiBu
YXZpZ2F0aW9uU2NoZWR1bGVyKCkgY29uc3Q7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlv
bigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9Ci0gICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNl
bGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgRnJhbWVTZWxlY3Rp
b24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CisgICAg
Y29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50
KCktPnNlbGVjdGlvbigpOyB9CiAgICAgRnJhbWVUcmVlJiB0cmVlKCkgY29uc3Q7CiAgICAgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hbmltYXRpb25Db250
cm9sbGVyOyB9CiAgICAgY29uc3QgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CkBAIC0zMzgsOCArMzM5LDYg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOwogCiAgICAgVW5pcXVlUmVm
PFNjcmlwdENvbnRyb2xsZXI+IG1fc2NyaXB0OwotICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRp
dG9yOwotICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiAgICAgVW5p
cXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKIAog
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCmluZGV4IGViMDJmOGVjNDRkOTNhZDdhNmNiOTUxZjY5NzA2ZmM0ZDZmODBlMGUuLjNlZWU0
MmZmMGNkMWU3M2NmMDFiMjk1ZTk4ZDI4NTRlOWJiN2NmZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9U
ZXh0SW5kaWNhdG9yLmNwcApAQCAtNjgsMjEgKzY4LDE2IEBAIFJlZjxUZXh0SW5kaWNhdG9yPiBU
ZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvckRhdGEmIGRhdGEpCiAKIFJl
ZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3Qg
UmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUg
bWFyZ2luKQogewotICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5mcmFtZSgpOworICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQgPSByYW5nZS5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCk7CiAKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0KLSAgICBW
aXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGRvY3VtZW50LT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9w
dGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOwogICAgIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5h
YmxlQXBwZWFyYW5jZVVwZGF0ZXMpOwogI2VuZGlmCi0gICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hh
bmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgU2ltcGxlUmFuZ2UgeyByYW5nZSB9IH0sIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOworICAgIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBz
ZWxlY3Rpb25DaGFuZ2UoZG9jdW1lbnQsIHsgU2ltcGxlUmFuZ2UgeyByYW5nZSB9IH0sIHRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbnMpOwogCiAgICAgVGV4dEluZGljYXRvckRhdGEgZGF0YTsKIApA
QCAtOTEsNyArODYsNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dEluZAogCiAgICAgYm9vbCBpbmRp
Y2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBvbGRTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRp
Y2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0
aW9uKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmRvY3VtZW50LT5mcmFt
ZSgpLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397362</attachid>
            <date>2020-04-23 11:00:20 -0700</date>
            <delta_ts>2020-04-23 19:53:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200423110019.patch</filename>
            <type>text/plain</type>
            <size>215259</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uOTI2NGVjM2FhZDVlNzhjZGQxNzkyNjhhMmY3Nzg2
OWMxZDUxOGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MyBAQAorMjAyMC0wNC0xNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9N
YXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURp
Y3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNh
bGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRB
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuREhU
TUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hv
dWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNt
YXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlESFRN
TEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRh
cmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjps
ZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENh
cmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZB
dHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2Vw
dGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92ZXJ3
cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdT
dGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9jdW1l
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZTo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6
Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91
c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxh
dGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4
dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmN1
cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRSdW5XaXRob3V0TmV3bGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRy
YW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6Cisg
ICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAtMDQtMTMgIE5vYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tncm91bmQgaW1hZ2VzIHNob3VsZCBm
aWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlzdGljCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNmNGYxZDM3NGE2NmJkYjI5Li40ZmZk
M2JhMjUyZDE1ZjY3MTZhNWZjMzEzODdhNTc3MjcxY2MxMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwg
bV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRhdGlvbihmcmFtZSkpCiAgICAgLCBt
X2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRv
TWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fZWRpdG9yKG1ha2VV
bmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVm
PEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3Vt
ZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0yNTcwLDYgKzI1NzIsNyBAQCB2b2lk
IERvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgICAgICBwYXJlbnREb2N1bWVu
dCgpLT5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMpOwogI2VuZGlmCiAKKwogICAgIGlm
IChtX3doZWVsRXZlbnRUYXJnZXRzICYmIG1fd2hlZWxFdmVudFRhcmdldHMtPnNpemUoKSAmJiBw
YXJlbnREb2N1bWVudCgpKQogICAgICAgICBwYXJlbnREb2N1bWVudCgpLT5kaWRSZW1vdmVFdmVu
dFRhcmdldE5vZGUoKnRoaXMpOwogCkBAIC0yNTkwLDYgKzI1OTMsOCBAQCB2b2lkIERvY3VtZW50
OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgICAgICBwYWdlKCktPnVwZGF0ZUlzUGxheWlu
Z01lZGlhKEhUTUxNZWRpYUVsZW1lbnRJbnZhbGlkSUQpOwogICAgIH0KIAorICAgIGVkaXRvcigp
LmNsZWFyKCk7CisgICAgc2VsZWN0aW9uKCkucHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CiAgICAg
ZGV0YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKaW5kZXggMzRmZDAwZTE1Yjg4ZDcyMmU5NWE5OWI1Y2NiZjBiMDA1YjdmODI3
ZS4uNzczN2ZkOTg0OGVhMDdkMzg2YTFiMWUxZjU0MjFiZGI3ODZjM2UwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKQEAgLTExOSw2ICsxMTksNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBv
b2w7CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3Mg
RWRpdGluZ0JlaGF2aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3Mg
RXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjcs
NiArMTI4LDcgQEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBG
b3JtQ29udHJvbGxlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFz
cyBGcmFtZVZpZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0Nv
bnRleHQ7CkBAIC0xNTc2LDYgKzE1NzgsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzVmlz
dWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSB7IG1faGFzVmlzdWFsbHlOb25FbXB0eUN1c3Rv
bUNvbnRlbnQgPSB0cnVlOyB9CiAgICAgYm9vbCBoYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQ7
IH0KIAorICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBjb25z
dCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgY29uc3Qg
RnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9
CisKIHByb3RlY3RlZDoKICAgICBlbnVtIENvbnN0cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6ZWQg
PSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVyID0gMSA8PCAxIH07CiAgICAgRG9jdW1lbnQoRnJh
bWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9IERlZmF1bHREb2N1bWVudENsYXNzLCB1bnNpZ25l
ZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpAQCAtMjExNiw2ICsyMTIzLDkgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+IG1fdGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI7CiAKICAgICBIYXNoTWFwPEVsZW1lbnQqLCBFbGVtZW50SWRl
bnRpZmllcj4gbV9pZGVudGlmaWVkRWxlbWVudHNNYXA7CisKKyAgICBVbmlxdWVSZWY8RWRpdG9y
PiBtX2VkaXRvcjsKKyAgICBVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwog
fTsKIAogRWxlbWVudCogZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwCmluZGV4IDNmNGZjYjNhYTY5ZmNiNWFjODExYjRlOGM3OTFhODE0N2IzNGZkNjkuLmE5
YWM5Mzg5NzI1NGU2Zjg0OTI1N2QwMGJiZjEyMGMwMzc5ZWYwNDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtODIs
OSArODIsOSBAQCBzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNv
bnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKgogICAgIHJldHVybiB0cnVlOwogfQog
Ci1BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZy
YW1lJiBmcmFtZSkKK0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV90aW1lcigqdGhpcywgJkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQor
ICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKIHsKIH0KIApAQCAtMTE1LDcgKzExNSw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcEFsdGVybmF0aXZlVGV4dFVJVGltZXIo
KQogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogICAgIGlmIChjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0CiAKIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUmFuZ2UmIG1pc3NwZWxs
aW5nUmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtl
cnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENo
ZWNraW5nRXhlbXB0aW9uKTsKKyAgICByZXR1cm4gIW1fZG9jdW1lbnQubWFya2VycygpLmhhc01h
cmtlcnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVt
cHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3coUmFuZ2Um
IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQpAQCAtMjAyLDcgKzIw
Miw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQogICAgIGlmIChtX3R5cGUgIT0gQWx0ZXJuYXRp
dmVUZXh0VHlwZUNvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBvc2l0
aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCk7CisgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKTsKIAogICAgIGlmIChtX3JhbmdlV2l0aEFsdGVybmF0aXZlLT5l
bmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKICAgICAgICAgaGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dEFjY2VwdGVkKSk7CkBAIC0yMjAsMTIgKzIyMCwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNp
YmxlUwogICAgIGlmIChBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGNsaWVudCA9IGFsdGVybmF0aXZl
VGV4dENsaWVudCgpKQogICAgICAgICBjbGllbnQtPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlv
bik7CiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKLSAgICBtX2ZyYW1lLmRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNl
bGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2Vy
ZWQpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9k
b2N1bWVudC5mcmFtZSgpKTsKKyAgICBtX2RvY3VtZW50LnVwZGF0ZUxheW91dCgpOworICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0
aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKLSAgICBh
dXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgYXV0byYg
bWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIG1hcmtlcnMucmVtb3ZlTWFya2Vy
cyhyYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50
TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAg
ICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7
CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNr
aW5nRXhlbXB0aW9uKTsKQEAgLTIzNiwxMiArMjM2LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZyA9IGZh
bHNlOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBl
Q29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkp
OwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9
IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJh
bmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2ZyYW1l
LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0
Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRl
eHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2Uu
Y29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIG51bGxwdHIpOworICAgICAg
ICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVw
bGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNl
bnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIG51bGxw
dHIpOwogICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBl
UmV2ZXJzaW9uOiB7CkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBTdHJpbmcg
cGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKm1fcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5n
PiBzdWdnZXN0aW9uczsKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQo
bV9vcmlnaW5hbFRleHQsIHBhcmFncmFwaFRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0Zv
cldvcmQobV9vcmlnaW5hbFRleHQsIHBhcmFncmFwaFRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCksIHN1Z2dlc3Rpb25zKTsKICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkK
IHsKICAgICBSYW5nZSogcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlLmdldCgpOwotICAgIGlmICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgbV9mcmFtZS5kb2N1
bWVudCgpICE9ICZyYW5nZVdpdGhBbHRlcm5hdGl2ZS0+b3duZXJEb2N1bWVudCgpKQorICAgIGlm
ICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgbV9kb2N1bWVudCAhPSByYW5nZVdpdGhBbHRlcm5h
dGl2ZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgY3Vy
cmVudFdvcmQgPSBwbGFpblRleHQoKnJhbmdlV2l0aEFsdGVybmF0aXZlKTsKQEAgLTM0MCw3ICsz
NDAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpCiAKIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0
CiB7Ci0gICAgYXV0byogdmlldyA9IG1fZnJhbWUudmlldygpOworICAgIGF1dG8qIHZpZXcgPSBt
X2RvY3VtZW50LmZyYW1lKCktPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGlu
Z0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7CkBAIC0zNDgs
NyArMzQ4LDcgQEAgRmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3
UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW4KIAogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxl
Y3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0
ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAogICAgIC8vIGNvbnRhaW5pbmcg
dGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5
IHJldmVydCB0aGUKICAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0
YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKQEAgLTM4Myw3
ICszODMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbgogdm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCog
Y29tbWFuZCkKIHsKICAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29t
bWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9m
cmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6
Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgIG1fZG9jdW1lbnQubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwogCiAgICAgbWFy
a1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQo
Y29tbWFuZCk7CiAgICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rp
b24gPSBTdHJpbmcoKTsKQEAgLTM5NSwxNSArMzk1LDE1IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0
aW9uCiB7CiAgICAgaWYgKCFjb21tYW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1l
bnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFy
dGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKLSAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1
bWVudCgpLT5tYXJrZXJzKCk7CisgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1
bWVudCwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFy
dGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5t
YXJrZXJzKCk7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogRWRpdG9yQ2xpZW50KiBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBh
Z2UoKSA/ICZtX2ZyYW1lLnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiBudWxscHRyOworICAgIHJl
dHVybiBtX2RvY3VtZW50LnBhZ2UoKSA/ICZtX2RvY3VtZW50LnBhZ2UoKS0+ZWRpdG9yQ2xpZW50
KCkgOiBudWxscHRyOwogfQogCiBUZXh0Q2hlY2tlckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6dGV4dENoZWNrZXIoKQpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2Nv
cnJlY3Rpb25BCiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3RlclBv
c2l0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0
ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0
aW9uLCBlbmRPZlNlbGVjdGlvbik7CiAgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVj
ZWRpbmdDaGFyYWN0ZXJSYW5nZSk7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkgfHwgIWRlcHJl
Y2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJpbmcubGVuZ3RoKCkgLSAxXSkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTQ3OSwxMiArNDc5LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rp
b25BCiAgICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxl
dGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlzCiAgICAgLy8gd2hpdGVzcGFjZS4g
U28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlz
IHBvc2l0aW9uLCB3ZQogICAgIC8vIHdvbid0IGF1dG9jb3JyZWN0IGl0IGFnYWluLgotICAgIG1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJS
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0
cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIG1fZG9jdW1lbnQubWFya2Vy
cygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRl
bGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2Nv
cnJlY3Rpb24pOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NN
YXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0
JiByZXN1bHQsIFJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJp
bmdUb0JlUmVwbGFjZWQpCiB7Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJD
b250cm9sbGVyID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7
CiAgICAgaWYgKG1hcmtlckNvbnRyb2xsZXIuaGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2
ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgewogICAgICAgICBpZiAocmVzdWx0LnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikKICAgICAgICAgICAgIHJlY29yZFNw
ZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlV2l0aEFsdGVybmF0
aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3VsdC5yZXBsYWNlbWVudCk7CkBAIC00OTksNyAr
NDk5LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09u
VGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFQKIAogICAgIFBvc2l0aW9uIGJlZ2lubmlu
Z09mUmFuZ2UgPSByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydFBvc2l0aW9uKCk7CiAgICAgUG9z
aXRpb24gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24gPSBiZWdpbm5pbmdPZlJhbmdlLnByZXZp
b3VzKCk7Ci0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmlu
Z09mUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKG1fZG9jdW1lbnQsIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJh
bmdlKTsKIAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1h
cmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOwogICAgIGZvciAoY29uc3QgYXV0
byogbWFya2VyIDogbWFya2VycykgewpAQCAtNTIwLDcgKzUyMCw3IEBAIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1l
bnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2ZXb3Jk
UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAg
ICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbm9k
ZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7CisgICAg
YXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIG5vZGUsIG1hcmtlci5z
dGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwogICAgIFN0cmluZyBjdXJy
ZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UpOwogICAgIGlmICghY3VycmVudFdvcmQubGVu
Z3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU1OCw3ICs1NTgsNyBAQCBib29sIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0
IERvY3VtZW50TWFya2VyJgogCiBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUucGFnZSgpID8gbV9mcmFtZS5wYWdlKCktPmFsdGVybmF0aXZlVGV4dENsaWVudCgpIDogbnVs
bHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpICYmIG1fZG9jdW1lbnQucGFnZSgp
ID8gbV9kb2N1bWVudC5wYWdlKCktPmFsdGVybmF0aXZlVGV4dENsaWVudCgpIDogbnVsbHB0cjsK
IH0KIAogU3RyaW5nIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtlckRlc2NyaXB0aW9u
Rm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChBbHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0aXZl
VGV4dFR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCkBAIC01OTUs
NyArNTk1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0
aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogCiAgICAgLy8gUmVjYWxjdWxhdGUg
cHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBzaW5jZSBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00sIHN1Y2ggdGhhdCB0aGUgb3JpZ2luYWwgcGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQuIFJhZGFyOiAx
MDMwNTMxNSBCdWd6aWxsYTogODk1MjYKICAgICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENv
bnRhaW5pbmdDb3JyZWN0aW9uID0gcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyh0cmVlU2NvcGVSb290KSwgcGFyYWdyYXBoT2Zmc2V0SW5UcmVl
U2NvcGUpOwotICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9u
ID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKTsKKyAgICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9
IG1ha2VCb3VuZGFyeVBvaW50KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSk7CiAgICAgaWYgKCF1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24p
CiAgICAgICAgIHJldHVybjsKICAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSByZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UoeyB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiwg
KnVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiB9LCBDaGFyYWN0ZXJSYW5n
ZShjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKSk7CkBA
IC02MTcsMTEgKzYxNywxMSBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2Vy
dERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlYwogICAgIGlmICh0cmln
Z2VyaW5nRXZlbnQpCiAgICAgICAgIHRhcmdldCA9IHRyaWdnZXJpbmdFdmVudC0+dGFyZ2V0KCk7
CiAgICAgZWxzZQotICAgICAgICB0YXJnZXQgPSBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVu
dChtX2ZyYW1lLmRvY3VtZW50KCkpOworICAgICAgICB0YXJnZXQgPSBldmVudFRhcmdldEVsZW1l
bnRGb3JEb2N1bWVudCgmbV9kb2N1bWVudCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3Rh
dGlvbigmbV9mcmFtZS53aW5kb3dQcm94eSgpLCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OworICAgIGF1dG8gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbigmbV9kb2N1
bWVudC5mcmFtZSgpLT53aW5kb3dQcm94eSgpLCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OwogICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodHJpZ2dlcmluZ0V2ZW50KTsKIAogICAg
IHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CkBAIC02NTMsNyArNjUzLDcgQEAgVmVjdG9y
PFN0cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVz
Rm9yTWFya2VyKGNvbnN0IEQKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlE
aWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlU3RyaW5nKQogewog
I2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQotICAgIGF1dG8mIGVkaXRvciA9IG1fZnJh
bWUuZWRpdG9yKCk7CisgICAgYXV0byYgZWRpdG9yID0gbV9kb2N1bWVudC5lZGl0b3IoKTsKICAg
ICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxl
Y3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5nLCBzZWxl
Y3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaAppbmRleCA5NDc3NGE3NmIyMDdlZTg3MTAxZDgzYTIzYmQ5M2NmZGY2ZGU2NDI5Li5lM2Rm
OWI1NzZmYzMwODhkYzI3N2IzZjc5MWNmODIzMWI5MDYzM2NiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtMzUsMTEgKzM1
LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5k
OworY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRDb21tYW5k
Q29tcG9zaXRpb247CiBjbGFzcyBFZGl0b3JDbGllbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZy
YW1lOwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIGNsYXNzIFZpc2li
bGVTZWxlY3Rpb247CkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKSBVTkxFU1NfRU5BQkxFRCgg
OiBtX2ZyYW1lKGZyYW1lKSB7IH0pCisgICAgZXhwbGljaXQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcihEb2N1bWVudCYgZG9jdW1lbnQpIFVOTEVTU19FTkFCTEVEKDogbV9kb2N1bWVudChkb2N1
bWVudCkgeyB9KQogICAgIH5BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKCkgVU5MRVNTX0VOQUJM
RUQoeyB9KQogCiAgICAgdm9pZCBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRp
dmVUZXh0VHlwZSkgVU5MRVNTX0VOQUJMRUQoeyB9KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZh
dGU6CiAgICAgQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKTsK
ICNlbmRpZgogCi0gICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7
CiB9OwogCiAjdW5kZWYgVU5MRVNTX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggMTRlM2M3ODZjNGZmMWRiN2I4NTYwMTUx
NDg3MzkwZGMzNzMxOTE1MC4uYTdkMWI5NjUyNDY0MjBkMTE4MjY2YzUzYTVmZDUxYmVjNzk0Njgx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKQEAgLTIyOCwxNyArMjI4LDE3IEBAIHZvaWQgRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6dW5h
cHBseSgpCiAgICAgLy8gdXAgdGhlIGNvbXBvc2l0aW9uIHdpbGwgbGVhdmUgYSBzdGFsZSwgaW52
YWxpZCBjb21wb3NpdGlvbiwgYXMgaW4gPHJkYXI6Ly9wcm9ibGVtLzY4MzE2Mzc+LgogICAgIC8v
IERlc2t0b3AgaGFuZGxlcyB0aGlzIGluIC1bV2ViSFRNTFZpZXcgX3VwZGF0ZVNlbGVjdGlvbkZv
cklucHV0TWFuYWdlcl0sIGJ1dCB0aGUgcGhvbmUKICAgICAvLyBnb2VzIGFub3RoZXIgcm91dGUu
Ci0gICAgZnJhbWUtPmVkaXRvcigpLmNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAgbV9kb2N1bWVu
dC0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgaWYgKCFmcmFt
ZS0+ZWRpdG9yKCkud2lsbFVuYXBwbHlFZGl0aW5nKCp0aGlzKSkKKyAgICBpZiAoIW1fZG9jdW1l
bnQtPmVkaXRvcigpLndpbGxVbmFwcGx5RWRpdGluZygqdGhpcykpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHNpemVfdCBzaXplID0gbV9jb21tYW5kcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IHNpemU7IGk7IC0taSkKICAgICAgICAgbV9jb21tYW5kc1tpIC0gMV0tPmRvVW5hcHBseSgp
OwogCi0gICAgZnJhbWUtPmVkaXRvcigpLnVuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIG1f
ZG9jdW1lbnQtPmVkaXRvcigpLnVuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogCiAgICAgaWYgKEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIG1fcmVwbGFjZWRU
ZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JVbmFwcGx5KG1fZG9jdW1lbnQt
PmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKTsKQEAgLTI1OCwxMyArMjU4LDEzIEBAIHZvaWQgRWRp
dENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSgpCiAgICAgLy8gaWYgb25lIGlzIG5lY2Vzc2Fy
eSAobGlrZSBmb3IgdGhlIGNyZWF0aW9uIG9mIFZpc2libGVQb3NpdGlvbnMpLgogICAgIG1fZG9j
dW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgaWYg
KCFmcmFtZS0+ZWRpdG9yKCkud2lsbFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKKyAgICBpZiAoIW1f
ZG9jdW1lbnQtPmVkaXRvcigpLndpbGxSZWFwcGx5RWRpdGluZygqdGhpcykpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGZvciAoYXV0byYgY29tbWFuZCA6IG1fY29tbWFuZHMpCiAgICAgICAgIGNv
bW1hbmQtPmRvUmVhcHBseSgpOwogCi0gICAgZnJhbWUtPmVkaXRvcigpLnJlYXBwbGllZEVkaXRp
bmcoKnRoaXMpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnJlYXBwbGllZEVkaXRpbmcoKnRo
aXMpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAg
ICAgICAgIG1fcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JS
ZWFwcGx5KG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKTsKQEAgLTMxOSw3ICsz
MTksNyBAQCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6fkNvbXBvc2l0ZUVkaXRDb21tYW5kKCkKIAog
Ym9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCgpCiB7Ci0gICAgcmV0
dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgdGFyZ2V0UmFuZ2Vz
Rm9yQmluZGluZ3MoKSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5
RWRpdGluZygqdGhpcywgdGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CiB9CiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5KCkKQEAgLTM3OCwxMyArMzc4LDEzIEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5KCkKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
ZGlkQXBwbHlDb21tYW5kKCkKIHsKLSAgICBmcmFtZSgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5n
KCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsK
IH0KIAogVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp0
YXJnZXRSYW5nZXMoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNFZGl0aW5nVGV4dEFyZWFPclRl
eHRJbnB1dCgpKTsKLSAgICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIGZpcnN0UmFuZ2UgPSBkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIWZpcnN0UmFu
Z2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTE0NjgsNyArMTQ2OCw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
c3RhcnRPZlBhcmFncmFwCiAgICAgLy8gRklYTUUgKDUwOTg5MzEpOiBXZSBzaG91bGQgYWRkIGEg
bmV3IGluc2VydCBhY3Rpb24gIldlYlZpZXdJbnNlcnRBY3Rpb25Nb3ZlZCIgYW5kIGNhbGwgc2hv
dWxkSW5zZXJ0RnJhZ21lbnQgaGVyZS4KIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKHN0YXJ0LCBlbmQsIERPV05TVFJFQU0pKTsKLSAgICBmcmFtZSgpLmVkaXRvcigp
LmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CisgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5n
U2VsZWN0aW9uKCkpOwogICAgIGRlbGV0ZVNlbGVjdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSk7CiAKICAgICBBU1NFUlQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JO
b2RlKCktPmlzQ29ubmVjdGVkKCkpOwpAQCAtMTUwNCw3ICsxNTA0LDcgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFy
dE9mUGFyYWdyYXAKICAgICAgICAgb3B0aW9ucy5hZGQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
Ok1hdGNoU3R5bGUpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92ZShmcmFnbWVudCksIG9wdGlvbnMp
KTsKIAotICAgIGZyYW1lKCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIo
ZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOwogCiAgICAgLy8gSWYgdGhlIHNl
bGVjdGlvbiBpcyBpbiBhbiBlbXB0eSBwYXJhZ3JhcGgsIHJlc3RvcmUgc3R5bGVzIGZyb20gdGhl
IG9sZCBlbXB0eSBwYXJhZ3JhcGggdG8gdGhlIG5ldyBlbXB0eSBwYXJhZ3JhcGguCiAgICAgYm9v
bCBzZWxlY3Rpb25Jc0VtcHR5UGFyYWdyYXBoID0gZW5kaW5nU2VsZWN0aW9uKCkuaXNDYXJldCgp
ICYmIGlzU3RhcnRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSkg
JiYgaXNFbmRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApp
bmRleCA2OGQxNTA2MTJiMGNlZTNjMzk3MTE2MzVjODViMTdkMmRlMzg4YWIyLi4xMTk3ZjEyZjY3
Y2JmOTdlZWI2NGYzNDBlYWZhYjg3MmFjYjg4YmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTMzNCw3ICszMzQsNyBAQCB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKCkKICAgICAv
LyBIb3dldmVyLCBpZiB0eXBpbmcgc3R5bGUgd2FzIHByZXZpb3VzbHkgc2V0IGZyb20gYW5vdGhl
ciB0ZXh0IG5vZGUgYXQgdGhlIHByZXZpb3VzCiAgICAgLy8gcG9zaXRpb24gKG5vdyBkZWxldGVk
KSwgd2UgbmVlZCB0byBjbGVhciB0aGF0IHN0eWxlIGFzIHdlbGwuCiAgICAgaWYgKG1fdXBzdHJl
YW1TdGFydC5kZXByZWNhdGVkTm9kZSgpID09IG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9k
ZSgpICYmIG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsK
LSAgICAgICAgZnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAg
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC03NDAsNyArNzQwLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgIAogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2
YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgYXV0byByYW5nZVRvQmVS
ZXBsYWNlZCA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVw
RXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJnZURlc3RpbmF0aW9u
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICgh
ZnJhbWUoKS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFu
Z2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2VkLnB0cigpKSkKKyAgICBpZiAoIWRvY3VtZW50KCku
ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigp
LCByYW5nZVRvQmVSZXBsYWNlZC5wdHIoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAv
LyBtb3ZlUGFyYWdyYXBocyB3aWxsIGluc2VydCBwbGFjZWhvbGRlcnMgaWYgaXQgcmVtb3ZlcyBi
bG9ja3MgdGhhdCB3b3VsZCByZXF1aXJlIHRoZWlyIHVzZSwgZG9uJ3QgbGV0IGJsb2NrCkBAIC04
MTQsNyArODE0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeXBp
bmdTdHlsZUFmdGVyRGVsZXRlKCkKICAgICAvLyBJbiB0aGlzIGNhc2UgaWYgd2Ugc3RhcnQgdHlw
aW5nLCB0aGUgbmV3IGNoYXJhY3RlcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc3R5bGUgYXMgdGhl
IGp1c3QgZGVsZXRlZCBvbmVzLAogICAgIC8vIGJ1dCwgaWYgd2UgY2hhbmdlIHRoZSBzZWxlY3Rp
b24sIGNvbWUgYmFjayBhbmQgc3RhcnQgdHlwaW5nIHRoYXQgc3R5bGUgc2hvdWxkIGJlIGxvc3Qu
ICBBbHNvIHNlZSAKICAgICAvLyBwcmVzZXJ2ZVR5cGluZ1N0eWxlKCkgYmVsb3cuCi0gICAgZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlLmNvcHlSZWYoKSk7
CisgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxl
LmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2xlYXJUcmFu
c2llbnRTdGF0ZSgpCkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmVwbGFjZSkgewogICAgICAgICBFbGVtZW50KiB0
ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChtX3NlbGVjdGlvblRvRGVsZXRl
LnN0YXJ0KCkpOwogICAgICAgICBpZiAodGV4dENvbnRyb2wgJiYgdGV4dENvbnRyb2wtPmZvY3Vz
ZWQoKSkKLSAgICAgICAgICAgIGZyYW1lKCkuZWRpdG9yKCkudGV4dFdpbGxCZURlbGV0ZWRJblRl
eHRGaWVsZCh0ZXh0Q29udHJvbCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnRl
eHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4dENvbnRyb2wpOwogICAgIH0KIAogICAgIC8v
IHNhdmUgdGhpcyB0byBsYXRlciBtYWtlIHRoZSBzZWxlY3Rpb24gd2l0aApAQCAtOTQwLDcgKzk0
MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgfQogCiAg
ICAgYm9vbCBzaG91bGRSZWJhbGFjZVdoaXRlU3BhY2UgPSB0cnVlOwotICAgIGlmICghZnJhbWUo
KS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdoaXRlU3BhY2VzSW5TZWN1cmVG
aWVsZCgpKSB7CisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxk
UmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkpIHsKICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYgKGlzPFRl
eHQ+KG5vZGUpKSB7CiAgICAgICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KCpub2RlKTsKQEAgLTk1NCw3ICs5NTQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoKQogICAgIGNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKTsKIAogICAg
IGlmICghb3JpZ2luYWxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBmcmFtZSgpLmVkaXRvcigp
LmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24obV9lbmRpbmdQb3NpdGlvbiwgb3JpZ2lu
YWxTdHJpbmcpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmRlbGV0ZWRBdXRvY29ycmVj
dGlvbkF0UG9zaXRpb24obV9lbmRpbmdQb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcpOwogCiAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9lbmRpbmdQb3NpdGlvbiwgYWZm
aW5pdHksIGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwogICAgIGNsZWFyVHJh
bnNpZW50U3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKaW5kZXgg
ZGYwOThjM2Y3ZGExN2M3ODk0ZTJjZjc4NTU1OWJjODc2Yzg4NDYxMi4uMWY1YjZhY2I5ZGIxODhl
YTY5MGY2MDA1NmM3NzM3NzAwZTJiOGY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVk
ZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1l
bnQuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCkBAIC0xMjcsMzMgKzEyNiwxOSBAQCBF
ZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBFZGl0QWN0aW9uIGVk
aXRpbmdBY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9lZGl0aW5n
QWN0aW9uKGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50LmZyYW1lKCkpOwot
ICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihtX2RvY3VtZW50LT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKG1fc3RhcnRpbmdT
ZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgc2V0U3RhcnRpbmdTZWxl
Y3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24pOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRpbmdT
ZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFuZDo6fkVkaXRDb21tYW5kKCkgPSBkZWZhdWx0Owog
Ci1GcmFtZSYgRWRpdENvbW1hbmQ6OmZyYW1lKCkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5m
cmFtZSgpKTsKLSAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQotY29uc3QgRnJh
bWUmIEVkaXRDb21tYW5kOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCku
ZnJhbWUoKSk7Ci0gICAgcmV0dXJuICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KIEVkaXRBY3Rp
b24gRWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2Vk
aXRpbmdBY3Rpb247CkBAIC0xNjgsMTEgKzE1Myw3IEBAIHN0YXRpYyBpbmxpbmUgRWRpdENvbW1h
bmRDb21wb3NpdGlvbiogY29tcG9zaXRpb25JZlBvc3NpYmxlKEVkaXRDb21tYW5kKiBjb21tYW5k
CiAKIGJvb2wgRWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSBjb25z
dAogewotICAgIGF1dG8qIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiBjb250YWluZXIgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCk7CisgICAg
YXV0byogY29udGFpbmVyID0gbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKS5jb250YWluZXJOb2RlKCk7CiAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMjE3LDcgKzE5OCw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyCiB7
CiAgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbih0eXBlLCB0ZXh0
LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIHBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgbV9kb2N1bWVudC0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiB9CiAKIHZvaWQgRWRpdENvbW1hbmQ6OnBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oCmluZGV4IGRlYmNmZjAyNDVlZGYwZGVlN2RmYmVmZWQ1ZjY0MDgxYjUx
MmEzNjcuLjJmNjdjZDczMzRjMmM4YmQ1NjkwZjExMzVjMTBkMDAwZGMzMDQzZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CiBjbGFzcyBEb2N1bWVudDsKIGNs
YXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZTsKIAogU3RyaW5nIGlucHV0VHlwZU5hbWVGb3JFZGl0
aW5nQWN0aW9uKEVkaXRBY3Rpb24pOwogCkBAIC02NCw4ICs2Myw2IEBAIHByb3RlY3RlZDoKICAg
ICBleHBsaWNpdCBFZGl0Q29tbWFuZChEb2N1bWVudCYsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9u
OjpVbnNwZWNpZmllZCk7CiAgICAgRWRpdENvbW1hbmQoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgY29uc3QgRnJhbWUm
IGZyYW1lKCkgY29uc3Q7Ci0gICAgRnJhbWUmIGZyYW1lKCk7CiAgICAgY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIERvY3VtZW50JiBk
b2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCmluZGV4IGZjMmVmYTk1MWZmNTBhNmZhZDM2OTQ4MzU5OTZiODU5Y2U1NzlmYjEu
LjliN2NmZDJhNmUzYjViM2NhMmNjZDA1OTUzNTU1YWEyMmIyNmZkMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nLmNwcApAQCAtODY5LDcgKzg2OSw3IEBAIGJvb2wgaXNFbXB0eVRhYmxlQ2Vs
bChjb25zdCBOb2RlKiBub2RlKQogCiBSZWY8SFRNTEVsZW1lbnQ+IGNyZWF0ZURlZmF1bHRQYXJh
Z3JhcGhFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBzd2l0Y2ggKGRvY3VtZW50
LmZyYW1lKCktPmVkaXRvcigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgeworICAgIHN3
aXRjaCAoZG9jdW1lbnQuZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CiAg
ICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc0RpdjoKICAgICAgICAgcmV0dXJuIEhU
TUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIGNhc2UgRWRpdG9yUGFyYWdyYXBo
U2VwYXJhdG9ySXNQOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4
IDBlYTg5OTA3NzljMjMzZTgxNDQ4N2M3MTBlYjMwZWU1OTIwYmQ1OGQuLjJjNzZhYWYxOWRjMjQ2
YWE0ZmRkZTE2NjFiYmVkMTI1NDMxNmE1MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAKQEAgLTE2ODYsNyArMTY4Niw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5n
ZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgICAg
IGdldFByb3BlcnRpZXNOb3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5bGUpIDogTXV0
YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAKICAgICByZWNvbmNpbGVUZXh0RGVjb3Jh
dGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxlLmdldCgpKTsKLSAgICBib29sIHNob3VsZFN0eWxl
V2l0aENTUyA9IGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhDU1Mo
KTsKKyAgICBib29sIHNob3VsZFN0eWxlV2l0aENTUyA9IGRvY3VtZW50LT5lZGl0b3IoKS5zaG91
bGRTdHlsZVdpdGhDU1MoKTsKICAgICBpZiAoIXNob3VsZFN0eWxlV2l0aENTUykKICAgICAgICAg
ZXh0cmFjdFRleHRTdHlsZXMoKmRvY3VtZW50LCAqbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxl
LnVzZUZpeGVkRm9udERlZmF1bHRTaXplKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
aW5kZXggMTE0MzkzMWI4YjI0YmY2M2MwN2E5YTA5ZTM3OWJmMTkzOGRjNThhMi4uOGJlMzhiZDAy
MDcwODAxMzAxMWFkZjRlZjhiMTkzNjBiNmRlNGNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcApAQCAtMTczLDggKzE3Myw4IEBAIHN0YXRpYyBTdHJpbmcgaW5wdXRFdmVudERhdGFGb3JF
ZGl0aW5nU3R5bGVBbmRBY3Rpb24oRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjCiBjbGFzcyBD
bGVhclRleHRDb21tYW5kIDogcHVibGljIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQgewogcHVibGlj
OgogICAgIENsZWFyVGV4dENvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50KTsKLSAgICBzdGF0aWMg
dm9pZCBDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZyYW1lKTsKLSAgICAKKyAg
ICBzdGF0aWMgdm9pZCBDcmVhdGVBbmRBcHBseShEb2N1bWVudCYpOworCiBwcml2YXRlOgogICAg
IEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogfTsKQEAgLTE4OSwx
NyArMTg5LDE3IEBAIEVkaXRBY3Rpb24gQ2xlYXJUZXh0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigp
IGNvbnN0CiAgICAgcmV0dXJuIEVkaXRBY3Rpb246OkRlbGV0ZTsKIH0KIAotdm9pZCBDbGVhclRl
eHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZyYW1lKQordm9p
ZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERvbid0IGxl
YXZlIGFyb3VuZCBzdGFsZSBjb21wb3NpdGlvbiBzdGF0ZS4KLSAgICBmcmFtZS0+ZWRpdG9yKCku
Y2xlYXIoKTsKKyAgICBkb2N1bWVudC5lZGl0b3IoKS5jbGVhcigpOwogICAgIAotICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsKLSAgICBhdXRvIGNs
ZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZCgqZnJhbWUtPmRvY3Vt
ZW50KCkpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGRvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGRvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdEFsbCgpOworICAgIGF1dG8gY2xlYXJDb21tYW5kID0gYWRvcHRSZWYoKm5ldyBDbGVhclRl
eHRDb21tYW5kKGRvY3VtZW50KSk7CiAgICAgY2xlYXJDb21tYW5kLT5zZXRTdGFydGluZ1NlbGVj
dGlvbihvbGRTZWxlY3Rpb24pOwogICAgIGNsZWFyQ29tbWFuZC0+YXBwbHkoKTsKIH0KQEAgLTIw
NywyNCArMjA3LDI0IEBAIHZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoY29u
c3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogCi1UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYgZnJhbWUsIE9wdGlvbmFsPFZpc2libGVTZWxl
Y3Rpb24+IHRlbXBvcmFyeVNlbGVjdGlvbiwgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9w
dGlvbj4gb3B0aW9ucykKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitUZW1wb3JhcnlTZWxlY3Rpb25D
aGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlv
bmFsPFZpc2libGVTZWxlY3Rpb24+IHRlbXBvcmFyeVNlbGVjdGlvbiwgT3B0aW9uU2V0PFRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucykKKyAgICA6IG1fZG9jdW1lbnQoUmVmUHRyKCZk
b2N1bWVudCkpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKLSAgICAsIG1fd2FzSWdub3JpbmdT
ZWxlY3Rpb25DaGFuZ2VzKGZyYW1lLmVkaXRvcigpLmlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSkK
KyAgICAsIG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzKGRvY3VtZW50LmVkaXRvcigpLmln
bm9yZVNlbGVjdGlvbkNoYW5nZXMoKSkKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICwg
bV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGZyYW1lLnNlbGVjdGlvbigpLmlzVXBkYXRl
QXBwZWFyYW5jZUVuYWJsZWQoKSkKKyAgICAsIG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxl
ZChkb2N1bWVudC5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkpCiAjZW5k
aWYKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChvcHRpb25zICYgVGVtcG9y
YXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CisgICAgICAg
IGRvY3VtZW50LnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOwog
I2VuZGlmCiAKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyh0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuZWRpdG9yKCkuc2V0SWdub3Jl
U2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKIAogICAgIGlmICh0ZW1wb3JhcnlTZWxlY3Rpb24pIHsK
LSAgICAgICAgbV9zZWxlY3Rpb25Ub1Jlc3RvcmUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICAgICAgbV9zZWxlY3Rpb25Ub1Jlc3RvcmUgPSBkb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICAgICAgc2V0U2VsZWN0aW9uKHRlbXBvcmFyeVNlbGVjdGlvbi52
YWx1ZSgpKTsKICAgICB9CiB9CkBAIC0yMzYsMTIgKzIzNiwxMiBAQCBUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoKQogCiAgICAgaWYgKG1fb3B0aW9u
cyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykgewog
ICAgICAgICBhdXRvIHJldmVhbFNlbGVjdGlvbiA9IG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVj
dGlvbk9wdGlvbjo6UmV2ZWFsU2VsZWN0aW9uID8gRWRpdG9yOjpSZXZlYWxTZWxlY3Rpb246Olll
cyA6IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpObzsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9y
KCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdl
cywgcmV2ZWFsU2VsZWN0aW9uKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyhtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcywgcmV2ZWFs
U2VsZWN0aW9uKTsKICAgICB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICht
X29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VVcGRh
dGVzKQotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5h
YmxlZChtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQpOworICAgICAgICBtX2RvY3VtZW50
LT5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChtX2FwcGVhcmFuY2VVcGRh
dGVzV2VyZUVuYWJsZWQpOwogI2VuZGlmCiB9CiAKQEAgLTI1MCwxNCArMjUwLDE0IEBAIHZvaWQg
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQogICAgIGF1dG8gb3B0aW9ucyA9IEZyYW1lU2VsZWN0aW9uOjpkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpOwogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb246OkRvTm90U2V0Rm9jdXMpCiAgICAgICAgIG9wdGlvbnMuYWRkKEZyYW1l
U2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKKyAgICBtX2RvY3VtZW50LT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKIH0KIAogLy8gV2hlbiBhbiBldmVu
dCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0IGNvbnRy
b2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0aW9uIGZvciB0
aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVjdGlv
bkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogewotICAgIGF1dG8gc2VsZWN0aW9uID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0
dXJuIHNlbGVjdGlvbjsKICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgdGV4dCBjb250cm9sLCBh
bmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIG91dHNpZGUgb2YgaXRzIHNoYWRvdyB0cmVlLApA
QCAtMjc2LDEyICsyNzYsMTIgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVjdGlvbkZv
ckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogLy8gRnVuY3Rpb24gY29uc2lkZXJzIE1hYyBlZGl0aW5n
IGJlaGF2aW9yIGEgZmFsbGJhY2sgd2hlbiBQYWdlIG9yIFNldHRpbmdzIGlzIG5vdCBhdmFpbGFi
bGUuCiBFZGl0aW5nQmVoYXZpb3IgRWRpdG9yOjpiZWhhdmlvcigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIEVkaXRpbmdCZWhhdmlvcihtX2ZyYW1lLnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlw
ZSgpKTsKKyAgICByZXR1cm4gRWRpdGluZ0JlaGF2aW9yKG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5l
ZGl0aW5nQmVoYXZpb3JUeXBlKCkpOwogfQogCiBFZGl0b3JDbGllbnQqIEVkaXRvcjo6Y2xpZW50
KCkgY29uc3QKIHsKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgIGlm
IChQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgIHJldHVybiAmcGFnZS0+
ZWRpdG9yQ2xpZW50KCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0zNDQsMTIgKzM0NCwx
MiBAQCBib29sIEVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KFRleHRFdmVudCYgZXZlbnQpCiAKIGJv
b2wgRWRpdG9yOjpjYW5FZGl0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQog
CiBib29sIEVkaXRvcjo6Y2FuRWRpdFJpY2hseSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKKyAg
ICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpOwogfQogCiBlbnVtIGNsYXNzIENsaXBib2FyZEV2ZW50S2luZCB7CkBAIC00
NDIsNyArNDQyLDcgQEAgc3RhdGljIGJvb2wgZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChSZWZQdHI8
RWxlbWVudD4mJiB0YXJnZXQsIENsaXBib2FyZEV2ZW50S2luZAogCiBib29sIEVkaXRvcjo6Y2Fu
REhUTUxDdXQoKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rp
b24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpCZWZvcmVDdXQpOwpAQCAtNDUwLDcgKzQ1MCw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1dCgpCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTENvcHko
KQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29y
ZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJ
blBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhZGlz
cGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBi
b2FyZEV2ZW50S2luZDo6QmVmb3JlQ29weSk7CiB9CkBAIC00ODQsMTMgKzQ4NCwxMyBAQCBib29s
IEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlRWxlbWVudEZyb21JbWFn
ZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkg
JiYgIXNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQogCiBib29sIEVkaXRvcjo6Y2Fu
UGFzdGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNo
b3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSkKKyAgICBpZiAobV9kb2N1bWVudC5m
cmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZyb21F
ZGl0aW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjYW5FZGl0KCk7
CkBAIC00OTgsNyArNDk4LDcgQEAgYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIAogYm9v
bCBFZGl0b3I6OmNhbkRlbGV0ZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHNlbGVjdGlvbi5y
b290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCBib29sIEVkaXRv
cjo6c2hvdWxkU21hcnREZWxldGUoKQogewogICAgIGlmIChiZWhhdmlvcigpLnNob3VsZEFsd2F5
c1NtYXJ0RGVsZXRlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX2ZyYW1l
LnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5OworICAgIHJldHVy
biBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5
OwogfQogCiBib29sIEVkaXRvcjo6c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTU0Nyw3
ICs1NDcsNyBAQCBib29sIEVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZwogICAgIGlmICghY2FuRWRpdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpIHsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAg
ICAgICAgaWYgKGlzVHlwaW5nQWN0aW9uKSB7CiAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKGRvY3VtZW50KCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCkgPyBUeXBp
bmdDb21tYW5kOjpTbWFydERlbGV0ZSA6IDAsIGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJl
dmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwpAQCAtNTg3LDcgKzU4Nyw3IEBA
IGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAKIHZvaWQgRWRpdG9yOjpkZWxldGVTZWxlY3Rpb25X
aXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc21hcnREZWxldGUsIHRydWUs
IGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CkBAIC01OTUsNyAr
NTk1LDcgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShib29s
IHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmcKIAogdm9pZCBFZGl0b3I6OmNsZWFyVGV4
dCgpCiB7Ci0gICAgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoJm1fZnJhbWUpOwor
ICAgIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KG1fZG9jdW1lbnQpOwogfQogCiB2
b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcmIHBhc3RpbmdUZXh0LCBi
b29sIHNtYXJ0UmVwbGFjZSkKQEAgLTY2MSw3ICs2NjEsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxk
SW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFJhbmdlKiByZXBsYWNp
bmdETwogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVu
dEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZWN0UmVwbGFjZW1lbnQs
IFNtYXJ0UmVwbGFjZSBzbWFydFJlcGxhY2UsIE1hdGNoU3R5bGUgbWF0Y2hTdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3Rl
SGFuZGxpbmcpCiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlz
Tm9uZSgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC02ODksMTkgKzY4OSwxOSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbAogICAgIGlm
IChtX2ltYWdlRWxlbWVudHNUb0xvYWRCZWZvcmVSZXZlYWxpbmdTZWxlY3Rpb24uaXNFbXB0eSgp
KQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIAotICAg
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0
aW9uLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rpb24gPT0gRWRp
dEFjdGlvbjo6UGFzdGUpIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb21tYW5kLT52aXNpYmxlU2VsZWN0
aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOwotICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBB
WFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwg
dGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGNvbW1h
bmQtPmNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQu
cmVwbGFjZWRSYW5nZSgpKTsKICAgICB9CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246Okluc2VydCkg
ewogICAgICAgICBTdHJpbmcgdGV4dCA9IGNvbW1hbmQtPmRvY3VtZW50RnJhZ21lbnRQbGFpblRl
eHQoKTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRp
b24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVJbnNl
cnQsIHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICByZXBs
YWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4dCwgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGNvbW1hbmQtPmNvbXBvc2l0aW9u
KCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgp
KTsKICAgICB9CiAKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQog
CiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIG1f
ZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiBib29sIEVkaXRvcjo6
c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtNzQ0LDcgKzc0NCw3IEBA
IGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIGJv
b2wgRWRpdG9yOjp0cnlESFRNTENvcHkoKQogeyAgIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVu
dFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDb3B5KTsKQEAgLTc1
Miw3ICs3NTIsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIAogYm9vbCBFZGl0b3I6
OnRyeURIVE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJv
bVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkN1dCk7CkBAIC03NjAsNyArNzYwLDcg
QEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OnNob3VsZEluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlv
biBhY3Rpb24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCku
c2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFt
ZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rp
b24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQs
IHJhbmdlLCBhY3Rpb24pOwpAQCAtNzgyLDE3ICs3ODIsMTcgQEAgdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rp
b24pCiAKIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogc3RhcnRO
b2RlOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBz
dGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0
cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUo
KTsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAg
c3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRv
d25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xv
c2luZ0Jsb2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxz
ZQotICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAg
c3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0
Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODEyLDEyICs4MTIsMTIgQEAgYm9vbCBF
ZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVj
dGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2lu
Z0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KSwgdWxUYWcpKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2Ug
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0
Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5n
RWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxU
YWcpOworICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsK
KyAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7CisgICAgICAgIGF1
dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYg
ZW5kTm9kZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVl
VHJpU3RhdGU7CiAgICAgfQpAQCAtODI3LDEyICs4MjcsMTIgQEAgVHJpU3RhdGUgRWRpdG9yOjpz
ZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNl
bGVjdGlvbk9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWco
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3Np
bmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCksIG9sVGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNl
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2lu
Z0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9s
VGFnKTsKKyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7
CisgICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOworICAgICAgICBh
dXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYm
IGVuZE5vZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1
ZVRyaVN0YXRlOwogICAgIH0KQEAgLTg3Miw3ICs4NzIsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVj
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAt
ODgyLDcgKzg4Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
OjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtODky
LDcgKzg5Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsT3JkZXJlZCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsVW5vcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1l
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxD
b21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgmZG9jdW1lbnQoKSk7
CkBAIC05MDIsNyArOTAyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxVbm9yZGVyZWQoKQogCiB2b2lkIEVkaXRvcjo6ZGVjcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWwoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERlY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRv
Y3VtZW50KCkpOwpAQCAtOTMyLDcgKzkzMiw3IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50
VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAKIEVs
ZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJv
cGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTk0NiwxMyArOTQ2
LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5
bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICBpZiAoIXN0eWxlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAo
c2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRp
dGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBp
bnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbigqc3R5bGUsIGVkaXRpbmdBY3Rp
b24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCpl
bGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtOTY5LDcgKzk2OSw4IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0
aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgY2xpZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKKyAgICBpZiAoY2xp
ZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CiAgICAgaWYgKGVsZW1l
bnQpCiAgICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwg
aW5wdXRFdmVudERhdGEpOwogfQpAQCAtOTg0LDEzICs5ODUsMTMgQEAgdm9pZCBFZGl0b3I6OmFw
cGx5UGFyYWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW8KICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNl
bGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5
cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNp
YmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5n
IGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0
aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRp
bmdTdHlsZUFuZEFjdGlvbihzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1l
bnQ+IGVsZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVt
ZW50ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUs
IGlucHV0RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA1LDcgKzEwMDYsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1w
dHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNs
aWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8
ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5
U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAxNiw3ICsxMDE3LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxl
LCBFZGl0QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRo
aXMgaXMgd3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMg
ZW1wdHkuCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIG1fZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQo
KSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVk
VGV4dERlY29yYXRpb25zKCkucHRyKCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5U3R5bGUoV1RG
TW92ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24sIGNvbG9yRmlsdGVyTW9kZSk7CkBAIC0xMDI3LDI1
ICsxMDI4LDI1IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24o
U3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlCiAgICAgaWYgKCFzdHlsZSB8fCBz
dHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUs
IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYg
KGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQogICAgICAgICBhcHBseVBh
cmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNl
bGVjdGlvblN0YXJ0SGFzU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHZhbHVlKSBjb25zdAogewotICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdT
dHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQorICAgIGlmIChh
dXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpKQogICAgICAgICByZXR1cm4gZWRpdGluZ1N0eWxlLT5oYXNTdHls
ZShwcm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBUcmlTdGF0ZSBF
ZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUo
cHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQs
IHZhbHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNl
bGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxl
Y3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCiAgICAgICAgIHByb3BlcnR5SUQgPT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVj
dGlvblN0eWxlLT5zdHlsZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMTM2LDcg
KzExMzcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1h
bmQmIGNvbW1hbmQpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9u
ZFRvQXBwbGllZEVkaXRpbmcoJmNvbW1hbmQpOwogCiAgICAgICAgIGlmICghY29tbWFuZC5wcmVz
ZXJ2ZXNUeXBpbmdTdHlsZSgpKQotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVh
clR5cGluZ1N0eWxlKCk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFy
VHlwaW5nU3R5bGUoKTsKIAogICAgICAgICAvLyBDb21tYW5kIHdpbGwgYmUgZXF1YWwgdG8gbGFz
dCBlZGl0IGNvbW1hbmQgb25seSBpbiB0aGUgY2FzZSBvZiB0eXBpbmcKICAgICAgICAgaWYgKG1f
bGFzdEVkaXRDb21tYW5kLmdldCgpID09ICZjb21tYW5kKQpAQCAtMTIwMCwxMSArMTIwMSwxMSBA
QCB2b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uJiBj
b21wb3NpdGlvbikKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMobmV3U2VsZWN0aW9uKTsK
IH0KIAotRWRpdG9yOjpFZGl0b3IoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkK
K0VkaXRvcjo6RWRpdG9yKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiAgICAgLCBtX2tpbGxSaW5nKG1ha2VVbmlxdWU8UEFMOjpLaWxsUmluZz4oKSkKLSAg
ICAsIG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihmcmFtZSkpCi0gICAg
LCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyPihmcmFtZSkpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxs
Q2hlY2tlcj4oZG9jdW1lbnQpKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1h
a2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZG9jdW1lbnQpKQogICAgICwgbV9l
ZGl0b3JVSVVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmly
ZWQpCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICAsIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIo
KnRoaXMsICZFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKQpAQCAtMTIy
MCw3ICsxMjIxLDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKICAgICBpZiAobV9jb21wb3NpdGlv
bk5vZGUpIHsKICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBudWxscHRyOwogICAgICAgICBp
ZiAoRWRpdG9yQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGNs
aWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOworICAgICAgICAgICAgY2xpZW50
LT5kaXNjYXJkZWRDb21wb3NpdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIH0KICAgICBt
X2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9z
aXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0xMjI5LDYgKzEyMzAsNyBAQCB2b2lkIEVkaXRv
cjo6Y2xlYXIoKQogICAgIG1fbWFyayA9IHsgfTsKICAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRv
clVJVXBkYXRlID0geyB9OwogICAgIG1fZWRpdG9yVUlVcGRhdGVUaW1lci5zdG9wKCk7CisgICAg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigp
OwogCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0
b3AoKTsKQEAgLTEyMzgsMTIgKzEyNDAsMTIgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9v
bCBFZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmlu
Z0V2ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQogewotICAgIHJldHVybiBtX2Zy
YW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdF
dmVudCwgaW5wdXRUeXBlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0
VHlwZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxl
cigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRp
b24pOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRs
ZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOwogfQog
CiBib29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBF
dmVudCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAtMTMwMywxMCArMTMwNSw4IEBAIGJvb2wgRWRpdG9y
OjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBi
b29sIHNlbGVjdEluCiAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgY29kZSBzaG91bGQgY29uZGl0
aW9uYWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlvbiBvbiB3aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKCkgYml0CiAgICAgICAgICAgICAvLyBpcyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1
c2VkIGZyYW1lLgogICAgICAgICAgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRS
ZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSkgewotICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZWRpdGVkRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFn
ZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5yZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzE5LDEwICsxMzE5LDEwIEBA
IGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24g
Y2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgYm9vbCBhbGlnblRvRWRnZSA9IGlzRW5kT2ZFZGl0
YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNhcmV0KTsKICAgICBib29sIGF1dG9jb3JyZWN0aW9u
SXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dExpbmVCcmVhayhkb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0Nv
bW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CkBAIC0xMzM5LDEwICsx
MzM5LDEwIEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlm
ICghY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAK
LSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBp
ZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBj
YXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7
CiAgICAgYm9vbCBhbGlnblRvRWRnZSA9IGlzRW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVDb250
ZW50KGNhcmV0KTsKICAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihk
b2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFp
bkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CkBAIC0xNDA2LDcgKzE0MDYsNyBAQCB2b2lk
IEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQog
ICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyh0cnVlKTsKICAg
ICB9CiAKLSAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJv
bChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKQogICAgICAgICBQ
YXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRleHQoc2VsZWN0
ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCkgPyBQYXN0ZWJv
YXJkOjpDYW5TbWFydFJlcGxhY2UgOiBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2UpOwog
ICAgIGVsc2UgewogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBudWxs
cHRyOwpAQCAtMTQyNSw3ICsxNDI1LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHko
RWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICAgICAgICAgIHdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxz
ZQogICAgICAgICAgICAgLy8gRklYTUU6IERlbGV0ZSBhZnRlciA8aHR0cDovL3dlYmtpdC5vcmcv
Yi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRl
KCksIG1fZnJhbWUsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOworICAgICAg
ICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9u
KCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksICptX2RvY3VtZW50LmZyYW1lKCks
IEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOwogI2VuZGlmCiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNDM0LDEwICsxNDM0LDEwIEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JD
b3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgaWYgKGFjdGlvbiA9PSBDdXRB
Y3Rpb24pIHsKICAgICAgICAgU3RyaW5nIHRleHQ7CiAgICAgICAgIGlmIChBWE9iamVjdENhY2hl
OjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICAgICAgdGV4dCA9IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogICAgICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoY2FuU21h
cnRDb3B5T3JEZWxldGUoKSwgRWRpdEFjdGlvbjo6Q3V0KTsKICAgICAgICAgaWYgKEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICBwb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgICAgICAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1
dCh0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICB9CiB9CiAK
QEAgLTE0NTQsNyArMTQ1NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZShQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkKQogICAgICAgICByZXR1cm47CiAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0
ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3Nv
ciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkp
OwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgm
cGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQgfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7CkBAIC0x
NDc5LDcgKzE0NzksNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbigpCiAgICAgdXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIFJlc291cmNl
Q2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgp
LmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgIGF1dG8gcGFzdGVib2FyZCA9IFBhc3RlYm9h
cmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAg
ICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkLmdldCgpLCB7IFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCwgUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uIH0pOwogICAgIGVsc2UK
ICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKTsKQEAg
LTE2MTcsNyArMTYxNyw3IEBAIHZvaWQgRWRpdG9yOjpyZW5kZXJMYXllckRpZFNjcm9sbChjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKG1faW1hZ2VFbGVtZW50c1RvTG9hZEJlZm9y
ZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCkpOworICAgIGF1dG8gc3RhcnRDb250YWluZXIg
PSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5j
b250YWluZXJOb2RlKCkpOwogICAgIGlmICghc3RhcnRDb250YWluZXIpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMTg1MSw4ICsxODUxLDggQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZVVuZGVybGluZSgp
CiB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoaW5TYW1lUGFy
YWdyYXBoKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSAmJiAKLSAgICAgICAg
YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpID09IGRpcmVjdGlvbikKKyAg
ICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZUVuZCgpKQorICAgICAgICAmJiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0
KCkgPT0gZGlyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAgICAgCkBAIC0x
ODgyLDcgKzE4ODIsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJl
Y3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgYXV0byByZXN1bHQgPSBXcml0
aW5nRGlyZWN0aW9uOjpMZWZ0VG9SaWdodDsKIAotICAgIFBvc2l0aW9uIHBvcyA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICBQb3NpdGlvbiBwb3MgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgTm9kZSogbm9kZSA9IHBvcy5kZXBy
ZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTE5MTcsNyArMTkxNyw3IEBAIHZvaWQgRWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbigpCiAgICAg
Ly8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4MT4KICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZh
bGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwot
ICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKKyAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7CiB9
CiAKIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oKQpAQCAtMTk1MiwyOCArMTk1Miwy
OCBAQCB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCkK
IAogY2xhc3MgU2V0Q29tcG9zaXRpb25TY29wZSB7CiBwdWJsaWM6Ci0gICAgU2V0Q29tcG9zaXRp
b25TY29wZShGcmFtZSYgZnJhbWUpCi0gICAgICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAgICAg
LCBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3IoZnJhbWUpCisgICAgU2V0Q29tcG9zaXRpb25TY29w
ZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3Vt
ZW50KSkKKyAgICAgICAgLCBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3IoKmRvY3VtZW50LmZyYW1l
KCkpCiAgICAgewotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKHRydWUpOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKHRydWUpOwogICAgIH0KIAogICAgIH5TZXRDb21wb3NpdGlvblNjb3BlKCkK
ICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5n
ZXMoZmFsc2UpOwotICAgICAgICBpZiAoYXV0byogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS0+ZWRp
dG9yKCkuY2xpZW50KCkpCisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNl
bGVjdGlvbkNoYW5nZXMoZmFsc2UpOworICAgICAgICBpZiAoYXV0byogZWRpdG9yQ2xpZW50ID0g
bV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgICAgICBlZGl0b3JDbGllbnQt
PmRpZFVwZGF0ZUNvbXBvc2l0aW9uKCk7CiAgICAgfQogCi0gICAgUmVmPEZyYW1lPiBtX2ZyYW1l
OworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBVc2VyVHlwaW5nR2VzdHVy
ZUluZGljYXRvciBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3I7CiB9OwogCiB2b2lkIEVkaXRvcjo6
c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9k
ZSkKIHsKICAgICBBU1NFUlQobW9kZSA9PSBDb25maXJtQ29tcG9zaXRpb24gfHwgbW9kZSA9PSBD
YW5jZWxDb21wb3NpdGlvbik7Ci0gICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlv
blNjb3BlKG1fZnJhbWUpOworICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25T
Y29wZShtX2RvY3VtZW50KTsKIAogICAgIGlmIChtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKQog
ICAgICAgICBBU1NFUlQodGV4dCA9PSBlbXB0eVN0cmluZygpKTsKQEAgLTE5ODQsNyArMTk4NCw3
IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENv
bXBvc2l0aW9uTW9kZSBtb2RlKQogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNs
ZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKIAotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBbHdheXMgZGVs
ZXRlIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGJlZm9yZSBpbnNlcnRpbmcgdGhlIGZpbmFsaXpl
ZCBjb21wb3NpdGlvbiB0ZXh0IGlmIHdlJ3JlIGNvbmZpcm1pbmcgb3VyIGNvbXBvc2l0aW9uLgpA
QCAtMjAwMCwxMyArMjAwMCwxMyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3Qg
U3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKIAogICAgIGlmIChtb2RlID09
IENhbmNlbENvbXBvc2l0aW9uKSB7CiAgICAgICAgIC8vIEFuIG9wZW4gdHlwaW5nIGNvbW1hbmQg
dGhhdCBkaXNhZ3JlZXMgYWJvdXQgY3VycmVudCBzZWxlY3Rpb24gd291bGQgY2F1c2UgaXNzdWVz
IHdpdGggdHlwaW5nIGxhdGVyIG9uLgotICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGlu
ZygmbV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1l
bnQpOwogICAgIH0KIH0KIAogdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywg
Y29uc3QgVmVjdG9yPENvbXBvc2l0aW9uSGlnaGxpZ2h0PiYgaGlnaGxpZ2h0cywgdW5zaWduZWQg
c2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCkKIHsKLSAgICBTZXRDb21wb3Np
dGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRp
b25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9jdW1lbnQpOwogCiAgICAgLy8gVXBkYXRl
cyBzdHlsZXMgYmVmb3JlIHNldHRpbmcgc2VsZWN0aW9uIGZvciBjb21wb3NpdGlvbiB0byBwcmV2
ZW50CiAgICAgLy8gaW5zZXJ0aW5nIHRoZSBwcmV2aW91cyBjb21wb3NpdGlvbiB0ZXh0IGludG8g
dGV4dCBub2RlcyBvZGRseS4KQEAgLTIwMTUsNyArMjAxNSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRD
b21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluCiAKICAgICBzZWxlY3RDb21wb3NpdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25l
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBvcmlnaW5hbFRleHQgPSBzZWxlY3Rl
ZFRleHQoKTsKQEAgLTIwMjMsMTAgKzIwMjMsMTAgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4K
ICAgICBpZiAoaXNTdGFydGluZ1RvUmVjb21wb3NlRXhpc3RpbmdSYW5nZSkgewogICAgICAgICAv
LyBXZSBwYXNzIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkZpbmFsIGhlcmUgdG8gaW5k
aWNhdGUgdGhhdCB3ZSBhcmUgcmVtb3ZpbmcgY29tcG9zaXRpb24gdGV4dCB0aGF0IGhhcyBiZWVu
IGZpbmFsaXplZC4KICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGRvY3Vt
ZW50KCksIDAsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkZpbmFsKTsKLSAgICAgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAg
ICBpZiAoY3VycmVudFNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgICAgIC8vIElmIGRl
bGV0aW9uIHdhcyBwcmV2ZW50ZWQsIHRoZW4gd2UgbmVlZCB0byBjb2xsYXBzZSB0aGUgc2VsZWN0
aW9uIHRvIHRoZSBlbmQgc28gdGhhdCB0aGUgb3JpZ2luYWwgdGV4dCB3aWxsIG5vdCBiZSByZWNv
bXBvc2VkLgotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBj
dXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJyZW50U2VsZWN0aW9uLmVuZCgpIH0pOworICAgICAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBjdXJyZW50U2VsZWN0
aW9uLmVuZCgpLCBjdXJyZW50U2VsZWN0aW9uLmVuZCgpIH0pOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0yMDgyLDggKzIwODIsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgICAgICBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50KCksIHRleHQsIFR5cGluZ0NvbW1hbmQ6
OlNlbGVjdEluc2VydGVkVGV4dCB8IFR5cGluZ0NvbW1hbmQ6OlByZXZlbnRTcGVsbENoZWNraW5n
LCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25QZW5kaW5nKTsKIAogICAgICAgICAvLyBG
aW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBjb21wb3NpdGlvbiBub3cuCi0gICAgICAgIFBvc2l0
aW9uIGJhc2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2UoKS5kb3duc3Ry
ZWFtKCk7Ci0gICAgICAgIFBvc2l0aW9uIGV4dGVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZXh0ZW50KCk7CisgICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2UoKS5kb3duc3RyZWFtKCk7CisgICAgICAgIFBvc2l0
aW9uIGV4dGVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZXh0ZW50KCk7
CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAg
ICB1bnNpZ25lZCBiYXNlT2Zmc2V0ID0gYmFzZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgICAgICBOb2RlKiBleHRlbnROb2RlID0gZXh0ZW50LmRlcHJlY2F0ZWROb2RlKCk7CkBAIC0y
MTA5LDcgKzIxMDksNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgICAgICAgICAgdW5z
aWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVu
dE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1pbihzdGQ6Om1heChz
dGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCksIGV4dGVudE9mZnNldCk7CiAgICAgICAg
ICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVu
dCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOwotICAgICAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERPV05T
VFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2Uu
cHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6Tm8p
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTIzLDcgKzIxMjMsNyBAQCB2b2lkIEVkaXRvcjo6
aWdub3JlU3BlbGxpbmcoKQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5n
ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAo
c2VsZWN0ZWRSYW5nZSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIApAQCAtMjEzOSw3
ICsyMTM5LDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmcoKQogICAgICAgICAKICAgICAv
LyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJsZWFybiIgYnV0dG9uIG9uICJTcGVsbGlu
ZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hv
dWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFyb3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBz
ZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKIApAQCAtMjE1MiwxNCArMjE1MiwxNCBAQCB2b2lkIEVkaXRvcjo6bGVhcm5T
cGVsbGluZygpCiAKIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBz
dGFydEJlZm9yZVNlbGVjdGlvbikKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFt
ZSk7Ci0KKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwor
ICAgIAogICAgIC8vIFRoZSBiYXNpYyBhcHByb2FjaCBpcyB0byBzZWFyY2ggaW4gdHdvIHBoYXNl
cyAtIGZyb20gdGhlIHNlbGVjdGlvbiBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZG9jLCBhbmQKICAg
ICAvLyB0aGVuIHdlIHdyYXAgYW5kIHNlYXJjaCBmcm9tIHRoZSBkb2Mgc3RhcnQgdG8gKGFwcHJv
eGltYXRlbHkpIHdoZXJlIHdlIHN0YXJ0ZWQuCiAgICAgCiAgICAgLy8gU3RhcnQgYXQgdGhlIGVu
ZCBvZiB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5n
IGF0IHRoZSBzZWxlY3Rpb24gZW5kIG1ha2VzCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxs
aW5nIiBjb21tYW5kcyB3b3JrLgotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIFJlZjxSYW5nZT4g
c3BlbGxpbmdTZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKIAogICAg
IGJvb2wgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTIzMDgsOCArMjMwOCw4IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBj
b25mdXNlZCB3aXRoIGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFw
aAogICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgq
Z3JhbW1hclNlYXJjaFJhbmdlLCB7IGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWls
LnJhbmdlLmxvY2F0aW9uLCBncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0aCB9KTsKLSAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFt
bWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVM
VF9BRkZJTklUWSkpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbigpOwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIzMjAs
OCArMjMyMCw4IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBz
dGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUg
cmVkIHNxdWlnZ2xlIGxhdGVyLgogICAgICAgICAKICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1Jh
bmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3Bl
bGxpbmdPZmZzZXQsIG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpIH0pOwotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFu
Z2UsIERPV05TVFJFQU0pKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxl
Y3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihtaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAg
ICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVk
V29yZCk7CiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGlu
Z1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjMzNSw3ICsyMzM1LDcgQEAg
U3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2Vk
Tm9kZSkgY29uc3QKICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkg
fHwgIWNsaWNrZWROb2RlIHx8ICFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGNsaWNrZWROb2Rl
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg5LDcgKzIzODksNyBAQCBTdHJp
bmcgRWRpdG9yOjptaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9y
Ojppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5H
KQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNs
aWVudCgpLCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQwNCw3ICsyNDA0LDcgQEAg
VmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkKSBjb25zdAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAo
Y2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQs
IFN0cmluZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAg
ICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBn
dWVzc2VzOwogfQogCkBAIC0yNDEyLDcgKzI0MTIsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6
Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJv
bwogewogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZTsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGlu
Z1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CiAgICAgICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkp
OwogICAgICAgICAgICAgd29yZFNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRH
cmFudWxhcml0eSk7CkBAIC0yNDcyLDcgKzI0NzIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0
aQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KQogewotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50
KG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKHBsYXRmb3JtRHJpdmVuVGV4dENoZWNrZXJFbmFibGVk
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OTQsMTkgKzI1OTQsMTkgQEAgdm9pZCBFZGl0b3I6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24g
JndvcmRTdGFydCwKICAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCBy
ZXBsYWNlIHRoZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgogICAgIGlmICghYXV0b2Nv
cnJlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdT
ZWxlY3Rpb24oKm1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3
U2VsZWN0aW9uICE9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKLSAgICAgICAg
ICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uKSkKKyAgICAgICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1fZnJhbWUuZWRp
dG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1Jh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICAgICAgaWYgKCFtX2Rv
Y3VtZW50LmVkaXRvcigpLnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlz
c3BlbGxpbmdSYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRS
ZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0
b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0
UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwog
CiAgICAgICAgIC8vIFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAg
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmVuZCgpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFu
dWxhcml0eSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlv
bkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICB9CiAKICAgICBpZiAoIWlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpKQpAQCAtMjY3OCw3ICsyNjc4LDcgQEAgYm9vbCBFZGl0b3I6
OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKIAogYm9vbCBFZGl0
b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgcmV0dXJuIGlzU3BlbGxDaGVj
a2luZ0VuYWJsZWRGb3IobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCkpOwogfQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSkKQEAgLTI3MjYsNyArMjcyNiw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlCiAgICAgaWYgKHBhcmFncmFwaFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBib29sIGFzeW5jaHJvbm91cyA9IG1fZnJhbWUuc2V0dGluZ3MoKS5hc3luY2hyb25v
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsOwor
ICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CiAK
ICAgICAvLyBJbiBhc3luY2hyb25vdXMgbW9kZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJh
Z3JhcGgtd2lkZSBzZW50ZW5jZS4KICAgICBjb25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJl
c29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhlZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlv
bnMpOwpAQCAtMjc0MSw3ICsyNzQxLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICB9
CiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGNoZWNrVGV4
dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVz
b2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVj
ay50ZXh0KCksIHJlc29sdmVkT3B0aW9ucywgcmVzdWx0cywgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgbWFya0FuZFJlcGxhY2VGb3IocmVxdWVzdC5yZWxlYXNlTm9u
TnVsbCgpLCByZXN1bHRzKTsKIH0KIApAQCAtMjc4Nyw3ICsyNzg3LDcgQEAgc3RhdGljIHZvaWQg
Y29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRD
aGVja2luZ1BhcmEKIAogdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxs
Q2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYg
cmVzdWx0cykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVm
PERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAogICAgIGF1dG8gdGV4
dENoZWNraW5nT3B0aW9ucyA9IHJlcXVlc3QuZGF0YSgpLmNoZWNraW5nVHlwZXMoKTsKICAgICBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHJlcXVlc3QuY2hlY2tpbmdSYW5nZSgpLCBy
ZXF1ZXN0LmF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoKSwgJnJlcXVlc3QucGFyYWdyYXBoUmFu
Z2UoKSk7CkBAIC0yODExLDkgKzI4MTEsOSBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VG
b3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAg
IGJvb2wgYWRqdXN0U2VsZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAg
ICAgaWYgKHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwg
c2hvdWxkQ2hlY2tGb3JDb3JyZWN0aW9uKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJl
dFNlbGVjdGlvbikgeworICAgICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24p
IHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gc2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28g
d2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVlZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBj
YXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKKyAg
ICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgc2VsZWN0aW9uT2Zmc2V0ID0gcGFyYWdy
YXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24pLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAg
ICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gdHJ1ZTsKICAgICAgICAgICAgIGlm
IChzZWxlY3Rpb25PZmZzZXQgPiAwICYmIChzZWxlY3Rpb25PZmZzZXQgPiBwYXJhZ3JhcGgudGV4
dCgpLmxlbmd0aCgpIHx8IHBhcmFncmFwaC50ZXh0KClbc2VsZWN0aW9uT2Zmc2V0IC0gMV0gPT0g
bmV3bGluZUNoYXJhY3RlcikpCkBAIC0yODk1LDEzICsyODk1LDEzIEBAIHZvaWQgRWRpdG9yOjpt
YXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
VmVjdG9yPFRlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uVG9SZXBsYWNlKHJhbmdlVG9SZXBsYWNlLCBET1dOU1RSRUFNKTsKLSAgICAgICAg
ICAgIGlmIChzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkgewotICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkKKyAgICAgICAgICAgIGlmIChzZWxl
Y3Rpb25Ub1JlcGxhY2UgIT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewor
ICAgICAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRD
aGVja2luZ1R5cGU6OkxpbmspIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOworICAgICAgICAgICAgICAgIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CiAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmVz
dG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGNh
bkVkaXRSaWNobHkoKSkKQEAgLTI5MTAsNyArMjkxMCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRlCiAgICAgICAgICAgICAgICAgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENo
ZWNraW5nUGFyYWdyYXBoKHBhcmFncmFwaCwgcmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50LCB7
IHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGggfSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiByb290ID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiByb290ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNo
ZS0+cG9zdE5vdGlmaWNhdGlvbihyb290LCBBWE9iamVjdENhY2hlOjpBWEF1dG9jb3JyZWN0aW9u
T2NjdXJlZCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yOTQwLDEzICsyOTQwLDEzIEBAIHZv
aWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJh
bmdlVG9OZXh0RW5kKCk7CiAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2Ug
JiYgc2VsZWN0aW9uT2Zmc2V0IDw9IGV4dGVuZGVkUGFyYWdyYXBoLnJhbmdlTGVuZ3RoKCkpIHsK
ICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBleHRlbmRlZFBhcmFncmFwaC5zdWJy
YW5nZSh7IDAsIHNlbGVjdGlvbk9mZnNldCB9KTsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkubW92ZVRvKHNlbGVjdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsK
KyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKHNlbGVjdGlvblJhbmdl
LT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIGlmIChhZGp1c3RTZWxl
Y3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzKQotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
Rm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxiYWNr
IGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAgICAg
ICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnko
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVU
byhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAgICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9u
TW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMzAyMyw4ICszMDIzLDggQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEK
ICAgICAvLyBPZiBjb3Vyc2UsIGlmIGN1cnJlbnQgc2VsZWN0aW9uIGlzIGEgcmFuZ2UsIHdlIHBv
dGVudGlhbGx5IHdpbGwgZWRpdCB0d28gd29yZHMgdGhhdCBmYWxsIG9uIHRoZSBib3VuZGFyaWVz
IG9mCiAgICAgLy8gc2VsZWN0aW9uLCBhbmQgcmVtb3ZlIHdvcmRzIGJldHdlZW4gdGhlIHNlbGVj
dGlvbiBib3VuZGFyaWVzLgogICAgIC8vCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVu
ZCgpOwogICAgIGlmIChzdGFydE9mU2VsZWN0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47
CiAgICAgLy8gRmlyc3Qgd29yZCBpcyB0aGUgd29yZCB0aGF0IGVuZHMgYWZ0ZXIgb3Igb24gdGhl
IHN0YXJ0IG9mIHNlbGVjdGlvbi4KQEAgLTMwOTYsMTEgKzMwOTYsNyBAQCB2b2lkIEVkaXRvcjo6
ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24s
IGNvbnN0IFN0cgogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgd2luZG93UG9pbnQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFt
ZS5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAg
ICAgQVNTRVJUKGZyYW1lKTsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCkBAIC0zMTE3LDcgKzMxMTMsNyBAQCB2b2lkIEVkaXRv
cjo6cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNvbnN0IFNjcm9sbEFsaWdu
bWVudCYgYWxpZ25tZQogICAgICAgICByZXR1cm47CiAKICAgICBTZWxlY3Rpb25SZXZlYWxNb2Rl
IHJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7Ci0gICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24ocmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxF
eHRlbnRPcHRpb24pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9u
KHJldmVhbE1vZGUsIGFsaWdubWVudCwgcmV2ZWFsRXh0ZW50T3B0aW9uKTsKIH0KIAogdm9pZCBF
ZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVj
dGlvbiBzaG91bGRSZXZlYWxFeGlzdGluZ1NlbGVjdGlvbikKQEAgLTMxMjksNyArMzEyNSw3IEBA
IHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGJvb2wgaWdub3JlLCBSZXZl
YWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAv
LyBGSVhNRTogU2hvdWxkIHN1cHByZXNzIHNlbGVjdGlvbiBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBk
dXJpbmcgYSBjb21wb3NpdGlvbiBjaGFuZ2UgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzM4ODMwPiAK
ICAgICBpZiAoIWlnbm9yZSkKLSAgICAgICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCB7IH0pOworICAgICAgICByZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CiAj
ZW5kaWYKICAgICBpZiAoIWlnbm9yZSAmJiBzaG91bGRSZXZlYWxFeGlzdGluZ1NlbGVjdGlvbiA9
PSBSZXZlYWxTZWxlY3Rpb246OlllcykKICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0
aW5nT3BlcmF0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmV2ZWFs
RXh0ZW50KTsKQEAgLTMxNTIsNyArMzE0OCw3IEBAIGJvb2wgRWRpdG9yOjpnZXRDb21wb3NpdGlv
blNlbGVjdGlvbih1bnNpZ25lZCYgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3RpCiB7
CiAgICAgaWYgKCFtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBQb3NpdGlvbiBzdGFydCA9IHNl
bGVjdGlvbi5zdGFydCgpOwogICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICE9IG1fY29t
cG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTc1LDcgKzMxNzEsNyBA
QCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc0Nh
cmV0KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzIwMCwxMCArMzE5NiwxMCBAQCB2b2lkIEVk
aXRvcjo6dHJhbnNwb3NlKCkKICAgICBTdHJpbmcgdHJhbnNwb3NlZCA9IHRleHQucmlnaHQoMSkg
KyB0ZXh0LmxlZnQoMSk7CiAKICAgICAvLyBTZWxlY3QgdGhlIHR3byBjaGFyYWN0ZXJzLgotICAg
IGlmIChuZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewot
ICAgICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5l
d1NlbGVjdGlvbikpCisgICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
aG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsK
KyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KTsKICAgICB9CiAKICAgICAvLyBJbnNlcnQgdGhlIHRyYW5zcG9zZWQgY2hhcmFjdGVycy4KQEAg
LTMyNTUsNyArMzI1MSw3IEBAIHZvaWQgRWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJ
Z25vcmVkKCkKIAogdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE9wdGlvblNldDxGcmFtZVNlbGVjdGlv
bjo6U2V0U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVj
dGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9j
dW1lbnQpOwogCiAgICAgLy8gSWYgdGhlIG5ldyBzZWxlY3Rpb24gaXMgb3JwaGFuZWQsIHRoZW4g
ZG9uJ3QgdXBkYXRlIHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKG5ld1NlbGVjdGlvbi5zdGFydCgp
LmlzT3JwaGFuKCkgfHwgbmV3U2VsZWN0aW9uLmVuZCgpLmlzT3JwaGFuKCkpCkBAIC0zMjY1LDkg
KzMyNjEsOSBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgTwogICAgIC8vIGJlY2F1c2UgdGhlcmUg
aXMgd29yayB0aGF0IGl0IG11c3QgZG8gaW4gdGhpcyBzaXR1YXRpb24uCiAgICAgLy8gVGhlIG9s
ZCBzZWxlY3Rpb24gY2FuIGJlIGludmFsaWQgaGVyZSBhbmQgY2FsbGluZyBzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24gY2FuIHByb2R1Y2Ugc29tZSBzdHJhbmdlIGNhbGxzLgogICAgIC8vIFNlZSA8cmRh
cjovL3Byb2JsZW0vNTcyOTMxNT4gU29tZSBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlIGNv
bnRhaW4gUmFuZ2VzIGZvciBzZWxlY3Rpb25zIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZAotICAg
IGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uRGlkTm90
Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKSkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKKyAgICBib29sIHNlbGVjdGlvbkRpZE5vdENo
YW5nZURPTVBvc2l0aW9uID0gbmV3U2VsZWN0aW9uID09IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlv
bikpCisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVj
dGlvbiwgb3B0aW9ucyk7CiAKICAgICAvLyBTb21lIGVkaXRpbmcgb3BlcmF0aW9ucyBjaGFuZ2Ug
dGhlIHNlbGVjdGlvbiB2aXN1YWxseSB3aXRob3V0IGFmZmVjdGluZyBpdHMgcG9zaXRpb24gd2l0
aGluIHRoZSBET00uCiAgICAgLy8gRm9yIGV4YW1wbGUgd2hlbiB5b3UgcHJlc3MgcmV0dXJuIGlu
IHRoZSBmb2xsb3dpbmcgKHRoZSBjYXJldCBpcyBtYXJrZWQgYnkgXik6CkBAIC0zMjgyLDEzICsz
Mjc4LDEzIEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiAmJiBjbGllbnQoKSkK
LSAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOwor
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LmZy
YW1lKCkpOwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAogewogICAg
IFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2
aW9yOwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91
bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAgIGJlaGF2aW9yIHw9IFRl
eHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBzZWxlY3RlZFRleHQoYmVo
YXZpb3IpOwogfQpAQCAtMzI5Niw3ICszMjkyLDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRU
ZXh0KCkgY29uc3QKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2Zlcigp
IGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0
b3JFbWl0c0ltYWdlQWx0VGV4dDsKLSAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2V0
dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQogICAgICAg
ICBiZWhhdmlvciB8PSBUZXh0SXRlcmF0b3JUcmF2ZXJzZXNGbGF0VHJlZTsKICAgICByZXR1cm4g
c2VsZWN0ZWRUZXh0KGJlaGF2aW9yKTsKIH0KQEAgLTMzMDQsNyArMzMwMCw3IEBAIFN0cmluZyBF
ZGl0b3I6OnNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0CiBTdHJpbmcgRWRpdG9y
OjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiB7CiAg
ICAgLy8gV2UgcmVtb3ZlICdcMCcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCB2aXNp
Ymx5IHJlbmRlcmVkIHRvIHRoZSB1c2VyLgotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBhdXRvIHN0YXJ0ID0gc2VsZWN0aW9uLnN0
YXJ0KCk7CiAgICAgYXV0byBlbmQgPSBzZWxlY3Rpb24uZW5kKCk7CiAgICAgaWYgKHN0YXJ0Lmlz
TnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgpIHx8IGVuZC5pc09ycGhh
bigpKQpAQCAtMzMxNCw3ICszMzEwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KFRl
eHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKSBjb25zdAogCiBSZWZQdHI8VGV4dFBsYWNlaG9s
ZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCB7IHRoaXMtPmRvY3VtZW50KCkgfTsKQEAg
LTMzMjIsNyArMzMxOCw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgLy8gRklYTUU6
IFdyaXRlIGluIHRlcm1zIG9mIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoKS4gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzQ0Pi4KICAgICBkZWxl
dGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoZmFsc2UpOwogCi0gICAgYXV0byByYW5nZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMzMwLDcgKzMzMjYsNyBAQCBSZWZQ
dHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZQogICAgIHJhbmdlLT5pbnNlcnROb2RlKHBsYWNlaG9sZGVyLmNv
cHlSZWYoKSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiB7IHBvc2l0aW9u
QmVmb3JlTm9kZShwbGFjZWhvbGRlci5wdHIoKSksIHBvc2l0aW9uQWZ0ZXJOb2RlKHBsYWNlaG9s
ZGVyLnB0cigpKSB9OwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJU
cmlnZ2VyZWQpKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2Vy
VHJpZ2dlcmVkKSk7CiAKICAgICByZXR1cm4gcGxhY2Vob2xkZXI7CiB9CkBAIC0zMzUwLDggKzMz
NDYsOCBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRl
ckVsZW1lbnQmIHBsYWNlaG9sZGVyKQogICAgIHBsYWNlaG9sZGVyLnJlbW92ZSgpOwogCiAgICAg
Ly8gVG8gbWF0Y2ggdGhlIExlZ2FjeSBXZWJLaXQgaW1wbGVtZW50YXRpb24sIHNldCB0aGUgdGV4
dCBpbnNlcnRpb24gcG9pbnQgdG8gYmUgYmVmb3JlIHdoZXJlIHRoZSBwbGFjZWhvbGRlciB1c2Ug
dG8gYmUuCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkg
JiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50
KQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklU
WSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdn
ZXJlZCkpOworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2
ZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IHNhdmVkUm9vdEVkaXRhYmxlRWxl
bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbiB7IHNhdmVkUG9zaXRpb25CZWZvcmVQbGFjZWhvbGRlciwgU0VMX0RFRkFVTFRf
QUZGSU5JVFkgfSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVz
ZXJUcmlnZ2VyZWQpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlQ2FyZXRXaWR0
aChJbnRSZWN0JiByZWN0KQpAQCAtMzQwMyw3ICszMzk5LDcgQEAgSW50UmVjdCBFZGl0b3I6OmZp
cnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIGJvb2wgRWRpdG9yOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCisgICAgaWYg
KG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xp
ZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBh
ZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwpAQCAtMzQxMiwxNyArMzQwOCwxNyBAQCBib29sIEVk
aXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgY29uc3QgVgogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShF
ZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYg
KHN0eWxlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0
eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1
cnJlbnQgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxl
OwotICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKICAgICAgICAgdHlwaW5nU3R5bGUgPSBl
eGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CiAgICAgZWxzZQogICAgICAgICB0eXBpbmdTdHls
ZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlw
aW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBp
bmdTdHlsZUF0KHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxl
cywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8
RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gdHlwaW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVC
bG9ja1Byb3BlcnRpZXMoKTsKQEAgLTM0MzAsNyArMzQyNiw3IEBAIHZvaWQgRWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0CiAgICAgICAgIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgYmxv
Y2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CiAKICAgICAvLyBTZXQgdGhl
IHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOworICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOwogfQog
CiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYg
cHJvcGVydGllcywgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ4OSwxOSArMzQ4NSwx
OSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3QK
IAogYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKLSAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZT
dHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKIAog
ICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdl
LCBET1dOU1RSRUFNKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKIAogICAgIGlmICgh
KG9wdGlvbnMuY29udGFpbnMoRG9Ob3RSZXZlYWxTZWxlY3Rpb24pKSkKLSAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU5
OCw3ICszNTk0LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICBpZiAocmFuZ2UpIHsK
ICAgICAgICAgaWYgKCZyYW5nZS0+b3duZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQogICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJ
blJhbmdlKG1fZnJhbWUsICpyYW5nZSkpCisgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5n
ZSgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIGlmICghc2VhcmNoUmFuZ2UpCkBAIC0zNjY4LDcgKzM2NjQsNyBAQCB2b2lkIEVk
aXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwg
T3B0aW9uU2V0PEZyYW1lUwogI2VuZGlmCiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNs
aWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xp
ZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKIAog
I2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgaWYgKHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSkKQEAgLTM2OTEs
OCArMzY4Nyw2IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9yOjpzaG91
bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVsZXBo
b25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNT
dXBwb3J0ZWQoKTsKIH0KIApAQCAtMzcwNSw5ICszNjk5LDkgQEAgdm9pZCBFZGl0b3I6OnNjYW5T
ZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiBtYXJrZWRSYW5nZXM7CiAKLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1Jhbmdl
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0No
YW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MjksNyArMzcyMyw3IEBAIHZv
aWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRy
PFJhbmdlPiBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBpZiAoYXV0byogcGFn
ZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQu
cGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNl
bGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzc0Miw3ICszNzM2LDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJS
YW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJh
bWUucGFnZSgpKQorICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAg
ICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQoKTsKIH0KIApAQCAtMzgwMSw5ICszNzk1LDkgQEAgdm9pZCBFZGl0
b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRX
b3JkczsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwotICAg
ICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gbmV3U3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKSk7CisgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQuc2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpIHsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAgICAgICAgIG5ld0FkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9u
KHN0YXJ0T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChu
ZXdTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAjZWxzZQpAQCAtMzg1Niw3ICszODUw
LDcgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKCFt
X2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbikKICAgICAgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNl
bGVjdGlvbik7CiAKLSAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJ
VXBkYXRlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVOQUJM
RShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgbm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRl
cygpOwpAQCAtMzg4Myw3ICszODc3LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxl
KE5vZGUqIG5vZGUpCiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0
aCkgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIE5v
ZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTM5NTAsMTAgKzM5NDQsMTAgQEAgT3B0aW9uU2V0PFRleHRD
aGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5v
ZGUmIHJvb3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxS
YW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQorc3RhdGljIFJl
ZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50
KQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29y
ZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVj
dGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkp
IDogZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogc3RhdGlj
IGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCkBAIC0zOTY3LDggKzM5NjEsOCBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3Vs
ZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5n
IEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBj
YW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihtX2ZyYW1lKTsKKyAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0
ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRs
eVR5cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKICAg
ICAgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAK
QEAgLTM5NzcsNyArMzk3MSw3IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJl
cXVlc3QoKSBjb25zdAogICAgIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZv
ckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkp
OwogfQogCkBAIC00MDQ0LDcgKzQwMzgsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRB
dHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMg
YXR0cmlidXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8q
IHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsK
KyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFt
ZSgpLCBub2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVU
b1JlbW92ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDg1LDcg
KzQwNzksNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rp
b25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMu
dGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVz
LnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVy
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0
Y2ggKHN0eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6
CkBAIC00MTExLDcgKzQxMDUsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IGF1dG8gdHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5n
U3R5bGUoKSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5n
U3R5bGUtPnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHls
ZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsK
QEAgLTQxOTksMTIgKzQxOTMsOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2ht
ZW50VXBkYXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1l
bnRJZGVudGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRo
SWRlbnRpZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZv
ciAoYXV0byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0g
ICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50
aWZpZXIoaWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3Vt
ZW50LmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xp
ZW50KCktPmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRh
Y2htZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0
ciksIGF0dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyMjcsNyArNDIxNyw3IEBAIHZvaWQg
RWRpdG9yOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9u
YWw8dWludDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRh
dGUgPSB0cnVlOwogCkBAIC00MjQ2LDcgKzQyMzYsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNj
ZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBi
b29sIEVkaXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJl
dHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUo
KSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9y
TWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjYyLDEzICs0MjUyLDcg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0
IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVN
b2RlRW5hYmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0
ZU1vZGVFbmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2Nr
Q3Vyc29yKG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpk
b2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAg
cmV0dXJuICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJl
ZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQzMjEsOSAr
NDMwNSw5IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNN
dWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAot
ICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92
ZTsKLSAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1l
LCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1v
dmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBu
dWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMzUsMTEgKzQzMTksMTEgQEAgY29u
c3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMp
IGNvbnN0CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9u
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAg
Tm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRp
b24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQzNzEs
NyArNDM1NSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omluc2VydEVkaXRh
YmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFn
ZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0
aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4
IGFkOWVkYTI2MThjOWE4ODBiZWNiYjFjZTRkNjhiYjU5Yjg5YzIwYzAuLmZmYTc3ZDBlNTQ4ZTdj
ZTc3ZGNkNDdiYjBlNjFjMTBhODQ3N2YwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkVkaXRv
ckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRX
cml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTksMTMgKzEyMCwx
MyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4X3QgewogCiBj
bGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZpc2libGVTZWxl
Y3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9u
PiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERv
Y3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlv
blNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZyYW1lPiBtX2Zy
YW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRpb25TZXQ8VGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTM3LDcgKzEz
OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSB7CiBw
dWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUmIGZyYW1lKQot
ICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFy
eVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgOiBtX3Nl
bGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewogICAgIH0KIApA
QCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihGcmFtZSYpOwor
ICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsKIAogICAgIGVu
dW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIsNyBAQCBwdWJs
aWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21t
YW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29tbWFuZChjb25z
dCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBEb2N1bWVudCYp
OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBh
cmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikgY29u
c3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dlcmlu
Z0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQgeyBudWxscHRy
IH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAgICAgIFJlZlB0
cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwog
ICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1lbnVPcktleUJp
bmRpbmcuCkBAIC01NjcsNyArNTY5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQmKTsKIAogcHJp
dmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1bWVudCYgZG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29sIGNhbkRlbGV0
ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVi
b2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTgsNyArNjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1
bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1fbGFz
dEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICB1
bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAppbmRleCA5ZGJhNzA2OWFkMTQyOGNkYzNiOTBmYjZjMDQ3MWZhYTEwZmI4YzQ0
Li5iZDUxODBlYjQwMGVhNzkyMTUxYjZmNzk4YjYwZWNiOGNmZmRhZWFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTExMDksNiArMTEwOSw3IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0aE1hcmsoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7
CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50KCkpOwogICAg
IFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMTgzNiwx
MiArMTgzNywxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBpbnRlcm5h
bENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpDb21tYW5kIEVk
aXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAgIHJldHVybiBD
b21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9tTWVudU9yS2V5
QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNv
bW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3VtZW50KTsKIH0K
IAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4gQ29tbWFuZChp
bnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOworICAgIHJldHVy
biBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9kb2N1bWVu
dCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVudU9yS2V5Qmlu
ZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTg1MywxMiArMTg1NCwxMyBAQCBF
ZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1hbmQ6OkNvbW1h
bmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291
cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0
IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5kKQogICAgICwg
bV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1lIDogbnVsbHB0
cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxwdHIpCisgICAg
LCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikKIHsKLSAgICBB
U1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1fZG9j
dW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJpbmcm
IHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4NjgsOSArMTg3
MCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1l
dGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxsb3dFeGVjdXRp
b25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
YXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2ZyYW1lLT5kb2N1
bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkgIT0gbV9m
cmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29tbWFuZC0+ZXhl
Y3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1ldGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1MDcy
ZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OS4uYmJjZmNjZTdhZWNiZmRmNzBjM2ZmYjhmNmMy
ZmY4YzJiZDIwNGMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKQEAgLTEzOSwxMyArMTM5LDE0IEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJvbGxlcjo6ZWRp
dGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJu
ICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVj
dGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4gIWRvY3VtZW50IHx8IGRvY3VtZW50LT5l
ZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgp
OwogfQogCi1GcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQotICAg
IDogbV9mcmFtZShmcmFtZSkKK0ZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1bWVu
dCogZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFtZShk
b2N1bWVudD8gZG9jdW1lbnQtPmZyYW1lKCkgOiBudWxscHRyKQogICAgICwgbV94UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSkK
ICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAjaWYgRU5BQkxFKFRF
WFRfQ0FSRVQpCkBAIC0xNTYsNyArMTU3LDcgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0
aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQogICAg
ICwgbV9jYXJldFBhaW50KHRydWUpCiAgICAgLCBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZChm
YWxzZSkKLSAgICAsIG1fZm9jdXNlZChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGZyYW1lKQorICAgICwg
bV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gbV9mcmFtZSkKICAgICAsIG1fc2hv
dWxkU2hvd0Jsb2NrQ3Vyc29yKGZhbHNlKQogICAgICwgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRl
KGZhbHNlKQogICAgICwgbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbihmYWxzZSkKQEAgLTE2NSwxNCArMTY2LDI0IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFt
ZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2NhcmV0QmxpbmtzKHRydWUpCiAjZW5k
aWYKIHsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFt
ZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1l
bnQpKQogICAgICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOworICAgIAor
ICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOworICAgIGlm
IChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworI2lm
IFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3MgfCBkb2Vz
IG5vdCBibGluaykKKyAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9jdXNlZCk7CisjZWxz
ZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8gVmlzaWJsZSA6IEhp
ZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJs
ZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2VsZWN0
aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICByZXR1cm4g
c2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlv
bjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB1c2Vy
VHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduKQpAQCAtMjg0LDcgKzI5NSw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBwYXNzCiAgICAgRW5kUG9pbnRzQWRqdXN0bWVudE1vZGUgZW5k
cG9pbnRzQWRqdXN0bWVudE1vZGUpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rp
b24gPSBwYXNzZWROZXdTZWxlY3Rpb247Ci0gICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hvdWxk
QWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgbmV3U2VsZWN0aW9uLmlz
RGlyZWN0aW9uYWwoKTsKKyAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRBbHdheXNVc2VE
aXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBuZXdTZWxlY3Rpb24uaXNEaXJlY3Rp
b25hbCgpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJhc2UgPSBtX29yaWdpbmFsQmFzZS5pc05v
dE51bGwoKSA/IG1fb3JpZ2luYWxCYXNlIDogbmV3U2VsZWN0aW9uLnZpc2libGVCYXNlKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIG5ld0Jhc2UgPSBiYXNlOwpAQCAtMzIyLDcgKzMzMyw3IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2Uo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgYm9vbCBzaG91bGRDbGVhclR5cGluZ1N0eWxlID0g
b3B0aW9ucy5jb250YWlucyhDbGVhclR5cGluZ1N0eWxlKTsKIAogICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uUG9zc2libHlXaXRob3V0RGlyZWN0aW9uOwot
ICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAg
ICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkpCiAg
ICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogCiAgICAgaWYgKCFt
X2ZyYW1lKSB7CkBAIC0zMzQsNyArMzQ1LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAg
ICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBp
bmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3VtZW50KiBuZXdTZWxlY3Rpb25Eb2N1bWVudCA9IG5l
d1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoUmVmUHRyPEZyYW1l
PiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1NlbGVjdGlvbkRvY3VtZW50LT5mcmFtZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rp
b25Eb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAobmV3
U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2Rv
Y3VtZW50KSB7CiAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uRnJhbWUtPnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3Nz
aWJsZSB0aGF0IGR1cmluZyB0aGUgYWJvdmUgc2V0IHNlbGVjdGlvbiwgdGhpcyBGcmFtZVNlbGVj
dGlvbiBoYXMgYmVlbiBtb2RpZmllZCBieQogICAgICAgICAgICAgICAgIC8vIHNlbGVjdEZyYW1l
RWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkLCBidXQgdGhhdCB0aGUgc2VsZWN0aW9uIGlz
IG5vIGxvbmdlciB2YWxpZCBzaW5jZQpAQCAtMzQ5LDcgKzM2MCw3IEBAIGJvb2wgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvCiAgICAgbV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5OwogCiAgICAgaWYgKGNs
b3NlVHlwaW5nKQotICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhtX2ZyYW1lKTsK
KyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoKm1fZG9jdW1lbnQpOwogCiAgICAg
aWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsK
QEAgLTM1Nyw3ICszNjgsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRo
b3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIFZpc2libGVT
ZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBkaWRNdXRhdGVT
ZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlmIChkaWRNdXRh
dGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFu
Z2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5nZSgp
OwogCiAgICAgbV9zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247CiAKQEAgLTM3MSwzNSArMzgyLDMx
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVh
cmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUo
KTsKIAogICAgIGlmICghbmV3U2VsZWN0aW9uLmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERvTm90
U2V0Rm9jdXMpKSB7Ci0gICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICAgICAgYXV0byogb2xkRm9jdXNlZEVs
ZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgICAgICBzZXRGb2N1c2Vk
RWxlbWVudElmTmVlZGVkKCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGJlIG5lZWRl
ZC4KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkgIT0g
b2xkRm9jdXNlZEVsZW1lbnQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVu
dCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC0+dXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogICAgIH0KIAogICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3Np
dGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgogICAgIC8vIEl0IHdpbGwg
YmUgcmVzdG9yZWQgYnkgdGhlIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNl
c3NhcnkuCiAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JW
ZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50
SWZGdWxseVNlbGVjdGVkKCk7Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPmVkaXRv
cigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKICAg
ICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0aW9uLWFwaS8jc2VsZWN0aW9uY2hhbmdl
LWV2ZW50CiAgICAgLy8gRklYTUU6IFNwZWMgZG9lc24ndCBzcGVjaWZ5IHdoaWNoIHRhc2sgc291
cmNlIHRvIHVzZS4KLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5xdWV1ZVRhc2tUb0Rpc3BhdGNo
RXZlbnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJ
c0NhbmNlbGFibGU6Ok5vKSk7CisgICAgbV9kb2N1bWVudC0+cXVldWVUYXNrVG9EaXNwYXRjaEV2
ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXND
YW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9w
dGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KQogewotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7
CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywg
YWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJh
bWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6
OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVj
dGlvbikKQEAgLTQxMSwyNyArNDE4LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAg
bV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9u
VXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxj
KCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYg
KGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmxheW91dENvbnRleHQoKS5pc0xheW91dFBlbmRpbmco
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGludGVu
dCk7CiAKICAgICBpZiAob3B0aW9ucyAmIElzVXNlclRyaWdnZXJlZCkgewotICAgICAgICBpZiAo
YXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIGlmIChh
dXRvKiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAg
IGNsaWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9
CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZy
YW1lJiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRP
clN0eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAg
ICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
ICNlbHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAg
IGRvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyAr
NDQ4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2
ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBS
ZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJl
dmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2Vs
ZWN0aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVu
dC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlv
bigpOwogfQogCkBAIC00NTcsNyArNDY0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKICAg
ICBpZiAobV9zZWxlY3Rpb25SZXZlYWxNb2RlICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90
UmV2ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAgICAg
aWYgKG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2Vs
ZWN0aW9uSXNSZXZlYWxlZCgpKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCiAgICAg
ICAgICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFs
aW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyA6IFNjcm9s
bEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXMgOiBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CkBAIC00NzEsNyArNDc4LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50JiBpbnQKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JT
ZWxlY3Rpb24oKQogewogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2NhblNlbGVjdGlv
bkZvclRlbGVwaG9uZU51bWJlcnMoKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zY2FuU2Vs
ZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MTAs
NyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0o
Ym9vbCBpc0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0
byB0aGUgc2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0
byB3aGljaCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNh
biBiZSBjaGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAg
aWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNF
eHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudCAm
JiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVj
dGlvbkZyb21FeHRlbnRFbmRwb2ludCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNC
YXNlRmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpOwogCiAgICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MzAsNyBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bShjb25zdCBWaXNpYmxlUG9zaXRpbwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFm
dGVyQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0g
ICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lw
U3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgeworICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1l
bnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkp
IHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQs
IHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVydGhlciBhbmQgdGhlbiBtb3ZlIG9u
ZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBzZW1hbnRpY3Mgb2YgcHJldmlvdXNX
b3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRoZQpAQCAtODU1LDcgKzg2Miw3IEBA
IFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnJpZ2h0KHRy
dWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51
bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJh
bWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92
aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9k
b2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFj
ZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0
aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAg
ICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hl
bk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEwNzYsNyAr
MTA4Myw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVm
dChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3MgPSBWaXNp
YmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkp
LmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBX
b3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0
ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFj
ZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmln
aHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxk
U2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJy
ZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkp
OwogICAgICAgICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNT
cGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0x
MzYyLDcgKzEzNjksNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24g
YWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNlclRy
aWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFu
Z2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVudCAmJiBB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlmeUFj
Y2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxl
Y3Rpb25Cb3VuZGFyeSwgdGV4dFNlbGVjdGlvbldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0eShk
aXJlY3Rpb24sIGdyYW51bGFyaXR5KSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMTM3NCw4ICsxMzgxLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0
aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgaWYg
KCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmln
aW5hbFN0YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
bV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBj
YWNoZS0+c2V0VGV4dFNlbGVjdGlvbkludGVudCh0ZXh0U2VsZWN0aW9uSW50ZW50KGFsdGVyLCBk
aXJlY3Rpb24sIGdyYW51bGFyaXR5KSk7CiAgICAgfQogCkBAIC0xMzg0LDcgKzEzOTEsNyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgIC8vIE5vdGU6IHRoZSBTVEFSVCBwb3NpdGlvbiB0
eXBlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQgd291bGQgYmUKICAgICAv
LyB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHR5cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24gc2V0LgogICAgIExheW91dFVuaXQgeCA9IGxpbmVEaXJlY3Rp
b25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9zZWxlY3Rp
b24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbiht
X2ZyYW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5z
ZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9j
dW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgc3dpdGNoIChhbHRl
cikgewogICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6CkBAIC0xMzk0LDcgKzE0MDEsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAgICAgIGlmICghbV9zZWxlY3Rpb24uaXNDYXJldCgp
CiAgICAgICAgICAgICAmJiAoZ3JhbnVsYXJpdHkgPT0gV29yZEdyYW51bGFyaXR5IHx8IGdyYW51
bGFyaXR5ID09IFBhcmFncmFwaEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IExpbmVHcmFu
dWxhcml0eSkKLSAgICAgICAgICAgICYmIG1fZnJhbWUgJiYgIW1fZnJhbWUtPmVkaXRvcigpLmJl
aGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkg
eworICAgICAgICAgICAgJiYgbV9kb2N1bWVudCAmJiAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7
CiAgICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIHNlbGVjdGlvbiBnbyBhY3Jvc3MgdGhlIGJh
c2UgcG9zaXRpb24gZGlyZWN0bHkuIE5lZWRlZCB0byBtYXRjaCBtYWMKICAgICAgICAgICAgIC8v
IGJlaGF2aW9yIHdoZW4sIGZvciBpbnN0YW5jZSwgd29yZC1zZWxlY3RpbmcgYmFja3dhcmRzIHN0
YXJ0aW5nIHdpdGggdGhlIGNhcmV0IGluCiAgICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEg
d29yZCBhbmQgdGhlbiB3b3JkLXNlbGVjdGluZyBmb3J3YXJkLCBsZWF2aW5nIHRoZSBjYXJldCBp
biB0aGUKQEAgLTE0MDcsNyArMTQxNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShF
QWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAg
ICAgICAgLy8gU3RhbmRhcmQgTWFjIGJlaGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91bmRh
cnkgaXMgZ3JvdyB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCiAgICAgICAg
IC8vIGJhc2UgaW4gcGxhY2UgYW5kIG1vdmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4dFZp
ZXcuCi0gICAgICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBt
X3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAgICAg
ICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxl
Y3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAgICAg
IHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3Np
bmdCbG9jaygpOwpAQCAtMTUxNyw3ICsxNTI0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0aWMK
ICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBtX2dyYW51
bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0Rp
cmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8
IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0
aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwg
YWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE1
NzUsNyArMTU4Miw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlv
bigpCiAgICAgbV9jYXJldEJsaW5rVGltZXIuc3RvcCgpOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0
byogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChhdXRvKiB2aWV3
ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5j
bGVhclNlbGVjdGlvbigpOwogCiAgICAgc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFy
YW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFs
aWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY1
NSw5ICsxNjYyLDkgQEAgc3RhdGljIGJvb2wgaXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1
dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisg
ICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHVwZGF0
ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKKyAgICB1cGRhdGVT
ZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAgICAgcmVjb21w
dXRlQ2FyZXRSZWN0KCk7CiAgICAgaWYgKGluc2lkZUZpeGVkKQogICAgICAgICAqaW5zaWRlRml4
ZWQgPSBtX2NhcmV0SW5zaWRlUG9zaXRpb25GaXhlZDsKQEAgLTE2NzUsMTAgKzE2ODIsMTAgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICBpZiAoIXNob3Vs
ZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIW1f
ZnJhbWUpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgRnJhbWVW
aWV3KiB2ID0gbV9kb2N1bWVudC0+dmlldygpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0xNjkwLDcgKzE2OTcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNv
bXB1dGVDYXJldFJlY3QoKQogICAgICAgICAgICAgY2xlYXJDYXJldFJlY3QoKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0ID0gbV9zZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KG1f
ZnJhbWUtPmRvY3VtZW50KCksIHZpc2libGVTdGFydCkpIHsKKyAgICAgICAgICAgIGlmICh1cGRh
dGVDYXJldFJlY3QobV9kb2N1bWVudCwgdmlzaWJsZVN0YXJ0KSkgewogICAgICAgICAgICAgICAg
IGNhcmV0Tm9kZSA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgICAgICAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5ID0gdHJ1ZTsKICAgICAg
ICAgICAgIH0KQEAgLTE3MTUsNyArMTcyMiw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29t
cHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShURVhU
X0NBUkVUKQotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
cmVuZGVyVmlldygpKSB7CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5y
ZW5kZXJWaWV3KCkpIHsKICAgICAgICAgYm9vbCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250
ZW50RWRpdGFibGUgPSBtX3NlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtX3ByZXZp
b3VzQ2FyZXROb2RlICYmIG1fcHJldmlvdXNDYXJldE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkp
OwogICAgICAgICBpZiAoc2hvdWxkUmVwYWludENhcmV0KHZpZXcsIHByZXZpb3VzT3JOZXdDYXJl
dE5vZGVJc0NvbnRlbnRFZGl0YWJsZSkpIHsKICAgICAgICAgICAgIGlmIChtX3ByZXZpb3VzQ2Fy
ZXROb2RlKQpAQCAtMTg5NCwxMiArMTkwMSwxMSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250
YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgaWYgKCFpc1JhbmdlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBhdXRvKiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKKyAgICBpZiAoIW1fZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChw
b2ludCk7Ci0gICAgZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsK
KyAgICBtX2RvY3VtZW50LT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7CiAgICAg
Tm9kZSogaW5uZXJOb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogICAgIGlmICghaW5uZXJOb2Rl
IHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5
NjgsOSArMTk3NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudElu
UGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxs
KCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCi0g
ICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsK
KyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCk7CiAgICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKICAg
ICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KTsKICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQu
Y2FuU2VsZWN0QWxsKCkpIHsKQEAgLTIwMDAsOCArMjAwNCw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNlbGVjdEFsbCgpCiAgICAgICAgIGlmIChyb290KQogICAgICAgICAgICAgc2VsZWN0U3Rh
cnRUYXJnZXQgPSByb290LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHNlbGVj
dFN0YXJ0VGFyZ2V0ID0gZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CisgICAgICAgICAgICBy
b290ID0gbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RT
dGFydFRhcmdldCA9IG1fZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKCFyb290KQpAQCAtMjA1OCw5ICsyMDYyLDggQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwg
U2hvdWxkQ2wKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdl
ZCgpCiB7CiAgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7
Ci0gICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCgqbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAKLSAg
ICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKIAogI2lmIFVTRShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0
IGJsaW5raW5nIChibGlua3MgfCBkb2VzIG5vdCBibGluaykKQEAgLTIwNzEsNyArMjA3NCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAg
Ly8gQmVjYXVzZSBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAog
ICAgIC8vIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYg
dGhlIGZyYW1lIGlzIGFjdGl2ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhv
c2UgY29sb3JzIHdlcmUgcGFpbnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3Vt
ZW50LT5yZW5kZXJWaWV3KCkpCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50
LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAog
ICAgIC8vIENhcmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KQEAgLTIwODIsNyArMjA4
NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgp
CiAgICAgLy8gQmVjYXVzZSBTdHlsZTo6UmVzb2x2ZXI6OmNoZWNrT25lU2VsZWN0b3IoKSBhbmQK
ICAgICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFj
dGl2ZSwgd2UgaGF2ZSB0bwogICAgIC8vIHVwZGF0ZSBzdHlsZSBhbmQgdGhlbWUgc3RhdGUgdGhh
dCBkZXBlbmRlZCBvbiB0aG9zZS4KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50
LT5mb2N1c2VkRWxlbWVudCgpKSB7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvY3Vt
ZW50LT5mb2N1c2VkRWxlbWVudCgpKSB7CiAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVt
ZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5z
dHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKQEAgLTIxMDcsMTMgKzIxMTAsMTMgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZChib29sIGZsYWcpCiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246
OmlzRm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBt
X2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0Fj
dGl2ZSgpOworICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9kb2N1bWVudC0+cGFnZSgpICYmIG1f
ZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKIH0KIAogI2lm
IEVOQUJMRShURVhUX0NBUkVUKQotaW5saW5lIHN0YXRpYyBib29sIHNob3VsZFN0b3BCbGlua2lu
Z0R1ZVRvVHlwaW5nQ29tbWFuZChGcmFtZSogZnJhbWUpCitpbmxpbmUgc3RhdGljIGJvb2wgc2hv
dWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCkKIHsK
LSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpICYmIGZyYW1lLT5l
ZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKKyAg
ICByZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpICYmIGRvY3VtZW50
LT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsK
IH0KICNlbmRpZgogCkBAIC0yMTMyLDEyICsyMTM1LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIGJvb2wgcGFpbnRCbG9ja0N1cnNvciA9IG1fc2hvdWxk
U2hvd0Jsb2NrQ3Vyc29yICYmIG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiAhaXNMb2dpY2FsRW5k
T2ZMaW5lKG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgYm9vbCBjYXJldFJlY3RDaGFu
Z2VkT3JDbGVhcmVkID0gcmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAKLSAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAg
Ym9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOwogICAgIGJvb2wgc2hvdWxkQmxpbmsgPSAhcGFpbnRCbG9ja0N1cnNvciAmJiBj
YXJldElzVmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZyk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQs
IHN0b3AgdGhlIGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8vIGJs
YWNrIGNhcmV0IGluIHRoZSBuZXcgbG9jYXRpb24uCi0gICAgaWYgKGNhcmV0UmVjdENoYW5nZWRP
ckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5n
Q29tbWFuZChtX2ZyYW1lKSkKKyAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAh
c2hvdWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZG9j
dW1lbnQpKQogICAgICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAKICAgICAvLyBTdGFy
dCBibGlua2luZyB3aXRoIGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYg
d2UncmUKQEAgLTIxNTMsNyArMjE1Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFw
cGVhcmFuY2UoKQogICAgIH0KICNlbmRpZgogCi0gICAgUmVuZGVyVmlldyogdmlldyA9IG1fZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50
LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKQEAgLTIy
MDIsOCArMjIwNSw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eShD
YXJldFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCB0cmlnZ2VyIGEgc3luY2hyb25vdXMgbGF5b3V0IGhlcmUuCi0gICAg
aWYgKG1fZnJhbWUpCi0gICAgICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKCptX2ZyYW1lKTsKKyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgdXBkYXRlU2VsZWN0
aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKFRF
WFRfQ0FSRVQpCiAgICAgaWYgKG1fY2FyZXRQYWludCkgewpAQCAtMjI0NywxMCArMjI1MCwxMCBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBp
ZiAoaXNOb25lKCkgfHwgIWlzRm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29s
IGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVk
KCk7CisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJl
dEJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7CiAgICAgICAgIGlm
IChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9uLmJh
c2UoKSkpIHsKLSAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCku
c2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CisgICAgICAgICAgICBtX2RvY3Vt
ZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwg
Km1fZnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2
MiwxNiArMjI2NSwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElm
TmVlZGVkKCkKICAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNr
IGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwogICAgICAg
ICAgICAgLy8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZp
eCBhdCB0aGlzIHRpbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxl
KCkgJiYgIWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1l
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1f
ZnJhbWUpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5w
YXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1l
bnQtPnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogICAgIH0KIAogICAgIGlmIChjYXJldEJy
b3dzaW5nKQotICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZv
Y3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKKyAgICAgICAgbV9kb2N1bWVudC0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFt
ZSk7CiB9CiAKIHZvaWQgRHJhZ0NhcmV0Q29udHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUq
IGZyYW1lLCBHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpIGNvbnN0CkBAIC0yMzAwLDE2ICsyMzAzLDE2
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNo
YW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0g
ICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1l
bnQtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9CiAKIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2Vs
ZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBj
b25zdAogewotICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fZG9jdW1l
bnQpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICB1cGRhdGVTZWxlY3Rpb25C
eVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9
IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRp
bmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9k
b2N1bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlmICghcmVuZGVyVmlldykKICAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKIApAQCAtMjMyNSwxNCArMjMyOCwxNCBAQCBGbG9hdFJlY3QgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9W
aXNpYmxlQ29udAogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRS
ZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVp
Z2h0IHRleHRSZWN0SGVpZ2h0KSBjb25zdAogewotICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpCisgICAgaWYgKCFtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRl
bnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFy
ZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRl
bnRSZWN0ID0gbV9kb2N1bWVudC0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJs
ZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwogICAgIGZvciAoYXV0byYgcmVj
dCA6IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2Us
IHRleHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkp
KSB7CiAgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2
aXNpYmxlQ29udGVudFJlY3QpOwogICAgICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0
eSgpKQpAQCAtMjM2NCw3ICsyMzY3LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZv
ckZvcm0oRWxlbWVudCogc3RhcnQpCiBIVE1MRm9ybUVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpj
dXJyZW50Rm9ybSgpIGNvbnN0CiB7CiAgICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhl
IGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlz
LgotICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1l
bnQoKTsKKyAgICBFbGVtZW50KiBzdGFydCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7
CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgc3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmVs
ZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQpAQCAtMjQwNyw4ICsyNDEwLDggQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9k
ZSwgY29uc3QgU2Nyb2wKICAgICAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJs
ZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwg
U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogICAgICAgICAgICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAg
ICAgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFt
ZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgp
LmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFt
ZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZl
YWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAjZWxzZQpAQCAtMjQyNiwxNyArMjQyOSwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiAgICAgLy8gUHV0IGEgY2FyZXQgaW5zaWRlIHRo
ZSBib2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZWRpdGFibGUgKGVpdGhlciB0aGUKICAgICAv
LyBlbnRpcmUgV2ViVmlldyBpcyBlZGl0YWJsZSBvciBkZXNpZ25Nb2RlIGlzIG9uIGZvciB0aGlz
IGRvY3VtZW50KS4KIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50
KCk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0g
bV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGlmICghaXNO
b25lKCkgfHwgIShkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3Npbmcp
KQorICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRC
cm93c2luZ0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC0+aGFz
RWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQogICAgICAgICByZXR1cm47CiAjZWxz
ZQotICAgIGlmICghZG9jdW1lbnQgfHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChW
aXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHko
KSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAoIW1fZG9jdW1l
bnQgfHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9z
ZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpKSB8fCAhbV9kb2N1bWVu
dC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIGlm
IChhdXRvKiBib2R5ID0gZG9jdW1lbnQtPmJvZHkoKSkKKyAgICBpZiAoYXV0byogYm9keSA9IG1f
ZG9jdW1lbnQtPmJvZHkoKSkKICAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKQEAg
LTI0NDYsNyArMjQ0OCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZENoYW5nZVNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCiAgICAgaWYgKG1fZnJh
bWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHko
KSwgZmFsc2UpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5
KCksIGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFy
dCgpCkBAIC0yNDY0LDcgKzI0NjYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRT
aG93QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91
bGRTaG93QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAg
ICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAog
ICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKIH0KQEAgLTI0ODIsMTMgKzI0ODQsMTMgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6c2NoZWR1bGVBcHBlYXJhbmNlVXBkYXRlQWZ0ZXJTdHlsZUNoYW5nZSgp
CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKCkKIHsK
LSAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKCptX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1l
bnQ+IHByb3RlY3RvcigqbV9kb2N1bWVudCk7CiAgICAgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5
b3V0T3JTdHlsZUNoYW5nZSgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCkKIHsKLSAgICBpZiAoYXV0byogY2xpZW50
ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRv
clN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRS
ZWN0TmVlZHNVcGRhdGUoKTsKQEAgLTI3MjMsNyArMjcyNSw3IEBAIFJlZlB0cjxSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7
CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZG9jdW1lbnQtPmNyZWF0ZVJhbmdl
KCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxvY2F0aW9uKTsKICAgICByZXN1
bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoKTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBTRUxfREVG
QVVMVF9BRkZJTklUWSk7CkBAIC0yOTA0LDcgKzI5MDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzKQogICAgIGlmIChtX2NhcmV0Qmxpbmtz
ID09IGNhcmV0QmxpbmtzKQogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7IAorICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50
ID0gZmFsc2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZl
MzJjYWVkMTY1YTA1MDguLjVhYWY5YTA4OWIzYjE5ZGZhMDEwZWQwNzA5ZDQyZGVlYWUwYjVlYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAg
IFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKERvY3VtZW50KiA9IG51bGxw
dHIpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9y
RG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgIApAQCAtMzM4LDYgKzMzOCw3IEBAIHByaXZh
dGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAorICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlm
ZjlmMzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEy
NGNmMTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2ln
bmVkCiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAg
Ym9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNo
b0VuYWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNl
dHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFi
bGVkKQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZi
Li4yNzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3
ICsxNDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5
cGluZ1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUg
JiYgIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGlu
ZyBzdHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4
IGU5MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1
MTM2OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxl
Y3Rpb24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1Nl
bGVjdGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9y
KCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
LmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9y
bU92ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChl
bmRQb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAg
ICAgICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxl
KHR5cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFk
OTM5ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQx
M2YwNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9u
KCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1
Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li40OTY5OTE5ZDkxYTExNDk1
YzI5OGM5MmE3NjY3MjZiOTJlMTY5NTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6
IENhbiB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3Jt
ZWQ/ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQg
YWZ0ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZy
YW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
ZGVzdGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQu
ICBUbyBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0
aG91dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUg
c2FtZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
dFNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4
ZTliYTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAt
NDAsNyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1
bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBo
YW5lZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1Nl
dCwgbV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewot
ICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAg
ICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KSkgJiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBz
ZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgz
NjZiNTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0
OThmZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAt
OTgsOCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQo
KQogICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a2VyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNw
ZWxsQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50
KQogICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNr
ZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzEx
NCw3IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50
KiBTcGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJh
bWUucGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JD
bGllbnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVj
a2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVj
a2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1l
LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdl
JiByYW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52
b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1v
dmUocmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3By
b2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBj
bGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tl
cjo6ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0x
OTksNyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vz
c2luZ1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJl
cGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFz
dFByb2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkK
ICAgICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTks
NyArMjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3RE
YXRhLmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkK
ICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAg
ICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5k
b2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5j
aGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgp
LCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5
ZmI1YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4
YTg2NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03
Niw3ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1l
Jik7CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hl
Y2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEw
Niw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAg
ICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0
Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIw
ODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcg
KzY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0
b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3Jy
ZWN0ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVu
YXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0
ZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpT
cGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCmluZGV4IDVhNmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUu
LmYzMTI4ZDdlYTU3ZDU2NzYzOTE4YTMxM2FiNzdiNjY0OWU1YjY0MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5n
Q29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5k
IGNvbW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24o
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUg
Y29tcG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAg
IGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5n
Q29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlv
bik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9z
aXRpb25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRT
cGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCAr
MTgwLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0
ZXJHcmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9j
dW1lbnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZy
YW1lKCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsK
KyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0
aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUo
VGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5n
KTsKQEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBG
SVhNRTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9z
ZSBhIG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAg
ICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1
cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdD
b21tYW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KGRvY3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAm
IElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVu
dFNwZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRp
b25zLAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtl
eSwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12
b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9p
ZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rp
b24oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBv
c2l0aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRv
cigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xp
bmUodGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGlu
c2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVl
ZCB0byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0
byBGcmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9u
cywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAg
IExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAg
ICAgU3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQs
IHNlbGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlv
blBlbmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxl
Y3Rpb24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0
aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1
cmUsIHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3Vz
dG9tIHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBv
ZiB0aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkg
eworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBp
ZiAobGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvcklu
c2VydGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2Vs
ZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYs
MTIgKzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8g
Y21kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0
LCBvcHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1h
bmQoZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50
U2VsZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1l
KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
KmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9j
dW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9u
KG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlv
bnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+
c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90
aWZ5QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1
bWVudCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBp
bmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9w
ZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1
dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcs
OSArMjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
RG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwg
b3B0aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21t
YW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkK
K1JlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29t
cG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RF
ZGl0Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRD
b21tYW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFs
YXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwg
IXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09w
ZW5Gb3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYg
KzMxMCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFu
ZFVudGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxp
bmdJbml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0
aW5nQWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25J
Zk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRI
YXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGlu
Z1NlbGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00
MzYsMTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
Ci0KICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0
b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1l
LmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAm
JiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisg
ICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRp
dG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5n
QWNjZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYg
KCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxl
Y3Rpb24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2Ug
bmVlZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlw
ZSkKICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAg
IGlmIChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8
fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFu
ZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1h
bmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRl
eHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigp
Lm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCks
ICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8g
SWYgdGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNv
dWxkIGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdv
cmRTaWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQs
IHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1Nl
bGVjdGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNl
KTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYg
KzQ4NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5k
KEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAg
ICAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJl
dHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBm
cmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6
OmNyZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxB
cHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5n
Q29tbWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5m
cmFtZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9y
QWRkZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCku
YXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVk
aXRpbmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFs
c28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQg
aGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVu
dFNwZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21t
YW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNr
aW5nIGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50
IGlzc3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBh
cyBtaXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlw
ZUZvckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5k
aWYKIH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4
dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAg
ICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nl
c3NpYmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51
dGY4KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJl
cGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNl
cnRlZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlw
aW5nLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxl
dGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAs
OSArNTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xp
bmVzKGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlv
blR5cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJh
bGFuY2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rp
b24oKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0
VGV4dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
ZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2li
aWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZy
YW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNl
ZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwg
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
fQogCkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNl
cGFyYXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAg
cmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVw
bGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KCkKICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxv
Y2txdW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRD
b250ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIs
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCkt
PnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsK
IH0KIApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJs
ZVJvb3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc0OCwyMCArNzIyLDIwIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3Nl
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxk
IHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNs
b3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQo
KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0
aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5p
c0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmICghd2ls
bEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxl
Y3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
c2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tp
bGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBl
bmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0
ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JE
ZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC03NzgsMTAgKzc1Miw5IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGJvb2wgc2hvdWxkQWRkCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2lsbFJp
bmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQo
KS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0ZU1h
cmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25B
ZnRlclVuZG87CkBAIC04NTUsMTMgKzgyOCwxMyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMg
YnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRn
ZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwot
ICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5n
KGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hv
dWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJp
dHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKQEAgLTg3MSw3ICs4NDQs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxk
QWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRp
dG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7
CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRp
bmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBt
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRG
b3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5
YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlv
bnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYs
IE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1l
Kik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1
cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5G
b3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5
cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
RG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBp
bmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmlu
YWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7
CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCos
IERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBp
bmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdD
b21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBS
ZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRkYjU2MTI5MmU3OTQyNzdiZmI3
NmQ1OWUuLjkxMGRlZWY3MDg0ZDFmZGM4ZTBmOWFlMDZlOTEzYTExYzc2M2YxOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtODAsOCArODAsOCBA
QCBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0
cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKgogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFy
YW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhj
bHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICByZXR1cm4g
c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQ
cml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVN
RU5UKQpAQCAtMTA3LDEwICsxMDcsMTAgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBl
c0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogdm9p
ZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmli
dXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0
cmluZ0Zyb21TZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAK
ICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY29udGVudE9y
aWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQo
KTsKKyAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2RvY3VtZW50Lm9yaWdpbklkZW50aWZp
ZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNh
blNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0
ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5SVEZE
Rm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRG
REZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7CkBAIC0xMjUsMTAgKzEyNSwxMCBA
QCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFz
dGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJE
YXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIAogICAgIFBhc3RlYm9hcmRXcml0ZXJEYXRhOjpXZWJDb250
ZW50IHdlYkNvbnRlbnQ7Ci0gICAgd2ViQ29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5k
b2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOworICAgIHdlYkNvbnRl
bnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9h
cmQoKTsKICAgICB3ZWJDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5
T3JEZWxldGUoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxl
Y3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3Jt
YXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9y
bWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lk
IEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRX
cml0ZXJEYXRhKQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OnNlbGVjdGlvbkluV2Vi
QXJjaGl2ZUZvcm1hdCgpCiB7Ci0gICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlRnJvbVNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5
V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAg
IGlmICghYXJjaGl2ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpKTsK
QEAgLTE3MSwxMSArMTcxLDExIEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rp
b25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAg
ICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1f
ZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBpZiAo
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50
LmZyYW1lKCksIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSW5z
ZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21l
bnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5n
KTsKICAgICAgICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVk
aXRvcjo6ZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQogLy8gT3Ig
cmVmYWN0b3Igc28gaXQgZG9lcyBub3QgZG8gdGhhdC4KIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
LCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCiB7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgY29udGV4dCwgYWxs
b3dQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZy
YW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKICAgICBwYXN0ZWJvYXJkLnJlYWQocmVh
ZGVyKTsKICAgICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5U
ZXh0OwogICAgIHJldHVybiBXVEZNb3ZlKHJlYWRlci5mcmFnbWVudCk7CkBAIC0yMzQsNyArMjM0
LDcgQEAgdm9pZCBFZGl0b3I6OnRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0cmluZ0Zyb21TZWxlY3Rpb24gPSBtX2ZyYW1l
LmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5z
ZmVyKCkpOworICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuZnJhbWUo
KS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJh
bnNmZXIoKSk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwog
ICAgIHR5cGVzLmFwcGVuZChTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKaW5kZXggNzA2ZTgyNjczZjA4
MTMzMzczNWU1ODcxMjc4YzhkNDUwZDBiNjliYy4uMWRhODFmNzE4ZDkyMzU4MjNiMDM4MWZlMmJi
ZGUxMTlkODI1MDZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRp
dG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3Bw
CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3Rl
Ym9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJu
OwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2Fy
ZCwgbV9mcmFtZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1Bs
YWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwg
Km1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAm
JiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1
b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2
b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVi
b2FyZCkKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAgICBw
YXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCk7CiAgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFU
cmFuc2ZlcigpOwotICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJl
c29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAg
bV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVk
KCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdW
aXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29s
dmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9k
b2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVk
KCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
Tm8pOwogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQogCiBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFz
dGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQs
IGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkRGF0YShwYXN0ZWJvYXJkLCBtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4
dCwgY2hvc2VQbGFpblRleHQpOworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJv
YXJkRGF0YShwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1Bs
YWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggZjJhMmQ1MmFjNWFiZjRl
NGYxMzExM2NhMjVkMWIyMGExNzM4ZmE2OS4uMWJmY2E1OTEzZDY0NjQxYzA4MmZlZjc2NWFiYTE5
ZTkwOTBhZDE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAt
ODMsNyArODMsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNl
V3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgIC8vIElmIHRoZSB0ZXh0
IGhhcyBsZWZ0IG9yIHJpZ2h0IGFsaWdubWVudCwgZmxpcCBsZWZ0LT5yaWdodCBhbmQgcmlnaHQt
PmxlZnQuIAogICAgIC8vIE90aGVyd2lzZSwgZG8gbm90aGluZy4KIAotICAgIGF1dG8gc2VsZWN0
aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0eWxlID0gRWRpdGlu
Z1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0
eWxlKCkpCiAgICAgICAgICByZXR1cm47CiAKQEAgLTEyNywxNCArMTI3LDE0IEBAIHZvaWQgRWRp
dG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRp
bmdEaXJlY3Rpb24gZGlyCiAgICAgaWYgKCFuZXdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRF
bGVtZW50KCk7CisgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LmZvY3Vz
ZWRFbGVtZW50KCk7CiAgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIChpczxIVE1MVGV4dEFyZWFF
bGVtZW50PigqZm9jdXNlZEVsZW1lbnQpIHx8IChpczxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpCiAgICAgICAgICYmIChkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNl
ZEVsZW1lbnQpLmlzVGV4dEZpZWxkKCkKICAgICAgICAgICAgIHx8IGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNTZWFyY2hGaWVsZCgpKSkpKSB7CiAgICAgICAg
IGlmIChkaXJlY3Rpb24gPT0gV3JpdGluZ0RpcmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCku
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhbGlnbkF0dHIsIG5ld1ZhbHVlKTsK
LSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAg
ICAgIG1fZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJs
ZVN0eWxlcygpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZW1vdmVzIHN0eWxlcyB0aGF0IHRo
ZSB1c2VyIGNhbm5vdCBtb2RpZnkgYnkgYXBwbHlpbmcgdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCiAg
ICAgCi0gICAgYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2ZyYW1l
LmRvY3VtZW50KCktPmJvZHlPckZyYW1lc2V0KCkpOworICAgIGF1dG8gZWRpdGluZ1N0eWxlID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUobV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpKTsKICAgICBh
dXRvIGRlZmF1bHRTdHlsZSA9IGVkaXRpbmdTdHlsZS0+c3R5bGUoKS0+bXV0YWJsZUNvcHkoKTsK
ICAgICAKICAgICAvLyBUZXh0IHdpZGdldHMgaW1wbGVtZW50IGJhY2tncm91bmQgY29sb3Igdmlh
IHRoZSBVSVZpZXcgcHJvcGVydHkuIFRoZWlyIGJvZHkgZWxlbWVudCB3aWxsIG5vdCBoYXZlIG9u
ZS4KQEAgLTIxOSw3ICsyMTksNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiB7CiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5U
ZXh0ID0gb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwotICAg
IFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKG1fZnJhbWUsICpyYW5nZSwgYWxsb3dQbGFpblRleHQp
OworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5n
ZSwgYWxsb3dQbGFpblRleHQpOwogICAgIGludCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNs
aWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXM7ICsraSkgewogICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxl
Z2F0ZShpKTsKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVi
b2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAKIHZv
aWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4m
JiBkaWN0YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0YSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRpY3RhdGlvblBocmFzZXMuaXNFbXB0eSgp
KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXND
aGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgLy8gU29t
ZSBkYXkgd2UgY291bGQgbWFrZSB0aGVtIFVuZG9hYmxlLCBhbmQgbGV0IGNhbGxlcnMgY2xlYXIg
dGhlIFVuZG8gc3RhY2sgZXhwbGljaXRseSBpZiB0aGV5IHdpc2guCiAgICAgY2xlYXJVbmRvUmVk
b09wZXJhdGlvbnMoKTsKIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICBlbGVtZW50LnJlbW92ZUNoaWxk
cmVuKCk7CiAKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRP
ZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogCiAgICAgLy8g
QXMgYSBzaWRlIGVmZmVjdCB0aGlzIGZ1bmN0aW9uIHNldHMgYSBjYXJldCBzZWxlY3Rpb24gYWZ0
ZXIgdGhlIGluc2VydGVkIGNvbnRlbnQuIE11Y2ggb2Ygd2hhdAogICAgIC8vIGZvbGxvd3MgaXMg
bW9yZSBleHBlbnNpdmUgaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24sIHNvIGNsZWFyIGl0IHNpbmNl
IGl0J3MgZ29pbmcgdG8gY2hhbmdlIGFueXdheS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNs
ZWFyKCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgLy8gY2xl
YXIgb3V0IGFsbCBjdXJyZW50IGNoaWxkcmVuIG9mIGVsZW1lbnQKICAgICBlbGVtZW50LnJlbW92
ZUNoaWxkcmVuKCk7CkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKICAgICBz
ZWxlY3Rpb24uc2V0QmFzZSh2aXNpYmxlUG9zKTsKICAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KHZp
c2libGVQb3MpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24p
OwogCiAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpAQCAtMzg5
LDcgKzM4OSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBT
dHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAvLyBoYXZlIGEgc3RhbGUgc2VsZWN0aW9u
Lgogdm9pZCBFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25J
Zk9wZW5Gb3JNb3JlVHlwaW5nKCkKIHsKLSAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRp
dENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygmbV9mcmFtZSwg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZW5z
dXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmco
bV9kb2N1bWVudCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bGlid3BlL0VkaXRvckxpYldQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9F
ZGl0b3JMaWJXUEUuY3BwCmluZGV4IDVkMTVhNjQ2MWM1NjliNjNhY2M2MTU3OTVlMzQ0NzcwOGE0
ZDU1NzcuLjEyZmQ2YTQzZWEwNWEyYTBlNzJiNzRiYTcyZDk2Mjg2NDcwNWJhZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcApAQCAtNjcsOCAr
NjcsOCBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2Fy
ZCYgcGFzdGVib2FyZCkKIHsKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29u
dGVudDsKICAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRy
YW5zZmVyKCk7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVz
b2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBt
X2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zp
c3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2
ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKQEAgLTg0
LDcgKzg0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAg
ICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2Zy
YW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1
bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93
UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFn
bWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbQppbmRleCAyOTE4MjQ2NWQ4Y2YyOTM5Y2IyMTYwMjQ5ZmVhMmFlMTFlYTE3YzdjLi45
ODQxYzk0ZmFhMjEzZmQwODJlNTgxMjBlMWEyYjc0ZmEzODY5OTNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPgogdm9pZCBFZGl0b3I6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdp
dGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9
KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0
ZWJvYXJkKTsKQEAgLTEzNywxNiArMTM3LDE2IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZy
b21QYXN0ZWJvYXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7
CiAgICAgQVNTRVJUKG5vZGUpOwogCi0gICAgaWYgKCZub2RlLT5kb2N1bWVudCgpICE9IG1fZnJh
bWUuZG9jdW1lbnQoKSkKKyAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKSAhPSBtX2RvY3VtZW50KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKyAg
ICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RvcihtX2RvY3VtZW50KTsKICAgICBhdXRvIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlv
bklzQWZ0ZXJBbmNob3IpKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgpKSwgRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9j
dXMpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAKICAg
ICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwogCi0gICAgaWYgKCFtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsK
KyAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkgewogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQo
cGFzdGVib2FyZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMjAsNyArMjIwLDcgQEAg
c3RhdGljIHZvaWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVtZW50LCBSZWZQdHI8SW1hZ2U+
JiBpbWFnZSwgQ2FjaGVkSW1hZ2UqJgogCiB2b2lkIEVkaXRvcjo6c2VsZWN0aW9uV2lsbENoYW5n
ZSgpCiB7Ci0gICAgaWYgKCFoYXNDb21wb3NpdGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5n
ZXMoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghaGFzQ29tcG9z
aXRpb24oKSB8fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FuY2VsQ29tcG9zaXRpb24o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4IDA5NjRjY2I0
ZmJkN2FjMzZiMThmMzQxNmY0MjBhMjdkYmU5NjkxNzguLjJmNzJjYjRmMDA0NTFjYmJlNDQyYzBl
OWEzMTI2N2M4YjhjMjBkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2lu
L0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2lu
LmNwcApAQCAtNDIsNyArNDIsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudChtX2ZyYW1lLCAq
cmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hv
c2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBh
c3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBv
cHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5U
ZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVu
dCk7CkBAIC02OSw5ICs2OSw5IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3Jl
YXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKFBsYXRmb3JtRHJhZ0RhdGEmCiBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCYgcGFzdGVib2FyZCwgUmFuZ2UmLCBib29sIC8qYWxsb3dQbGFpblRleHQqLywgYm9vbCYgLypj
aG9zZVBsYWluVGV4dCovKQogewogICAgIGlmIChDT01QdHI8SURhdGFPYmplY3Q+IHBsYXRmb3Jt
RHJhZ0RhdGEgPSBwYXN0ZWJvYXJkLmRhdGFPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EcmFnRGF0YSwgbV9mcmFtZSk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJh
Z0RhdGEsICptX2RvY3VtZW50LmZyYW1lKCkpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50
RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRhTWFwKCksIG1fZnJhbWUpOworICAg
IHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0
YU1hcCgpLCAqbV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYzcxNmQ3MjgwZjQ2MmNi
NTY3Mzc1N2I0YmE0ZTNiMjRhYmVlOGRlMC4uMjkyNzQ3M2E0YTU5NjM4YmM4MmFmYmI5MDRiZWE2
M2FkMDUyMzQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC01NDEs
MTEgKzU0MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wKCkKIHZvaWQgRnJhbWVMb2FkZXI6
OndpbGxUcmFuc2l0aW9uVG9Db21taXR0ZWQoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIHdoZW4gYSBmcmFtZSBpcyBzdGlsbCBmdWxseSBpbiBwbGFjZSAobm90IGNhY2hlZCwg
bm90IGRldGFjaGVkKSwgYnV0IHdpbGwgYmUgcmVwbGFjZWQuCisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2ZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAg
ICBpZiAoZG9jdW1lbnQtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8g
VGhlIHRleHQgd2FzIGFscmVhZHkgcHJlc2VudCBpbiBET00sIHNvIGl0J3MgYmV0dGVyIHRvIGNv
bmZpcm0gdGhhbiB0byBjYW5jZWwgdGhlIGNvbXBvc2l0aW9uLgotICAgICAgICBtX2ZyYW1lLmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBl
ZGl0b3JDbGllbnQgPSBtX2ZyYW1lLmVkaXRvcigpLmNsaWVudCgpKSB7CisgICAgICAgIGRvY3Vt
ZW50LT5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICAgICAgaWYgKEVkaXRvckNs
aWVudCogZWRpdG9yQ2xpZW50ID0gZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKSB7CiAgICAg
ICAgICAgICBlZGl0b3JDbGllbnQtPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUp
OwogICAgICAgICAgICAgZWRpdG9yQ2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFt
ZSk7CiAgICAgICAgIH0KQEAgLTU2OCw3ICs1NzEsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9z
ZVVSTCgpCiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGljeSk7CiAgICAgCi0gICAg
bV9mcmFtZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOworICAgIGlmIChjdXJy
ZW50RG9jdW1lbnQpCisgICAgICAgIGN1cnJlbnREb2N1bWVudC0+ZWRpdG9yKCkuY2xlYXJVbmRv
UmVkb09wZXJhdGlvbnMoKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTCgpCkBA
IC01ODAsNyArNTg0LDYgQEAgYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTCgpCiAgICAgfQog
CiAgICAgbV9mcmFtZS5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuY2FuY2VsKCk7Ci0gICAgbV9mcmFt
ZS5lZGl0b3IoKS5jbGVhckxhc3RFZGl0Q29tbWFuZCgpOwogCiAgICAgbV9pc0NvbXBsZXRlID0g
ZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9zZSA9IGZhbHNlOwpAQCAtNjQzLDggKzY0
Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRDbGVhcldpbmRvd05hbWUoY29uc3QgRnJh
bWUmIGZyYW1lLCBjb25zdCBEb2N1bWVudCYgbmV3CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFy
KERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wg
Y2xlYXJTY3JpcHRPYmplY3RzLCBib29sIGNsZWFyRnJhbWVWaWV3LCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBoYW5kbGVET01XaW5kb3dDcmVhdGlvbikKIHsKLSAgICBtX2ZyYW1lLmVkaXRvcigp
LmNsZWFyKCk7Ci0KICAgICBib29sIG5lZWRlZENsZWFyID0gbV9uZWVkc0NsZWFyOwogICAgIG1f
bmVlZHNDbGVhciA9IGZhbHNlOwogCkBAIC02NzMsNyArNjc0LDYgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFyV2luZG93UHJvcGVydGll
cywgYm9vbAogICAgICAgICAgICAgbV9mcmFtZS50cmVlKCkuc2V0TmFtZShudWxsQXRvbSgpKTsK
ICAgICB9CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnByZXBhcmVGb3JEZXN0cnVjdGlvbigp
OwogICAgIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuY2xlYXIoKTsKIAogICAgIGlmIChjbGVhckZy
YW1lVmlldyAmJiBtX2ZyYW1lLnZpZXcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMzg1ZTM3
YTZkMGM5MGU2MzNhM2I3YjQyODcyYzYxNmUzODA4NjQyNi4uMjkwN2I0ODViOTRjNjZhYzUwNjg1
Yzk5ZGMxNWRkNWVlZWZmY2QwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTE1Niw4ICsxNTYs
NiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAgICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVy
KG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxlcj4oKnRoaXMpKQogICAgICwgbV9vd25l
ckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9zY3JpcHQobWFrZVVuaXF1ZVJlZjxTY3Jp
cHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2VkaXRvcihtYWtlVW5pcXVlUmVmPEVkaXRv
cj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rpb24obWFrZVVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlv
bj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NB
bmltYXRpb25Db250cm9sbGVyPigqdGhpcykpCiAgICAgLCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVu
dFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV90ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0
Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTU1NCw3ICs1NTIsNyBAQCBib29sIEZyYW1lOjpyZXF1ZXN0
RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6OkRlbmllZDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6Ok5v
dFJlcXVlc3RlZFlldDogewotICAgICAgICBhdXRvKiBjbGllbnQgPSBtX2VkaXRvci0+Y2xpZW50
KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9IGVkaXRvcigpLmNsaWVudCgpOwogICAgICAgICBp
ZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTM3LDcgKzkzNSw3
IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21G
YWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQo
KTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICAg
ICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0YW5k
YWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTogSG93IHRvIGhhbmRsZSBjb21wb3Vu
ZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFyaWZp
Y2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDNkNDNhOTRiZWE5NTU2Yzk4ZGM3NDIzYWI3ZWFk
OWE5MmE1MmM2ZmUuLjA5MzJhODNjYjY3NGY2ZjhjOTYxMWVkOWY2OTk5ZDE3YjYyZDE1M2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0RnJh
bWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgpAQCAtMTYzLDE0ICsxNjQsMTQgQEAgcHVi
bGljOgogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwogICAgIEZyYW1lVmlldyogdmll
dygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQot
ICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAg
ICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9CisgICAg
Y29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3Io
KTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgeyByZXR1cm4gbV9ldmVudEhh
bmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgRnJhbWVMb2FkZXImIGxvYWRlcigpIGNvbnN0
OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXImIG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0K
LSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gZG9j
dW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBGcmFt
ZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRp
b24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KICAgICBjb25zdCBDU1NBbmlt
YXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNv
bnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzksNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1
bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7
Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7Ci0gICAgVW5pcXVlUmVmPEZyYW1lU2Vs
ZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxl
cj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2
Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZS4uM2VlZTQyZmYwY2QxZTczY2YwMWIyOTVlOThkMjg1NGU5
YmI3Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC02OCwyMSAr
NjgsMTYgQEAgUmVmPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBU
ZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKIAogUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmRpY2F0b3JP
cHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNl
bnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCiB7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgUmVmPERv
Y3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKIAot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IoKmZyYW1lKTsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24g
b2xkU2VsZWN0aW9uID0gZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9w
dGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlv
bnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9uOjpEb05vdFNldEZvY3VzKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQo
VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5k
aWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwg
eyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7Cisg
ICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZShkb2N1bWVudCwgeyBT
aW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAg
ICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOwogCkBAIC05MSw3ICs4Niw3IEBAIFJlZlB0cjxUZXh0
SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJh
bmdlLCBUZXh0SW5kCiAKICAgICBib29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVS
YW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBt
YXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQorICAgIGlmICghaW5pdGlhbGl6ZUlu
ZGljYXRvcihkYXRhLCAqZG9jdW1lbnQtPmZyYW1lKCksIHJhbmdlLCBtYXJnaW4sIGluZGljYXRl
c0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVy
biBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJh
Zy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CmluZGV4IGQ2YmM3YjFlNmYwM2UzYjQ4YWYw
NDE4YzY1NTA0YTRkMjEzN2MxYWMuLmU1YmRkMmEwYmZkODk1MmQ5NzY2YTQzN2NhY2VhNDY2NDg5
Nzc4NjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhw
ZWN0ZWQudHh0CkBAIC00LDYgKzQsNyBAQCBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpbwogRURJVElO
RyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2Yg
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMCBvZiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDUgb2YgI3RleHQgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
Tm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdE
aWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBs
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397416</attachid>
            <date>2020-04-23 19:53:32 -0700</date>
            <delta_ts>2020-04-23 19:56:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200423195331.patch</filename>
            <type>text/plain</type>
            <size>221887</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uNzQxYWZkNjAxMWVhNWZiMTE3NDg3YWU2ZTczMTE0
Nzc2NDA5ZmY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAyMC0wNC0yMyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFuYWdlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBw
bGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9NYXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVk
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eURpY3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5n
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0
eWxlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVy
Z2VQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5w
dXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdy
YXBoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVB
bmRBcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2Fu
REhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2hvdWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRo
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0
aFNtYXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVu
dFRhcmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBh
c3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpsZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRB
dENhcmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0
aW9uVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVj
dGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50
T2ZBdHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92
ZXJ3cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRp
bmdTdGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9j
dW1lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29w
ZTo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFu
ZDo6Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUg
Y29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5
TW91c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9y
UGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmN1cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6
aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRp
ZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVk
KToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNl
bGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlR5
cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5l
d2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVh
a0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1
b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdp
dGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0Rp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0
eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRT
ZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndwZS9F
ZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvd2lu
L0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAt
MDQtMTMgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tn
cm91bmQgaW1hZ2VzIHNob3VsZCBmaWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlz
dGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNm
NGYxZDM3NGE2NmJkYjI5Li45MTlhM2E4NTk0ZDAwYTNiNGVkNzAzYzljZTBhMzY2MTkyZjQ4YTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6
RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRD
bGFzc2VzLCB1bnNpZwogICAgICwgbV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRh
dGlvbihmcmFtZSkpCiAgICAgLCBtX2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpKQogICAgICwgbV91bmRvTWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkK
KyAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3Nl
bGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRv
IGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0y
NTkwLDYgKzI1OTIsOCBAQCB2b2lkIERvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQog
ICAgICAgICBwYWdlKCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKEhUTUxNZWRpYUVsZW1lbnRJbnZh
bGlkSUQpOwogICAgIH0KIAorICAgIGVkaXRvcigpLmNsZWFyKCk7CisgICAgc2VsZWN0aW9uKCku
cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CiAgICAgZGV0YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBF
TkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMzRmZDAwZTE1
Yjg4ZDcyMmU5NWE5OWI1Y2NiZjBiMDA1YjdmODI3ZS4uNzczN2ZkOTg0OGVhMDdkMzg2YTFiMWUx
ZjU0MjFiZGI3ODZjM2UwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTExOSw2ICsxMTksNyBA
QCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5l
OwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRpdGluZ0JlaGF2aW9yOworY2xhc3MgRWRp
dG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3Mg
RXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjcsNiArMTI4LDcgQEAgY2xhc3MgRmxvYXRSZWN0
OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3JtQ29udHJvbGxlcjsKIGNsYXNzIEZyYW1l
OworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBGdWxsc2Ny
ZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQ7CkBAIC0xNTc2LDYgKzE1NzgsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQo
KSB7IG1faGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQgPSB0cnVlOyB9CiAgICAgYm9v
bCBoYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
VmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQ7IH0KIAorICAgIEVkaXRvciYgZWRpdG9yKCkg
eyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZWRpdG9yOyB9CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0
dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisKIHByb3RlY3RlZDoKICAgICBlbnVtIENv
bnN0cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVy
ID0gMSA8PCAxIH07CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9
IERlZmF1bHREb2N1bWVudENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpA
QCAtMjExNiw2ICsyMTIzLDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI+IG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiAKICAg
ICBIYXNoTWFwPEVsZW1lbnQqLCBFbGVtZW50SWRlbnRpZmllcj4gbV9pZGVudGlmaWVkRWxlbWVu
dHNNYXA7CisKKyAgICBVbmlxdWVSZWY8RWRpdG9yPiBtX2VkaXRvcjsKKyAgICBVbmlxdWVSZWY8
RnJhbWVTZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwogfTsKIAogRWxlbWVudCogZXZlbnRUYXJnZXRF
bGVtZW50Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0
ZXJhdG9yLmNwcAppbmRleCAxYTZiNTg1NmEzNzU5ZjhkYTc4ZjMwMmM2ZGY0ZThhMDEzMWIwYTll
Li4zNjcwZTE5ZmY0MzBmZWJlZWFmODQyOWE3MmEyMTZmZmU1ZjlkYWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCkBAIC0xNDUsMzUgKzE0NSw3IEBAIGJvb2wgUG9z
aXRpb25JdGVyYXRvcjo6YXRFbmRPZk5vZGUoKSBjb25zdAogCiBib29sIFBvc2l0aW9uSXRlcmF0
b3I6OmlzQ2FuZGlkYXRlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fYW5jaG9yTm9kZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fYW5jaG9y
Tm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNp
YmlsaXR5OjpWaXNpYmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocmVuZGVy
ZXItPmlzQlIoKSkKLSAgICAgICAgcmV0dXJuICFtX29mZnNldEluQW5jaG9yICYmICFQb3NpdGlv
bjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlLT5wYXJlbnROb2RlKCkpOwotCi0g
ICAgaWYgKGlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiAhUG9zaXRp
b246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZSkgJiYgZG93bmNhc3Q8UmVuZGVy
VGV4dD4oKnJlbmRlcmVyKS5jb250YWluc0NhcmV0T2Zmc2V0KG1fb2Zmc2V0SW5BbmNob3IpOwot
Ci0gICAgaWYgKGlzUmVuZGVyZWRUYWJsZShtX2FuY2hvck5vZGUpIHx8IGVkaXRpbmdJZ25vcmVz
Q29udGVudCgqbV9hbmNob3JOb2RlKSkKLSAgICAgICAgcmV0dXJuIChhdFN0YXJ0T2ZOb2RlKCkg
fHwgYXRFbmRPZk5vZGUoKSkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2Fu
Y2hvck5vZGUtPnBhcmVudE5vZGUoKSk7Ci0KLSAgICBpZiAoIWlzPEhUTUxIdG1sRWxlbWVudD4o
Km1fYW5jaG9yTm9kZSkgJiYgaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKSB7Ci0gICAg
ICAgIFJlbmRlckJsb2NrRmxvdyYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpy
ZW5kZXJlcik7Ci0gICAgICAgIGlmIChibG9jay5sb2dpY2FsSGVpZ2h0KCkgfHwgaXM8SFRNTEJv
ZHlFbGVtZW50PigqbV9hbmNob3JOb2RlKSkgewotICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6
aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoYmxvY2spKQotICAg
ICAgICAgICAgICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNV
c2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9y
Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5v
bmUobV9hbmNob3JOb2RlKSAmJiBQb3NpdGlvbigqdGhpcykuYXRFZGl0aW5nQm91bmRhcnkoKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9hbmNo
b3JOb2RlID8gUG9zaXRpb24oKnRoaXMpLmlzQ2FuZGlkYXRlKCkgOiBmYWxzZTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggM2Y0ZmNiM2FhNjlmY2I1YWM4MTFiNGU4
Yzc5MWE4MTQ3YjM0ZmQ2OS4uYTlhYzkzODk3MjU0ZTZmODQ5MjU3ZDAwYmJmMTIwYzAzNzllZjA0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRl
bnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQorQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBt
X3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCkKLSAg
ICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogewogfQogCkBA
IC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0
b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24p
CiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGluZyBhdXRvY29ycmVjdGlvbiBi
ZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcigpIGJlbG93LgotICAg
IFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24g
PT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBi
b29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29u
c3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxs
b3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZSwgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIHJldHVybiAhbV9kb2N1
bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCiAgICAgaWYg
KG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwogCiAgICAgaWYgKG1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbikgewogICAg
ICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JE
aXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQpKTsKQEAgLTIyMCwxMiArMjIwLDEyIEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYgKEFsdGVybmF0aXZlVGV4dENsaWVudCog
Y2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwg
Y29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJh
bWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2Vs
ZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNw
ZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBSZWZQdHI8
RnJhbWU+IHByb3RlY3RvcihtX2RvY3VtZW50LmZyYW1lKCkpOworICAgIG1fZG9jdW1lbnQudXBk
YXRlTGF5b3V0KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2Vs
ZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAg
YXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmVuZCgpKTsKIAotICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKTsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAg
bWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6QXV0
b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwpAQCAtMjM2LDEyICsyMzYsMTIgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICBtX2lzRGlz
bWlzc2VkQnlFZGl0aW5nID0gZmFsc2U7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOiB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBz
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRP
ZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CiAgICAgICAg
IGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdl
KCk7Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdU
eXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9
LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgbnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBU
ZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJl
Y3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJh
bmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2NCw3ICsyNjQsNyBAQCB2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2lu
Z1BhcmFncmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0Q2hl
Y2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAg
ICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3JhbmdlV2l0aEFs
dGVybmF0aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzAyLDcgKzMwMiw3
IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNv
bnN0IFN0cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9
IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5h
dGl2ZSB8fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25l
ckRvY3VtZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2RvY3VtZW50
ICE9IHJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpOwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIAogRmxvYXRSZWN0IEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7
CisgICAgYXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOwogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jv
b3RWaWV3KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFk
cyhyYW5nZSkpKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbgog
CiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewotICAgIFZpc2libGVT
ZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRo
ZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVs
CiAgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0
aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8vIHVuZGVzaXJlZCBhdXRvY29y
cmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNv
bmZpcm0gdGhhdApAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uCiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENv
bXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExl
dmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGlj
YXRvcigpKQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbV9kb2N1
bWVudC5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbklu
ZGljYXRvcik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAtMzk1LDE1ICszOTUsMTUgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5n
KEVkaXRDb21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBpZiAoIWNvbW1hbmQtPndhc0NyZWF0ZUxp
bmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLnN0
YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwotICAgIGF1dG8mIG1h
cmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBhdXRvIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLnN0
YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOworICAgIGF1dG8mIG1h
cmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcihy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiBFZGl0
b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVkaXRvckNsaWVudCgpCiB7Ci0g
ICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFnZSgpLT5lZGl0b3JDbGllbnQo
KSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFnZSgpID8gJm1fZG9jdW1lbnQu
cGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFRleHRDaGVja2VyQ2xpZW50
KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCkBAIC00NzEsNyArNDcx
LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVz
cGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gPT0g
cHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50
KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7CisgICAgYXV0
byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgcHJl
Y2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKICAgICBTdHJpbmcgc3Ry
aW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlKTsKICAgICBpZiAoc3RyaW5n
LmlzRW1wdHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRlc3BhY2Uoc3RyaW5nW3N0cmlu
Zy5sZW5ndGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDc5LDEyICs0NzksMTIgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZv
ckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBp
bmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMK
ICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5h
bCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJl
Y3QgaXQgYWdhaW4uCi0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2Vy
KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7Cisg
ICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5n
Rm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25z
dCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFsdGVybmF0aXZl
LCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKLSAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtl
cnMoKTsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBt
X2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBpZiAobWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJz
KHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7CiAg
ICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKQog
ICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rp
b24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LnJlcGxh
Y2VtZW50KTsKQEAgLTQ5OSw3ICs0OTksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVAogCiAg
ICAgUG9zaXRpb24gYmVnaW5uaW5nT2ZSYW5nZSA9IHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0
UG9zaXRpb24oKTsKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJl
Z2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKLSAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0
ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CisgICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0
ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9z
aXRpb24sIGJlZ2lubmluZ09mUmFuZ2UpOwogCiAgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7
CiAgICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CkBAIC01MjAsNyArNTIw
LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVu
ZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJG
b3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gZW5kT2ZXb3JkUG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9m
cmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2Vy
LmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1
bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQo
KSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZSk7CiAgICAg
aWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU4
LDcgKzU1OCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFy
a2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAKIEFsdGVybmF0aXZlVGV4dENs
aWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkK
IHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyBtX2ZyYW1lLnBhZ2UoKS0+YWx0ZXJuYXRp
dmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCkg
JiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2RvY3VtZW50LnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0
Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KEFsdGVybmF0aXZl
VGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUg
bWFya2VyVHlwZSkKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAK
ICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNp
bmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0
IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxv
bmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBk
YXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVy
TG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBw
YXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoRW5k
Q29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludChtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENv
bnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhFbmRD
b250YWluaW5nQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gcmVwbGFjZW1l
bnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENv
bnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0
aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJu
YXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYxNywxMSArNjE3LDExIEBAIGJvb2wgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdFdmVudCkKICAgICAgICAgdGFyZ2V0ID0gdHJpZ2dl
cmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBlbHNlCi0gICAgICAgIHRhcmdldCA9IGV2ZW50VGFy
Z2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgICAgIHRhcmdl
dCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KCZtX2RvY3VtZW50KTsKICAgICBpZiAo
IXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBldmVudCA9IFRleHRF
dmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2ZyYW1lLndpbmRvd1Byb3h5KCksIHRleHQsIGRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgYXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRl
Rm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZyYW1lKCktPndpbmRvd1Byb3h5KCksIHRleHQsIGRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh0cmln
Z2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKQEAgLTY1
Myw3ICs2NTMsNyBAQCBWZWN0b3I8U3RyaW5nPiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpk
aWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRAogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0
ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAg
YXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKKyAgICBhdXRvJiBlZGl0b3IgPSBtX2Rv
Y3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8gc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGVkUmFu
Z2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0
ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmluZGV4IDk0Nzc0YTc2YjIwN2VlODcxMDFkODNhMjNi
ZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZjMzA4OGRjMjc3YjNmNzkxY2Y4MjMxYjkwNjMzY2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVkaXRDb21tYW5k
OwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKIGNsYXNzIEVkaXRvckNsaWVudDsKIGNs
YXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFRleHRDaGVja2Vy
Q2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3Mg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJh
bWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJhbWUoZnJhbWUpIHsgfSkKKyAgICBleHBsaWNpdCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCkgVU5MRVNTX0VOQUJM
RUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7IH0pCiAgICAgfkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVU
ZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlKSBVTkxFU1NfRU5BQkxFRCh7IH0pCkBAIC0x
NDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVy
bmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlmCiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBE
b2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAKICN1bmRlZiBVTkxFU1NfRU5BQkxFRApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAxNGUz
Yzc4NmM0ZmYxZGI3Yjg1NjAxNTE0ODczOTBkYzM3MzE5MTUwLi5hN2QxYjk2NTI0NjQyMGQxMTgy
NjZjNTNhNWZkNTFiZWM3OTQ2ODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMjI4LDE3ICsyMjgsMTcgQEAgdm9pZCBFZGl0Q29t
bWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkKICAgICAvLyB1cCB0aGUgY29tcG9zaXRpb24gd2ls
bCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNvbXBvc2l0aW9uLCBhcyBpbiA8cmRhcjovL3Byb2Js
ZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3RvcCBoYW5kbGVzIHRoaXMgaW4gLVtXZWJIVE1MVmll
dyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSwgYnV0IHRoZSBwaG9uZQogICAgIC8v
IGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBmcmFtZS0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRp
b24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5jYW5jZWxDb21wb3NpdGlvbigpOwogI2Vu
ZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMp
KQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCkud2lsbFVuYXBwbHlFZGl0aW5nKCp0aGlz
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZTsgaTsgLS1pKQogICAgICAgICBtX2NvbW1hbmRz
W2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRpdG9yKCkudW5hcHBsaWVkRWRp
dGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygq
dGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkK
ICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZv
clVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMjU4LDEz
ICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KCkKICAgICAv
LyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtlIGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBv
c2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmco
KnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCkud2lsbFJlYXBwbHlFZGl0aW5n
KCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvJiBjb21tYW5kIDogbV9j
b21tYW5kcykKICAgICAgICAgY29tbWFuZC0+ZG9SZWFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRp
dG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCku
cmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHkobV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENh
Y2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBAIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9z
aXRlRWRpdENvbW1hbmQoKQogCiBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlD
b21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5n
KCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQo
KS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5n
cygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHkoKQpAQCAtMzc4LDEz
ICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHkoKQogCiB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQoKQogewotICAgIGZyYW1lKCkuZWRp
dG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBw
bGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFp
c0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpOwotICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZy
YW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gZmly
c3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
OwogICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTQ2OCw3
ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAvLyBGSVhNRSAoNTA5ODkz
MSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlv
bk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVudCBoZXJlLgogCiAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwot
ICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGlu
Z1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmNsZWFyTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgZGVsZXRlU2VsZWN0aW9uKGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAogICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aXNDb25uZWN0ZWQoKSk7CkBAIC0xNTA0LDcgKzE1
MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICBvcHRpb25zLmFkZChSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3Zl
KGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0gICAgZnJhbWUoKS5lZGl0b3IoKS5tYXJrTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CisgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7
CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVz
dG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVtcHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5
IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVjdGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdT
ZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNTdGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpKSAmJiBpc0VuZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1MDYxMmIwY2VlM2MzOTcxMTYzNWM4NWIxN2Qy
ZGUzODhhYjIuLjExOTdmMTJmNjdjYmY5N2VlYjY0ZjM0MGVhZmFiODcyYWNiODhiZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApA
QCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGlu
Z1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2ZXIsIGlmIHR5cGluZyBzdHlsZSB3YXMgcHJldmlv
dXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQgbm9kZSBhdCB0aGUgcHJldmlvdXMKICAgICAvLyBw
b3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgc3R5bGUgYXMgd2Vs
bC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPT0gbV9kb3duc3Ry
ZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0
eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTc0MCw3ICs3NDAsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0
byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92
ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFn
cmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
ICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBt
ZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQor
ICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0
ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2VkLnB0cigpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9s
ZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBk
b24ndCBsZXQgYmxvY2sKQEAgLTgxNCw3ICs4MTQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKQogICAgIC8vIEluIHRoaXMg
Y2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRoZSBuZXcgY2hhcmFjdGVycyBzaG91bGQgaGF2ZSB0
aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBkZWxldGVkIG9uZXMsCiAgICAgLy8gYnV0LCBpZiB3
ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29tZSBiYWNrIGFuZCBzdGFydCB0eXBpbmcgdGhhdCBz
dHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28gc2VlIAogICAgIC8vIHByZXNlcnZlVHlwaW5nU3R5
bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlw
aW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNldFR5cGlu
Z1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKQEAgLTg4NSw3ICs4ODUsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9yZXBsYWNlKSB7
CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAgICAgICAgIGlmICh0ZXh0Q29udHJvbCAm
JiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQotICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS50
ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9sKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJv
bCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0aGlzIHRvIGxhdGVyIG1ha2UgdGhlIHNlbGVjdGlv
biB3aXRoCkBAIC05NDAsNyArOTQwLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KCkKICAgICB9CiAKICAgICBib29sIHNob3VsZFJlYmFsYWNlV2hpdGVTcGFjZSA9IHRy
dWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNl
V2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkpIHsKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkg
ewogICAgICAgICBOb2RlKiBub2RlID0gbV9lbmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
OwogICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkpIHsKICAgICAgICAgICAgIFRleHQmIHRleHRO
b2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwpAQCAtOTU0LDcgKzk1NCw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgY2FsY3VsYXRlVHlwaW5nU3R5bGVB
ZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFvcmlnaW5hbFN0cmluZy5pc0VtcHR5KCkpCi0gICAg
ICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2Vu
ZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9y
KCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmln
aW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbiht
X2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwgZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25h
bCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRTdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMzZjdkYTE3Yzc4OTRlMmNmNzg1NTU5YmM4NzZjODg0
NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYwMDU2Yzc3Mzc3MDBlMmI4ZjQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAg
LTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9j
dW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbikKIHsKLSAgICBBU1NFUlQo
ZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+
ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHNldFN0YXJ0aW5nU2VsZWN0
aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlvbik7CiB9CiAKIEVkaXRDb21tYW5kOjpFZGl0Q29t
bWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5n
U2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAg
OiBtX2RvY3VtZW50KGRvY3VtZW50KQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsK
ICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbik7CiAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbik7CiB9CiAKIEVkaXRDb21tYW5kOjp+RWRpdENv
bW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJhbWUoKQotewotICAg
IEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFt
ZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRpdENvbW1hbmQ6OmZyYW1lKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJh
bWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0FjdGlvbjsKQEAgLTE2OCwxMSArMTUzLDcgQEAgc3Rh
dGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21wb3NpdGlvbklmUG9zc2libGUo
RWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9vbCBFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFy
ZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0gICAgYXV0byogZnJhbWUgPSBtX2RvY3VtZW50LT5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1
dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBjb250YWluZXIgPSBtX2RvY3VtZW50LT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKICAgICBpZiAoIWNvbnRh
aW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMTcsNyArMTk4LDcgQEAgdm9pZCBF
ZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlw
ZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxp
dHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbih0eXBlLCB0ZXh0LCBt
X2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIH0KIAogdm9pZCBF
ZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKaW5kZXggZGViY2ZmMDI0NWVkZjBk
ZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4uMmY2N2NkNzMzNGMyYzhiZDU2OTBmMTEzNWMxMGQw
MDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFu
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaApAQCAtMzgsNyAr
MzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1lOwogCiBTdHJpbmcg
aW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oRWRpdEFjdGlvbik7CiAKQEAgLTY0LDggKzYz
LDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEVkaXRDb21tYW5kKERvY3VtZW50JiwgRWRp
dEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAgICBFZGl0Q29tbWFuZChEb2N1
bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7
CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUoKSBjb25zdDsKLSAgICBGcmFtZSYgZnJhbWUoKTsK
ICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50
OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAg
IENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZmMyZWZhOTUxZmY1MGE2ZmFkMzY5
NDgzNTk5NmI4NTljZTU3OWZiMS4uOWI3Y2ZkMmE2ZTNiNWIzY2EyY2NkMDU5NTM1NTVhYTIyYjI2
ZmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC04NjksNyArODY5LDcgQEAg
Ym9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0IE5vZGUqIG5vZGUpCiAKIFJlZjxIVE1MRWxlbWVu
dD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewot
ICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUoKS0+ZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNl
cGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChkb2N1bWVudC5lZGl0b3IoKS5kZWZhdWx0UGFyYWdy
YXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzRGl2
OgogICAgICAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAg
Y2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc1A6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAKaW5kZXggMGVhODk5MDc3OWMyMzNlODE0NDg3YzcxMGViMzBlZTU5MjBi
ZDU4ZC4uMmM3NmFhZjE5ZGMyNDZhYTRmZGRlMTY2MWJiZWQxMjU0MzE2YTUyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTY4Niw3ICsxNjg2LDcgQEAgU3R5
bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJvcGVydGllc05vdEluKCpzdHlsZS0+c3R5bGUoKSwg
Y29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKIAogICAg
IHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwot
ICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigp
LnNob3VsZFN0eWxlV2l0aENTUygpOworICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9j
dW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOwogICAgIGlmICghc2hvdWxkU3R5
bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0VGV4dFN0eWxlcygqZG9jdW1lbnQsICptdXRhYmxl
U3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRiZjYzYzA3YTlhMDllMzc5YmYx
OTM4ZGM1OGEyLi44YmUzOGJkMDIwNzA4MDEzMDExYWRmNGVmOGIxOTM2MGI2ZGU0Y2Q4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzMsOCArMTczLDggQEAgc3RhdGljIFN0cmlu
ZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbihFZGl0aW5nU3R5bGUmIHN0
eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4dENvbW1hbmQgOiBwdWJsaWMgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAgQ2xlYXJUZXh0Q29tbWFuZChEb2N1bWVudCYgZG9j
dW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFt
ZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRpYyB2b2lkIENyZWF0ZUFuZEFwcGx5KERvY3VtZW50
Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Qgb3Zl
cnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODksMTcgQEAgRWRpdEFjdGlvbiBDbGVhclRleHRDb21t
YW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gRWRpdEFjdGlvbjo6RGVsZXRl
OwogfQogCi12b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0
cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgp
KQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJvdW5kIHN0YWxlIGNvbXBvc2l0aW9uIHN0YXRlLgot
ICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigpOworICAgIGRvY3VtZW50LmVkaXRvcigpLmNsZWFy
KCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21tYW5kID0gYWRvcHRSZWYoKm5ldyBDbGVhclRleHRD
b21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24g
b2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CisgICAgYXV0byBjbGVhckNvbW1hbmQgPSBh
ZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoZG9jdW1lbnQpKTsKICAgICBjbGVhckNvbW1h
bmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAgICAgY2xlYXJDb21tYW5k
LT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsyMDcsMjQgQEAgdm9pZCBDbGVhclRleHRDb21tYW5k
OjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZyYW1lKQogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CiAKLVRlbXBvcmFy
eVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiBmcmFtZSwg
T3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8
VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zKQotICAgIDogbV9mcmFtZShmcmFtZSkK
K1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3Vt
ZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0
aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zKQorICAgIDog
bV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50KSkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQot
ICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZnJhbWUuZWRpdG9yKCkuaWdub3Jl
U2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMo
ZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZnJhbWUu
c2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQorICAgICwgbV9hcHBlYXJh
bmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3VtZW50LnNlbGVjdGlvbigpLmlzVXBkYXRlQXBwZWFy
YW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
aWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VV
cGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5h
YmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFy
YW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmIChvcHRpb25zICYgVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQotICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOworICAgICAgICBkb2N1bWVu
dC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwogCiAgICAgaWYgKHRl
bXBvcmFyeVNlbGVjdGlvbikgewotICAgICAgICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9
IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBzZXRTZWxlY3Rpb24o
dGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkpOwogICAgIH0KIH0KQEAgLTIzNiwxMiArMjM2LDEy
IEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgp
CiAKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAgIGF1dG8gcmV2ZWFsU2VsZWN0aW9uID0gbV9vcHRp
b25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpSZXZlYWxTZWxlY3Rpb24gPyBFZGl0b3I6
OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRpdG9yOjpSZXZlYWxTZWxlY3Rpb246Ok5vOwotICAg
ICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1fd2FzSWdu
b3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3Vt
ZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxl
Y3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24pOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7
CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFi
bGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAtMjUw
LDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAgICAgYXV0byBvcHRpb25zID0g
RnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCk7CiAgICAgaWYgKG1f
b3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9Ob3RTZXRGb2N1cykKICAgICAg
ICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMpOwotICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1f
ZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMpOwog
fQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIgaGFzIG1vdmVkIHRoZSBzZWxlY3Rpb24gb3V0
c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8gd2Ugc2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGNvbnRy
b2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRpdGluZyBvcGVyYXRpb24uCiBWaXNpYmxlU2VsZWN0
aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQpCiB7Ci0gICAgYXV0
byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8g
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAo
IWV2ZW50KQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uOwogICAgIC8vIElmIHRoZSB0YXJnZXQg
aXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBv
ZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYsMTIgKzI3NiwxMiBAQCBWaXNpYmxlU2VsZWN0aW9u
IEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQpCiAvLyBGdW5jdGlvbiBj
b25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZpb3IgYSBmYWxsYmFjayB3aGVuIFBhZ2Ugb3IgU2V0
dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVkaXRpbmdCZWhhdmlvciBFZGl0b3I6OmJlaGF2aW9y
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ0JlaGF2aW9yKG1fZnJhbWUuc2V0dGluZ3Mo
KS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOworICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3IobV9k
b2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CiB9CiAKIEVkaXRvckNs
aWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25zdAogewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9m
cmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAg
ICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JDbGllbnQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJvb2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4
dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0b3I6OmNhbkVkaXQoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0UmljaGx5KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIGVudW0gY2xhc3MgQ2xpcGJv
YXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0NDIsNyBAQCBzdGF0aWMgYm9vbCBkaXNwYXRjaENs
aXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50PiYmIHRhcmdldCwgQ2xpcGJvYXJkRXZlbnRLaW5k
CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1dCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2
ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9yZUN1dCk7
CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIAogYm9vbCBF
ZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZy
b21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpCZWZvcmVDb3B5KTsKIH0KQEAgLTQ4
NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9yOjpjYW5Db3B5KCkgY29uc3QKIHsKICAgICBpZiAo
aW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4g
c2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9
CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFp
bkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQor
ICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1
cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5OCw3ICs0OTgsNyBAQCBib29sIEVkaXRvcjo6Y2Fu
UGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuRGVsZXRlKCkgY29uc3QKIHsKLSAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1Jh
bmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTI0LDcg
KzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRTbWFydERlbGV0ZSgpCiB7CiAgICAgaWYgKGJl
aGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnREZWxldGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3Jh
bnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHko
KSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzbWFydEluc2VydERlbGV0
ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAg
ICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoaXNUeXBpbmdBY3Rpb24pIHsKICAgICAgICAg
ICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZG9jdW1lbnQoKSwgY2FuU21hcnRD
b3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVsZXRlIDogMCwgZ3JhbnVsYXJp
dHkpOwogICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7
CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGcKIAogdm9pZCBFZGl0
b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShib29sIHNtYXJ0RGVsZXRlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBlZGl0aW5nQWN0aW9uKS0+
YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9u
V2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZwogCiB2
b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsKLSAgICBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVB
bmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHko
bV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0
cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQpAQCAtNjYxLDcgKzY2MSw3IEBA
IGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFn
bWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9u
V2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsYWNlbWVu
dCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHls
ZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwog
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4OSwxOSArNjg5LDE5IEBAIHZvaWQgRWRpdG9y
OjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50
LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1hZ2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGlu
Z1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYg
ZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpQYXN0ZSkgewogICAgICAgICBTdHJpbmcgdGV4
dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNv
bW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKSk7Ci0gICAgICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBB
WFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlV
bmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KIAogICAgIGlmIChB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rpb24gPT0g
RWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gY29tbWFuZC0+ZG9j
dW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwotICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
LCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5z
ZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAg
Y29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2Vk
VGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KIApAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQg
RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxl
Y3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdl
KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0
CkBAIC03NDQsNyArNzQ0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdl
KiByYW5nZSkgY29uc3QKIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiB7ICAgCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRG
aWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVu
dEtpbmQ6OkNvcHkpOwpAQCAtNzUyLDcgKzc1Miw3IEBAIGJvb2wgRWRpdG9yOjp0cnlESFRNTENv
cHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVu
dChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50S2luZDo6Q3V0
KTsKQEAgLTc2MCw3ICs3NjAsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogCiBib29s
IEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFJhbmdlKiByYW5n
ZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5t
YWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkg
JiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpCisgICAgaWYgKG1fZG9jdW1l
bnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRG
cm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UsIGFjdGlvbik7CkBAIC03ODIsMTcgKzc4MiwxNyBA
QCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKIAogYm9vbCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24o
KSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBOb2RlKiBzdGFydE5vZGU7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAgICAgTm9k
ZSogZW5kTm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkudXBzdHJl
YW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
UmFuZ2UoKSkgeworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAg
IE5vZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgp
LnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYgKGVuY2xvc2luZ0Jsb2Nr
KHN0YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2soZW5kTm9kZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfSBlbHNlCi0gICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KTsKIAogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04MTIs
MTIgKzgxMiwxMiBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiAKIFRy
aVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKLSAgICAgICAgaWYgKGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KSwgdWxUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewor
ICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRy
aVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsK
LSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7Ci0gICAgICAgIGF1dG8q
IGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CisgICAgfSBlbHNlIGlmIChtX2RvY3VtZW50LnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IHVsVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFn
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVsVGFnKTsKICAgICAg
ICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBAIC04MjcsMTIgKzgyNywxMiBA
QCBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiAK
IFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNs
b3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCksIG9sVGFnKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
KyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQogICAgICAgICAgICAgcmV0dXJuIFRydWVU
cmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7
Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOwotICAgICAgICBhdXRv
KiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOworICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5n
RWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
LCBvbFRhZyk7CisgICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRh
ZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBvbFRhZyk7CiAgICAg
ICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAg
ICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7CiAgICAgfQpAQCAtODcyLDcgKzg3Miw3IEBA
IGJvb2wgRWRpdG9yOjpjYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxO
b2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsKLSAgICBpZiAoIWNh
bkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICgh
Y2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bCgmZG9jdW1lbnQoKSk7CkBAIC04ODIsNyArODgyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6
aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hs
eSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0Umlj
aGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgm
ZG9jdW1lbnQoKSk7CkBAIC04OTIsNyArODkyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6
aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKQogewotICAgIGlmICghY2FuRWRp
dFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFjYW5F
ZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3QgPSBJbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5v
cmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTkwMiw3ICs5MDIsNyBAQCBSZWZQdHI8Tm9kZT4gRWRp
dG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiAKIHZvaWQgRWRpdG9y
OjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5
KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNo
bHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjpkZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC05MzIsNyArOTMyLDcgQEAgRWxlbWVu
dCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikgY29uc3QKIAogRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2Vs
ZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmluZEV2ZW50VGFyZ2V0RnJvbShtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXR1cm4gZmluZEV2ZW50VGFyZ2V0RnJv
bShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQpAQCAtOTQ2LDEzICs5NDYsMTMgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRy
PEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLAogICAgIGlm
ICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOworICAgIGF1dG8g
c2VsZWN0aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uVHlwZSgpOwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZpc2libGVTZWxlY3Rpb246Ok5v
U2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaW5wdXRUeXBlTmFtZSA9
IGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pOwogICAgIFN0cmlu
ZyBpbnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9u
KCpzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAg
ICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50ICYmICFkaXNwYXRj
aEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRh
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NjksNyArOTY5LDggQEAgdm9pZCBFZGl0b3I6OmFw
cGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uLAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjbGllbnQoKS0+ZGlkQXBwbHlT
dHlsZSgpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpZEFwcGx5U3R5
bGUoKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgZGlzcGF0Y2hJbnB1dEV2ZW50KCplbGVt
ZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CkBAIC05ODQsMTMgKzk4NSwx
MyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3RpbwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOworICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOwogICAgIGlmIChz
ZWxlY3Rpb25UeXBlID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBTdHJpbmcgaW5wdXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWVGb3JFZGl0
aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pOwogICAgIFN0cmluZyBpbnB1dEV2ZW50RGF0YSA9IGlu
cHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9uKHN0eWxlLCBlZGl0aW5nQWN0aW9u
KTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVt
ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVt
ZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxl
bWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTEwMDUsNyArMTAwNiw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24o
U3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0CiAgICAgaWYgKCFz
dHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxl
KHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQor
ICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9CkBAIC0x
MDE2LDcgKzEwMTcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFJlZjxF
ZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZwogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4dCBkZWNvcmF0aW9ucyBzaW5j
ZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlv
bnMoKS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHls
ZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JGaWx0
ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEwMjgsMjUgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdy
YXBoU3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUK
ICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hv
dWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5
bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwog
fQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8gZWRp
dGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikpCisgICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHls
ZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgcHJv
cGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpCiAgICAgICAgIHJldHVybiBl
ZGl0aW5nU3R5bGUtPmhhc1N0eWxlKHByb3BlcnR5SUQsIHZhbHVlKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uSGFzU3R5bGUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIHJldHVybiBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZTdHlsZSht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXR1cm4gRWRpdGluZ1N0eWxl
OjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvblN0
YXJ0Q1NTUHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRT
ZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLAorICAgIFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2Vs
ZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKICAgICAgICAg
cHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKCFzZWxl
Y3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKQEAgLTExMzYsNyArMTEzNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGlu
ZyhDb21wb3NpdGVFZGl0Q29tbWFuZCYgY29tbWFuZCkKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZygmY29tbWFuZCk7CiAKICAgICAg
ICAgaWYgKCFjb21tYW5kLnByZXNlcnZlc1R5cGluZ1N0eWxlKCkpCi0gICAgICAgICAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgICAgIC8vIENvbW1hbmQg
d2lsbCBiZSBlcXVhbCB0byBsYXN0IGVkaXQgY29tbWFuZCBvbmx5IGluIHRoZSBjYXNlIG9mIHR5
cGluZwogICAgICAgICBpZiAobV9sYXN0RWRpdENvbW1hbmQuZ2V0KCkgPT0gJmNvbW1hbmQpCkBA
IC0xMjAwLDExICsxMjAxLDExIEBAIHZvaWQgRWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kQ29tcG9zaXRpb24mIGNvbXBvc2l0aW9uKQogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250
ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCi1FZGl0b3I6OkVkaXRvcihGcmFtZSYgZnJhbWUpCi0g
ICAgOiBtX2ZyYW1lKGZyYW1lKQorRWRpdG9yOjpFZGl0b3IoRG9jdW1lbnQmIGRvY3VtZW50KQor
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fa2lsbFJpbmcobWFrZVVuaXF1ZTxQ
QUw6OktpbGxSaW5nPigpKQotICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENo
ZWNrZXI+KGZyYW1lKSkKLSAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5p
cXVlPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGZyYW1lKSkKKyAgICAsIG1fc3BlbGxDaGVj
a2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihkb2N1bWVudCkpCisgICAgLCBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPihk
b2N1bWVudCkpCiAgICAgLCBtX2VkaXRvclVJVXBkYXRlVGltZXIoKnRoaXMsICZFZGl0b3I6OmVk
aXRvclVJVXBkYXRlVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRF
Q1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICwgbV90ZWxlcGhvbmVOdW1iZXJE
ZXRlY3Rpb25VcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVw
aG9uZU51bWJlcnMpCkBAIC0xMjIwLDcgKzEyMjEsNyBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQog
ICAgIGlmIChtX2NvbXBvc2l0aW9uTm9kZSkgewogICAgICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9
IG51bGxwdHI7CiAgICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNsaWVu
dCgpKQotICAgICAgICAgICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7
CisgICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiAgICAgfQogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7
CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKQEAgLTEyMjksNiAr
MTIzMCw3IEBAIHZvaWQgRWRpdG9yOjpjbGVhcigpCiAgICAgbV9tYXJrID0geyB9OwogICAgIG1f
b2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSB7IH07CiAgICAgbV9lZGl0b3JVSVVwZGF0
ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnN0b3BBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRF
Q1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIG1fdGVsZXBob25lTnVtYmVyRGV0
ZWN0aW9uVXBkYXRlVGltZXIuc3RvcCgpOwpAQCAtMTIzOCwxMiArMTI0MCwxMiBAQCB2b2lkIEVk
aXRvcjo6Y2xlYXIoKQogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQsIFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUp
CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZl
bnQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3Vt
ZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRy
aWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRG
b3JDb25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJu
IG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4
dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5w
dXRDb21wb3NpdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0
YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAzLDEwICsx
MzA1LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChj
b25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhp
cyBjb2RlIHNob3VsZCBjb25kaXRpb25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRo
ZXIgdGhlIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNl
dCBmb3IgdGhlIG5ld2x5IGZvY3VzZWQgZnJhbWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFt
ZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNl
bGVjdGlvbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byog
cGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVh
bEN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTEzMTksMTAgKzEzMTksMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAg
aWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxk
SW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWdu
VG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAg
IGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9u
SXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Ig
OiAwKTsKQEAgLTEzMzksMTAgKzEzMzksMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBp
bnNlcnRMaW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBj
YXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRh
YmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25J
c0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8g
VHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0
MDYsNyArMTQwNiw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlv
blNwZWNpZmllciBhY3Rpb24pCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVk
QnlFZGl0aW5nKHRydWUpOwogICAgIH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSkpCiAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53
cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5
T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNh
bm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlRWxlbWVudCA9IG51bGxwdHI7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQCB2b2lkIEVkaXRv
cjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAg
ICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNv
cHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVy
IDxodHRwOi8vd2Via2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwg
Y2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRh
dGFUcmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFz
dGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwg
Km1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7
CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTE0MzQsMTAgKzE0MzQsMTAgQEAgdm9pZCBF
ZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAg
ICBpZiAoYWN0aW9uID09IEN1dEFjdGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAg
ICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFu
Z2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0g
QWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldp
dGhTbWFydERlbGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwog
ICAgICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAg
ICAgICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogICAgIH0KIH0KIApAQCAtMTQ1NCw3ICsxNDU0LDcgQEAgdm9pZCBFZGl0b3I6OnBh
c3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVN
YXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNo
ZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKSk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBw
YXN0ZVdpdGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWlu
VGV4dCB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkKTsKQEAgLTE0NzksNyArMTQ3OSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFz
UXVvdGF0aW9uKCkKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhm
YWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25T
dXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBw
YXN0ZWJvYXJkID0gUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQu
Z2V0KCksIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90
YXRpb24gfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9h
cmQoKnBhc3RlYm9hcmQpOwpAQCAtMTYxNyw3ICsxNjE3LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRl
ckxheWVyRGlkU2Nyb2xsKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFn
ZUVsZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAg
YXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRh
aW5lcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODUxLDggKzE4NTEsOCBAQCB2b2lkIEVkaXRv
cjo6dG9nZ2xlVW5kZXJsaW5lKCkKIHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlv
bihXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpICYmIAotICAgICAgICBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0
KCkgPT0gZGlyZWN0aW9uKQorICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0
aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNl
bmRpZgogICAgICAgICAKQEAgLTE4ODIsNyArMTg4Miw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRp
dG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAg
ICBhdXRvIHJlc3VsdCA9IFdyaXRpbmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9z
aXRpb24gcG9zID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KS5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBO
b2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMTkxNyw3ICsxOTE3LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVj
dENvbXBvc2l0aW9uKCkKICAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNl
bGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5n
ZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
c2VsZWN0aW9uLCB7IH0pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHNlbGVjdGlvbiwgeyB9KTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigp
CkBAIC0xOTUyLDI4ICsxOTUyLDI4IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0KQogCiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1Ymxp
YzoKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2Zy
YW1lKGZyYW1lKQotICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAg
ICBTZXRDb21wb3NpdGlvblNjb3BlKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2Rv
Y3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGlj
YXRvcigqZG9jdW1lbnQuZnJhbWUoKSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigp
LnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVk
aXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNl
dENvbXBvc2l0aW9uU2NvcGUoKQogICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0
SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JD
bGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+
ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChh
dXRvKiBlZGl0b3JDbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAg
ICAgICAgIGVkaXRvckNsaWVudC0+ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAg
ICBSZWY8RnJhbWU+IG1fZnJhbWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50Owog
ICAgIFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsK
IH07CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNl
dENvbXBvc2l0aW9uTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21w
b3NpdGlvbiB8fCBtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25T
Y29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pCiAgICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkp
OwpAQCAtMTk4NCw3ICsxOTg0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21w
b3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxp
Z2h0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisg
ICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGlu
c2VydGluZyB0aGUgZmluYWxpemVkIGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWlu
ZyBvdXIgY29tcG9zaXRpb24uCkBAIC0yMDAwLDEzICsyMDAwLDEzIEBAIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4g
b3BlbiB0eXBpbmcgY29tbWFuZCB0aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlv
biB3b3VsZCBjYXVzZSBpc3N1ZXMgd2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGlu
Z0NvbW1hbmQ6OmNsb3NlVHlwaW5nKCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6
Y2xvc2VUeXBpbmcobV9kb2N1bWVudCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29t
cG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRl
cmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBo
aWdobGlnaHRzLCB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5k
KQogewotICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1l
KTsKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVu
dCk7CiAKICAgICAvLyBVcGRhdGVzIHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9y
IGNvbXBvc2l0aW9uIHRvIHByZXZlbnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNv
bXBvc2l0aW9uIHRleHQgaW50byB0ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNSw3ICsyMDE1LDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAK
LSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9y
aWdpbmFsVGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjAyMywxMCArMjAyMywxMCBAQCB2b2lk
IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGlu
Z1JhbmdlKSB7CiAgICAgICAgIC8vIFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0
aW9uRmluYWwgaGVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlv
biB0ZXh0IHRoYXQgaGFzIGJlZW4gZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpk
ZWxldGVTZWxlY3Rpb24oZG9jdW1lbnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0
aW9uRmluYWwpOwotICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewog
ICAgICAgICAgICAgLy8gSWYgZGVsZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRv
IGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0
ZXh0IHdpbGwgbm90IGJlIHJlY29tcG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCkgfSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwODIsOCArMjA4Miw4IEBAIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwg
dGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6
UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRp
bmcpOwogCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9u
IG5vdy4KLSAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24g
YmFzZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKKyAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5leHRlbnQoKTsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgICAgIHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVw
cmVjYXRlZE5vZGUoKTsKQEAgLTIxMDksNyArMjEwOSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21w
b3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVy
bGluCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBz
ZWxlY3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9
IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0
ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoYmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7
Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0
ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpObyk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpObyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjMsNyArMjEy
Myw3IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFu
Z2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpOwogCkBAIC0yMTM5LDcgKzIxMzksNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGlu
ZygpCiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBPbiBNYWMgT1MgWCwgd2hlbiB1c2UgImxlYXJu
IiBidXR0b24gb24gIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBwYW5lbCwgd2UgZG9uJ3QgY2FsbCB0
aGlzIGZ1bmN0aW9uLiBJdCBzaG91bGQgcmVtb3ZlIG1pc3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5k
IHRoZSBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdl
KQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTUyLDE0ICsyMTUyLDE0IEBA
IHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKIAogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKLQorICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9j
dW1lbnQobV9kb2N1bWVudCk7CisgICAgCiAgICAgLy8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRv
IHNlYXJjaCBpbiB0d28gcGhhc2VzIC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5k
IG9mIHRoZSBkb2MsIGFuZAogICAgIC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhl
IGRvYyBzdGFydCB0byAoYXBwcm94aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAg
ICAvLyBTdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9m
IGRvY3VtZW50LiAgU3RhcnRpbmcgYXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyBy
ZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CiAgICAgUmVmPFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRz
KGRvY3VtZW50KCkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpA
QCAtMjMwOCw4ICsyMzA4LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUUg
NDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0
aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVz
b2x2ZUNoYXJhY3RlclJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9m
ZnNldCArIGdyYW1tYXJEZXRhaWwucmFuZ2UubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2Uu
bGVuZ3RoIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFt
bWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1t
YXJEZXRhaWwpOwogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3Jh
bW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVz
Y3JpcHRpb24pOwpAQCAtMjMyMCw4ICsyMzIwLDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1h
cmtlciBzbyB3ZSBkcmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAg
ICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdT
ZWFyY2hSYW5nZSwgeyBtaXNzcGVsbGluZ09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkg
fSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24obWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05T
VFJFQU0pKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
KTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBA
IC0yMzM1LDcgKzIzMzUsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRP
clJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAogICAgIGlmICghaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0Vu
YWJsZWRGb3IoY2xpY2tlZE5vZGUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkg
fHwgc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIz
ODksNyArMjM4OSw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmco
KSBjb25zdAogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYg
VVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICgh
cmFuZ2UgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRl
eHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBA
IC0yNDA0LDcgKzI0MDQsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5n
PiBndWVzc2VzOwogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0
R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksIGd1ZXNzZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29y
ZCh3b3JkLCBTdHJpbmcoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vl
c3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyArMjQxMiw3IEBAIFZl
Y3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwo
Ym9vbCYgbWlzc3BlbGxlZCwgYm9vCiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3Io
KS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAg
ICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rp
b24oc2VsZWN0aW9uLmJhc2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVz
aW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKQEAgLTI0NzIsNyArMjQ3Miw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0
ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQp
CiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVu
dD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2
ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5NCwxOSArMjU5
NCwxOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQg
d29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdv
cmQuCiAgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVB
TSk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSkgewotICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICgh
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghbV9mcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRT
dHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQp
KQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRv
Y29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3Io
KS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVw
bGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAg
ICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29y
cmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVk
aXRBY3Rpb246Okluc2VydCk7CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hh
cmFjdGVyIGZ1cnRoZXIuCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5tb3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Cisg
ICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRl
cmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAg
IH0KIAogICAgIGlmICghaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc4LDcgKzI2
NzgsNyBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2Rl
KSBjb25zdAogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5v
ZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVm
UHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjcyNiw3ICsyNzI2LDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5z
ZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNo
b3dDb3JyZWN0aW9uUGFuZWw7CisgICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNl
dHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hv
d0NvcnJlY3Rpb25QYW5lbDsKIAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRl
bnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8g
cmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9k
ZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7CkBAIC0yNzQxLDcgKzI3NDEsNyBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4
dENoZWNraW5nVHlwZQogICAgIH0KIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJl
c3VsdHM7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFw
aFRvQ2hlY2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tl
cigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZv
cihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg3LDcgKzI3
ODcsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJl
cGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlv
bihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1l
bnQpOwogCiAgICAgYXV0byB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hl
Y2tpbmdUeXBlcygpOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVz
dC5jaGVja2luZ1JhbmdlKCksIHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAm
cmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKQEAgLTI4MTEsOSArMjgxMSw5IEBAIHZvaWQgRWRp
dG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVmVjdG9yPFRlCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3Vu
ZGFyaWVzID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNo
b3VsZE1hcmtTcGVsbGluZyB8fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZp
c2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0
aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRo
ZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAg
ICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpOworICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxl
Y3Rpb25PZmZzZXQgPSBwYXJhZ3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJl
dHVyblZhbHVlKCk7CiAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0
cnVlOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9m
ZnNldCA+IHBhcmFncmFwaC50ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxl
Y3Rpb25PZmZzZXQgLSAxXSA9PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTUsMTMgKzI4OTUs
MTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERP
V05TVFJFQU0pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQor
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7Cisg
ICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3ICsyOTEwLDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVj
a2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVw
bGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAog
ICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQq
IHJvb3QgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2Fj
aGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5
NDAsMTMgKzI5NDAsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNw
ZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5k
ZWRQYXJhZ3JhcGguZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVT
ZWxlY3Rpb25BZnRlckNoYW5nZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3Jh
cGgucmFuZ2VMZW5ndGgoKSkgewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4
dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0
aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5t
b3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAg
ICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246
OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkg
cmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFz
dCByZXBsYWNlbWVudAotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVj
dGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFu
dWxhcml0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMDIzLDggKzMwMjMsOCBAQCB2b2lk
IEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05v
dFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rp
b24gaXMgYSByYW5nZSwgd2UgcG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZh
bGwgb24gdGhlIGJvdW5kYXJpZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29y
ZHMgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
OworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQg
ZW5kcyBhZnRlciBvciBvbiB0aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5NiwxMSArMzA5
Niw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpy
YW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7Ci0gICAg
aWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1f
ZG9jdW1lbnQuZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKQEAgLTMxMTcsNyAr
MzExMyw3IEBAIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRp
b24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAg
IFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJl
dmVhbDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2Rl
LCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5yZXZlYWxTZWxlY3Rpb24ocmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRP
cHRpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29s
IGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpA
QCAtMzEyOSw3ICszMTI1LDcgQEAgdm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5n
ZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNo
YW5nZSBub3RpZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMzg4MzA+IAogICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7Cisg
ICAgICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSwgeyB9KTsKICNlbmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVh
bEV4aXN0aW5nU2VsZWN0aW9uID09IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZl
YWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
RWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwpAQCAtMzE1Miw3ICszMTQ4LDcgQEAgYm9vbCBF
ZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwg
dW5zaWduZWQmIHNlbGVjdGkKIHsKICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMxNzUsNyArMzE3MSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICgh
Y2FuRWRpdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjAwLDEw
ICszMTk2LDEwIEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bv
c2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUg
dHdvIGNoYXJhY3RlcnMuCi0gICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNw
b3NlZCBjaGFyYWN0ZXJzLgpAQCAtMzI1NSw3ICszMjUxLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21p
c3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0
aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0
aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0g
ICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJv
dGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlv
biBpcyBvcnBoYW5lZCwgdGhlbiBkb24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAo
bmV3U2VsZWN0aW9uLnN0YXJ0KCkuaXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNP
cnBoYW4oKSkKQEAgLTMyNjUsOSArMzI2MSw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rp
b25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAg
ICAgLy8gYmVjYXVzZSB0aGVyZSBpcyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVh
dGlvbi4KICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBj
YWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2Fs
bHMuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUg
bm8gbG9uZ2VyIHZhbGlkCi0gICAgYm9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlv
biA9IG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAg
IGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJv
b2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90
Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGlu
ZyBvcGVyYXRpb25zIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0
aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVu
IHlvdSBwcmVzcyByZXR1cm4gaW4gdGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBi
eSBeKToKQEAgLTMyODIsMTMgKzMyNzgsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlv
bkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAg
ICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBv
c2l0aW9uICYmIGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVk
VGV4dCgpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0
SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAg
ICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0
dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMjk2LDcgKzMyOTIsNyBAQCBTdHJp
bmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRU
ZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBi
ZWhhdmlvciA9IFRleHRJdGVyYXRvckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1l
LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAg
ICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJp
ZXNFbmFibGVkKCkpCiAgICAgICAgIGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0Zs
YXRUcmVlOwogICAgIHJldHVybiBzZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwNCw3
ICszMzAwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBi
ZWhhdmlvcikgY29uc3QKIHsKICAgICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1
c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8g
c3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQo
KTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNO
dWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCkBAIC0zMzE0LDcgKzMzMTAsNyBAQCBTdHJpbmcgRWRp
dG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAK
IFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhv
bGRlcihjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpIHx8ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhp
cy0+ZG9jdW1lbnQoKSB9OwpAQCAtMzMyMiw3ICszMzE4LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhv
bGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUm
IHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAK
LSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMz
MzAsNyArMzMyNiw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omlu
c2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgcmFuZ2UtPmluc2Vy
dE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSwgcG9zaXRp
b25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNl
bGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAogICAgIHJldHVybiBwbGFjZWhvbGRl
cjsKIH0KQEAgLTMzNTAsOCArMzM0Niw4IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVUZXh0UGxhY2Vo
b2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vob2xkZXIpCiAgICAgcGxhY2Vob2xk
ZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUgTGVnYWN5IFdlYktpdCBpbXBsZW1l
bnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB0byBiZSBiZWZvcmUgd2hlcmUg
dGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5p
c0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZl
ZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIs
IFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0g
c2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBsYWNl
aG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNl
dFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZv
aWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3QpCkBAIC0zNDAzLDcgKzMzOTksNyBA
QCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdAog
Ym9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFm
ZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAogewogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tz
RGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VD
YWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJl
dHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CkBAIC0zNDEyLDE3
ICszNDA4LDE3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWCiB2b2lkIEVkaXRvcjo6Y29tcHV0
ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbikKIHsKICAgICBpZiAoc3R5bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IC8vIENhbGN1bGF0ZSB0aGUgY3VycmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gdHlwaW5nU3R5bGU7Ci0gICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKKyAgICBpZiAoYXV0byBleGlzdGlu
Z1R5cGluZ1N0eWxlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQogICAg
ICAgICB0eXBpbmdTdHlsZSA9IGV4aXN0aW5nVHlwaW5nU3R5bGUtPmNvcHkoKTsKICAgICBlbHNl
CiAgICAgICAgIHR5cGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKLSAgICB0eXBp
bmdTdHlsZS0+b3ZlcnJpZGVUeXBpbmdTdHlsZUF0KHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOworICAgIHR5cGlu
Z1N0eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICAv
LyBIYW5kbGUgYmxvY2sgc3R5bGVzLCBzdWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5n
IHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHls
ZS0+ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOwpAQCAtMzQzMCw3ICszNDI2LDcg
QEAgdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICAgICAgQXBwbHlTdHlsZUNvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHko
KTsKIAogICAgIC8vIFNldCB0aGUgcmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUu
Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0
eWxlKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3Zl
KHR5cGluZ1N0eWxlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5
bGUoU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24p
CkBAIC0zNDg5LDE5ICszNDg1LDE5IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKSBjb25zdAogCiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJp
bmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWY8RnJhbWU+IHByb3Rl
Y3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVudChtX2Rv
Y3VtZW50KTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJl
c3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCku
Z2V0KCksIG9wdGlvbnMpOwogCiAgICAgaWYgKCFyZXN1bHRSYW5nZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNU
UkVBTSkpOwogCiAgICAgaWYgKCEob3B0aW9ucy5jb250YWlucyhEb05vdFJldmVhbFNlbGVjdGlv
bikpKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0zNTk4LDcgKzM1OTQsNyBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9w
dAogICAgIGlmIChyYW5nZSkgewogICAgICAgICBpZiAoJnJhbmdlLT5vd25lckRvY3VtZW50KCkg
PT0gJmRvY3VtZW50KCkpCiAgICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlOwotICAgICAg
ICBlbHNlIGlmICghaXNGcmFtZUluUmFuZ2UobV9mcmFtZSwgKnJhbmdlKSkKKyAgICAgICAgZWxz
ZSBpZiAoIWlzRnJhbWVJblJhbmdlKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKQEAgLTM2Njgs
NyArMzY2NCw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAjZW5kaWYKIAogICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1f
ZnJhbWUpOworICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2Rv
Y3VtZW50LmZyYW1lKCkpOwogCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9O
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoc2hvdWxkRGV0ZWN0VGVsZXBob25l
TnVtYmVycygpKQpAQCAtMzY5MSw4ICszNjg3LDYgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMK
IAogYm9vbCBFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKQogewotICAgIGlm
ICghbV9mcmFtZS5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IGRvY3VtZW50KCkuaXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9u
ZU51bWJlckRldGVjdG9yOjppc1N1cHBvcnRlZCgpOwogfQogCkBAIC0zNzA1LDkgKzM2OTksOSBA
QCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogCiAgICAg
VmVjdG9yPFJlZlB0cjxSYW5nZT4+IG1hcmtlZFJhbmdlczsKIAotICAgIEZyYW1lU2VsZWN0aW9u
JiBmcmFtZVNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rp
b24mIGZyYW1lU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWZy
YW1lU2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJh
bWUucGFnZSgpKQorICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQog
ICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVs
ZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzcyOSw3ICszNzIzLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVO
dW1iZXJzKCkKICAgICBSZWZQdHI8UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIGlmIChhdXRv
KiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzQyLDcgKzM3MzYsNyBAQCB2b2lkIEVkaXRv
cjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICAgICAgbV9kZXRl
Y3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOwogICAgIH0KIAotICAgIGlm
IChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2Rv
Y3VtZW50LnBhZ2UoKSkKICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigp
LnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogfQogCkBAIC0zODAxLDkg
KzM3OTUsOSBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICBp
ZiAoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpIHsKICAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBuZXdBZGphY2VudFdvcmRzOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGVkU2VudGVuY2U7Ci0gICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUuc2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgICAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Npbmcp
IHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKKyAgICAgICAgYm9vbCBjYXJldEJyb3dz
aW5nID0gbV9kb2N1bWVudC5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAg
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkgfHwgY2FyZXRCcm93c2luZykgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5l
d1N0YXJ0KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkp
OwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3Jk
cyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KSwgZW5kT2ZXb3JkKG5ld1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICNl
bHNlCkBAIC0zODU2LDcgKzM4NTAsNyBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1l
ckZpcmVkKCkKICAgICBpZiAoIW1fZWRpdG9yVUlVcGRhdGVUaW1lcldhc1RyaWdnZXJlZEJ5RGlj
dGF0aW9uKQogICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIAotICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRp
dG9yVUlVcGRhdGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fb2xk
U2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBub3RpZnlDbGll
bnRPZkF0dGFjaG1lbnRVcGRhdGVzKCk7CkBAIC0zODgzLDcgKzM4NzcsNyBAQCBzdGF0aWMgTm9k
ZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSogbm9kZSkKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlv
blN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUs
IGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmly
c3RNYXJrYWJsZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVj
YXRlZE5vZGUoKSk7CisgICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzk1MCwxMCArMzk0NCwx
MCBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNr
aW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwog
fQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFt
ZSYgZnJhbWUpCitzdGF0aWMgUmVmUHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlv
bihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNlbGVj
dGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkp
IDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICByZXR1cm4gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihzZWxlY3Rpb24uc3RhcnQoKSkgOiBkb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogfQogCiBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKQEAgLTM5NjcsOCArMzk2MSw4IEBAIHN0YXRp
YyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQogCiBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkg
Y29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJy
ZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5
cGVkU3RyaW5nID0gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24obV9kb2N1bWVudCk7CiAgICAg
aWYgKHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNl
VGV4dChzZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJl
bnRseVR5cGVkU3RyaW5nKTsKIApAQCAtMzk3Nyw3ICszOTcxLDcgQEAgU3RyaW5nIEVkaXRvcjo6
c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiAgICAgCiBSZWZQdHI8UmFuZ2U+IEVk
aXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVybiBtYWtlUmFuZ2Uoc3RhcnRP
ZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBlbmRPZlBhcmFncmFwaChzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpKSk7CiB9CiAKQEAgLTQwNDQsNyArNDAzOCw3IEBAIEZvbnRBdHRy
aWJ1dGVzIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsK
ICAgICBGb250QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9
IG51bGxwdHI7Ci0gICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2Zy
YW1lLCBub2RlVG9SZW1vdmUpOworICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25T
dGFydChtX2RvY3VtZW50LmZyYW1lKCksIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkg
ewogICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQogICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5y
ZW1vdmUoKTsKQEAgLTQwODUsNyArNDA3OSw3IEBAIEZvbnRBdHRyaWJ1dGVzIEVkaXRvcjo6Zm9u
dEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgYXR0cmlidXRlcy50ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRMaXN0c0F0UG9zaXRp
b25JbkRlc2NlbmRpbmdPcmRlcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpOworICAgIGF0dHJpYnV0ZXMudGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0
aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpKTsKIAogICAgIHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7CiAgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpSaWdodDoKQEAgLTQxMTEsNyArNDEwNSw3IEBAIEZvbnRBdHRyaWJ1dGVz
IEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9mcmFt
ZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKKyAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFr
ZVJlZlB0cihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpOwogICAgIGlmICh0
eXBpbmdTdHlsZSAmJiB0eXBpbmdTdHlsZS0+c3R5bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVl
ID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkgewpAQCAtNDE5OSwxMiArNDE5Myw4IEBAIHZvaWQgRWRpdG9yOjpu
b3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRhdGVzKCkKICAgICBmb3IgKGF1dG8mIGlkZW50aWZp
ZXIgOiByZW1vdmVkQXR0YWNobWVudElkZW50aWZpZXJzKQogICAgICAgICBjbGllbnQoKS0+ZGlk
UmVtb3ZlQXR0YWNobWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogCi0gICAgYXV0byog
ZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogaW5zZXJ0ZWRBdHRhY2ht
ZW50SWRlbnRpZmllcnMpIHsKLSAgICAgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IGRvY3VtZW50
LT5hdHRhY2htZW50Rm9ySWRlbnRpZmllcihpZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGF1dG8g
YXR0YWNobWVudCA9IG1fZG9jdW1lbnQuYXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmll
cikpCiAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkSW5zZXJ0QXR0YWNobWVudFdpdGhJZGVudGlm
aWVyKGlkZW50aWZpZXIsIGF0dGFjaG1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oSFRNTE5hbWVzOjpzcmNBdHRyKSwgYXR0YWNobWVudC0+aGFzRW5jbG9zaW5nSW1hZ2UoKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDIy
Nyw3ICs0MjE3LDcgQEAgdm9pZCBFZGl0b3I6Omluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBPcHRpb25hbDx1aW50NjRfdD4mJiBmaWwKIAogdm9pZCBFZGl0b3I6Omhh
bmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0
ZSkKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBtX2lzSGFu
ZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSA9IHRydWU7CiAKQEAgLTQyNDYsNyArNDIzNiw3IEBAIHZv
aWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNj
ZXB0ZWRDYW5kaWRhdGUpCiAKIGJvb2wgRWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxl
ZCgmbV9mcmFtZSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQobV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpkaWN0
YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikK
QEAgLTQyNjIsMTMgKzQyNTIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5h
dGl2ZWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZwogdm9pZCBFZGl0
b3I6OnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCkKIHsKICAgICBtX292ZXJ3cml0ZU1vZGVF
bmFibGVkID0gIW1fb3ZlcndyaXRlTW9kZUVuYWJsZWQ7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7Ci19Ci0K
LURvY3VtZW50JiBFZGl0b3I6OmRvY3VtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9mcmFt
ZS5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4gKm1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1v
ZGVFbmFibGVkKTsKIH0KIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9u
UmFuZ2UoKQpAQCAtNDMyMSw5ICs0MzA1LDkgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9y
U2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlw
bGVGb250cyA9IGZhbHNlOwogCi0gICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkgeworICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAg
ICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3Zl
CisgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50
LmZyYW1lKCksIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAg
Y29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkgewpAQCAtNDMz
NSwxMSArNDMxOSwxMSBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9v
bCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQog
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFy
dEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVw
cmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0
YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtNDM3MSw3ICs0MzU1LDcgQEAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+
IEVkaXRvcjo6aW5zZXJ0RWRpdGFibGVJbWFnZSgpCiAKIGJvb2wgRWRpdG9yOjpjYW5Db3B5RXhj
bHVkaW5nU3RhbmRhbG9uZUltYWdlcygpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24u
aXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKaW5kZXggYWQ5ZWRhMjYxOGM5YTg4MGJlY2JiMWNlNGQ2OGJiNTliODlj
MjBjMC4uZmZhNzdkMGU1NDhlN2NlNzdkY2Q0N2JiMGU2MWMxMGE4NDc3ZjAzMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxl
LmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmluZE9wdGlv
bnMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiUGFzdGVib2FyZFdyaXRlckRhdGEuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcu
aCIKQEAgLTExOSwxMyArMTIwLDEzIEBAIGVudW0gY2xhc3MgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uIDogdWludDhfdCB7CiAKIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSB7CiBwdWJs
aWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiwg
T3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2UoRG9jdW1lbnQmLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9
IFdURjo6bnVsbG9wdCwgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0p
OwogICAgIFdFQkNPUkVfRVhQT1JUIH5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UoKTsKIAogcHJp
dmF0ZToKICAgICB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAK
LSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50
OwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG1fb3B0aW9uczsKICAg
ICBib29sIG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzOwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCkBAIC0xMzcsNyArMTM4LDcgQEAgcHJpdmF0ZToKIGNsYXNzIElnbm9yZVNlbGVjdGlv
bkNoYW5nZUZvclNjb3BlIHsKIHB1YmxpYzoKICAgICBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JT
Y29wZShGcmFtZSYgZnJhbWUpCi0gICAgICAgIDogbV9zZWxlY3Rpb25DaGFuZ2UoZnJhbWUsIFdU
Rjo6bnVsbG9wdCwgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFu
Z2VzKQorICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZS5kb2N1bWVudCgpLCBXVEY6
Om51bGxvcHQsIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cykKICAgICB7CiAgICAgfQogCkBAIC0xNTAsNyArMTUxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEVk
aXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgRWRpdG9yKEZyYW1lJik7CisgICAgZXhwbGljaXQgRWRpdG9yKERvY3VtZW50Jik7CiAgICAg
fkVkaXRvcigpOwogCiAgICAgZW51bSBjbGFzcyBQYXN0ZU9wdGlvbiA6IHVpbnQ4X3QgewpAQCAt
MjcxLDcgKzI3Miw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBDb21tYW5kIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIENvbW1hbmQoKTsKLSAgICAgICAgQ29tbWFuZChjb25z
dCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBGcmFtZSYpOwor
ICAgICAgICBDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIERvY3VtZW50Jik7CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVj
dXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyID0gU3RyaW5nKCksIEV2ZW50KiB0cmlnZ2VyaW5n
RXZlbnQgPSBudWxscHRyKSBjb25zdDsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleGVj
dXRlKEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNvbnN0OwpAQCAtMjg4LDYgKzI4OSw3IEBAIHB1
YmxpYzoKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQq
IG1fY29tbWFuZCB7IG51bGxwdHIgfTsKICAgICAgICAgRWRpdG9yQ29tbWFuZFNvdXJjZSBtX3Nv
dXJjZTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgICAgICBSZWZQ
dHI8RnJhbWU+IG1fZnJhbWU7CiAgICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kIGNv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7IC8vIENvbW1hbmQgc291cmNlIGlzIENv
bW1hbmRGcm9tTWVudU9yS2V5QmluZGluZy4KQEAgLTU2Nyw3ICs1NjksNyBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9s
ZGVyRWxlbWVudCYpOwogCiBwcml2YXRlOgotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0
OworICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0K
IAogICAgIGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNt
YXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQmKTsKQEAgLTYxOCw3ICs2MjAsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9y
Q3V0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogICAgIFJlZlB0cjxDb21wb3Np
dGVFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENvbW1hbmQ7CiAgICAgUmVmUHRyPFRleHQ+IG1fY29t
cG9zaXRpb25Ob2RlOwogICAgIHVuc2lnbmVkIG1fY29tcG9zaXRpb25TdGFydDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2RjM2I5
MGZiNmMwNDcxZmFhMTBmYjhjNDQuLmJkNTE4MGViNDAwZWE3OTIxNTFiNmY3OThiNjBlY2I4Y2Zm
ZGFlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMTEw
OSw2ICsxMTA5LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lJiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwKIAogc3RhdGljIGJvb2wgZXhl
Y3V0ZVN3YXBXaXRoTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSwgY29uc3QgU3RyaW5nJikKIHsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rpb24oZnJh
bWUuZG9jdW1lbnQoKSk7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCk7CiAgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CkBAIC0xODM2LDEyICsxODM3LDEyIEBAIHN0YXRpYyBjb25zdCBFZGl0b3JJbnRl
cm5hbENvbW1hbmQqIGludGVybmFsQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQog
CiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUpCiB7Ci0gICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwg
Q29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFu
ZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRp
bmcsIG1fZG9jdW1lbnQpOwogfQogCiBFZGl0b3I6OkNvbW1hbmQgRWRpdG9yOjpjb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlKQogewot
ICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwg
bV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1l
KSwgc291cmNlLCBtX2RvY3VtZW50KTsKIH0KIAogYm9vbCBFZGl0b3I6OmNvbW1hbmRJc1N1cHBv
cnRlZEZyb21NZW51T3JLZXlCaW5kaW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCkBAIC0x
ODUzLDEyICsxODU0LDEzIEBAIEVkaXRvcjo6Q29tbWFuZDo6Q29tbWFuZCgpCiB7CiB9CiAKLUVk
aXRvcjo6Q29tbWFuZDo6Q29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqIGNvbW1h
bmQsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBGcmFtZSYgZnJhbWUpCitFZGl0b3I6OkNv
bW1hbmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0
b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9jb21t
YW5kKGNvbW1hbmQpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ZyYW1lKGNvbW1h
bmQgPyAmZnJhbWUgOiBudWxscHRyKQorICAgICwgbV9kb2N1bWVudChjb21tYW5kID8gJmRvY3Vt
ZW50IDogbnVsbHB0cikKKyAgICAsIG1fZnJhbWUoY29tbWFuZCA/IGRvY3VtZW50LmZyYW1lKCkg
OiBudWxscHRyKQogewotICAgIEFTU0VSVChjb21tYW5kIHx8ICFtX2ZyYW1lKTsKKyAgICBBU1NF
UlQoY29tbWFuZCB8fCAhbV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpl
eGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBj
b25zdApAQCAtMTg2OCw5ICsxODcwLDkgQEAgYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUo
Y29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGMKICAgICAg
ICAgaWYgKCFhbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsK
LSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0g
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gZG9jdW1lbnQpCisKKyAgICBtX2RvY3VtZW50
LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAobV9kb2N1
bWVudC0+ZnJhbWUoKSAhPSBtX2ZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gbV9jb21tYW5kLT5leGVjdXRlKCptX2ZyYW1lLCB0cmlnZ2VyaW5nRXZlbnQsIG1fc291
cmNlLCBwYXJhbWV0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAppbmRleCA0NTE2ZTUwNjUwNzJmZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li5iYmNmY2Nl
N2FlY2JmZGY3MGMzZmZiOGY2YzJmZjhjMmJkMjA0YzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTM5LDEzICsxMzksMTQgQEAgSW50UmVjdCBEcmFn
Q2FyZXRDb250cm9sbGVyOjplZGl0YWJsZUVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
KCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxk
QWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQorc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1
bWVudCkKIHsKLSAgICByZXR1cm4gIWZyYW1lIHx8IGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigp
LnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgpOworICAgIHJldHVybiAhZG9j
dW1lbnQgfHwgZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxl
Y3Rpb25Bc0RpcmVjdGlvbmFsKCk7CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlv
bihGcmFtZSogZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorRnJhbWVTZWxlY3Rpb246OkZy
YW1lU2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCisgICAgLCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIp
CiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxh
cml0eSkKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Niw3ICsxNTcsNyBAQCBGcmFtZVNl
bGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9hYnNDYXJldEJv
dW5kc0RpcnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1l
LT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1l
KCkgPT0gZnJhbWUpCisgICAgLCBtX2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkg
JiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBt
X2ZyYW1lKQogICAgICwgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3Bl
bmRpbmdTZWxlY3Rpb25VcGRhdGUoZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25T
Y3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uKGZhbHNlKQpAQCAtMTY1LDE0ICsxNjYsMjQgQEAg
RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fY2Fy
ZXRCbGlua3ModHJ1ZSkKICNlbmRpZgogewotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rp
b25hbFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9u
YWxTZWxlY3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0
aW9uYWwodHJ1ZSk7CisgICAgCisgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2Vk
QW5kQWN0aXZlKCk7CisgICAgaWYgKGFjdGl2ZUFuZEZvY3VzZWQpCisgICAgICAgIHNldFNlbGVj
dGlvbkZyb21Ob25lKCk7CisjaWYgVVNFKFVJS0lUX0VESVRJTkcpCisgICAgLy8gQ2FyZXQgYmxp
bmtpbmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQorICAgIHNldENhcmV0VmlzaWJsZShhY3Rp
dmVBbmRGb2N1c2VkKTsKKyNlbHNlCisgICAgc2V0Q2FyZXRWaXNpYmlsaXR5KGFjdGl2ZUFuZEZv
Y3VzZWQgPyBWaXNpYmxlIDogSGlkZGVuKTsKKyNlbmRpZgogfQogCiBFbGVtZW50KiBGcmFtZVNl
bGVjdGlvbjo6cm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsK
ICAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxl
bWVudCgpOwotICAgIHJldHVybiBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IG1fZnJh
bWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOworICAgIHJldHVybiBzZWxlY3Rpb25S
b290ID8gc2VsZWN0aW9uUm9vdCA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogfQog
CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3Ms
IEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24p
CkBAIC0yODQsNyArMjk1LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlN
b3VzZUlmRGlmZmVyZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2lu
dHNBZGp1c3RtZW50TW9kZSBlbmRwb2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlz
RGlyZWN0aW9uYWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1l
KSB8fCBuZXdTZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25h
bCA9IHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5l
d1NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9
IG1fb3JpZ2luYWxCYXNlLmlzTm90TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rp
b24udmlzaWJsZUJhc2UoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBA
IC0zMjIsNyArMzMzLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91
dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBib29sIHNob3Vs
ZENsZWFyVHlwaW5nU3R5bGUgPSBvcHRpb25zLmNvbnRhaW5zKENsZWFyVHlwaW5nU3R5bGUpOwog
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb25Qb3NzaWJs
eVdpdGhvdXREaXJlY3Rpb247Ci0gICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2Vs
ZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVj
dGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwo
dHJ1ZSk7CiAKICAgICBpZiAoIW1fZnJhbWUpIHsKQEAgLTMzNCw3ICszNDUsNyBAQCBib29sIEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0
IFZpc2libGVTZWxlY3RpbwogICAgIC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUg
d2UgY2FuIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AKICAgICBpZiAoRG9jdW1lbnQqIG5ld1Nl
bGVjdGlvbkRvY3VtZW50ID0gbmV3U2VsZWN0aW9uLmJhc2UoKS5kb2N1bWVudCgpKSB7CiAgICAg
ICAgIGlmIChSZWZQdHI8RnJhbWU+IG5ld1NlbGVjdGlvbkZyYW1lID0gbmV3U2VsZWN0aW9uRG9j
dW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25GcmFtZSAhPSBt
X2ZyYW1lICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVj
dGlvbkRvY3VtZW50ICE9IG1fZG9jdW1lbnQpIHsKICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rp
b25GcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucywg
QVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSwgYWxpZ24sIGdyYW51bGFyaXR5KTsKICAgICAgICAg
ICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZHVyaW5nIHRoZSBhYm92ZSBzZXQgc2VsZWN0
aW9uLCB0aGlzIEZyYW1lU2VsZWN0aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5CiAgICAgICAgICAg
ICAgICAgLy8gc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQsIGJ1dCB0
aGF0IHRoZSBzZWxlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkIHNpbmNlCkBAIC0zNDksNyArMzYw
LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBw
ZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVs
YXJpdHk7CiAKICAgICBpZiAoY2xvc2VUeXBpbmcpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNs
b3NlVHlwaW5nKG1fZnJhbWUpOworICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygq
bV9kb2N1bWVudCk7CiAKICAgICBpZiAoc2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSkKICAgICAgICAg
Y2xlYXJUeXBpbmdTdHlsZSgpOwpAQCAtMzU3LDcgKzM2OCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rp
b246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNl
bGVjdGlvCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsK
ICAgICBib29sIGRpZE11dGF0ZVNlbGVjdGlvbiA9IG9sZFNlbGVjdGlvbiAhPSBuZXdTZWxlY3Rp
b247CiAgICAgaWYgKGRpZE11dGF0ZVNlbGVjdGlvbikKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9y
KCkuc2VsZWN0aW9uV2lsbENoYW5nZSgpOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5z
ZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsK
IApAQCAtMzcxLDM1ICszODIsMzEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9u
V2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkg
JiYgIShvcHRpb25zICYgRG9Ob3RTZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNl
ZEVsZW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAg
ICBhdXRvKiBvbGRGb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7
CiAgICAgICAgIHNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKTsKICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCBub3QgYmUgbmVlZGVkLgotICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+
Zm9jdXNlZEVsZW1lbnQoKSAhPSBvbGRGb2N1c2VkRWxlbWVudCkKLSAgICAgICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKG1fZG9j
dW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCisgICAgICAgICAg
ICBtX2RvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3
YXlzIGNsZWFyIHRoZSB4IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRp
b24uCiAgICAgLy8gSXQgd2lsbCBiZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2
aWdhdGlvbiBjb2RlIGlmIG5lY2Vzc2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbiA9IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0
RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0
b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7Cisg
ICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxl
Y3Rpb24sIG9wdGlvbnMpOwogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3Rpb24t
YXBpLyNzZWxlY3Rpb25jaGFuZ2UtZXZlbnQKICAgICAvLyBGSVhNRTogU3BlYyBkb2Vzbid0IHNw
ZWNpZnkgd2hpY2ggdGFzayBzb3VyY2UgdG8gdXNlLgotICAgIG1fZnJhbWUtPmRvY3VtZW50KCkt
PnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBFdmVudDo6Q2Fu
QnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICBtX2RvY3VtZW50LT5x
dWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1
YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFNldFNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucywg
QVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQgaW50ZW50LCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWdu
LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7Ci0gICAgUmVmUHRyPEZyYW1lPiBwcm90
ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3RvcihtX2Rv
Y3VtZW50KTsKICAgICBpZiAoIXNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2Uo
c2VsZWN0aW9uLCBvcHRpb25zLCBhbGlnbiwgZ3JhbnVsYXJpdHkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlm
ICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChvcHRpb25zICYgUmV2ZWFs
U2VsZWN0aW9uVXBUb01haW5GcmFtZSkKICAgICAgICAgbV9zZWxlY3Rpb25SZXZlYWxNb2RlID0g
U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsVXBUb01haW5GcmFtZTsKICAgICBlbHNlIGlmIChv
cHRpb25zICYgUmV2ZWFsU2VsZWN0aW9uKQpAQCAtNDExLDI3ICs0MTgsMjcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgT3B0aW9uU2V0PFMKICAgICBtX3NlbGVjdGlvblJldmVhbEludGVudCA9IGludGVudDsKICAg
ICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogCi0gICAgaWYgKGRvY3VtZW50LT5o
YXNQZW5kaW5nU3R5bGVSZWNhbGMoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+aGFzUGVuZGluZ1N0
eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1l
bnQtPnZpZXcoKTsKICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+bGF5b3V0Q29udGV4
dCgpLmlzTGF5b3V0UGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICB1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oaW50ZW50KTsKIAogICAgIGlmIChvcHRpb25zICYgSXNVc2VyVHJpZ2dl
cmVkKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGll
bnQoKSkKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNs
aWVudCgpKQogICAgICAgICAgICAgY2xpZW50LT5kaWRFbmRVc2VyVHJpZ2dlcmVkU2VsZWN0aW9u
Q2hhbmdlcygpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uQnlVcGRh
dGluZ0xheW91dE9yU3R5bGUoRnJhbWUmIGZyYW1lKQorc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0
aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50KQogewogI2lmIEVO
QUJMRShURVhUX0NBUkVUKQotICAgIGZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogI2Vsc2UKLSAgICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogI2Vu
ZGlmCiB9CiAKQEAgLTQ0MSw3ICs0NDgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXROZWVk
c1NlbGVjdGlvblVwZGF0ZShSZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0ZSByZXZlYWxNbwogICAg
IGlmIChyZXZlYWxNb2RlID09IFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlOjpGb3JjZWQpCiAg
ICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVh
bDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwotICAgIGlmIChSZW5kZXJW
aWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlclZp
ZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVj
dGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiB9CiAKQEAgLTQ1Nyw3ICs0NjQsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVD
aGFuZ2VJbnRlbnQmIGludAogICAgIGlmIChtX3NlbGVjdGlvblJldmVhbE1vZGUgIT0gU2VsZWN0
aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZlYWwpIHsKICAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFs
aWdubWVudDsKIAotICAgICAgICBpZiAobV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91
bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCisgICAgICAgIGlmIChtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlv
bklzUmV2ZWFsZWQoKSkKICAgICAgICAgICAgIGFsaWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJz
b3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
Q2VudGVyQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25T
Y3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFs
d2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKQEAgLTQ3MSw3ICs0
NzgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29u
c3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBk
YXRlRGF0YURldGVjdG9yc0ZvclNlbGVjdGlvbigpCiB7CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9O
VU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX2ZyYW1lLT5l
ZGl0b3IoKS5zY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOworICAgIG1fZG9jdW1l
bnQtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCk7CiAjZW5kaWYK
IH0KIApAQCAtNzAzLDcgKzcxMCw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6
cG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlzR2V0U3RhcnQpIGNvbnN0CiAgICAgLy8gYmFzZS9l
eHRlbnQgYWx3YXlzIHBvaW50IHRvIHRoZSBzYW1lIG5vZGVzIGFzIHN0YXJ0L2VuZCwgYnV0IHdo
aWNoIHBvaW50cwogICAgIC8vIHRvIHdoaWNoIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIGlzQmFz
ZUZpcnN0LiBUaGVuIHRoaXMgY2FuIGJlIGNoYW5nZWQKICAgICAvLyB0byBqdXN0IHJldHVybiBt
X3NlbC5leHRlbnQoKS4KLSAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhh
dmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2ludCgpKQor
ICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBvaW50KCkpCiAgICAgICAgIHJl
dHVybiBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gbV9zZWxlY3Rpb24udmlzaWJsZUVuZCgp
IDogbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAKICAgICByZXR1cm4gaXNHZXRTdGFydCA/
IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogbV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpOwpA
QCAtNzIzLDcgKzczMCw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bmV4dFdv
cmRQb3NpdGlvbkZvclBsYXRmb3JtKGNvbnN0IFZpc2libGVQb3NpdGlvCiB7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IG5leHRXb3JkUG9zaXRpb24ob3Jp
Z2luYWxQb3NpdGlvbik7CiAKLSAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5i
ZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpKSB7CisgICAgaWYgKG1f
ZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3Bh
Y2VXaGVuTW92aW5nUmlnaHQoKSkgewogICAgICAgICAvLyBJbiBvcmRlciB0byBza2lwIHNwYWNl
cyB3aGVuIG1vdmluZyByaWdodCwgd2UgYWR2YW5jZSBvbmUKICAgICAgICAgLy8gd29yZCBmdXJ0
aGVyIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgYmFjay4gR2l2ZW4gdGhlCiAgICAgICAgIC8vIHNl
bWFudGljcyBvZiBwcmV2aW91c1dvcmRQb3NpdGlvbigpIHRoaXMgd2lsbCBwdXQgdXMgYXQgdGhl
CkBAIC04NTUsNyArODYyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2Rp
ZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGIKICAgICAgICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24u
YWZmaW5pdHkoKSkucmlnaHQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hl
bk1vdmluZ1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNo
b3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VX
aGVuTW92aW5nUmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBjdXJyZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpOwogICAgICAgICBwb3MgPSByaWdodFdvcmRQb3NpdGlvbihjdXJyZW50UG9z
aXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAgICAgICBpZiAocmVhY2hlZEJv
dW5kYXJ5KQpAQCAtMTA3Niw3ICsxMDgzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0
aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm8KICAg
ICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9z
ZWxlY3Rpb24uYWZmaW5pdHkoKSkubGVmdCh0cnVlLCByZWFjaGVkQm91bmRhcnkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eTogewotICAgICAgICBib29sIHNraXBz
U3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CisgICAgICAgIGJvb2wgc2tp
cHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9z
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IGxlZnRXb3JkUG9zaXRpb24oY3Vy
cmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJl
YWNoZWRCb3VuZGFyeSkKQEAgLTEzNjIsNyArMTM2OSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYg
IWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9mcmFtZSAm
JiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CisgICAgaWYgKHJlYWNo
ZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJl
ZCAmJiBtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkp
IHsKICAgICAgICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSh7IEFYVGV4
dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbkJvdW5kYXJ5LCB0ZXh0U2VsZWN0aW9uV2l0aERpcmVj
dGlvbkFuZEdyYW51bGFyaXR5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpIH0pOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMzc0LDggKzEzODEsOCBAQCBib29sIEZyYW1lU2VsZWN0
aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24sIFRleAogICAgICAgICBpZiAoIXdhc1JhbmdlICYmIGFsdGVyID09IEFsdGVyYXRpb25Nb3Zl
ICYmIHBvc2l0aW9uID09IG9yaWdpbmFsU3RhcnRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxp
dHlFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgaWYgKG1fZG9jdW1l
bnQgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAgICAgICBp
ZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5zZXRUZXh0U2VsZWN0aW9uSW50ZW50KHRleHRTZWxl
Y3Rpb25JbnRlbnQoYWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKTsKICAgICB9CiAKQEAg
LTEzODQsNyArMTM5MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlv
biBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgLy8gTm90ZTog
dGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgdW51c2Vk
LCBpdCB3b3VsZCBiZQogICAgIC8vIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gdHlwZSBpZiB0aGVy
ZSB3ZXJlIG5vIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiBzZXQuCiAgICAgTGF5b3V0
VW5pdCB4ID0gbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFNU
QVJUKTsKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQp
OworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7
CiAKICAgICBzd2l0Y2ggKGFsdGVyKSB7CiAgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKQEAgLTEz
OTQsNyArMTQwMSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBh
bHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAgICAgICAgaWYgKCFt
X3NlbGVjdGlvbi5pc0NhcmV0KCkKICAgICAgICAgICAgICYmIChncmFudWxhcml0eSA9PSBXb3Jk
R3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoR3JhbnVsYXJpdHkgfHwgZ3Jh
bnVsYXJpdHkgPT0gTGluZUdyYW51bGFyaXR5KQotICAgICAgICAgICAgJiYgbV9mcmFtZSAmJiAh
bV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRP
ckxpbmVBY3Jvc3NDYXJldCgpKSB7CisgICAgICAgICAgICAmJiBtX2RvY3VtZW50ICYmICFtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVuZFNlbGVjdGlvbkJ5V29yZE9y
TGluZUFjcm9zc0NhcmV0KCkpIHsKICAgICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgc2VsZWN0
aW9uIGdvIGFjcm9zcyB0aGUgYmFzZSBwb3NpdGlvbiBkaXJlY3RseS4gTmVlZGVkIHRvIG1hdGNo
IG1hYwogICAgICAgICAgICAgLy8gYmVoYXZpb3Igd2hlbiwgZm9yIGluc3RhbmNlLCB3b3JkLXNl
bGVjdGluZyBiYWNrd2FyZHMgc3RhcnRpbmcgd2l0aCB0aGUgY2FyZXQgaW4KICAgICAgICAgICAg
IC8vIHRoZSBtaWRkbGUgb2YgYSB3b3JkIGFuZCB0aGVuIHdvcmQtc2VsZWN0aW5nIGZvcndhcmQs
IGxlYXZpbmcgdGhlIGNhcmV0IGluIHRoZQpAQCAtMTQwNyw3ICsxNDE0LDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uLCBUZXgKIAogICAgICAgICAvLyBTdGFuZGFyZCBNYWMgYmVoYXZpb3Igd2hlbiBl
eHRlbmRpbmcgdG8gYSBib3VuZGFyeSBpcyBncm93IHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4g
bGVhdmluZyB0aGUKICAgICAgICAgLy8gYmFzZSBpbiBwbGFjZSBhbmQgbW92aW5nIHRoZSBleHRl
bnQuIE1hdGNoZXMgTlNUZXh0Vmlldy4KLSAgICAgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1l
LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5k
aW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShn
cmFudWxhcml0eSkpCisgICAgICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVudC0+ZWRp
dG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1Rv
Qm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVs
YXJpdHkpKQogICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24g
PSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CkBAIC0xNTE3LDcgKzE1MjQsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIHVuc2lnbmVkIHZlcnRp
Y2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2Vy
ZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKIAotICAg
IG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxT
ZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9z
ZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVj
dGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMTU3NSw3ICsxNTgyLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAj
ZW5kaWYKIAotICAgIGlmIChhdXRvKiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkp
CisgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAg
IHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAKICAgICBzZXRTZWxlY3Rpb25X
aXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKFZpc2libGVTZWxlY3Rpb24oKSwgZGVmYXVsdFNldFNl
bGVjdGlvbk9wdGlvbnMoKSwgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CkBAIC0xNjU1LDkgKzE2NjIsOSBAQCBzdGF0aWMgYm9vbCBpc05vbk9ycGhh
bmVkQ2FyZXQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBJbnRSZWN0IEZy
YW1lU2VsZWN0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKQogewot
ICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1f
ZnJhbWUpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2Rv
Y3VtZW50KTsKICAgICByZWNvbXB1dGVDYXJldFJlY3QoKTsKICAgICBpZiAoaW5zaWRlRml4ZWQp
CiAgICAgICAgICppbnNpZGVGaXhlZCA9IG1fY2FyZXRJbnNpZGVQb3NpdGlvbkZpeGVkOwpAQCAt
MTY3NSwxMCArMTY4MiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJl
Y3QoKQogICAgIGlmICghc2hvdWxkVXBkYXRlQ2FyZXRSZWN0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEZyYW1lVmlldyogdiA9IG1fZnJhbWUtPmRvY3VtZW50KCkt
PnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYg
KCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OTAsNyArMTY5Nyw3IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgICAgICBjbGVhckNh
cmV0UmVjdCgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlU3RhcnQgPSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgICAgIGlm
ICh1cGRhdGVDYXJldFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwgdmlzaWJsZVN0YXJ0KSkgewor
ICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQp
KSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRz
RGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTcxNSw3ICsxNzIyLDcgQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpIHsKKyAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewogICAgICAgICBib29sIHByZXZpb3Vz
T3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSA9IG1fc2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUgJiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+
aXNDb250ZW50RWRpdGFibGUoKSk7CiAgICAgICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmll
dywgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlKSkgewogICAgICAgICAg
ICAgaWYgKG1fcHJldmlvdXNDYXJldE5vZGUpCkBAIC0xODk0LDEyICsxOTAxLDExIEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QK
ICAgICBpZiAoIWlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1
dG8qIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQor
ICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0
UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVl
c3QoKSwgcmVzdWx0KTsKICAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7
CiAgICAgaWYgKCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTk2OCw5ICsxOTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7Ci0KLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50
LT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1
bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZv
Y3VzZWRFbGVtZW50KSkgewogICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOwogICAgICAg
ICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwoKSkgewpAQCAtMjAwMCw4ICsyMDA0LDgg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICAgICAgaWYgKHJvb3QpCiAg
ICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHJvb3QtPnNoYWRvd0hvc3QoKTsKICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
OwotICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBkb2N1bWVudC0+Ym9keU9yRnJhbWVz
ZXQoKTsKKyAgICAgICAgICAgIHJvb3QgPSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsK
KyAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbV9kb2N1bWVudC0+Ym9keU9yRnJhbWVz
ZXQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIXJvb3QpCkBAIC0yMDU4LDkgKzIwNjIs
OCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwg
RUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRDbAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNl
ZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFjdGl2ZUFuZEZvY3VzZWQgPSBp
c0ZvY3VzZWRBbmRBY3RpdmUoKTsKLSAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KCptX2ZyYW1l
LT5kb2N1bWVudCgpKTsKIAotICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Cisg
ICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCiAjaWYgVVNFKFVJS0lUX0VE
SVRJTkcpCiAgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQpA
QCAtMjA3MSw3ICsyMDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZl
U3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUg
dG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgotICAgIGlmIChSZW5k
ZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKKyAgICBpZiAoUmVuZGVyVmll
dyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0
aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZy
YW1lLgpAQCAtMjA4Miw3ICsyMDg1LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9y
QWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0eWxlOjpSZXNvbHZlcjo6Y2hl
Y2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoKSBjaGVj
ayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAgICAgLy8gdXBkYXRlIHN0eWxl
IGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3NlLgotICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKICAgICAgICAgZWxl
bWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAocmVu
ZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQpAQCAtMjEwNywxMyAr
MjExMCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkKGJvb2wgZmxhZykKIAog
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZv
Y3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2Rv
Y3VtZW50LT5wYWdlKCkgJiYgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5p
c0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1pbmxpbmUgc3RhdGljIGJv
b2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKEZyYW1lKiBmcmFtZSkKK2lu
bGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRG9j
dW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkubGFzdEVkaXRD
b21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9w
Q2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRD
b21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRT
dG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIxMzIsMTIgKzIxMzUsMTIgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgYm9vbCBwYWludEJs
b2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJl
dCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAg
ICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsK
IAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0
aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgYm9vbCBzaG91bGRCbGluayA9ICFw
YWludEJsb2NrQ3Vyc29yICYmIGNhcmV0SXNWaXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChvbGRT
ZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKIAogICAgIC8v
IElmIHRoZSBjYXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGltZXIgc28gd2UgY2FuIHJlc3Rh
cnQgd2l0aCBhCiAgICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhlIG5ldyBsb2NhdGlvbi4KLSAgICBp
ZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxkQmxpbmsgfHwgc2hvdWxkU3Rv
cEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZnJhbWUpKQorICAgIGlmIChjYXJldFJlY3RD
aGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVU
b1R5cGluZ0NvbW1hbmQobV9kb2N1bWVudCkpCiAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0
b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFjayBjYXJldC4gQmUgc3Vy
ZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsyMTU2LDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBSZW5k
ZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmll
dyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjIwMiw4ICsyMjA1LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91
cyBsYXlvdXQgaGVyZS4KLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIGlmIChtX2RvY3VtZW50KQor
ICAgICAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVu
dCk7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBA
IC0yMjQ3LDEwICsyMjUwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVt
ZW50SWZOZWVkZWQoKQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCku
Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3Vt
ZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgaWYgKGNhcmV0QnJv
d3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVs
ZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsK
KyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9j
dXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjY1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAh
aXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkg
dG8gbWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0
aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJn
ZXQtPmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAg
ICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+
cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2Zy
YW1lKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKICAgICAgICAg
fQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRy
KTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CiAgICAg
fQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9j
dXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAg
ICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVt
ZW50KG51bGxwdHIsICptX2ZyYW1lKTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpw
YWludERyYWdDYXJldChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QK
QEAgLTIzMDAsMTYgKzIzMDMsMTYgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRl
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAo
bV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkt
PnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsK
KyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0
IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgp
KQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAot
ICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKLSAg
ICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOworICAgIGF1
dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5k
ZXJWaWV3KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCkBAIC0yMzI1LDE0ICsyMzI4
LDE0IEBAIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zp
c2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246Omdl
dENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rhbmds
ZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQtPnJlbmRl
clZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250
ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7Cisg
ICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50LT52aWV3KCktPnZpc2libGVD
b250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7
CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29s
dXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdo
dDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SZWN0ID0g
aW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7CiAgICAgICAgIGlmICghaW50
ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0LDcgKzIzNjcsNyBAQCBzdGF0aWMgSFRN
TEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVu
dCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkgY29uc3QKIHsKICAgICAvLyBTdGFydCBs
b29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9yIHdo
ZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVu
dC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQogICAgICAgICBzdGFydCA9IG1f
c2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCkBAIC0yNDA3LDgg
KzI0MTAsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9u
UmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogICAgICAgICAgICAgICAgIGxheWVy
LT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFs
aWdubWVudCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMg
fSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZnJh
bWUtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNj
cm9sbGluZ0ZyYW1lKCptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+
cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgp
LmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFt
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0yNDI2LDE3ICsyNDI5LDE2
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKICAgICAvLyBQ
dXQgYSBjYXJldCBpbnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJs
ZSAoZWl0aGVyIHRoZQogICAgIC8vIGVudGlyZSBXZWJWaWV3IGlzIGVkaXRhYmxlIG9yIGRlc2ln
bk1vZGUgaXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBi
b29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFi
bGVkKCk7Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxl
KCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVu
dC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGlmICghaXNOb25lKCkg
fHwgIShtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAg
ICAgICAgIHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8
IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgp
KQorICAgIGlmICghbV9kb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50
KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0
eSgpKSkpIHx8ICFtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVy
bjsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIGJvZHkgPSBkb2N1bWVudC0+Ym9keSgpKQorICAg
IGlmIChhdXRvKiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpKQogICAgICAgICBzZXRTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoYm9keSksIERP
V05TVFJFQU0pKTsKIH0KIApAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlv
bjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVj
dGlvbikKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRp
dG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5l
d1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVk
aXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBu
ZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBib29sIEZyYW1lU2VsZWN0aW9u
OjpkaXNwYXRjaFNlbGVjdFN0YXJ0KCkKQEAgLTI0NjQsNyArMjQ2Niw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihib29sIHNob3VsZFNob3dCbG9ja0N1
cnNvcikKIHsKICAgICBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciA9IHNob3VsZFNob3dCbG9ja0N1
cnNvcjsKIAotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwogCiAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4Miwx
MyArMjQ4NCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRh
dGVBZnRlclN0eWxlQ2hhbmdlKCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVw
ZGF0ZVRpbWVyRmlyZWQoKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJh
bWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdG9yKCptX2RvY3VtZW50KTsKICAgICB1cGRh
dGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCk7CiB9CiAKIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UoKQogewot
ICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICBp
ZiAoYXV0byogY2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAg
IGNsaWVudC0+dXBkYXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2Vk
KCk7CiAKICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwpAQCAtMjcyMyw3ICsyNzI1LDcg
QEAgUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRT
ZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYg
bm9kZSkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+Y3JlYXRlUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9k
b2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwg
bG9jYXRpb24pOwogICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5n
dGgpOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigq
cmVzdWx0UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKQEAgLTI5MDQsNyArMjkwNiw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MpCiAg
ICAgaWYgKG1fY2FyZXRCbGlua3MgPT0gY2FyZXRCbGlua3MpCiAgICAgICAgIHJldHVybjsKICNp
ZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsgCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKG1fY2FyZXRQYWludCkgewog
ICAgICAgICBtX2NhcmV0UGFpbnQgPSBmYWxzZTsgCiAgICAgICAgIGludmFsaWRhdGVDYXJldFJl
Y3QoKTsgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4
YjA1NGY1OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVhMDUwOC4uNWFhZjlhMDg5YjNiMTlkZmEwMTBl
ZDA3MDlkNDJkZWVhZTBiNWViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uaApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7
CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJh
bWUqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rp
b24oRG9jdW1lbnQqID0gbnVsbHB0cik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBy
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAgICAgCkBAIC0z
MzgsNiArMzM4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgp
OwogCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAg
ICBMYXlvdXRVbml0IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5k
ZXggNzMwNzZkZTFiNzliOWYwOWZmOWYzMTI3YTgzZTViMDgzZDU3ODU5My4uNjYwMWRiOGZjYjRl
MzdmNGFkYjIwYWYxNzgyZTIyMTI0Y2YxM2JkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC01MCw3ICs1MCw3IEBA
IEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUmVm
PFRleHQ+JiYgbm9kZSwgdW5zaWduZWQKIAogdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
Ojpkb0FwcGx5KCkKIHsKLSAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBmcmFtZSgpLnNl
dHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOworICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5h
YmxlZCA9IGRvY3VtZW50KCkuc2V0dGluZ3MoKS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CiAgICAg
aWYgKHBhc3N3b3JkRWNob0VuYWJsZWQpCiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCmluZGV4IDE3NmQ4ZjA4OWFmNTAyNjZkZDg5
OGZhOTc3NGY5NzQxZGIzOTlkZmIuLjI3MzU1ZTY2ZmI4OWQ1NTQyY2Q2YTliZWE4OGUyYzI2MmY1
MDc4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6ZG9BcHBseSgpCiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0
eXBpbmcgc3R5bGUuCiAKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZy
YW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKIAog
ICAgIGlmICh0eXBpbmdTdHlsZSAmJiAhdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAg
ICAvLyBBcHBseSB0aGUgdHlwaW5nIHN0eWxlIHRvIHRoZSBpbnNlcnRlZCBsaW5lIGJyZWFrLCBz
byB0aGF0IGlmIHRoZSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAKaW5kZXggZTkxMzFmNmZiZjMyZDg2MzA1MGFhMWVmMjA4ZTViNGY0NDA0
OWI2YS4uMWJiMGQwNTI4NzBjNDUxMzY5OTQ3MTlkMGVjMDY1YjNlZDA5NmQ0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTE0Niw3ICsxNDYs
NyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gYW55dGhp
bmcgb3RoZXIgdGhhbiBOb1NlbGVjdGlvbi4gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiByZXF1
aXJlcyBhIHJlYWwgZW5kaW5nU2VsZWN0aW9uLCBzbyBiYWlsIG91dC4KICAgICAgICAgaWYgKGVu
ZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxz
ZSBpZiAoZnJhbWUoKS5lZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKKyAgICB9
IGVsc2UgaWYgKGRvY3VtZW50KCkuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7
CiAgICAgICAgIGlmIChwZXJmb3JtT3ZlcndyaXRlKG1fdGV4dCwgbV9zZWxlY3RJbnNlcnRlZFRl
eHQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lk
IEluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBzZXRFbmRpbmdTZWxlY3Rpb25XaXRo
b3V0VmFsaWRhdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAKICAgICAvLyBIYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCi0gICAgaWYgKFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdT
dHlsZSgpKSB7CisgICAgaWYgKFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9j
dW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7CiAgICAgICAgIHR5cGluZ1N0eWxl
LT5wcmVwYXJlVG9BcHBseUF0KGVuZFBvc2l0aW9uLCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3Jp
dGluZ0RpcmVjdGlvbik7CiAgICAgICAgIGlmICghdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4
IDU0NjBiNzVjYWJkMjNkZDU1YWQ5MzlkMDE0YjU4MjkyZWQ5ZDRlYTIuLjY4ZTA4MzUyYTRjMTBk
ODY4YmYxZTQ2OWJmNzVjOTU2ZDEzZjA1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICgh
bV9yYW5nZVRvQmVSZXBsYWNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgp
LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQorICAgIGlmICgh
ZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVS
ZXBsYWNlZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCmluZGV4IDUyNzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3
ODcuLjQ5Njk5MTlkOTFhMTE0OTVjMjk4YzkyYTc2NjcyNmI5MmUxNjk1MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0x
MTgxLDcgKzExODEsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkK
ICAgICAKICAgICAvLyBGSVhNRTogQ2FuIHRoaXMgd2FpdCB1bnRpbCBhZnRlciB0aGUgb3BlcmF0
aW9uIGhhcyBiZWVuIHBlcmZvcm1lZD8gIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQogICAgIC8v
IGFueSB3b3JrIHBlcmZvcm1lZCBhZnRlciB0aGlzIHRoYXQgcXVlcmllcyBvciB1c2VzIHRoZSB0
eXBpbmcgc3R5bGUuCi0gICAgZnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7
CisgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAv
LyBXZSBkb24ndCB3YW50IHRoZSBkZXN0aW5hdGlvbiB0byBlbmQgdXAgaW5zaWRlIG5vZGVzIHRo
YXQgd2VyZW4ndCBzZWxlY3RlZC4gIFRvIGF2b2lkIHRoYXQsIHdlIG1vdmUgdGhlCiAgICAgLy8g
cG9zaXRpb24gZm9yd2FyZCB3aXRob3V0IGNoYW5naW5nIHRoZSB2aXNpYmxlIHBvc2l0aW9uIHNv
IHdlJ3JlIHN0aWxsIGF0IHRoZSBzYW1lIHZpc2libGUgbG9jYXRpb24sIGJ1dApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYzA2NWMwMmNh
MTNmZDI1MTcwZDZiMjFiMWY4OThlOWJhNzliZTYzOC4uMGRkMjZhODFlOTBiNjc4NzRjMzM1Y2Vm
MTIxMDdlMjE0YmRmZDg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRT
ZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNl
dFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRp
CiAKIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCkuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0
aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvU2V0KSAmJiAhbV9zZWxlY3Rp
b25Ub1NldC5pc05vbmVPck9ycGhhbmVkKCkpIHsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVj
dGlvbihtX3NlbGVjdGlvblRvU2V0LCBtX29wdGlvbnMpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lk
IFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1h
bmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1l
KCkuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50
KCkuc2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlv
bihzdGFydGluZ1NlbGVjdGlvbigpKSAmJiAhc3RhcnRpbmdTZWxlY3Rpb24oKS5pc05vbmVPck9y
cGhhbmVkKCkpCiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rp
b24oKSwgbV9vcHRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApp
bmRleCAxNzJkODVmZDQ2NmYyODM2NmI1NTgwNmQwOWJmNjAxZmUxYzVmODE5Li41MGMxNzUzZjE2
ZDk2OGZhOTZiYzJiYzZiNjExYjQ5OGZmMjQ5NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwCkBAIC05OCw4ICs5OCw4IEBAIHZvaWQgU3BlbGxDaGVja1JlcXVlc3Q6
OnJlcXVlc3RlckRlc3Ryb3llZCgpCiAgICAgbV9jaGVja2VyID0gbnVsbHB0cjsKIH0KIAotU3Bl
bGxDaGVja2VyOjpTcGVsbENoZWNrZXIoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFt
ZSkKK1NwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVz
dCgqdGhpcywgJlNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3Qp
CiB7CiB9CkBAIC0xMTQsNyArMTE0LDcgQEAgU3BlbGxDaGVja2VyOjp+U3BlbGxDaGVja2VyKCkK
IAogVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsQ2hlY2tlcjo6Y2xpZW50KCkgY29uc3QKIHsKLSAg
ICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZG9jdW1l
bnQucGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIHBhZ2UtPmVkaXRvckNsaWVudCgpLnRleHRDaGVja2VyKCk7CkBAIC0xMzEsNyArMTMx
LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0
KCkKIAogYm9vbCBTcGVsbENoZWNrZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0KIAogYm9vbCBTcGVsbENoZWNrZXI6OmNhbkNoZWNr
QXN5bmNocm9ub3VzbHkoUmFuZ2UmIHJhbmdlKSBjb25zdApAQCAtMTc0LDcgKzE3NCw3IEBAIHZv
aWQgU3BlbGxDaGVja2VyOjppbnZva2VSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiBy
ZXF1ZXN0KQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nl
c3NpbmdSZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KTsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOworICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9w
cm9jZXNzaW5nUmVxdWVzdCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9
CiAKIHZvaWQgU3BlbGxDaGVja2VyOjplbnF1ZXVlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVl
c3Q+JiYgcmVxdWVzdCkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlk
Q2hlY2soVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVj
dAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQW5k
UmVwbGFjZUZvcigqbV9wcm9jZXNzaW5nUmVxdWVzdCwgcmVzdWx0cyk7CisgICAgbV9kb2N1bWVu
dC5lZGl0b3IoKS5tYXJrQW5kUmVwbGFjZUZvcigqbV9wcm9jZXNzaW5nUmVxdWVzdCwgcmVzdWx0
cyk7CiAKICAgICBpZiAobV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllci50b1VJbnQ2NCgpIDwgaWRl
bnRpZmllci50b1VJbnQ2NCgpKQogICAgICAgICBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyID0g
aWRlbnRpZmllcjsKQEAgLTIxOSw3ICsyMTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hl
Y2tTdWNjZWVkKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgog
ICAgICAgICBpZiAocmVxdWVzdERhdGEuY2hlY2tpbmdUeXBlcygpLmNvbnRhaW5zKFRleHRDaGVj
a2luZ1R5cGU6OkdyYW1tYXIpKQogICAgICAgICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50
TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1f
cHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOworICAgICAg
ICAgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1
ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKICAgICB9CiAgICAgZGlkQ2hlY2so
aWRlbnRpZmllciwgcmVzdWx0cyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
aAppbmRleCBjMzZhZTJjMzBmZTlmYjViZWY2NzA3MzIyMmVjNDNlNDRhZDdmMmMwLi5kMTlmY2Zk
ZTM4NDE1YjAxMTVjZjhjZGFhNDhhODY2MDhhODExOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmgKQEAgLTc2LDcgKzc2LDcgQEAgY2xhc3MgU3BlbGxDaGVja2VyIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiAKLSAgICBleHBsaWNp
dCBTcGVsbENoZWNrZXIoRnJhbWUmKTsKKyAgICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRG9jdW1l
bnQmKTsKICAgICB+U3BlbGxDaGVja2VyKCk7CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzRW5h
YmxlZCgpIGNvbnN0OwpAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRD
aGVja0NhbmNlbChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRD
aGVjayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4mKTsKIAotICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2Rv
Y3VtZW50OwogICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFJlcXVlc3RJ
ZGVudGlmaWVyOwogICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFByb2Nl
c3NlZElkZW50aWZpZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDk5ZThmMTU4ODhlYWU5M2YzZDY4ZTA0ZDg5
ZWZmNTc1NjQ2YmMzNzkuLjU5MjA4NDUzNTFlYTQwM2I4Yzg3MzQzYWRhNzZiNzQzNjNkZjA1ZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcApAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9VbmFwcGx5
KCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9oYXNCZWVuVW5kb25lKSB7Ci0gICAg
ICAgICAgICBmcmFtZSgpLmVkaXRvcigpLnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGlu
Z1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwgbV9jb3JyZWN0aW9uKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50KCkuZWRpdG9yKCkudW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0
aW9uKCksIG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOwogICAgICAgICAgICAgbV9oYXNCZWVu
VW5kb25lID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9jb3Jy
ZWN0ZWQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxl
Y3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkK
KyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1f
c2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFNldFNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShtX3NlbGVjdGlvblRv
QmVDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
IHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhh
YjBkYTRmNTYxOGZiYWJiMjVhZS4uZjMxMjhkN2VhNTdkNTY3NjM5MThhMzEzYWI3N2I2NjQ5ZTVi
NjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNjMs
MTMgKzE2MywxMCBAQCBUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21tYW5kKERvY3VtZW50JiBkb2N1
bWVudCwgRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIGNvbgogCiB2b2lkIFR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywg
VGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgaWYgKCFmcmFt
ZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQorICAgIGlmICghZG9jdW1lbnQuc2VsZWN0aW9uKCku
aXNSYW5nZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5
cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQp
KSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlv
bnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShjb21wb3NpdGlvblR5cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENo
ZWNraW5nKTsKQEAgLTE4Myw4ICsxODAsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNl
bGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbQogdm9p
ZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0
aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKGdy
YW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8
VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgewotICAgICAgICAgICAgdXBkYXRl
U2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFu
ZC5nZXQoKSwgZG9jdW1lbnQuZnJhbWUoKSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9y
VHlwaW5nKGRvY3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJl
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQp
OwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0
aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxh
c3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYg
UHJldmVudFNwZWxsQ2hlY2tpbmcpOwpAQCAtMTk5LDEwICsxOTYsOSBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlv
bnMsIFRleHRHcgogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChE
b2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQogewogICAgIC8vIEZJWE1FOiBGb3J3YXJkIGRlbGV0ZSBpbiBUZXh0RWRpdCBhcHBl
YXJzIHRvIG9wZW4gYW5kIGNsb3NlIGEgbmV3IHR5cGluZyBjb21tYW5kLgotICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3Rl
ckdyYW51bGFyaXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5
cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFt
ZSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGZyYW1lKTsKKyAgICAgICAgaWYgKFJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxl
Y3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdl
dCgpLCBkb2N1bWVudCk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRv
Y29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwog
ICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNr
aW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0yMTQsMTAgKzIxMCw5IEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBPcHRpb25zIG9wdGlvbnMsCiAgICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3Vt
ZW50LCBGb3J3YXJkRGVsZXRlS2V5LCBlbXB0eVN0cmluZygpLCBvcHRpb25zLCBncmFudWxhcml0
eSktPmFwcGx5KCk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5k
LCBGcmFtZSogZnJhbWUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlm
ZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwg
RG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChjdXJyZW50U2VsZWN0aW9uID09IHR5cGluZ0Nv
bW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyNywzMSAr
MjIyLDI1IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRG
cm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9u
cyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uKQogewotICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIGlm
ICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS51cGRhdGVNYXJrZXJz
Rm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKKyAg
ICAgICAgZG9jdW1lbnQuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CiAgICAgCi0gICAgaW5zZXJ0VGV4dChk
b2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBj
b21wb3NpdGlvbik7CisgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBvc2l0aW9uKTsKIH0KIAogLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBuZWVkIHRvIHRha2Ugc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLiBJdCBz
aG91bGQgYmUgaWRlbnRpY2FsIHRvIEZyYW1lU2VsZWN0aW9uJ3MgY3VycmVudCBzZWxlY3Rpb24u
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2Vy
dGlvbiwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlw
ZSkKIHsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBB
U1NFUlQoZnJhbWUpOwotCiAgICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0ICh0ZXh0ICVzKSIsIHRleHQudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAKICAgICBTdHJpbmcgbmV3VGV4dCA9IGRpc3BhdGNoQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQodGV4dCwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjb21wb3NpdGlvblR5
cGUgPT0gVGV4dENvbXBvc2l0aW9uUGVuZGluZyk7CiAgICAgCiAgICAgLy8gU2V0IHRoZSBzdGFy
dGluZyBhbmQgZW5kaW5nIHNlbGVjdGlvbiBhcHByb3ByaWF0ZWx5IGlmIHdlIGFyZSB1c2luZyBh
IHNlbGVjdGlvbgogICAgIC8vIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc2Vs
ZWN0aW9uLiAgSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGNoYW5nZSBFZGl0Q29tbWFuZAogICAg
IC8vIHRvIGRlYWwgd2l0aCBjdXN0b20gc2VsZWN0aW9ucyBpbiBhIGdlbmVyYWwgd2F5IHRoYXQg
Y2FuIGJlIHVzZWQgYnkgYWxsIG9mIHRoZSBjb21tYW5kcy4KLSAgICBpZiAoUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9j
dW1lbnQpKSB7CiAgICAgICAgIGlmIChsYXN0VHlwaW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9u
KCkgIT0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKSB7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9y
SW5zZXJ0aW9uKTsKQEAgLTI2NiwxMiArMjU1LDEyIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlz
CiAgICAgfQogCiAgICAgYXV0byBjbWQgPSBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQs
IEluc2VydFRleHQsIG5ld1RleHQsIG9wdGlvbnMsIGNvbXBvc2l0aW9uVHlwZSk7Ci0gICAgYXBw
bHlUZXh0SW5zZXJ0aW9uQ29tbWFuZChmcmFtZS5nZXQoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25G
b3JJbnNlcnRpb24sIGN1cnJlbnRTZWxlY3Rpb24pOworICAgIGFwcGx5VGV4dEluc2VydGlvbkNv
bW1hbmQoZG9jdW1lbnQuZnJhbWUoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24s
IGN1cnJlbnRTZWxlY3Rpb24pOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVhayhEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAg
ICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5v
bmUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJl
Y3Rpb25JbmRpY2F0b3Iob3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsK
QEAgLTI4NCw3ICsyNzMsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhE
b2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIAogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgp
KSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAg
ICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihmYWxzZSk7CiAgICAgICAg
IGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9u
ZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCk7CkBAIC0yOTYsNyArMjg1LDcg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENv
bnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBh
cmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsK
LSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5
cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAg
ICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGlu
Z0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRp
b24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRD
b21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9u
SW5kaWNhdG9yKTsKQEAgLTMwNyw5ICsyOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucwog
ICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yLCBlbXB0eVN0cmluZygpLCBvcHRpb25zKS0+YXBwbHkoKTsKIH0KIAotUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JU
eXBpbmcoRnJhbWUmIGZyYW1lKQorUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6
Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50
KQogewotICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0g
ZnJhbWUuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVk
aXRDb21tYW5kPiBsYXN0RWRpdENvbW1hbmQgPSBkb2N1bWVudC5lZGl0b3IoKS5sYXN0RWRpdENv
bW1hbmQoKTsKICAgICBpZiAoIWxhc3RFZGl0Q29tbWFuZCB8fCAhbGFzdEVkaXRDb21tYW5kLT5p
c1R5cGluZ0NvbW1hbmQoKSB8fCAhc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0
Q29tbWFuZC5nZXQoKSktPmlzT3BlbkZvck1vcmVUeXBpbmcoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTMyMSwxNiArMzEwLDE2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6c2hvdWxk
RGVmZXJXaWxsQXBwbHlDb21tYW5kVW50aWxBZGRpbmdUeXBpbmdDb21tYW5kKCkgY29uc3QKICAg
ICByZXR1cm4gIW1faXNIYW5kbGluZ0luaXRpYWxUeXBpbmdDb21tYW5kIHx8IGVkaXRBY3Rpb25J
c0RlbGV0ZUJ5VHlwaW5nKGVkaXRpbmdBY3Rpb24oKSk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFu
ZDo6Y2xvc2VUeXBpbmcoRnJhbWUqIGZyYW1lKQordm9pZCBUeXBpbmdDb21tYW5kOjpjbG9zZVR5
cGluZyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoKmZyYW1lKSkKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpCiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5jbG9zZVR5cGluZygpOwogfQogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLXZvaWQgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqIGZyYW1lLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmVu
c3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5n
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9u
KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAo
UmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1h
bmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0Nv
bW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uT25MYXN0SW5zZXJ0Q29tbWFuZChuZXdTZWxl
Y3Rpb24pOwogICAgIH0KQEAgLTQzNiwxOSArNDI1LDE3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
ZGlkQXBwbHlDb21tYW5kKCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiB7Ci0gICAgRnJhbWUmIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKTsKLQogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWZyYW1l
LmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKLSAgICAgICAgJiYg
IWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAg
ICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQo
KQotICAgICAgICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9u
RW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3Io
KS5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1
bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQorICAgICAg
ICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFi
bGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVw
bGFjZW1lbnRFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1lLmVk
aXRvcigpLmlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpKQorICAgIGlmIChkb2N1bWVudCgp
LmVkaXRvcigpLmlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpKQogICAgICAgICByZXR1cm47
CiAjZWxzZQotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgLy8gVGFr
ZSBhIGxvb2sgYXQgdGhlIHNlbGVjdGlvbiB0aGF0IHJlc3VsdHMgYWZ0ZXIgdHlwaW5nIGFuZCBk
ZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIHNwZWxsY2hlY2suIApAQCAtNDY2LDkgKzQ1Myw5
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBp
bmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlv
dXNXb3JkOwogICAgICAgICAgICAgaWYgKHJhbmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdD
b21tYW5kOjpJbnNlcnRUZXh0IHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2Vy
dExpbmVCcmVhayB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3IgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSkKICAgICAgICAgICAgICAgICBzdHJpcHBlZFBy
ZXZpb3VzV29yZCA9IHBsYWluVGV4dCgqcmFuZ2UpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAg
ICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAx
LCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0Vt
cHR5KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6
Okluc2VydFRleHQpCi0gICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZl
VGV4dFVJVGltZXIoKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuc3RhcnRBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oY29tbWFu
ZFR5cGUpOwogICAgICAgICAvLyBJZiB0aGlzIGJ1ZyBnZXRzIGZpeGVkLCB0aGlzIFBMQVRGT1JN
KElPU19GQU1JTFkpIGNvZGUgY291bGQgYmUgcmVtb3ZlZDoKQEAgLTQ4Myw3ICs0NzAsNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29t
bWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldv
cmQocHJldmlvdXMsIHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIg
PSBzdGFydE9mV29yZChzdGFydCwgc3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIGlmIChwMSAhPSBw
MikKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRp
bmdTZWxlY3Rpb24oKSwgZmFsc2UpOwogI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIH0KIH0KQEAgLTQ5NywyNiArNDg0LDI2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6d2lsbEFk
ZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIFRleHRHCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCFyYW5nZSB8fCBpc0VkaXRpbmdUZXh0QXJl
YU9yVGV4dElucHV0KCkpCi0gICAgICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBs
eUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5k
aW5ncygpKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRp
dGluZygqdGhpcywgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdz
KCkpOwogCi0gICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhp
cywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpyYW5nZSkgfSk7CisgICAgcmV0dXJuIGRvY3Vt
ZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6
Y3JlYXRlKCpyYW5nZSkgfSk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRU
b09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpCiB7
Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IHBy
b3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwogCiAgICAgdXBkYXRlUHJlc2VydmVzVHlwaW5n
U3R5bGUoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAKICNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAgICAgLy8gU2luY2UgdGhlIHNwZWxs
Y2hlY2tpbmcgY29kZSBtYXkgYWxzbyBwZXJmb3JtIGNvcnJlY3Rpb25zIGFuZCBvdGhlciByZXBs
YWNlbWVudHMsIGl0IHNob3VsZCBoYXBwZW4gYWZ0ZXIgdGhlIHR5cGluZyBjaGFuZ2VzLgogICAg
IGlmICghbV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZykKICAgICAgICAgbWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAv
LyBUaGUgb2xkIHNwZWxsY2hlY2tpbmcgY29kZSByZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRv
bmUgZmlyc3QsIHRvIHByZXZlbnQgaXNzdWVzIGxpa2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8
ZG9lc24ndD4gaXMgbWFya2VkIGFzIG1pc3NwZWxsZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwotICAgIGZyYW1lLmVkaXRvcigp
LmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRF
ZGl0aW5nKCp0aGlzKTsKICNlbmRpZgogfQogCkBAIC01MzUsOSArNTIyLDkgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eShjb25zdCBTdHJpbmcg
JnRleHQsIGJvb2wgc2UKIHsKICAgICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQgJXAgaW5z
ZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkgKHRleHQgJXMsIHNlbGVjdEluc2VydGVkVGV4
dCAlZCkiLCB0aGlzLCB0ZXh0LnV0ZjgoKS5kYXRhKCksIHNlbGVjdEluc2VydGVkVGV4dCk7CiAK
LSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxh
Y2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRU
ZXh0KHRleHQsIHNlbGVjdEluc2VydGVkVGV4dCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5n
LCB0ZXh0LCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3Np
dGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFu
Z2UoKSk7CiB9CiAKQEAgLTU1MCw5ICs1MzcsNiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFRleHRSdW5XaXRob3V0TmV3bGluZXMoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAog
ICAgICAgICBtX2NvbXBvc2l0aW9uVHlwZSA9PSBUZXh0Q29tcG9zaXRpb25Ob25lID8gSW5zZXJ0
VGV4dENvbW1hbmQ6OlJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzIDogSW5z
ZXJ0VGV4dENvbW1hbmQ6OlJlYmFsYW5jZUFsbFdoaXRlc3BhY2VzLCBFZGl0QWN0aW9uOjpUeXBp
bmdJbnNlcnRUZXh0KTsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29t
bWFuZCksIGVuZGluZ1NlbGVjdGlvbigpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVk
VG9PcGVuQ29tbWFuZChJbnNlcnRUZXh0KTsKIH0KIApAQCAtNTY1LDE3ICs1NDksMTQgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUo
ZG9jdW1lbnQoKSkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBS
ZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5k
KEluc2VydExpbmVCcmVhayk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJy
ZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0TGluZUJyZWFrKCk7Ci0gICAgcmVwbGFjZWRU
ZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
ICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0
LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTU4OCwxNyArNTY5LDE0IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZDo6Y3JlYXRlKGRvY3VtZW50KCksIGZhbHNlLCBmYWxzZSwgRWRpdEFjdGlvbjo6VHlwaW5nSW5z
ZXJ0UGFyYWdyYXBoKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAg
IFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1h
bmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBB
Y2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4
dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3IoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlm
aWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlw
ZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVw
bGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlz
dGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdl
RGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAt
NjE1LDE3ICs1OTMsMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKQogICAgIH0KICAgICAgICAgCiAgICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUoQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsK
LQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90
ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxp
dHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRl
eHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAg
IGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwotICAgIHJlcGxhY2Vk
VGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRF
ZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4
dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC02NTIsMTAgKzYyNyw5IEBAIGJvb2wgVHlwaW5n
Q29tbWFuZDo6bWFrZUVkaXRhYmxlUm9vdEVtcHR5KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRB
ZGRUb0tpbGxSaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAg
UmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9y
KGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKLSAgICBmcmFtZS5lZGl0b3IoKS51cGRhdGVNYXJrZXJz
Rm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3Io
KS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVsZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uQWZ0ZXJVbmRvOwpAQCAtNzQ4LDIwICs3MjIsMjAgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBz
aG91bGRBZGQKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAvLyBXb3JrYXJvdW5k
IGZvciB0aGlzIGJ1ZzoKICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ2NTM3NTU+IFVJS2l0
IHRleHQgd2lkZ2V0cyBzaG91bGQgdXNlIFdlYktpdCBlZGl0aW5nIEFQSSB0byBtYW5pcHVsYXRl
IHRleHQKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKLSAgICAgICAgY2xvc2VUeXBpbmcoJmZyYW1lKTsKKyAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBj
bG9zZVR5cGluZyhkb2N1bWVudCgpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVj
dGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYg
KHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5z
aG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdy
YW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4
dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxl
Y3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5n
SW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJp
bGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdo
aWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwx
MCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJv
b2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFt
ZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+
IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50
KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2Up
OwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAgLTg1NSwxMyArODI4LDEzIEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBib29sIHNoCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8g
V29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUz
NzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxkIHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8g
bWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNsb3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFm
cmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUp
KQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJk
RGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdl
KCkpKQpAQCAtODcxLDcgKzg0NCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0
ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAgICAgcG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRl
KTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3Io
KS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAg
ICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRv
RGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRp
b25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRl
bGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAg
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUs
IG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBs
YWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCov
IHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAppbmRleCA3NmU1Zjk5
YmY5MjUzODU3NWNhYTM4NzZiYjliNmI1NTRiOWZiNzVjLi44OTZiZjBiZDE1ZGJlM2Q0ODE4NDg5
NWY2NDNmMWM4NjlkNThlYjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
aApAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0TGluZUJy
ZWFrKERvY3VtZW50JiwgT3B0aW9ucyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yKERvY3VtZW50JiwgT3B0aW9ucyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50Jik7Ci0gICAgc3RhdGljIHZv
aWQgY2xvc2VUeXBpbmcoRnJhbWUqKTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhEb2N1
bWVudCYpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIHZvaWQgZW5zdXJl
TGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJh
bWUqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgZW5zdXJlTGFz
dEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1l
bnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAjZW5kaWYKIAogICAgIHZvaWQgaW5zZXJ0
VGV4dChjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKQEAgLTEw
Myw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNPcGVuRm9yTW9yZVR5cGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlbkZvck1vcmVUeXBpbmc7IH0KICAgICB2b2lkIGNsb3NlVHlwaW5n
KCkgeyBtX29wZW5Gb3JNb3JlVHlwaW5nID0gZmFsc2U7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8
VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhGcmFt
ZSYpOworICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYpOwogCiAgICAgdm9pZCBkb0FwcGx5KCkgZmlu
YWw7CiAgICAgYm9vbCBpc1R5cGluZ0NvbW1hbmQoKSBjb25zdCBmaW5hbDsKQEAgLTEyMiw3ICsx
MjIsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGlucHV0RXZlbnREYXRh
VHJhbnNmZXIoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzQmVmb3JlSW5wdXRFdmVudENhbmNl
bGFibGUoKSBjb25zdCBmaW5hbDsKIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklm
RGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCosIEZyYW1lKik7Cisg
ICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihUeXBpbmdDb21tYW5kKiwgRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgdXBkYXRlUHJlc2Vy
dmVzVHlwaW5nU3R5bGUoRVR5cGluZ0NvbW1hbmQpOwogICAgIGJvb2wgd2lsbEFkZFR5cGluZ1Rv
T3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQsIFRleHRHcmFudWxhcml0eSwgY29uc3QgU3RyaW5n
JiA9IGVtcHR5U3RyaW5nKCksIFJlZlB0cjxSYW5nZT4mJiA9IG51bGxwdHIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4
NGRiNTYxMjkyZTc5NDI3N2JmYjc2ZDU5ZS4uOTEwZGVlZjcwODRkMWZkYzhlMGY5YWUwNmU5MTNh
MTFjNzYzZjE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0
b3JDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29h
Lm1tCkBAIC04MCw4ICs4MCw4IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZl
ZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqCiAKIFN0cmluZyBF
ZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCgpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAg
ICAgbV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFi
bGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJl
ZTo6Tm8pOworICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZSht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVk
aW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKIH0KIAogI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0xMDcsMTAgKzEwNywxMCBAQCB2b2lkIEVkaXRv
cjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVu
dCwgVmVjdG9yPFN0cgogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
UGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJp
YnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKIAogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0g
ICAgY29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVu
dGlmaWVyRm9yUGFzdGVib2FyZCgpOworICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9j
dW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50LmNhblNt
YXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250ZW50LmRh
dGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAg
ICBjb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0
YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsK
QEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rp
b24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9t
U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogCiAgICAgUGFzdGVib2Fy
ZFdyaXRlckRhdGE6OldlYkNvbnRlbnQgd2ViQ29udGVudDsKLSAgICB3ZWJDb250ZW50LmNvbnRl
bnRPcmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJv
YXJkKCk7CisgICAgd2ViQ29udGVudC5jb250ZW50T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5J
ZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JE
ZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2Vi
QXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIHdlYkNv
bnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2ht
ZW50cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwpAQCAt
MTQzLDcgKzE0Myw3IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3Jp
dGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVk
aXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCkKIHsKLSAgICBhdXRvIGFyY2hpdmUg
PSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICBh
dXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKG1fZG9j
dW1lbnQuZnJhbWUoKSk7CiAgICAgaWYgKCFhcmNoaXZlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoYXJjaGl2ZS0+cmF3RGF0YVJlcHJl
c2VudGF0aW9uKCkuZ2V0KCkpOwpAQCAtMTcxLDExICsxNzEsMTEgQEAgU3RyaW5nIEVkaXRvcjo6
c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKQogCiB2b2lkIEVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZywgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2tx
dW90ZUhhbmRsaW5nKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRBbmRBZGRSZXNvdXJjZXMobV9mcmFtZSwgYXR0cmlidXRlZFN0cmluZykpIHsKKyAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZSgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRS
ZXNvdXJjZXMoKm1fZG9jdW1lbnQuZnJhbWUoKSwgYXR0cmlidXRlZFN0cmluZykpIHsKICAgICAg
ICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2Uo
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgICAgIHBh
c3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1h
aWxCbG9ja3F1b3RlSGFuZGxpbmcpOwogICAgICAgICB9CkBAIC0yMjEsNyArMjIxLDcgQEAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhSW5SVEZGb3JtYXQoTlNBdHRyaWJ1dGVkU3Ry
aW5nICpzdHJpbmcpCiAvLyBPciByZWZhY3RvciBzbyBpdCBkb2VzIG5vdCBkbyB0aGF0LgogUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBh
c3RlYm9hcmQmIHBhc3RlYm9hcmQsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0
LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlciht
X2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciBy
ZWFkZXIoKm1fZG9jdW1lbnQuZnJhbWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQpOwogICAg
IHBhc3RlYm9hcmQucmVhZChyZWFkZXIpOwogICAgIGNob3NlUGxhaW5UZXh0ID0gcmVhZGVyLm1h
ZGVGcmFnbWVudEZyb21QbGFpblRleHQ7CiAgICAgcmV0dXJuIFdURk1vdmUocmVhZGVyLmZyYWdt
ZW50KTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9t
U2VsZWN0aW9uKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc3RyaW5nRnJv
bVNlbGVjdGlvbiA9IG1fZnJhbWUuZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxl
Y3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSk7CisgICAgYXV0byBzdHJpbmdGcm9tU2VsZWN0aW9u
ID0gbV9kb2N1bWVudC5mcmFtZSgpLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNl
bGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXM7CiAgICAgdHlwZXMuYXBwZW5kKFN0cmluZyhsZWdhY3lTdHJpbmdQ
YXN0ZWJvYXJkVHlwZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0
ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNw
cAppbmRleCA3MDZlODI2NzNmMDgxMzMzNzM1ZTU4NzEyNzhjOGQ0NTBkMGI2OWJjLi4xZGE4MWY3
MThkOTIzNTgyM2IwMzgxZmUyYmJkZTExOWQ4MjUwNmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvZ3RrL0VkaXRvckd0ay5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0
aW9uPgogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMo
UGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9h
cmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMu
Y29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwog
CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVv
dGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAg
LTE0NywxNCArMTQ3LDE0IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3Rl
Ym9hcmRDb250ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRl
ID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0g
c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCk7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFy
a3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNG
b3JQcml2YWN5LAotICAgICAgICBtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0g
c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQ
cml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJk
Q29udGVudCk7CiB9CiAKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRl
bnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYgY29udGV4dCwg
Ym9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsIG1fZnJhbWUsIGNv
bnRleHQsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisgICAgcmV0dXJuIGNyZWF0
ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1l
KCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpp
bmRleCBmMmEyZDUyYWM1YWJmNGU0ZjEzMTEzY2EyNWQxYjIwYTE3MzhmYTY5Li4xYmZjYTU5MTNk
NjQ2NDFjMDgyZmVmNzY1YWJhMTllOTA5MGFkMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxp
Z25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGly
CiAgICAgLy8gSWYgdGhlIHRleHQgaGFzIGxlZnQgb3IgcmlnaHQgYWxpZ25tZW50LCBmbGlwIGxl
ZnQtPnJpZ2h0IGFuZCByaWdodC0+bGVmdC4gCiAgICAgLy8gT3RoZXJ3aXNlLCBkbyBub3RoaW5n
LgogCi0gICAgYXV0byBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVj
dGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc2Vs
ZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8
ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkKICAgICAgICAgIHJldHVybjsKIApAQCAtMTI3LDE0
ICsxMjcsMTQgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdy
aXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXIKICAgICBpZiAoIW5ld1ZhbHVlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVu
dCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQg
JiYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkgfHwgKGlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkKICAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQogICAgICAgICAgICAg
fHwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZp
ZWxkKCkpKSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBXcml0aW5nRGlyZWN0aW9uOjpO
YXR1cmFsKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVu
dD4oKmZvY3VzZWRFbGVtZW50KS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFs
aWduQXR0ciwgbmV3VmFsdWUpOwotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0
eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgbV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEVkaXRv
cjo6cmVtb3ZlVW5jaGFuZ2VhYmxlU3R5bGVzKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJl
bW92ZXMgc3R5bGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVp
ciBkZWZhdWx0IHZhbHVlcy4KICAgICAKLSAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdT
dHlsZTo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAg
YXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2RvY3VtZW50LmJvZHlP
ckZyYW1lc2V0KCkpOwogICAgIGF1dG8gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHls
ZSgpLT5tdXRhYmxlQ29weSgpOwogICAgIAogICAgIC8vIFRleHQgd2lkZ2V0cyBpbXBsZW1lbnQg
YmFja2dyb3VuZCBjb2xvciB2aWEgdGhlIFVJVmlldyBwcm9wZXJ0eS4gVGhlaXIgYm9keSBlbGVt
ZW50IHdpbGwgbm90IGhhdmUgb25lLgpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgRWRpdG9yOjpw
YXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0
ZU9wdGlvbj4KIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwog
ICAgIGJvb2wgYWxsb3dQbGFpblRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpB
bGxvd1BsYWluVGV4dCk7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgKnJh
bmdlLCBhbGxvd1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9j
dW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9m
UGFzdGVib2FyZEl0ZW1zID0gY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7CiAg
ICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1
bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKGkpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgRWRp
dG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNl
dDxQYXN0ZU9wdGlvbj4KIAogdm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVj
dG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZGljdGF0
aW9uUGhyYXNlcy5pc0VtcHR5KCkpCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBFZGl0b3I6OnNl
dERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3Ry
aW5nPj4mIGQKICAgICAvLyBTb21lIGRheSB3ZSBjb3VsZCBtYWtlIHRoZW0gVW5kb2FibGUsIGFu
ZCBsZXQgY2FsbGVycyBjbGVhciB0aGUgVW5kbyBzdGFjayBleHBsaWNpdGx5IGlmIHRoZXkgd2lz
aC4KICAgICBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5jbGVhcigpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAg
IGVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKIApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgRWRp
dG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQm
IGVsZW1lbnQpCiAKICAgICAvLyBBcyBhIHNpZGUgZWZmZWN0IHRoaXMgZnVuY3Rpb24gc2V0cyBh
IGNhcmV0IHNlbGVjdGlvbiBhZnRlciB0aGUgaW5zZXJ0ZWQgY29udGVudC4gTXVjaCBvZiB3aGF0
CiAgICAgLy8gZm9sbG93cyBpcyBtb3JlIGV4cGVuc2l2ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlv
biwgc28gY2xlYXIgaXQgc2luY2UgaXQncyBnb2luZyB0byBjaGFuZ2UgYW55d2F5LgotICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNs
ZWFyKCk7CiAKICAgICAvLyBjbGVhciBvdXQgYWxsIGN1cnJlbnQgY2hpbGRyZW4gb2YgZWxlbWVu
dAogICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lk
IEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVt
ZW50JiBlbGVtZW50KQogICAgIHNlbGVjdGlvbi5zZXRCYXNlKHZpc2libGVQb3MpOwogICAgIHNl
bGVjdGlvbi5zZXRFeHRlbnQodmlzaWJsZVBvcyk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKHNlbGVjdGlvbik7CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENv
bnRlbnRzKCk7CiB9CkBAIC0zODksNyArMzg5LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIC8vIGhh
dmUgYSBzdGFsZSBzZWxlY3Rpb24uCiB2b2lkIEVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoKQogewotICAgIFR5cGluZ0Nv
bW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JN
b3JlVHlwaW5nKCZtX2ZyYW1lLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9u
SWZPcGVuRm9yTW9yZVR5cGluZyhtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggNWQxNWE2NDYxYzU2OWI2
M2FjYzYxNTc5NWUzNDQ3NzA4YTRkNTU3Ny4uMTJmZDZhNDNlYTA1YTJhMGU3MmI3NGJhNzJkOTYy
ODY0NzA1YmFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRp
dG9yTGliV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JM
aWJXUEUuY3BwCkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewogICAgIFBhc3RlYm9hcmRXZWJD
b250ZW50IHBhc3RlYm9hcmRDb250ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJr
dXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0Zv
clByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFk
b3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJp
YWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBz
ZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclBy
aXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFk
b3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJp
YWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRD
b250ZW50KTsKIH0KIApAQCAtODQsNyArODQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFz
dGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAg
ICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERh
dGEoKnBhc3RlYm9hcmQsIG1fZnJhbWUsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9w
dGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEo
KnBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlu
cyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBp
ZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24p
KQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDI5MTgyNDY1ZDhjZjI5MzljYjIxNjAy
NDlmZWEyYWUxMWVhMTdjN2MuLjk4NDFjOTRmYWEyMTNmZDA4MmU1ODEyMGUxYTJiNzRmYTM4Njk5
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTEwMyw3ICsx
MDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0
ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlv
bkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFz
dGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRp
b246OkFsbG93UGxhaW5UZXh0IH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4
dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBpZiAoJm5vZGUt
PmRvY3VtZW50KCkgIT0gbV9mcmFtZS5kb2N1bWVudCgpKQorICAgIGlmIChub2RlLT5kb2N1bWVu
dCgpICE9IG1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZjxGcmFtZT4gcHJv
dGVjdG9yKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdG9yKG1fZG9jdW1lbnQp
OwogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIFBvc2l0
aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSwgUG9zaXRpb24obm9k
ZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcikpOwotICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNl
bGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0aW9uOjpE
b05vdFNldEZvY3VzKTsKIAogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSkgeworICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHBhc3RlQXNQbGFp
blRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCBnZXRJbWFnZShFbGVtZW50JiBpbWFnZUVs
ZW1lbnQsIFJlZlB0cjxJbWFnZT4mIGltYWdlLCBDYWNoZWRJbWFnZSomCiAKIHZvaWQgRWRpdG9y
OjpzZWxlY3Rpb25XaWxsQ2hhbmdlKCkKIHsKLSAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwg
aWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CisgICAgaWYgKCFoYXNDb21wb3NpdGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8
fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBjYW5jZWxDb21wb3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy93aW4vRWRpdG9yV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldp
bi5jcHAKaW5kZXggMDk2NGNjYjRmYmQ3YWMzNmIxOGYzNDE2ZjQyMGEyN2RiZTk2OTE3OC4uMmY3
MmNiNGYwMDQ1MWNiYmU0NDJjMGU5YTMxMjY3YzhiOGMyMGQ3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgRWRpdG9yOjpw
YXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0
ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVu
dEZyYWdtZW50KG1fZnJhbWUsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6
QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVu
dC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxh
aW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMu
Y29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVu
dEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAgLTY5LDkgKzY5LDkgQEAgc3RhdGljIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoUGxhdGZvcm1E
cmFnRGF0YSYKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9t
UGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYsIGJvb2wgLyphbGxvd1Bs
YWluVGV4dCovLCBib29sJiAvKmNob3NlUGxhaW5UZXh0Ki8pCiB7CiAgICAgaWYgKENPTVB0cjxJ
RGF0YU9iamVjdD4gcGxhdGZvcm1EcmFnRGF0YSA9IHBhc3RlYm9hcmQuZGF0YU9iamVjdCgpKQot
ICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURy
YWdEYXRhLCBtX2ZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRm
b3JtRGF0YSgqcGxhdGZvcm1EcmFnRGF0YSwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKLSAgICBy
ZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKHBhc3RlYm9hcmQuZHJhZ0RhdGFN
YXAoKSwgbV9mcmFtZSk7CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0
YShwYXN0ZWJvYXJkLmRyYWdEYXRhTWFwKCksICptX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApp
bmRleCBjNzE2ZDcyODBmNDYyY2I1NjczNzU3YjRiYTRlM2IyNGFiZWU4ZGUwLi4yOTI3NDczYTRh
NTk2MzhiYzgyYWZiYjkwNGJlYTYzYWQwNTIzNDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKQEAgLTU0MSwxMSArNTQxLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3Ao
KQogdm9pZCBGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCgpCiB7CiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGZyYW1lIGlzIHN0aWxsIGZ1bGx5IGlu
IHBsYWNlIChub3QgY2FjaGVkLCBub3QgZGV0YWNoZWQpLCBidXQgd2lsbCBiZSByZXBsYWNlZC4K
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgaWYgKCFk
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUuZWRpdG9yKCkuaGFz
Q29tcG9zaXRpb24oKSkgeworICAgIGlmIChkb2N1bWVudC0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRp
b24oKSkgewogICAgICAgICAvLyBUaGUgdGV4dCB3YXMgYWxyZWFkeSBwcmVzZW50IGluIERPTSwg
c28gaXQncyBiZXR0ZXIgdG8gY29uZmlybSB0aGFuIHRvIGNhbmNlbCB0aGUgY29tcG9zaXRpb24u
Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAg
IGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCA9IG1fZnJhbWUuZWRpdG9yKCkuY2xpZW50
KCkpIHsKKyAgICAgICAgZG9jdW1lbnQtPmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOwor
ICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQgPSBkb2N1bWVudC0+ZWRpdG9y
KCkuY2xpZW50KCkpIHsKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+cmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbigmbV9mcmFtZSk7CiAgICAgICAgICAgICBlZGl0b3JDbGllbnQtPmRpc2NhcmRl
ZENvbXBvc2l0aW9uKCZtX2ZyYW1lKTsKICAgICAgICAgfQpAQCAtNTY4LDcgKzU3MSw4IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmNsb3NlVVJMKCkKIAogICAgIHN0b3BMb2FkaW5nKHVubG9hZEV2ZW50
UG9saWN5KTsKICAgICAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVyYXRp
b25zKCk7CisgICAgaWYgKGN1cnJlbnREb2N1bWVudCkKKyAgICAgICAgY3VycmVudERvY3VtZW50
LT5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogfQogCiBib29sIEZyYW1lTG9h
ZGVyOjpkaWRPcGVuVVJMKCkKQEAgLTU4MCw3ICs1ODQsNiBAQCBib29sIEZyYW1lTG9hZGVyOjpk
aWRPcGVuVVJMKCkKICAgICB9CiAKICAgICBtX2ZyYW1lLm5hdmlnYXRpb25TY2hlZHVsZXIoKS5j
YW5jZWwoKTsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CiAK
ICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0g
ZmFsc2U7CkBAIC02NDMsOCArNjQ2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZENsZWFy
V2luZG93TmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IERvY3VtZW50JiBuZXcKIAogdm9p
ZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFyV2lu
ZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvb2wgY2xlYXJGcmFtZVZp
ZXcsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZURPTVdpbmRvd0NyZWF0aW9uKQogewot
ICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXIoKTsKLQogICAgIGJvb2wgbmVlZGVkQ2xlYXIgPSBt
X25lZWRzQ2xlYXI7CiAgICAgbV9uZWVkc0NsZWFyID0gZmFsc2U7CiAKQEAgLTY3Myw3ICs2NzQs
NiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJvb2wg
Y2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sCiAgICAgICAgICAgICBtX2ZyYW1lLnRyZWUoKS5z
ZXROYW1lKG51bGxBdG9tKCkpOwogICAgIH0KIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucHJl
cGFyZUZvckRlc3RydWN0aW9uKCk7CiAgICAgbV9mcmFtZS5ldmVudEhhbmRsZXIoKS5jbGVhcigp
OwogCiAgICAgaWYgKGNsZWFyRnJhbWVWaWV3ICYmIG1fZnJhbWUudmlldygpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAppbmRleCAzODVlMzdhNmQwYzkwZTYzM2EzYjdiNDI4NzJjNjE2ZTM4MDg2NDI2Li4y
OTA3YjQ4NWI5NGM2NmFjNTA2ODVjOTlkYzE1ZGQ1ZWVlZmZjZDA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcApAQCAtMTU2LDggKzE1Niw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBt
X25hdmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigq
dGhpcykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3Njcmlw
dChtYWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fZWRpdG9y
KG1ha2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCi0gICAgLCBtX3NlbGVjdGlvbihtYWtlVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKICAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxl
cihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzKSkKICAgICAsIG1f
cGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAgICAgLCBtX3RleHRa
b29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQpAQCAtNTU0LDcgKzU1Miw3IEBA
IGJvb2wgRnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2VzcygpCiAgICAgY2FzZSBET01QYXN0ZUFj
Y2Vzc1BvbGljeTo6RGVuaWVkOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBET01Q
YXN0ZUFjY2Vzc1BvbGljeTo6Tm90UmVxdWVzdGVkWWV0OiB7Ci0gICAgICAgIGF1dG8qIGNsaWVu
dCA9IG1fZWRpdG9yLT5jbGllbnQoKTsKKyAgICAgICAgYXV0byogY2xpZW50ID0gZWRpdG9yKCku
Y2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC05MzcsNyArOTM1LDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFj
dG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICBpZiAo
IWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2VkaXRvci0+ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbEFzSWdub3JlZCgpOworICAgIGVkaXRvcigpLmRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxBc0lnbm9yZWQoKTsKIAogICAgIC8vIFJlc3BlY3QgU1ZHcyB6b29tQW5kUGFuPSJkaXNhYmxl
ZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1lbnRzLgogICAgIC8vIEZJWE1FOiBI
b3cgdG8gaGFuZGxlIGNvbXBvdW5kIGRvY3VtZW50cyArIHpvb21BbmRQYW49ImRpc2FibGVkIj8g
TmVlZHMgU1ZHIFdHIGNsYXJpZmljYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggM2Q0M2E5NGJl
YTk1NTZjOThkYzc0MjNhYjdlYWQ5YTkyYTUyYzZmZS4uMDkzMmE4M2NiNjc0ZjZmOGM5NjExZWQ5
ZjY5OTlkMTdiNjJkMTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtMjksNiArMjksNyBAQAogCiAj
aW5jbHVkZSAiQWJzdHJhY3RGcmFtZS5oIgogI2luY2x1ZGUgIkFkanVzdFZpZXdTaXplT3JOb3Qu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIlBhZ2VJZGVudGlmaWVyLmgiCkBAIC0x
NjMsMTQgKzE2NCwxNCBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7
CiAgICAgRnJhbWVWaWV3KiB2aWV3KCkgY29uc3Q7CiAKLSAgICBFZGl0b3ImIGVkaXRvcigpIHsg
cmV0dXJuIG1fZWRpdG9yOyB9Ci0gICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2VkaXRvcjsgfQorICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gZG9jdW1lbnQo
KS0+ZWRpdG9yKCk7IH0KKyAgICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJu
IGRvY3VtZW50KCktPmVkaXRvcigpOyB9CiAgICAgRXZlbnRIYW5kbGVyJiBldmVudEhhbmRsZXIo
KSB7IHJldHVybiBtX2V2ZW50SGFuZGxlcjsgfQogICAgIGNvbnN0IEV2ZW50SGFuZGxlciYgZXZl
bnRIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBGcmFtZUxv
YWRlciYgbG9hZGVyKCkgY29uc3Q7CiAgICAgTmF2aWdhdGlvblNjaGVkdWxlciYgbmF2aWdhdGlv
blNjaGVkdWxlcigpIGNvbnN0OwotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJl
dHVybiBtX3NlbGVjdGlvbjsgfQotICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQorICAgIGNvbnN0IEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxl
Y3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwogICAgIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXImIGFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsg
fQogICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGFuaW1hdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQpAQCAtMzM4LDggKzMzOSw2IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKIAogICAgIFVuaXF1ZVJlZjxTY3JpcHRD
b250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlxdWVSZWY8RWRpdG9yPiBtX2VkaXRvcjsKLSAg
ICBVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwogICAgIFVuaXF1ZVJlZjxD
U1NBbmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiAKICNpZiBFTkFC
TEUoREFUQV9ERVRFQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJ
bmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRl
eCBlYjAyZjhlYzQ0ZDkzYWQ3YTZjYjk1MWY2OTcwNmZjNGQ2ZjgwZTBlLi4zZWVlNDJmZjBjZDFl
NzNjZjAxYjI5NWU5OGQyODU0ZTliYjdjZmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGlj
YXRvci5jcHAKQEAgLTY4LDIxICs2OCwxNiBAQCBSZWY8VGV4dEluZGljYXRvcj4gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQogCiBSZWZQdHI8VGV4
dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiBy
YW5nZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikK
IHsKLSAgICBGcmFtZSogZnJhbWUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCku
ZnJhbWUoKTsKKyAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWlu
ZXIoKS5kb2N1bWVudCgpOwogCi0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwotCi0gICAgVmlzaWJsZVNl
bGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAgICAgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gdGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uczsKICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFk
ZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkRvTm90U2V0Rm9jdXMpOwogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5
U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKTsKICAgICB0ZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJsZUFwcGVh
cmFuY2VVcGRhdGVzKTsKICNlbmRpZgotICAgIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxl
Y3Rpb25DaGFuZ2UoKmZyYW1lLCB7IFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSB9LCB0ZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb25zKTsKKyAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9u
Q2hhbmdlKGRvY3VtZW50LCB7IFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSB9LCB0ZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb25zKTsKIAogICAgIFRleHRJbmRpY2F0b3JEYXRhIGRhdGE7CiAKQEAgLTkxLDcg
Kzg2LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhS
YW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQKIAogICAgIGJvb2wgaW5kaWNhdGVzQ3Vy
cmVudFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgb2xkU2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogCi0gICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRh
dGEsICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbikpCisg
ICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsICpkb2N1bWVudC0+ZnJhbWUoKSwgcmFu
Z2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkYXRhKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAwMmYxYzMyM2Y5YzExYWI1ZDE5Yjc4Y2EwM2JmNTFhOGY5OGFiMDY5Li5mYTk3ZTBjMzJkMmY4
NGRhYjYxZDg2M2IwM2RlNTdkMmRiYTM3NTI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAt
MDQtMjMgIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBsZS5jb20+CisKKyAgICAgICAgTnVs
bHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQgdmlhIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZW1vdmVOb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDc2MDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTY5NDUwPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgcmVn
cmVzc2lvbiB0ZXN0IGZvciB0aGUgY3Jhc2guCisKKyAgICAgICAgKiBlZGl0aW5nL2luc2VydGlu
Zy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21t
YW5kLWNyYXNoLmh0bWw6IEFkZGVkLgorCisgICAgICAgIE1vZGlmeSB0aGUgdGVzdCByZXN1bHQu
IEZyYW1lU2VsZWN0aW9uIGlzIGJlaW5nIGRlc3RydWN0ZWQgYWxvbmcgd2l0aAorICAgICAgICBk
b2N1bWVudCBzbyBhbiBhZGRpdGlvbmFsIHNlbGVjdGlvbiBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlz
IGV4cGVjdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9k
cmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDQtMTMgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0cy9p
bi1hcHAtYnJvd3Nlci1wcml2YWN5L2FwcC1ib3VuZC1kb21haW4uaHRtbCBpcyBhIGNvbnN0YW50
IGZhaWx1cmUgb24gaU9TCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGlu
Zy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1j
cmFzaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA0MDM0MjNlNTkwOTUwMjY1ZjA4YTMyOTI2
ZTY2MTdkMDE4YTdmNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5z
ZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxIEBACitUZXN0cyBpbnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNv
bW1hbmQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4g
YXNzZXJ0aW9uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5z
ZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2VkaXRp
bmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2FmMzgxZDllZjVhM2ZkOTRlYjIxMDkwYzJhMjJmYmMwNzUxMmFhZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRo
ZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPGJvZHk+PGltYWdl
PjwvaW1hZ2U+PGZvcm0gaWQ9Zm9ybSBjb250ZW50RWRpdGFibGU9dHJ1ZT48b2JqZWN0IGRhdGE9
PyBvbmxvYWQ9b2JqZWN0T25Mb2FkKCk+PC9vYmplY3Q+PC9mb3JtPjxkaWFsb2cgb3Blbj0idHJ1
ZSI+YTwvZGlhbG9nPgorPHNjcmlwdD4KKyAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5lbXB0
eSgpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJzZWxlY3RBbGwiLCBmYWxzZSk7CisgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBvYmplY3RPbkxvYWQoKSB7CisgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNl
cnRVbm9yZGVyZWRMaXN0IiwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgi
aXRhbGljIiwgZmFsc2UpOworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiPHA+IFRlc3RzIGlu
c2VydGluZyBsaXN0IGZvbGxvd2VkIGJ5IGFuIGVkaXQgY29tbWFuZC4gVGhlIHRlc3QgcGFzc2Vz
IGlmIFdlYktpdCBkb2Vzbid0IGNyYXNoIG9yIGhpdCBhbiBhc3NlcnRpb24uPC9wPiI7CisgICAg
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3At
ZGVhZC1mcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dAppbmRleCBkNmJj
N2IxZTZmMDNlM2I0OGFmMDQxOGM2NTUwNGE0ZDIxMzdjMWFjLi5lNWJkZDJhMGJmZDg5NTJkOTc2
NmE0MzdjYWNlYTQ2NjQ4OTc3ODY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJv
cC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtNCw2ICs0LDcgQEAgRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90
aWZpY2F0aW8KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6
cmFuZ2UgZnJvbSAwIG9mIEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpb24KIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDAp
IHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397417</attachid>
            <date>2020-04-23 20:02:01 -0700</date>
            <delta_ts>2020-04-24 12:54:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200423200200.patch</filename>
            <type>text/plain</type>
            <size>220073</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uNzQxYWZkNjAxMWVhNWZiMTE3NDg3YWU2ZTczMTE0
Nzc2NDA5ZmY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAyMC0wNC0yMyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFuYWdlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBw
bGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9NYXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVk
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eURpY3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5n
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0
eWxlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVy
Z2VQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5w
dXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdy
YXBoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVB
bmRBcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2Fu
REhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2hvdWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRo
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0
aFNtYXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVu
dFRhcmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBh
c3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpsZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRB
dENhcmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0
aW9uVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVj
dGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50
T2ZBdHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92
ZXJ3cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRp
bmdTdGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9j
dW1lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29w
ZTo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFu
ZDo6Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUg
Y29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5
TW91c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9y
UGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmN1cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6
aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRp
ZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVk
KToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNl
bGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlR5
cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5l
d2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVh
a0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1
b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdp
dGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0Rp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0
eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRT
ZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndwZS9F
ZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvd2lu
L0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAt
MDQtMTMgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tn
cm91bmQgaW1hZ2VzIHNob3VsZCBmaWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlz
dGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNm
NGYxZDM3NGE2NmJkYjI5Li45MTlhM2E4NTk0ZDAwYTNiNGVkNzAzYzljZTBhMzY2MTkyZjQ4YTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6
RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRD
bGFzc2VzLCB1bnNpZwogICAgICwgbV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRh
dGlvbihmcmFtZSkpCiAgICAgLCBtX2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpKQogICAgICwgbV91bmRvTWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkK
KyAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3Nl
bGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRv
IGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0y
NTkwLDYgKzI1OTIsOCBAQCB2b2lkIERvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQog
ICAgICAgICBwYWdlKCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKEhUTUxNZWRpYUVsZW1lbnRJbnZh
bGlkSUQpOwogICAgIH0KIAorICAgIGVkaXRvcigpLmNsZWFyKCk7CisgICAgc2VsZWN0aW9uKCku
cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CiAgICAgZGV0YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBF
TkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMzRmZDAwZTE1
Yjg4ZDcyMmU5NWE5OWI1Y2NiZjBiMDA1YjdmODI3ZS4uNzczN2ZkOTg0OGVhMDdkMzg2YTFiMWUx
ZjU0MjFiZGI3ODZjM2UwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTExOSw2ICsxMTksNyBA
QCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5l
OwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRpdGluZ0JlaGF2aW9yOworY2xhc3MgRWRp
dG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3Mg
RXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjcsNiArMTI4LDcgQEAgY2xhc3MgRmxvYXRSZWN0
OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3JtQ29udHJvbGxlcjsKIGNsYXNzIEZyYW1l
OworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBGdWxsc2Ny
ZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQ7CkBAIC0xNTc2LDYgKzE1NzgsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQo
KSB7IG1faGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQgPSB0cnVlOyB9CiAgICAgYm9v
bCBoYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
VmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQ7IH0KIAorICAgIEVkaXRvciYgZWRpdG9yKCkg
eyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZWRpdG9yOyB9CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0
dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisKIHByb3RlY3RlZDoKICAgICBlbnVtIENv
bnN0cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVy
ID0gMSA8PCAxIH07CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9
IERlZmF1bHREb2N1bWVudENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpA
QCAtMjExNiw2ICsyMTIzLDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI+IG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiAKICAg
ICBIYXNoTWFwPEVsZW1lbnQqLCBFbGVtZW50SWRlbnRpZmllcj4gbV9pZGVudGlmaWVkRWxlbWVu
dHNNYXA7CisKKyAgICBVbmlxdWVSZWY8RWRpdG9yPiBtX2VkaXRvcjsKKyAgICBVbmlxdWVSZWY8
RnJhbWVTZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwogfTsKIAogRWxlbWVudCogZXZlbnRUYXJnZXRF
bGVtZW50Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDNmNGZjYjNhYTY5ZmNi
NWFjODExYjRlOGM3OTFhODE0N2IzNGZkNjkuLmE5YWM5Mzg5NzI1NGU2Zjg0OTI1N2QwMGJiZjEy
MGMwMzc5ZWYwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtODIsOSArODIsOSBAQCBzdGF0aWMgYm9vbCBtYXJr
ZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50
TWFya2VyKgogICAgIHJldHVybiB0cnVlOwogfQogCi1BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1lJiBmcmFtZSkKK0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50
KQogICAgIDogbV90aW1lcigqdGhpcywgJkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVy
RmlyZWQpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkK
IHsKIH0KIApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RvcEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKQogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2Nv
cnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBi
ZWxvdy4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0
aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGlmIChjdXJyZW50
U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDksNyAr
MTQ5LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVj
dGlvbigpIGNvbnN0CiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGlu
Z01hcmtlckFsbG93ZWQoUmFuZ2UmIG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuICFtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5n
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICByZXR1
cm4gIW1fZG9jdW1lbnQubWFya2VycygpLmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZSwgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnNob3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50KQpAQCAtMjAyLDcgKzIwMiw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KQogICAgIGlmIChtX3R5cGUgIT0gQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb24pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CisgICAgUG9zaXRpb24gY2FyZXRQb3Np
dGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKIAogICAg
IGlmIChtX3JhbmdlV2l0aEFsdGVybmF0aXZlLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRp
b24pIHsKICAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24o
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7CkBAIC0yMjAsMTIg
KzIyMCwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBw
bGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlUwogICAgIGlmIChBbHRlcm5hdGl2ZVRl
eHRDbGllbnQqIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICBjbGll
bnQtPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6
UmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiAKLSAgICBSZWY8RnJhbWU+IHByb3Rl
Y3RvcihtX2ZyYW1lKTsKLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwot
ICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVk
LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2Vs
ZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Cisg
ICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9kb2N1bWVudC5mcmFtZSgpKTsKKyAgICBtX2Rv
Y3VtZW50LnVwZGF0ZUxheW91dCgpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNl
bGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2Vy
ZWQpOworICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKLSAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1
bWVudCgpLT5tYXJrZXJzKCk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2Vy
cygpOwogICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRN
YXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2Us
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5hZGRNYXJrZXIocmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKQEAgLTIzNiwxMiAr
MjM2LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAg
ICAgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZyA9IGZhbHNlOwogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbjogewotICAgICAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24u
c3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24g
cCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQp
OwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4
dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0
aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5n
ZS5jb3B5UmVmKCksIG51bGxwdHIpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6
OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGph
Y2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIG51bGxwdHIpOwogICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CkBAIC0yNjQsNyArMjY0
LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJh
bmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAgICAgdGV4
dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9vcmlnaW5hbFRleHQsIHBhcmFncmFwaFRl
eHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHN1Z2dlc3Rpb25zKTsKKyAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9vcmlnaW5hbFRleHQsIHBhcmFn
cmFwaFRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHN1Z2dlc3Rpb25z
KTsKICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV9y
YW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMw
Miw3ICszMDIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQo
KQogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRV
SVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBSYW5nZSogcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUgPSBtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpOwotICAgIGlmICghcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUgfHwgbV9mcmFtZS5kb2N1bWVudCgpICE9ICZyYW5nZVdpdGhBbHRlcm5h
dGl2ZS0+b3duZXJEb2N1bWVudCgpKQorICAgIGlmICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwg
bV9kb2N1bWVudCAhPSByYW5nZVdpdGhBbHRlcm5hdGl2ZS0+b3duZXJEb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQoKnJhbmdl
V2l0aEFsdGVybmF0aXZlKTsKQEAgLTM0MCw3ICszNDAsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiAKIEZs
b2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgYXV0byogdmlldyA9IG1fZnJh
bWUudmlldygpOworICAgIGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LmZyYW1lKCktPnZpZXcoKTsK
ICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIHZpZXctPmNv
bnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMocmFuZ2UpKSk7CkBAIC0zNDgsNyArMzQ4LDcgQEAgRmxvYXRSZWN0IEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW4KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKLSAg
ICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBj
YXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93
IHRoZSBwYW5lbAogICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9u
IHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKICAgICAvLyB1bmRlc2ly
ZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIg
b25jZSB3ZSBjb25maXJtIHRoYXQKQEAgLTM4Myw3ICszODMsNyBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbgogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVk
RWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29tbWFuZCkKIHsKICAgICBpZiAoY29tbWFu
ZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJl
Y3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCku
cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAg
ICAgIG1fZG9jdW1lbnQubWFya2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNv
cnJlY3Rpb25JbmRpY2F0b3IpOwogCiAgICAgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxl
dGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoY29tbWFuZCk7CiAgICAgbV9vcmlnaW5hbFN0
cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBTdHJpbmcoKTsKQEAgLTM5NSwxNSAr
Mzk1LDE1IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBs
aWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uCiB7CiAgICAgaWYgKCFjb21tYW5kLT53
YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKLSAg
ICBhdXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgYXV0
byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAg
ICBhdXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgbWFya2Vycy5hZGRN
YXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5h
ZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
IH0KIAogRWRpdG9yQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGll
bnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/ICZtX2ZyYW1lLnBhZ2UoKS0+ZWRp
dG9yQ2xpZW50KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX2RvY3VtZW50LnBhZ2UoKSA/ICZt
X2RvY3VtZW50LnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiBudWxscHRyOwogfQogCiBUZXh0Q2hl
Y2tlckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGV4dENoZWNrZXIoKQpAQCAt
NDcxLDcgKzQ3MSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNl
ZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgaWYgKGVuZE9mU2Vs
ZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFt
ZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24p
OworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9j
dW1lbnQsIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7CiAgICAg
U3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSk7CiAgICAg
aWYgKHN0cmluZy5pc0VtcHR5KCkgfHwgIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0
cmluZ1tzdHJpbmcubGVuZ3RoKCkgLSAxXSkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ3OSwxMiAr
NDc5LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1do
aXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgLy8gTWFyayB0aGlzIHdoaXRl
c3BhY2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxv
d2luZyB0aGlzCiAgICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNh
bWUgb3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQogICAgIC8vIHdvbid0
IGF1dG9jb3JyZWN0IGl0IGFnYWluLgotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2Vycygp
LmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0
ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJl
Y3Rpb24pOworICAgIG1fZG9jdW1lbnQubWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFy
YWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmln
aW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOwogfQogCiBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIFJhbmdlJiByYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCiB7Ci0gICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gbV9mcmFtZS5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250
cm9sbGVyID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgaWYgKG1hcmtlckNvbnRyb2xsZXIu
aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KSkgewogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29y
cmVjdGlvbikKICAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZp
ZWRDb3JyZWN0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJl
c3VsdC5yZXBsYWNlbWVudCk7CkBAIC00OTksNyArNDk5LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNv
bnN0IFQKIAogICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVdpdGhBbHRlcm5h
dGl2ZS5zdGFydFBvc2l0aW9uKCk7CiAgICAgUG9zaXRpb24gcHJlY2VkaW5nQ2hhcmFjdGVyUG9z
aXRpb24gPSBiZWdpbm5pbmdPZlJhbmdlLnByZXZpb3VzKCk7Ci0gICAgYXV0byBwcmVjZWRpbmdD
aGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2Vk
aW5nQ2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmluZ09mUmFuZ2UpOworICAgIGF1dG8gcHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHByZWNlZGluZ0No
YXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKIAogICAgIFZlY3RvcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFu
Z2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2Nv
cnJlY3Rpb24pOwogICAgIGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFya2VycykgewpAQCAt
NTIwLDcgKzUyMCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
TWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRT
dGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29y
ZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5v
ZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKG1fZG9jdW1lbnQsIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIu
ZW5kT2Zmc2V0KCkpOwogICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFu
Z2UpOwogICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTU1OCw3ICs1NTgsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogCiBBbHRlcm5h
dGl2ZVRleHRDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlVGV4
dENsaWVudCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gbV9mcmFtZS5wYWdlKCkt
PmFsdGVybmF0aXZlVGV4dENsaWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVu
dC5mcmFtZSgpICYmIG1fZG9jdW1lbnQucGFnZSgpID8gbV9kb2N1bWVudC5wYWdlKCktPmFsdGVy
bmF0aXZlVGV4dENsaWVudCgpIDogbnVsbHB0cjsKIH0KIAogU3RyaW5nIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6Om1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChB
bHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0aXZlVGV4dFR5cGUsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIG1hcmtlclR5cGUpCkBAIC01OTUsNyArNTk1LDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2Um
IHJhbmdlLAogCiAgICAgLy8gUmVjYWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLCBzaW5jZSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00s
IHN1Y2ggdGhhdCB0aGUgb3JpZ2luYWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlv
biBpcyBubyBsb25nZXIgdmFsaWQuIFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKICAg
ICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmVzb2x2
ZUNoYXJhY3RlckxvY2F0aW9uKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyh0cmVlU2Nv
cGVSb290KSwgcGFyYWdyYXBoT2Zmc2V0SW5UcmVlU2NvcGUpOwotICAgIGF1dG8gdXBkYXRlZFBh
cmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdXRvIHVwZGF0ZWRQYXJh
Z3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3VuZGFyeVBvaW50KG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAgICAgaWYgKCF1cGRhdGVkUGFy
YWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICBhdXRv
IHJlcGxhY2VtZW50UmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyB1cGRhdGVkUGFyYWdy
YXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiwgKnVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWlu
aW5nQ29ycmVjdGlvbiB9LCBDaGFyYWN0ZXJSYW5nZShjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3Jh
cGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKSk7CkBAIC02MTcsMTEgKzYxNywxMSBAQCBib29sIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlYwogICAgIGlmICh0cmlnZ2VyaW5nRXZlbnQpCiAgICAgICAgIHRhcmdl
dCA9IHRyaWdnZXJpbmdFdmVudC0+dGFyZ2V0KCk7CiAgICAgZWxzZQotICAgICAgICB0YXJnZXQg
PSBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudChtX2ZyYW1lLmRvY3VtZW50KCkpOworICAg
ICAgICB0YXJnZXQgPSBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudCgmbV9kb2N1bWVudCk7
CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZXZl
bnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbigmbV9mcmFtZS53aW5kb3dQcm94eSgp
LCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIGF1dG8gZXZlbnQgPSBUZXh0RXZl
bnQ6OmNyZWF0ZUZvckRpY3RhdGlvbigmbV9kb2N1bWVudC5mcmFtZSgpLT53aW5kb3dQcm94eSgp
LCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5n
RXZlbnQodHJpZ2dlcmluZ0V2ZW50KTsKIAogICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7CkBAIC02NTMsNyArNjUzLDcgQEAgVmVjdG9yPFN0cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IEQKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2ZShjb25zdCBT
dHJpbmcmIGFsdGVybmF0aXZlU3RyaW5nKQogewogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQotICAgIGF1dG8mIGVkaXRvciA9IG1fZnJhbWUuZWRpdG9yKCk7CisgICAgYXV0byYgZWRp
dG9yID0gbV9kb2N1bWVudC5lZGl0b3IoKTsKICAgICBhdXRvIHNlbGVjdGlvbiA9IGVkaXRvci5z
ZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91bGRJbnNl
cnRUZXh0KGFsdGVybmF0aXZlU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAppbmRleCA5NDc3NGE3NmIyMDdlZTg3
MTAxZDgzYTIzYmQ5M2NmZGY2ZGU2NDI5Li5lM2RmOWI1NzZmYzMwODhkYzI3N2IzZjc5MWNmODIz
MWI5MDYzM2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuaApAQCAtMzUsMTEgKzM1LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOworY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBF
ZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBFZGl0b3JD
bGllbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZyYW1lOwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBU
ZXh0Q2hlY2tlckNsaWVudDsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CkBAIC02MSw3ICs2MSw3
IEBAIGNsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIo
RnJhbWUmIGZyYW1lKSBVTkxFU1NfRU5BQkxFRCggOiBtX2ZyYW1lKGZyYW1lKSB7IH0pCisgICAg
ZXhwbGljaXQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1bWVudCYgZG9jdW1lbnQpIFVO
TEVTU19FTkFCTEVEKDogbV9kb2N1bWVudChkb2N1bWVudCkgeyB9KQogICAgIH5BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCiAgICAgdm9pZCBzdGFydEFs
dGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZSkgVU5MRVNTX0VOQUJMRUQo
eyB9KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgQWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50KiBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKTsKICNlbmRpZgogCi0gICAgRnJhbWUmIG1fZnJh
bWU7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiB9OwogCiAjdW5kZWYgVU5MRVNTX0VOQUJM
RUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
aW5kZXggMTRlM2M3ODZjNGZmMWRiN2I4NTYwMTUxNDg3MzkwZGMzNzMxOTE1MC4uYTdkMWI5NjUy
NDY0MjBkMTE4MjY2YzUzYTVmZDUxYmVjNzk0NjgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTIyOCwxNyArMjI4LDE3IEBAIHZv
aWQgRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6dW5hcHBseSgpCiAgICAgLy8gdXAgdGhlIGNvbXBv
c2l0aW9uIHdpbGwgbGVhdmUgYSBzdGFsZSwgaW52YWxpZCBjb21wb3NpdGlvbiwgYXMgaW4gPHJk
YXI6Ly9wcm9ibGVtLzY4MzE2Mzc+LgogICAgIC8vIERlc2t0b3AgaGFuZGxlcyB0aGlzIGluIC1b
V2ViSFRNTFZpZXcgX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdlcl0sIGJ1dCB0aGUgcGhv
bmUKICAgICAvLyBnb2VzIGFub3RoZXIgcm91dGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNhbmNl
bENvbXBvc2l0aW9uKCk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRp
b24oKTsKICNlbmRpZgogCi0gICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCkud2lsbFVuYXBwbHlFZGl0
aW5nKCp0aGlzKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQtPmVkaXRvcigpLndpbGxVbmFwcGx5RWRp
dGluZygqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNpemVfdCBzaXplID0gbV9jb21t
YW5kcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNpemU7IGk7IC0taSkKICAgICAgICAg
bV9jb21tYW5kc1tpIC0gMV0tPmRvVW5hcHBseSgpOwogCi0gICAgZnJhbWUtPmVkaXRvcigpLnVu
YXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnVuYXBwbGll
ZEVkaXRpbmcoKnRoaXMpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkpCiAgICAgICAgIG1fcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb25Gb3JVbmFwcGx5KG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKTsK
QEAgLTI1OCwxMyArMjU4LDEzIEBAIHZvaWQgRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBs
eSgpCiAgICAgLy8gaWYgb25lIGlzIG5lY2Vzc2FyeSAobGlrZSBmb3IgdGhlIGNyZWF0aW9uIG9m
IFZpc2libGVQb3NpdGlvbnMpLgogICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCkud2lsbFJlYXBw
bHlFZGl0aW5nKCp0aGlzKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQtPmVkaXRvcigpLndpbGxSZWFw
cGx5RWRpdGluZygqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byYgY29t
bWFuZCA6IG1fY29tbWFuZHMpCiAgICAgICAgIGNvbW1hbmQtPmRvUmVhcHBseSgpOwogCi0gICAg
ZnJhbWUtPmVkaXRvcigpLnJlYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIG1fZG9jdW1lbnQt
PmVkaXRvcigpLnJlYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIG1fcmVwbGFjZWRUZXh0LnBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JSZWFwcGx5KG1fZG9jdW1lbnQtPmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpKTsKQEAgLTMxOSw3ICszMTksNyBAQCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6fkNvbXBvc2l0ZUVkaXRDb21tYW5kKCkKIAogYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
d2lsbEFwcGx5Q29tbWFuZCgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFw
cGx5RWRpdGluZygqdGhpcywgdGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgcmV0dXJu
IGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgdGFyZ2V0UmFuZ2Vz
Rm9yQmluZGluZ3MoKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5KCkK
QEAgLTM3OCwxMyArMzc4LDEzIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5KCkK
IAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKCkKIHsKLSAgICBm
cmFtZSgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVk
aXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdGF0aWNS
YW5nZT4+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXMoKSBjb25zdAogewogICAg
IEFTU0VSVCghaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKTsKLSAgICBhdXRvIGZpcnN0
UmFuZ2UgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAg
ICBhdXRvIGZpcnN0UmFuZ2UgPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKTsKICAgICBpZiAoIWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAK
QEAgLTE0NjgsNyArMTQ2OCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgLy8gRklY
TUUgKDUwOTg5MzEpOiBXZSBzaG91bGQgYWRkIGEgbmV3IGluc2VydCBhY3Rpb24gIldlYlZpZXdJ
bnNlcnRBY3Rpb25Nb3ZlZCIgYW5kIGNhbGwgc2hvdWxkSW5zZXJ0RnJhZ21lbnQgaGVyZS4KIAog
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQsIERPV05T
VFJFQU0pKTsKLSAgICBmcmFtZSgpLmVkaXRvcigpLmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGVhck1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgIGRlbGV0ZVNl
bGVjdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAKICAgICBBU1NFUlQoZGVzdGlu
YXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPmlzQ29ubmVjdGVkKCkpOwpAQCAt
MTUwNCw3ICsxNTA0LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAgICAgb3B0aW9u
cy5hZGQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUpOwogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQo
KSwgV1RGTW92ZShmcmFnbWVudCksIG9wdGlvbnMpKTsKIAotICAgIGZyYW1lKCkuZWRpdG9yKCku
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRv
Y3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2Vs
ZWN0aW9uKCkpOwogCiAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBpbiBhbiBlbXB0eSBwYXJh
Z3JhcGgsIHJlc3RvcmUgc3R5bGVzIGZyb20gdGhlIG9sZCBlbXB0eSBwYXJhZ3JhcGggdG8gdGhl
IG5ldyBlbXB0eSBwYXJhZ3JhcGguCiAgICAgYm9vbCBzZWxlY3Rpb25Jc0VtcHR5UGFyYWdyYXBo
ID0gZW5kaW5nU2VsZWN0aW9uKCkuaXNDYXJldCgpICYmIGlzU3RhcnRPZlBhcmFncmFwaChlbmRp
bmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSkgJiYgaXNFbmRPZlBhcmFncmFwaChlbmRpbmdT
ZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA2OGQxNTA2MTJiMGNlZTNjMzk3MTE2
MzVjODViMTdkMmRlMzg4YWIyLi4xMTk3ZjEyZjY3Y2JmOTdlZWI2NGYzNDBlYWZhYjg3MmFjYjg4
YmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OnNhdmVUeXBpbmdTdHlsZVN0YXRlKCkKICAgICAvLyBIb3dldmVyLCBpZiB0eXBpbmcgc3R5bGUg
d2FzIHByZXZpb3VzbHkgc2V0IGZyb20gYW5vdGhlciB0ZXh0IG5vZGUgYXQgdGhlIHByZXZpb3Vz
CiAgICAgLy8gcG9zaXRpb24gKG5vdyBkZWxldGVkKSwgd2UgbmVlZCB0byBjbGVhciB0aGF0IHN0
eWxlIGFzIHdlbGwuCiAgICAgaWYgKG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpID09
IG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpICYmIG1fdXBzdHJlYW1TdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgZnJhbWUoKS5zZWxlY3Rpb24o
KS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAgIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuY2xl
YXJUeXBpbmdTdHlsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NDAsNyArNzQw
LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAg
IAogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJh
Z3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwg
ZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKSk7CiAgICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZnJhbWUoKS5lZGl0b3IoKS5jbGllbnQoKS0+
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2Vk
LnB0cigpKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZE1v
dmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCByYW5nZVRvQmVSZXBsYWNlZC5wdHIoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBtb3ZlUGFyYWdyYXBocyB3aWxsIGluc2Vy
dCBwbGFjZWhvbGRlcnMgaWYgaXQgcmVtb3ZlcyBibG9ja3MgdGhhdCB3b3VsZCByZXF1aXJlIHRo
ZWlyIHVzZSwgZG9uJ3QgbGV0IGJsb2NrCkBAIC04MTQsNyArODE0LDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCkKICAgICAv
LyBJbiB0aGlzIGNhc2UgaWYgd2Ugc3RhcnQgdHlwaW5nLCB0aGUgbmV3IGNoYXJhY3RlcnMgc2hv
dWxkIGhhdmUgdGhlIHNhbWUgc3R5bGUgYXMgdGhlIGp1c3QgZGVsZXRlZCBvbmVzLAogICAgIC8v
IGJ1dCwgaWYgd2UgY2hhbmdlIHRoZSBzZWxlY3Rpb24sIGNvbWUgYmFjayBhbmQgc3RhcnQgdHlw
aW5nIHRoYXQgc3R5bGUgc2hvdWxkIGJlIGxvc3QuICBBbHNvIHNlZSAKICAgICAvLyBwcmVzZXJ2
ZVR5cGluZ1N0eWxlKCkgYmVsb3cuCi0gICAgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdT
dHlsZShtX3R5cGluZ1N0eWxlLmNvcHlSZWYoKSk7CisgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlLmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2xlYXJUcmFuc2llbnRTdGF0ZSgpCkBAIC04ODUsNyArODg1
LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1f
cmVwbGFjZSkgewogICAgICAgICBFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpOwogICAgICAgICBpZiAodGV4
dENvbnRyb2wgJiYgdGV4dENvbnRyb2wtPmZvY3VzZWQoKSkKLSAgICAgICAgICAgIGZyYW1lKCku
ZWRpdG9yKCkudGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbCk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQo
dGV4dENvbnRyb2wpOwogICAgIH0KIAogICAgIC8vIHNhdmUgdGhpcyB0byBsYXRlciBtYWtlIHRo
ZSBzZWxlY3Rpb24gd2l0aApAQCAtOTQwLDcgKzk0MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRSZWJhbGFjZVdoaXRl
U3BhY2UgPSB0cnVlOwotICAgIGlmICghZnJhbWUoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3Vs
ZFJlYmFsYW5jZVdoaXRlU3BhY2VzSW5TZWN1cmVGaWVsZCgpKSB7CisgICAgaWYgKCFkb2N1bWVu
dCgpLmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3Vy
ZUZpZWxkKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fZW5kaW5nUG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKTsKICAgICAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKSB7CiAgICAgICAgICAgICBU
ZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpub2RlKTsKQEAgLTk1NCw3ICs5NTQsNyBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGNhbGN1bGF0ZVR5
cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKTsKIAogICAgIGlmICghb3JpZ2luYWxTdHJpbmcuaXNFbXB0
eSgpKQotICAgICAgICBmcmFtZSgpLmVkaXRvcigpLmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9z
aXRpb24obV9lbmRpbmdQb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcpOworICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24obV9lbmRpbmdQb3Np
dGlvbiwgb3JpZ2luYWxTdHJpbmcpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24obV9lbmRpbmdQb3NpdGlvbiwgYWZmaW5pdHksIGVuZGluZ1NlbGVjdGlvbigpLmlz
RGlyZWN0aW9uYWwoKSkpOwogICAgIGNsZWFyVHJhbnNpZW50U3RhdGUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKaW5kZXggZGYwOThjM2Y3ZGExN2M3ODk0ZTJjZjc4NTU1
OWJjODc2Yzg4NDYxMi4uMWY1YjZhY2I5ZGIxODhlYTY5MGY2MDA1NmM3NzM3NzAwZTJiOGY0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVy
c2FsLmgiCkBAIC0xMjcsMzMgKzEyNiwxOSBAQCBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQoRG9j
dW1lbnQmIGRvY3VtZW50LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQogICAgICwgbV9lZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgQVNTRVJUKGRvY3VtZW50LmZyYW1lKCkpOwotICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1f
ZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBzZXRTdGFy
dGluZ1NlbGVjdGlvbihtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKG1fc3RhcnRpbmdTZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFu
ZDo6RWRpdENvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0
aW9uKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQu
ZnJhbWUoKSk7CiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24pOwog
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24pOwogfQogCiBFZGl0Q29tbWFu
ZDo6fkVkaXRDb21tYW5kKCkgPSBkZWZhdWx0OwogCi1GcmFtZSYgRWRpdENvbW1hbmQ6OmZyYW1l
KCkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAgICByZXR1cm4gKmRvY3Vt
ZW50KCkuZnJhbWUoKTsKLX0KLQotY29uc3QgRnJhbWUmIEVkaXRDb21tYW5kOjpmcmFtZSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgcmV0dXJuICpkb2N1
bWVudCgpLmZyYW1lKCk7Ci19Ci0KIEVkaXRBY3Rpb24gRWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rp
b24oKSBjb25zdAogewogICAgIHJldHVybiBtX2VkaXRpbmdBY3Rpb247CkBAIC0xNjgsMTEgKzE1
Myw3IEBAIHN0YXRpYyBpbmxpbmUgRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tcG9zaXRpb25J
ZlBvc3NpYmxlKEVkaXRDb21tYW5kKiBjb21tYW5kCiAKIGJvb2wgRWRpdENvbW1hbmQ6OmlzRWRp
dGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSBjb25zdAogewotICAgIGF1dG8qIGZyYW1lID0gbV9k
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvKiBjb250YWluZXIgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKS5jb250YWluZXJOb2RlKCk7CisgICAgYXV0byogY29udGFpbmVyID0gbV9kb2N1bWVu
dC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCk7CiAgICAg
aWYgKCFjb250YWluZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjE3LDcgKzE5OCw3
IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhU
ZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyCiB7CiAgICAgaWYgKCFBWE9iamVjdENhY2hlOjph
Y2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbih0eXBlLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkpOworICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlw
ZSwgdGV4dCwgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiB9
CiAKIHZvaWQgRWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQVhU
ZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvc2l0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCmluZGV4IGRlYmNm
ZjAyNDVlZGYwZGVlN2RmYmVmZWQ1ZjY0MDgxYjUxMmEzNjcuLjJmNjdjZDczMzRjMmM4YmQ1Njkw
ZjExMzVjMTBkMDAwZGMzMDQzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdENvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgK
QEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29tcG9zaXRlRWRp
dENvbW1hbmQ7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZTsK
IAogU3RyaW5nIGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKEVkaXRBY3Rpb24pOwogCkBA
IC02NCw4ICs2Myw2IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBFZGl0Q29tbWFuZChEb2N1
bWVudCYsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uOjpVbnNwZWNpZmllZCk7CiAgICAgRWRpdENv
bW1hbmQoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogCi0gICAgY29uc3QgRnJhbWUmIGZyYW1lKCkgY29uc3Q7Ci0gICAgRnJhbWUm
IGZyYW1lKCk7CiAgICAgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9kb2N1bWVudDsgfQogICAgIERvY3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1l
bnQ7IH0KICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGZjMmVmYTk1MWZm
NTBhNmZhZDM2OTQ4MzU5OTZiODU5Y2U1NzlmYjEuLjliN2NmZDJhNmUzYjViM2NhMmNjZDA1OTUz
NTU1YWEyMmIyNmZkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtODY5LDcg
Kzg2OSw3IEBAIGJvb2wgaXNFbXB0eVRhYmxlQ2VsbChjb25zdCBOb2RlKiBub2RlKQogCiBSZWY8
SFRNTEVsZW1lbnQ+IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKIHsKLSAgICBzd2l0Y2ggKGRvY3VtZW50LmZyYW1lKCktPmVkaXRvcigpLmRlZmF1bHRQ
YXJhZ3JhcGhTZXBhcmF0b3IoKSkgeworICAgIHN3aXRjaCAoZG9jdW1lbnQuZWRpdG9yKCkuZGVm
YXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBh
cmF0b3JJc0RpdjoKICAgICAgICAgcmV0dXJuIEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQpOwogICAgIGNhc2UgRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNQOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDBlYTg5OTA3NzljMjMzZTgxNDQ4N2M3MTBl
YjMwZWU1OTIwYmQ1OGQuLjJjNzZhYWYxOWRjMjQ2YWE0ZmRkZTE2NjFiYmVkMTI1NDMxNmE1MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE2ODYsNyArMTY4
Niw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgICAgIGdldFByb3BlcnRpZXNOb3RJbigqc3R5bGUt
PnN0eWxlKCksIGNvbXB1dGVkU3R5bGUpIDogTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7CiAKICAgICByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxl
LmdldCgpKTsKLSAgICBib29sIHNob3VsZFN0eWxlV2l0aENTUyA9IGRvY3VtZW50LT5mcmFtZSgp
LT5lZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhDU1MoKTsKKyAgICBib29sIHNob3VsZFN0eWxlV2l0
aENTUyA9IGRvY3VtZW50LT5lZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhDU1MoKTsKICAgICBpZiAo
IXNob3VsZFN0eWxlV2l0aENTUykKICAgICAgICAgZXh0cmFjdFRleHRTdHlsZXMoKmRvY3VtZW50
LCAqbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxlLnVzZUZpeGVkRm9udERlZmF1bHRTaXplKCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMTE0MzkzMWI4YjI0YmY2M2MwN2E5
YTA5ZTM3OWJmMTkzOGRjNThhMi4uOGJlMzhiZDAyMDcwODAxMzAxMWFkZjRlZjhiMTkzNjBiNmRl
NGNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTczLDggKzE3Myw4IEBAIHN0
YXRpYyBTdHJpbmcgaW5wdXRFdmVudERhdGFGb3JFZGl0aW5nU3R5bGVBbmRBY3Rpb24oRWRpdGlu
Z1N0eWxlJiBzdHlsZSwgRWRpdEFjCiBjbGFzcyBDbGVhclRleHRDb21tYW5kIDogcHVibGljIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQgewogcHVibGljOgogICAgIENsZWFyVGV4dENvbW1hbmQoRG9j
dW1lbnQmIGRvY3VtZW50KTsKLSAgICBzdGF0aWMgdm9pZCBDcmVhdGVBbmRBcHBseShjb25zdCBS
ZWZQdHI8RnJhbWU+IGZyYW1lKTsKLSAgICAKKyAgICBzdGF0aWMgdm9pZCBDcmVhdGVBbmRBcHBs
eShEb2N1bWVudCYpOworCiBwcml2YXRlOgogICAgIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwogfTsKQEAgLTE4OSwxNyArMTg5LDE3IEBAIEVkaXRBY3Rpb24gQ2xl
YXJUZXh0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIEVkaXRBY3Rp
b246OkRlbGV0ZTsKIH0KIAotdm9pZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShj
b25zdCBSZWZQdHI8RnJhbWU+IGZyYW1lKQordm9pZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVB
bmRBcHBseShEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKKyAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIERvbid0IGxlYXZlIGFyb3VuZCBzdGFsZSBjb21wb3NpdGlv
biBzdGF0ZS4KLSAgICBmcmFtZS0+ZWRpdG9yKCkuY2xlYXIoKTsKKyAgICBkb2N1bWVudC5lZGl0
b3IoKS5jbGVhcigpOwogICAgIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0
aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3RBbGwoKTsKLSAgICBhdXRvIGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcg
Q2xlYXJUZXh0Q29tbWFuZCgqZnJhbWUtPmRvY3VtZW50KCkpKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOworICAgIGF1dG8gY2xlYXJD
b21tYW5kID0gYWRvcHRSZWYoKm5ldyBDbGVhclRleHRDb21tYW5kKGRvY3VtZW50KSk7CiAgICAg
Y2xlYXJDb21tYW5kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogICAgIGNs
ZWFyQ29tbWFuZC0+YXBwbHkoKTsKIH0KQEAgLTIwNywyNCArMjA3LDI0IEBAIHZvaWQgQ2xlYXJU
ZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwog
Ci1UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFt
ZSYgZnJhbWUsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+IHRlbXBvcmFyeVNlbGVjdGlvbiwg
T3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucykKLSAgICA6IG1fZnJh
bWUoZnJhbWUpCitUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZShEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+IHRlbXBv
cmFyeVNlbGVjdGlvbiwgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gb3B0aW9u
cykKKyAgICA6IG1fZG9jdW1lbnQoUmVmUHRyKCZkb2N1bWVudCkpCiAgICAgLCBtX29wdGlvbnMo
b3B0aW9ucykKLSAgICAsIG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzKGZyYW1lLmVkaXRv
cigpLmlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSkKKyAgICAsIG1fd2FzSWdub3JpbmdTZWxlY3Rp
b25DaGFuZ2VzKGRvY3VtZW50LmVkaXRvcigpLmlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSkKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFi
bGVkKGZyYW1lLnNlbGVjdGlvbigpLmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKKyAgICAs
IG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZChkb2N1bWVudC5zZWxlY3Rpb24oKS5pc1Vw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkpCiAjZW5kaWYKIHsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIGlmIChvcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVB
cHBlYXJhbmNlVXBkYXRlcykKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBw
ZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CisgICAgICAgIGRvY3VtZW50LnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOwogI2VuZGlmCiAKICAgICBpZiAob3B0aW9ucyAm
IFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKLSAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKKyAgICAg
ICAgZG9jdW1lbnQuZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKIAog
ICAgIGlmICh0ZW1wb3JhcnlTZWxlY3Rpb24pIHsKLSAgICAgICAgbV9zZWxlY3Rpb25Ub1Jlc3Rv
cmUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgbV9zZWxlY3Rpb25U
b1Jlc3RvcmUgPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAgc2V0
U2VsZWN0aW9uKHRlbXBvcmFyeVNlbGVjdGlvbi52YWx1ZSgpKTsKICAgICB9CiB9CkBAIC0yMzYs
MTIgKzIzNiwxMiBAQCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2UoKQogCiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlv
bjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykgewogICAgICAgICBhdXRvIHJldmVhbFNlbGVjdGlv
biA9IG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6UmV2ZWFsU2VsZWN0aW9u
ID8gRWRpdG9yOjpSZXZlYWxTZWxlY3Rpb246OlllcyA6IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9u
OjpObzsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcywgcmV2ZWFsU2VsZWN0aW9uKTsKKyAgICAg
ICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhtX3dhc0ln
bm9yaW5nU2VsZWN0aW9uQ2hhbmdlcywgcmV2ZWFsU2VsZWN0aW9uKTsKICAgICB9CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChtX2FwcGVhcmFuY2VVcGRhdGVzV2Vy
ZUVuYWJsZWQpOworICAgICAgICBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBl
YXJhbmNlRW5hYmxlZChtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQpOwogI2VuZGlmCiB9
CiAKQEAgLTI1MCwxNCArMjUwLDE0IEBAIHZvaWQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpz
ZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogICAgIGF1dG8g
b3B0aW9ucyA9IEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpOwog
ICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkRvTm90U2V0Rm9j
dXMpCiAgICAgICAgIG9wdGlvbnMuYWRkKEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsK
LSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25z
KTsKKyAgICBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBv
cHRpb25zKTsKIH0KIAogLy8gV2hlbiBhbiBldmVudCBoYW5kbGVyIGhhcyBtb3ZlZCB0aGUgc2Vs
ZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0IGNvbnRyb2wKIC8vIHdlIHNob3VsZCB1c2UgdGhlIHRh
cmdldCBjb250cm9sJ3Mgc2VsZWN0aW9uIGZvciB0aGlzIGVkaXRpbmcgb3BlcmF0aW9uLgogVmlz
aWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQog
ewotICAgIGF1dG8gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKICAgICAvLyBJZiB0
aGUgdGFyZ2V0IGlzIGEgdGV4dCBjb250cm9sLCBhbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlz
IG91dHNpZGUgb2YgaXRzIHNoYWRvdyB0cmVlLApAQCAtMjc2LDEyICsyNzYsMTIgQEAgVmlzaWJs
ZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQoRXZlbnQqIGV2ZW50KQogLy8g
RnVuY3Rpb24gY29uc2lkZXJzIE1hYyBlZGl0aW5nIGJlaGF2aW9yIGEgZmFsbGJhY2sgd2hlbiBQ
YWdlIG9yIFNldHRpbmdzIGlzIG5vdCBhdmFpbGFibGUuCiBFZGl0aW5nQmVoYXZpb3IgRWRpdG9y
OjpiZWhhdmlvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVkaXRpbmdCZWhhdmlvcihtX2ZyYW1l
LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2aW9yVHlwZSgpKTsKKyAgICByZXR1cm4gRWRpdGluZ0Jl
aGF2aW9yKG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOwogfQog
CiBFZGl0b3JDbGllbnQqIEVkaXRvcjo6Y2xpZW50KCkgY29uc3QKIHsKLSAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgIGlmIChQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgIHJldHVybiAmcGFnZS0+ZWRpdG9yQ2xpZW50KCk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CkBAIC0zNDQsMTIgKzM0NCwxMiBAQCBib29sIEVkaXRvcjo6aGFuZGxlVGV4
dEV2ZW50KFRleHRFdmVudCYgZXZlbnQpCiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFi
bGVFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCiBib29sIEVkaXRvcjo6Y2FuRWRpdFJpY2hs
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwogfQogCiBlbnVtIGNs
YXNzIENsaXBib2FyZEV2ZW50S2luZCB7CkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIGJvb2wg
ZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChSZWZQdHI8RWxlbWVudD4mJiB0YXJnZXQsIENsaXBib2Fy
ZEV2ZW50S2luZAogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2
ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpC
ZWZvcmVDdXQpOwpAQCAtNDUwLDcgKzQ1MCw3IEBAIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1dCgp
CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTENvcHkoKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZl
bnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2ZW50S2luZDo6QmVmb3JlQ29weSk7
CiB9CkBAIC00ODQsMTMgKzQ4NCwxMyBAQCBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7
CiAgICAgaWYgKGltYWdlRWxlbWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIXNlbGVjdGlvbi5pc0luUGFzc3dvcmRG
aWVsZCgpOwogfQogCiBib29sIEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogewotICAgIGlmICht
X2ZyYW1lLm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVk
aXRpbmcoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5tYWluRnJhbWUoKS5sb2FkZXIo
KS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiBjYW5FZGl0KCk7CkBAIC00OTgsNyArNDk4LDcgQEAgYm9vbCBF
ZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIAogYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZSgpIGNvbnN0
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxl
Y3Rpb24uaXNSYW5nZSgpICYmIHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAK
QEAgLTUyNCw3ICs1MjQsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkU21hcnREZWxldGUoKQogewog
ICAgIGlmIChiZWhhdmlvcigpLnNob3VsZEFsd2F5c1NtYXJ0RGVsZXRlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkg
PT0gV29yZEdyYW51bGFyaXR5OworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmdy
YW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5OwogfQogCiBib29sIEVkaXRvcjo6c21hcnRJ
bnNlcnREZWxldGVFbmFibGVkKCkKQEAgLTU0Nyw3ICs1NDcsNyBAQCBib29sIEVkaXRvcjo6ZGVs
ZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVs
YXJpdHkgZwogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgaWYgKGlzVHlwaW5nQWN0aW9uKSB7
CiAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGRvY3VtZW50KCks
IGNhblNtYXJ0Q29weU9yRGVsZXRlKCkgPyBUeXBpbmdDb21tYW5kOjpTbWFydERlbGV0ZSA6IDAs
IGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09w
ZXJhdGlvbigpOwpAQCAtNTg3LDcgKzU4Nyw3IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGly
ZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAK
IHZvaWQgRWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERl
bGV0ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgc21hcnREZWxldGUsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZWRpdGlu
Z0FjdGlvbiktPmFwcGx5KCk7CkBAIC01OTUsNyArNTk1LDcgQEAgdm9pZCBFZGl0b3I6OmRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShib29sIHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVk
aXRpbmcKIAogdm9pZCBFZGl0b3I6OmNsZWFyVGV4dCgpCiB7Ci0gICAgQ2xlYXJUZXh0Q29tbWFu
ZDo6Q3JlYXRlQW5kQXBwbHkoJm1fZnJhbWUpOworICAgIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0
ZUFuZEFwcGx5KG1fZG9jdW1lbnQpOwogfQogCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4
dChjb25zdCBTdHJpbmcmIHBhc3RpbmdUZXh0LCBib29sIHNtYXJ0UmVwbGFjZSkKQEAgLTY2MSw3
ICs2NjEsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0RnJhZ21lbnQoRG9jdW1lbnRGcmFn
bWVudCYgZnJhZ21lbnQsIFJhbmdlKiByZXBsYWNpbmdETwogCiB2b2lkIEVkaXRvcjo6cmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0
UmVwbGFjZW1lbnQgc2VsZWN0UmVwbGFjZW1lbnQsIFNtYXJ0UmVwbGFjZSBzbWFydFJlcGxhY2Us
IE1hdGNoU3R5bGUgbWF0Y2hTdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBNYWlsQmxv
Y2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCiB7Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpIHx8ICFzZWxlY3Rpb24uaXNDb250
ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02ODksMTkgKzY4OSwxOSBAQCB2
b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50
JiBmcmFnbWVudCwgU2VsZWN0UmVwbAogICAgIGlmIChtX2ltYWdlRWxlbWVudHNUb0xvYWRCZWZv
cmVSZXZlYWxpbmdTZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25B
ZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIAotICAgIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpICYmIGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6UGFzdGUpIHsKICAgICAgICAg
U3RyaW5nIHRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShjb21tYW5kLT52aXNpYmxlU2VsZWN0aW9uRm9ySW5zZXJ0ZWRUZXh0KCkpOwotICAg
ICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVQYXN0ZSwgdGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGNvbW1hbmQtPmNvbXBvc2l0aW9uKCktPnNldFJhbmdl
RGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKICAgICB9CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5n
QWN0aW9uID09IEVkaXRBY3Rpb246Okluc2VydCkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGNv
bW1hbmQtPmRvY3VtZW50RnJhZ21lbnRQbGFpblRleHQoKTsKLSAgICAgICAgcmVwbGFjZWRUZXh0
LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2Jq
ZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRF
ZGl0VHlwZUluc2VydCwgdGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CiAgICAgICAgIGNvbW1hbmQtPmNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBs
eShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKICAgICB9CiAKQEAgLTcyOCw3ICs3Mjgs
NyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2Vs
ZWN0ZWRSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJh
bmdlKSBjb25zdApAQCAtNzQ0LDcgKzc0NCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVS
YW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTENvcHkoKQog
eyAgIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29y
ZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJ
blBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFk
aXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xp
cGJvYXJkRXZlbnRLaW5kOjpDb3B5KTsKQEAgLTc1Miw3ICs3NTIsNyBAQCBib29sIEVkaXRvcjo6
dHJ5REhUTUxDb3B5KCkKIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIHsKLSAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQorICAg
IGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVu
dEtpbmQ6OkN1dCk7CkBAIC03NjAsNyArNzYwLDcgQEAgYm9vbCBFZGl0b3I6OnRyeURIVE1MQ3V0
KCkKIAogYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBS
YW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pIGNvbnN0CiB7Ci0gICAgaWYg
KG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9t
RWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKQorICAgIGlm
IChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNz
VGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0gRWRpdG9ySW5zZXJ0QWN0aW9uOjpU
eXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNs
aWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLCBhY3Rpb24pOwpAQCAtNzgyLDE3
ICs3ODIsMTcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAKIGJvb2wgRWRpdG9yOjpoYXNCaWRp
U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgTm9kZSogc3RhcnROb2RlOwotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0g
ICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVu
ZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgc3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgp
OworICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChlbmNs
b3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xvc2luZ0Jsb2NrKGVuZE5vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQotICAgICAgICBzdGFydE5vZGUgPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtODEyLDEyICs4MTIsMTIgQEAgYm9vbCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24oKSBj
b25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAgICAg
IGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCksIHVsVGFnKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0Nh
cmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpKQogICAgICAgICAgICAgcmV0
dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRo
VGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpOwotICAg
ICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOworICAgIH0gZWxzZSBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgYXV0byogc3RhcnROb2RlID0g
ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpLCB1bFRhZyk7CisgICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCB1bFRh
Zyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5vZGUgPT0gZW5k
Tm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7CiAgICAgfQpAQCAtODI3LDEy
ICs4MjcsMTIgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUo
KSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvbk9yZGVyZWRMaXN0U3RhdGUoKSBj
b25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgewotICAgICAg
ICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLCBvbFRhZykpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXND
YXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKSkKICAgICAgICAgICAgIHJl
dHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlz
UmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0
aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKTsKLSAg
ICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9sVGFnKTsKKyAgICB9IGVsc2UgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9
IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKSwgb2xUYWcpOworICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xU
YWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5vZGUgJiYgc3RhcnROb2RlID09IGVu
ZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwogICAgIH0KQEAgLTg3Miw3
ICs4NzIsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQog
CiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiB7Ci0g
ICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkK
KyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3
TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAtODgyLDcgKzg4Miw3IEBAIFJlZlB0cjxOb2Rl
PiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIAogUmVmUHRyPE5vZGU+IEVk
aXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNh
bkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICgh
Y2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bE9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtODkyLDcgKzg5Miw3IEBAIFJlZlB0cjxOb2RlPiBF
ZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpCiAKIFJlZlB0cjxOb2Rl
PiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKCkKIHsKLSAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0
ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxp
c3RMZXZlbFVub3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC05MDIsNyArOTAyLDcgQEAgUmVmUHRy
PE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKQogCiB2
b2lkIEVkaXRvcjo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogewotICAgIGlmICghY2Fu
RWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFj
YW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6
ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAtOTMyLDcgKzkzMiw3
IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbShjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAKIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFy
Z2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZy
b20obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmV0dXJuIGZpbmRFdmVu
dFRhcmdldEZyb20obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIHZv
aWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbikKQEAgLTk0NiwxMyArOTQ2LDEzIEBAIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
biwKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlv
blR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsK
KyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0
VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsK
ICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHls
ZUFuZEFjdGlvbigqc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwotICAgIFJlZlB0cjxFbGVtZW50PiBl
bGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVt
ZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudCAm
JiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1
dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTY5LDcgKzk2OSw4IEBAIHZvaWQg
RWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2xpZW50KCkt
PmRpZEFwcGx5U3R5bGUoKTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5k
aWRBcHBseVN0eWxlKCk7CiAgICAgaWYgKGVsZW1lbnQpCiAgICAgICAgIGRpc3BhdGNoSW5wdXRF
dmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEpOwogfQpAQCAtOTg0
LDEzICs5ODUsMTMgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUoU3R5bGVQcm9w
ZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW8KICAgICBpZiAoIXN0eWxlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5
cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsK
ICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVO
YW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVu
dERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbihzdHlsZSwgZWRp
dGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVk
aXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0
RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMDA1LDcgKzEwMDYsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRv
U2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAog
ICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxk
QXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHls
ZShzdHlsZSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24p
OwogfQpAQCAtMTAxNiw3ICsxMDE3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVj
dGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmcKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIHRleHQgZGVjb3Jh
dGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCi0gICAgaWYgKCFjbGllbnQoKSB8
fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4
dERlY29yYXRpb25zKCkucHRyKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5
U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGFwcGx5U3R5bGUoV1RGTW92ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24s
IGNvbG9yRmlsdGVyTW9kZSk7CkBAIC0xMDI3LDI1ICsxMDI4LDI1IEBAIHZvaWQgRWRpdG9yOjph
cHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRp
dEFjdGlvbiBlCiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0
UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xp
ZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpKQogICAgICAgICBhcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIGlm
IChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpKQorICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdT
dHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQogICAgICAg
ICByZXR1cm4gZWRpdGluZ1N0eWxlLT5oYXNTdHlsZShwcm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0
ZU9mU3R5bGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmV0dXJuIEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiBTdHJpbmcgRWRpdG9yOjpz
ZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQog
ewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxl
OjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwK
KyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6
c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
CiAgICAgICAgIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAg
IGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMTM2LDcgKzExMzcsNyBAQCB2b2lkIEVkaXRvcjo6YXBw
bGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQmIGNvbW1hbmQpCiAgICAgICAgIG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoJmNvbW1hbmQp
OwogCiAgICAgICAgIGlmICghY29tbWFuZC5wcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpKQotICAgICAg
ICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKIAogICAgICAgICAv
LyBDb21tYW5kIHdpbGwgYmUgZXF1YWwgdG8gbGFzdCBlZGl0IGNvbW1hbmQgb25seSBpbiB0aGUg
Y2FzZSBvZiB0eXBpbmcKICAgICAgICAgaWYgKG1fbGFzdEVkaXRDb21tYW5kLmdldCgpID09ICZj
b21tYW5kKQpAQCAtMTIwMCwxMSArMTIwMSwxMSBAQCB2b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRp
dGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uJiBjb21wb3NpdGlvbikKICAgICByZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMobmV3U2VsZWN0aW9uKTsKIH0KIAotRWRpdG9yOjpFZGl0b3IoRnJhbWUm
IGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK0VkaXRvcjo6RWRpdG9yKERvY3VtZW50JiBk
b2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2tpbGxSaW5nKG1h
a2VVbmlxdWU8UEFMOjpLaWxsUmluZz4oKSkKLSAgICAsIG1fc3BlbGxDaGVja2VyKG1ha2VVbmlx
dWU8U3BlbGxDaGVja2VyPihmcmFtZSkpCi0gICAgLCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPihmcmFtZSkpCisgICAgLCBt
X3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hlY2tlcj4oZG9jdW1lbnQpKQorICAgICwg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VVbmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcj4oZG9jdW1lbnQpKQogICAgICwgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyKCp0aGlzLCAm
RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9O
VU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAsIG1fdGVsZXBo
b25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIoKnRoaXMsICZFZGl0b3I6OnNjYW5TZWxlY3Rp
b25Gb3JUZWxlcGhvbmVOdW1iZXJzKQpAQCAtMTIyMCw3ICsxMjIxLDcgQEAgdm9pZCBFZGl0b3I6
OmNsZWFyKCkKICAgICBpZiAobV9jb21wb3NpdGlvbk5vZGUpIHsKICAgICAgICAgbV9jb21wb3Np
dGlvbk5vZGUgPSBudWxscHRyOwogICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBjbGllbnQgPSB0
aGlzLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24o
Jm1fZnJhbWUpOworICAgICAgICAgICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbihtX2Rv
Y3VtZW50LmZyYW1lKCkpOwogICAgIH0KICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5l
cy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25IaWdobGlnaHRzLmNsZWFyKCk7CkBA
IC0xMjI5LDYgKzEyMzAsNyBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogICAgIG1fbWFyayA9IHsg
fTsKICAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0geyB9OwogICAgIG1fZWRp
dG9yVUlVcGRhdGVUaW1lci5zdG9wKCk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5zdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwogCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9O
VU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBtX3RlbGVwaG9u
ZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0b3AoKTsKQEAgLTEyMzgsMTIgKzEyNDAsMTIg
QEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUg
aW5wdXRUeXBlKQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRl
eHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVu
dCh0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlwZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjpp
bnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQogewot
ICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRl
eHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOworICAgIHJldHVybiBtX2RvY3VtZW50
LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRl
eHRFdmVudElucHV0Q29tcG9zaXRpb24pOwogfQogCiBib29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0
ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0
aXZlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAt
MTMwMywxMCArMTMwNSw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdU
ZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgICAgICAgICAv
LyB0aGVuIHRoaXMgY29kZSBzaG91bGQgY29uZGl0aW9uYWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlv
biBvbiB3aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgYml0CiAgICAgICAgICAg
ICAvLyBpcyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1c2VkIGZyYW1lLgogICAgICAgICAgICAgaWYg
KGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRSZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJ
bnNlcnRpb24oKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0g
ZWRpdGVkRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVh
bEN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBw
YWdlLT5yZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMzE5LDEwICsxMzE5LDEwIEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJl
YWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQoIlxuIiwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAg
Ym9vbCBhbGlnblRvRWRnZSA9IGlzRW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNh
cmV0KTsKICAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0
ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhkb2N1bWVudCgpLCBhdXRv
Y29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9u
SW5kaWNhdG9yIDogMCk7CkBAIC0xMzM5LDEwICsxMzM5LDEwIEBAIGJvb2wgRWRpdG9yOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAgICAg
ICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQo
IlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBWaXNpYmxl
UG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CiAgICAgYm9vbCBhbGlnblRvRWRnZSA9IGlz
RW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNhcmV0KTsKICAgICBib29sIGF1dG9j
b3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1
dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihkb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDog
MCk7CkBAIC0xNDA2LDcgKzE0MDYsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29y
ZHNBZmZlY3RlZEJ5RWRpdGluZyh0cnVlKTsKICAgICB9CiAKLSAgICBpZiAoZW5jbG9zaW5nVGV4
dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisg
ICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpKQogICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCksIGNh
blNtYXJ0Q29weU9yRGVsZXRlKCkgPyBQYXN0ZWJvYXJkOjpDYW5TbWFydFJlcGxhY2UgOiBQYXN0
ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2UpOwogICAgIGVsc2UgewogICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBudWxscHRyOwpAQCAtMTQyNSw3ICsxNDI1LDcgQEAg
dm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlv
bikKICAgICAgICAgICAgIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpj
cmVhdGVGb3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgLy8gRklYTUU6IERl
bGV0ZSBhZnRlciA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAg
ICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpz
ZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUsIEluY2x1ZGVJbWFnZUFs
dFRleHRGb3JEYXRhVHJhbnNmZXIpOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9y
Q29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9y
RGVsZXRlKCksICptX2RvY3VtZW50LmZyYW1lKCksIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRh
VHJhbnNmZXIpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CkBAIC0xNDM0LDEwICsxNDM0LDEw
IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBh
Y3Rpb24pCiAgICAgaWYgKGFjdGlvbiA9PSBDdXRBY3Rpb24pIHsKICAgICAgICAgU3RyaW5nIHRl
eHQ7CiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQot
ICAgICAgICAgICAgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICAg
ICAgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJh
bmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBkZWxldGVT
ZWxlY3Rpb25XaXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgRWRpdEFjdGlv
bjo6Q3V0KTsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVk
KCkpCi0gICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRl
eHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgcG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dCh0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTE0NTQsNyArMTQ1NCw3IEBAIHZvaWQg
RWRpdG9yOjpwYXN0ZShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogICAgICAgICByZXR1cm47CiAg
ICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIFJl
c291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1
bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkK
ICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6
QWxsb3dQbGFpblRleHQgfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0
aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7CkBAIC0xNDc5LDcgKzE0NzksNyBAQCB2b2lkIEVkaXRv
cjo6cGFzdGVBc1F1b3RhdGlvbigpCiAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcoZmFsc2UpOwogICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2
YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwog
ICAgIGF1dG8gcGFzdGVib2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgp
OwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZChw
YXN0ZWJvYXJkLmdldCgpLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCwgUGFzdGVPcHRp
b246OkFzUXVvdGF0aW9uIH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdp
dGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKTsKQEAgLTE2MTcsNyArMTYxNyw3IEBAIHZvaWQgRWRp
dG9yOjpyZW5kZXJMYXllckRpZFNjcm9sbChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAg
aWYgKG1faW1hZ2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVm
UHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2Rl
KCkpOworICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCkpOwogICAgIGlmICgh
c3RhcnRDb250YWluZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg1MSw4ICsxODUxLDggQEAg
dm9pZCBFZGl0b3I6OnRvZ2dsZVVuZGVybGluZSgpCiB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRp
bmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZUVuZCgpKSAmJiAKLSAgICAgICAgYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxl
Y3Rpb25TdGFydCgpID09IGRpcmVjdGlvbikKKyAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKQorICAgICAgICAmJiBiYXNlV3Jp
dGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAjZW5kaWYKICAgICAgICAgCkBAIC0xODgyLDcgKzE4ODIsNyBAQCBXcml0aW5nRGly
ZWN0aW9uIEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNv
bnN0CiB7CiAgICAgYXV0byByZXN1bHQgPSBXcml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9SaWdodDsK
IAotICAgIFBvc2l0aW9uIHBvcyA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwb3MgPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50
KCk7CiAgICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5MTcsNyArMTkxNyw3IEBAIHZvaWQgRWRp
dG9yOjpzZWxlY3RDb21wb3NpdGlvbigpCiAgICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4MT4KICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
bjsKICAgICBzZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb25maXJtQ29t
cG9zaXRpb24oKQpAQCAtMTk1MiwyOCArMTk1MiwyOCBAQCB2b2lkIEVkaXRvcjo6Y29uZmlybUNv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCkKIAogY2xhc3MgU2V0Q29tcG9zaXRpb25TY29w
ZSB7CiBwdWJsaWM6Ci0gICAgU2V0Q29tcG9zaXRpb25TY29wZShGcmFtZSYgZnJhbWUpCi0gICAg
ICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAgICAgLCBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3Io
ZnJhbWUpCisgICAgU2V0Q29tcG9zaXRpb25TY29wZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAg
ICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50KSkKKyAgICAgICAgLCBtX3R5cGluZ0dl
c3R1cmVJbmRpY2F0b3IoKmRvY3VtZW50LmZyYW1lKCkpCiAgICAgewotICAgICAgICBtX2ZyYW1l
LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOworICAgICAgICBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwogICAgIH0K
IAogICAgIH5TZXRDb21wb3NpdGlvblNjb3BlKCkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVk
aXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwotICAgICAgICBpZiAoYXV0
byogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIG1f
ZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOworICAg
ICAgICBpZiAoYXV0byogZWRpdG9yQ2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50
KCkpCiAgICAgICAgICAgICBlZGl0b3JDbGllbnQtPmRpZFVwZGF0ZUNvbXBvc2l0aW9uKCk7CiAg
ICAgfQogCi0gICAgUmVmPEZyYW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9k
b2N1bWVudDsKICAgICBVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvciBtX3R5cGluZ0dlc3R1cmVJ
bmRpY2F0b3I7CiB9OwogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobW9kZSA9PSBD
b25maXJtQ29tcG9zaXRpb24gfHwgbW9kZSA9PSBDYW5jZWxDb21wb3NpdGlvbik7Ci0gICAgU2V0
Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZnJhbWUpOworICAgIFNldENv
bXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2RvY3VtZW50KTsKIAogICAgIGlm
IChtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKQogICAgICAgICBBU1NFUlQodGV4dCA9PSBlbXB0
eVN0cmluZygpKTsKQEAgLTE5ODQsNyArMTk4NCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogICAgIG1f
Y3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3Np
dGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBBbHdheXMgZGVsZXRlIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9u
IGJlZm9yZSBpbnNlcnRpbmcgdGhlIGZpbmFsaXplZCBjb21wb3NpdGlvbiB0ZXh0IGlmIHdlJ3Jl
IGNvbmZpcm1pbmcgb3VyIGNvbXBvc2l0aW9uLgpAQCAtMjAwMCwxMyArMjAwMCwxMyBAQCB2b2lk
IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlv
bk1vZGUgbW9kZSkKIAogICAgIGlmIChtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKSB7CiAgICAg
ICAgIC8vIEFuIG9wZW4gdHlwaW5nIGNvbW1hbmQgdGhhdCBkaXNhZ3JlZXMgYWJvdXQgY3VycmVu
dCBzZWxlY3Rpb24gd291bGQgY2F1c2UgaXNzdWVzIHdpdGggdHlwaW5nIGxhdGVyIG9uLgotICAg
ICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygmbV9mcmFtZSk7CisgICAgICAgIFR5cGlu
Z0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQpOwogICAgIH0KIH0KIAogdm9pZCBFZGl0
b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBv
c2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uSGln
aGxpZ2h0PiYgaGlnaGxpZ2h0cywgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNl
bGVjdGlvbkVuZCkKIHsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2Nv
cGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3Bl
KG1fZG9jdW1lbnQpOwogCiAgICAgLy8gVXBkYXRlcyBzdHlsZXMgYmVmb3JlIHNldHRpbmcgc2Vs
ZWN0aW9uIGZvciBjb21wb3NpdGlvbiB0byBwcmV2ZW50CiAgICAgLy8gaW5zZXJ0aW5nIHRoZSBw
cmV2aW91cyBjb21wb3NpdGlvbiB0ZXh0IGludG8gdGV4dCBub2RlcyBvZGRseS4KQEAgLTIwMTUs
NyArMjAxNSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRl
eHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAKICAgICBzZWxlY3RDb21wb3Np
dGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFN0cmluZyBvcmlnaW5hbFRleHQgPSBzZWxlY3RlZFRleHQoKTsKQEAgLTIwMjMsMTAgKzIwMjMs
MTAgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICBpZiAoaXNTdGFydGluZ1RvUmVjb21w
b3NlRXhpc3RpbmdSYW5nZSkgewogICAgICAgICAvLyBXZSBwYXNzIFR5cGluZ0NvbW1hbmQ6OlRl
eHRDb21wb3NpdGlvbkZpbmFsIGhlcmUgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgcmVtb3Zpbmcg
Y29tcG9zaXRpb24gdGV4dCB0aGF0IGhhcyBiZWVuIGZpbmFsaXplZC4KICAgICAgICAgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGRvY3VtZW50KCksIDAsIFR5cGluZ0NvbW1hbmQ6OlRl
eHRDb21wb3NpdGlvbkZpbmFsKTsKLSAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5pc1Jh
bmdlKCkpIHsKICAgICAgICAgICAgIC8vIElmIGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWQsIHRoZW4g
d2UgbmVlZCB0byBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBlbmQgc28gdGhhdCB0aGUg
b3JpZ2luYWwgdGV4dCB3aWxsIG5vdCBiZSByZWNvbXBvc2VkLgotICAgICAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBjdXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJy
ZW50U2VsZWN0aW9uLmVuZCgpIH0pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oeyBjdXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJyZW50U2VsZWN0aW9u
LmVuZCgpIH0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDgyLDggKzIwODIsOCBAQCB2b2lk
IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
Q29tcG9zaXRpb25VbmRlcmxpbgogICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRv
Y3VtZW50KCksIHRleHQsIFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dCB8IFR5cGlu
Z0NvbW1hbmQ6OlByZXZlbnRTcGVsbENoZWNraW5nLCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9z
aXRpb25QZW5kaW5nKTsKIAogICAgICAgICAvLyBGaW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBj
b21wb3NpdGlvbiBub3cuCi0gICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmJhc2UoKS5kb3duc3RyZWFtKCk7Ci0gICAgICAgIFBvc2l0aW9uIGV4
dGVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZXh0ZW50KCk7CisgICAgICAg
IFBvc2l0aW9uIGJhc2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2Uo
KS5kb3duc3RyZWFtKCk7CisgICAgICAgIFBvc2l0aW9uIGV4dGVudCA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZXh0ZW50KCk7CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0g
YmFzZS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBiYXNlT2Zmc2V0ID0gYmFz
ZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICBOb2RlKiBleHRlbnROb2RlID0g
ZXh0ZW50LmRlcHJlY2F0ZWROb2RlKCk7CkBAIC0yMTA5LDcgKzIxMDksNyBAQCB2b2lkIEVkaXRv
cjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbgogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNl
T2Zmc2V0ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNp
Z25lZCBlbmQgPSBzdGQ6Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlv
bkVuZCksIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VO
b2RlLCBlbmQpOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6Tm8pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0y
MTIzLDcgKzIxMjMsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmICgh
Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKTsKIApAQCAtMjEzOSw3ICsyMTM5LDcgQEAgdm9pZCBFZGl0b3I6Omxl
YXJuU3BlbGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4g
dXNlICJsZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRv
bid0IGNhbGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJr
ZXJzIGFyb3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+
LgogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2Vs
ZWN0ZWRSYW5nZSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygq
c2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIApAQCAtMjE1MiwxNCAr
MjE1MiwxNCBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAKIHZvaWQgRWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKIHsKLSAg
ICBSZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7Ci0KKyAgICBSZWY8RG9jdW1lbnQ+IHBy
b3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOworICAgIAogICAgIC8vIFRoZSBiYXNpYyBhcHBy
b2FjaCBpcyB0byBzZWFyY2ggaW4gdHdvIHBoYXNlcyAtIGZyb20gdGhlIHNlbGVjdGlvbiBlbmQg
dG8gdGhlIGVuZCBvZiB0aGUgZG9jLCBhbmQKICAgICAvLyB0aGVuIHdlIHdyYXAgYW5kIHNlYXJj
aCBmcm9tIHRoZSBkb2Mgc3RhcnQgdG8gKGFwcHJveGltYXRlbHkpIHdoZXJlIHdlIHN0YXJ0ZWQu
CiAgICAgCiAgICAgLy8gU3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBzZWFyY2gg
dG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5nIGF0IHRoZSBzZWxlY3Rpb24gZW5kIG1ha2Vz
CiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5kcyB3b3JrLgotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogICAgIFJlZjxSYW5nZT4gc3BlbGxpbmdTZWFyY2hSYW5nZSA9IHJhbmdl
T2ZDb250ZW50cyhkb2N1bWVudCgpKTsKIAogICAgIGJvb2wgc3RhcnRlZFdpdGhTZWxlY3Rpb24g
PSBmYWxzZTsKQEAgLTIzMDgsOCArMjMwOCw4IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0
TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgCiAgICAgICAg
IC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRoIGRvdWJsZWQgcHVuY3R1
YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAogICAgICAgICBhdXRvIGJhZEdyYW1tYXJS
YW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCB7IGdyYW1t
YXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLnJhbmdlLmxvY2F0aW9uLCBncmFtbWFyRGV0
YWlsLnJhbmdlLmxlbmd0aCB9KTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklO
SVRZKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7Cisg
ICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAKICAgICAgICAg
Y2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhy
YXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRh
aWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIzMjAsOCArMjMyMCw4IEBAIHZvaWQgRWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAg
ICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgcmVkIHNxdWlnZ2xlIGxhdGVyLgogICAgICAg
ICAKICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3BlbGxpbmdPZmZzZXQsIG1pc3NwZWxsZWRXb3Jk
Lmxlbmd0aCgpIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKLSAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtaXNzcGVsbGluZ1Jh
bmdlLCBET1dOU1RSRUFNKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFs
U2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CiAgICAgICAgIGRvY3VtZW50KCku
bWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpOwpAQCAtMjMzNSw3ICsyMzM1LDcgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFdv
cmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QKICAgICBpZiAoIWlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgfHwgIWNsaWNrZWROb2RlIHx8ICFpc1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yKGNsaWNrZWROb2RlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRF
ZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCkBAIC0yMzg5LDcgKzIzODksNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkU2VsZWN0
aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwo
KQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAqcmFuZ2UpLmlzVW5ncmFtbWF0
aWNhbCgpOwpAQCAtMjQwNCw3ICsyNDA0LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVz
c2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKSBjb25zdAogCiAgICAgVmVj
dG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVj
a2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmluZygpLCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vl
c3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2VzOwogfQogCkBAIC0yNDEyLDcgKzI0
MTIsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvbwogewogICAgIGlmICh1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKLSAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpICYm
IGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlv
bigpKSB7CiAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBWaXNp
YmxlU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwogICAgICAgICAgICAgd29yZFNlbGVjdGlv
bi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CkBAIC0yNDcyLDcgKzI0
NzIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1Jl
cGxhY2VtZW50KQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBS
ZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKHBs
YXRmb3JtRHJpdmVuVGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1
OTQsMTkgKzI1OTQsMTkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAvLyBJZiBhdXRv
Y29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCByZXBsYWNlIHRoZSBtaXNzcGVsbGVkIHdvcmQg
YnkgdGhpcyB3b3JkLgogICAgIGlmICghYXV0b2NvcnJlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKm1pc3NwZWxsaW5nUmFuZ2Us
IERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgaWYgKG5ld1Nl
bGVjdGlvbiAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAgICAg
ICAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5l
d1NlbGVjdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAgICAgICAgICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoIW1fZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRv
Y29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigpLnNob3VsZEluc2Vy
dFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZnJh
bWUuZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcs
IFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5z
ZXJ0KTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRl
eHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxh
Y2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBjaGFy
ZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1v
dmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKLSAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBE
aXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCkpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFy
aXR5KTsKICAgICB9CiAKICAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQpAQCAt
MjY3OCw3ICsyNjc4LDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
Tm9kZSogbm9kZSkgY29uc3QKIAogYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJ
bkZvY3VzZWROb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxl
ZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5v
ZGUoKSk7CisgICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogfQogCiB2
b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKQEAgLTI3MjYsNyAr
MjcyNiw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgaWYgKHBhcmFncmFwaFRvQ2hl
Y2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGFzeW5jaHJvbm91cyA9
IG1fZnJhbWUuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpICYm
ICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsOworICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9k
b2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYg
IXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CiAKICAgICAvLyBJbiBhc3luY2hyb25vdXMgbW9k
ZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgtd2lkZSBzZW50ZW5jZS4KICAgICBj
b25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhl
ZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlvbnMpOwpAQCAtMjc0MSw3ICsyNzQxLDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICB9CiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiByZXN1bHRzOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigp
LCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaCgq
dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVkT3B0aW9ucywg
cmVzdWx0cywgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgbWFya0Fu
ZFJlcGxhY2VGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpLCByZXN1bHRzKTsKIH0KIApAQCAt
Mjc4Nyw3ICsyNzg3LDcgQEAgc3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2
aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1BhcmEKIAogdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1bWVu
dChtX2RvY3VtZW50KTsKIAogICAgIGF1dG8gdGV4dENoZWNraW5nT3B0aW9ucyA9IHJlcXVlc3Qu
ZGF0YSgpLmNoZWNraW5nVHlwZXMoKTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdy
YXBoKHJlcXVlc3QuY2hlY2tpbmdSYW5nZSgpLCByZXF1ZXN0LmF1dG9tYXRpY1JlcGxhY2VtZW50
UmFuZ2UoKSwgJnJlcXVlc3QucGFyYWdyYXBoUmFuZ2UoKSk7CkBAIC0yODExLDkgKzI4MTEsOSBA
QCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgIGJvb2wgYWRqdXN0U2VsZWN0aW9uRm9yUGFy
YWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZFBlcmZvcm1SZXBsYWNl
bWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwgc2hvdWxkQ2hlY2tGb3JDb3JyZWN0aW9uKSB7
Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgeworICAgICAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQg
dG8gc2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYg
bmVlZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9z
aXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgICAg
ICAgICAgc2VsZWN0aW9uT2Zmc2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24p
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVy
Q2hhbmdlID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25PZmZzZXQgPiAwICYmIChz
ZWxlY3Rpb25PZmZzZXQgPiBwYXJhZ3JhcGgudGV4dCgpLmxlbmd0aCgpIHx8IHBhcmFncmFwaC50
ZXh0KClbc2VsZWN0aW9uT2Zmc2V0IC0gMV0gPT0gbmV3bGluZUNoYXJhY3RlcikpCkBAIC0yODk1
LDEzICsyODk1LDEzIEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVs
bENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9SZXBsYWNlKHJhbmdlVG9S
ZXBsYWNlLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub1JlcGxhY2Ug
IT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIGlm
ICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9S
ZXBsYWNlKSkKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNl
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGU6OkxpbmspIHsKLSAgICAg
ICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1Jl
cGxhY2UpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKQEAgLTI5MTAsNyAr
MjkxMCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNr
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAgICAgY29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKHBhcmFncmFwaCwg
cmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50LCB7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5n
dGggfSk7CiAKICAgICAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChFbGVtZW50KiByb290ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiByb290ID0g
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihyb290LCBB
WE9iamVjdENhY2hlOjpBWEF1dG9jb3JyZWN0aW9uT2NjdXJlZCk7CiAgICAgICAgICAgICAgICAg
fQogCkBAIC0yOTQwLDEzICsyOTQwLDEzIEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAg
ICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7CiAgICAgICAgIGlm
IChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgJiYgc2VsZWN0aW9uT2Zmc2V0IDw9IGV4dGVu
ZGVkUGFyYWdyYXBoLnJhbmdlTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9u
UmFuZ2UgPSBleHRlbmRlZFBhcmFncmFwaC5zdWJyYW5nZSh7IDAsIHNlbGVjdGlvbk9mZnNldCB9
KTsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKHNlbGVjdGlvblJhbmdl
LT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkubW92ZVRvKHNlbGVjdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFN
KTsKICAgICAgICAgICAgIGlmIChhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVz
KQotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWls
cyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxiYWNrIGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBiZXlv
bmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
bW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICAg
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9k
aWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hh
cmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzAyMyw4ICszMDIz
LDggQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5n
KGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAvLyBPZiBjb3Vyc2UsIGlmIGN1cnJl
bnQgc2VsZWN0aW9uIGlzIGEgcmFuZ2UsIHdlIHBvdGVudGlhbGx5IHdpbGwgZWRpdCB0d28gd29y
ZHMgdGhhdCBmYWxsIG9uIHRoZSBib3VuZGFyaWVzIG9mCiAgICAgLy8gc2VsZWN0aW9uLCBhbmQg
cmVtb3ZlIHdvcmRzIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBib3VuZGFyaWVzLgogICAgIC8vCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU2VsZWN0aW9u
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgIGlmIChzdGFydE9mU2VsZWN0
aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRmlyc3Qgd29yZCBpcyB0aGUg
d29yZCB0aGF0IGVuZHMgYWZ0ZXIgb3Igb24gdGhlIHN0YXJ0IG9mIHNlbGVjdGlvbi4KQEAgLTMw
OTYsMTEgKzMwOTYsNyBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3Np
dGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgogCiBSZWZQdHI8UmFuZ2U+
IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0UG9pbnQod2luZG93UG9p
bnQpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIFJlZlB0cjxGcmFtZT4g
ZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCkBA
IC0zMTE3LDcgKzMxMTMsNyBAQCB2b2lkIEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0
aW5nT3BlcmF0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25tZQogICAgICAgICByZXR1
cm47CiAKICAgICBTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZl
YWxNb2RlOjpSZXZlYWw7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOworICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKHJldmVhbE1vZGUsIGFsaWdubWVudCwgcmV2
ZWFsRXh0ZW50T3B0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWxFeGlzdGluZ1Nl
bGVjdGlvbikKQEAgLTMxMjksNyArMzEyNSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKGJvb2wgaWdub3JlLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBGSVhNRTogU2hvdWxkIHN1cHByZXNzIHNl
bGVjdGlvbiBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBkdXJpbmcgYSBjb21wb3NpdGlvbiBjaGFuZ2Ug
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzM4ODMwPiAKICAgICBpZiAoIWlnbm9yZSkKLSAgICAgICAg
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LCB7IH0pOworICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CiAjZW5kaWYKICAgICBpZiAoIWlnbm9yZSAmJiBz
aG91bGRSZXZlYWxFeGlzdGluZ1NlbGVjdGlvbiA9PSBSZXZlYWxTZWxlY3Rpb246OlllcykKICAg
ICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmV2ZWFsRXh0ZW50KTsKQEAgLTMxNTIsNyArMzE0OCw3
IEBAIGJvb2wgRWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbih1bnNpZ25lZCYgc2VsZWN0
aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3RpCiB7CiAgICAgaWYgKCFtX2NvbXBvc2l0aW9uTm9k
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwogICAgIGlmIChz
dGFydC5kZXByZWNhdGVkTm9kZSgpICE9IG1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0zMTc1LDcgKzMxNzEsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkK
ICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMzIwMCwxMCArMzE5NiwxMCBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICBTdHJp
bmcgdHJhbnNwb3NlZCA9IHRleHQucmlnaHQoMSkgKyB0ZXh0LmxlZnQoMSk7CiAKICAgICAvLyBT
ZWxlY3QgdGhlIHR3byBjaGFyYWN0ZXJzLgotICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgaWYgKG5ld1Nl
bGVjdGlvbiAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAgICAg
IGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICB9CiAKICAgICAvLyBJbnNlcnQg
dGhlIHRyYW5zcG9zZWQgY2hhcmFjdGVycy4KQEAgLTMyNTUsNyArMzI1MSw3IEBAIHZvaWQgRWRp
dG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCkKIAogdm9pZCBFZGl0b3I6OmNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIE9wdGlvblNldDxGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9uPiBvcHRp
b25zKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9j
dW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgLy8gSWYgdGhlIG5l
dyBzZWxlY3Rpb24gaXMgb3JwaGFuZWQsIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBzZWxlY3Rpb24u
CiAgICAgaWYgKG5ld1NlbGVjdGlvbi5zdGFydCgpLmlzT3JwaGFuKCkgfHwgbmV3U2VsZWN0aW9u
LmVuZCgpLmlzT3JwaGFuKCkpCkBAIC0zMjY1LDkgKzMyNjEsOSBAQCB2b2lkIEVkaXRvcjo6Y2hh
bmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVj
dGlvbiwgTwogICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgd29yayB0aGF0IGl0IG11c3QgZG8gaW4g
dGhpcyBzaXR1YXRpb24uCiAgICAgLy8gVGhlIG9sZCBzZWxlY3Rpb24gY2FuIGJlIGludmFsaWQg
aGVyZSBhbmQgY2FsbGluZyBzaG91bGRDaGFuZ2VTZWxlY3Rpb24gY2FuIHByb2R1Y2Ugc29tZSBz
dHJhbmdlIGNhbGxzLgogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTcyOTMxNT4gU29tZSBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlIGNvbnRhaW4gUmFuZ2VzIGZvciBzZWxlY3Rpb25z
IHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZAotICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdl
RE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKLSAgICAg
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25z
KTsKKyAgICBib29sIHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uID0gbmV3U2VsZWN0
aW9uID09IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVj
dGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CiAKICAgICAvLyBT
b21lIGVkaXRpbmcgb3BlcmF0aW9ucyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB2aXN1YWxseSB3aXRo
b3V0IGFmZmVjdGluZyBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBET00uCiAgICAgLy8gRm9yIGV4
YW1wbGUgd2hlbiB5b3UgcHJlc3MgcmV0dXJuIGluIHRoZSBmb2xsb3dpbmcgKHRoZSBjYXJldCBp
cyBtYXJrZWQgYnkgXik6CkBAIC0zMjgyLDEzICszMjc4LDEzIEBAIHZvaWQgRWRpdG9yOjpjaGFu
Z2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0
aW9uLCBPCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiAmJiBjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOworICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiBTdHJpbmcgRWRpdG9y
OjpzZWxlY3RlZFRleHQoKSBjb25zdAogewogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2
aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yOwotICAgIGlmIChtX2ZyYW1lLnNldHRp
bmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFi
bGVkKCkpCiAgICAgICAgIGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVl
OwogICAgIHJldHVybiBzZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzI5Niw3ICszMjky
LDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9y
QmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JFbWl0c0ltYWdlQWx0VGV4dDsKLSAgICBp
ZiAobV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFi
bGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFk
b3dCb3VuZGFyaWVzRW5hYmxlZCgpKQogICAgICAgICBiZWhhdmlvciB8PSBUZXh0SXRlcmF0b3JU
cmF2ZXJzZXNGbGF0VHJlZTsKICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0KGJlaGF2aW9yKTsKIH0K
QEAgLTMzMDQsNyArMzMwMCw3IEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dEZvckRhdGFU
cmFuc2ZlcigpIGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9y
QmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgLy8gV2UgcmVtb3ZlICdcMCcgY2hhcmFj
dGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCB2aXNpYmx5IHJlbmRlcmVkIHRvIHRoZSB1c2VyLgot
ICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICBhdXRvIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgYXV0byBlbmQgPSBzZWxl
Y3Rpb24uZW5kKCk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkg
fHwgZW5kLmlzTnVsbCgpIHx8IGVuZC5pc09ycGhhbigpKQpAQCAtMzMxNCw3ICszMzEwLDcgQEAg
U3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9y
KSBjb25zdAogCiBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRU
ZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAobV9mcmFtZS5z
ZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9u
ZSgpIHx8ICFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmPERvY3VtZW50PiBkb2N1
bWVudCB7IHRoaXMtPmRvY3VtZW50KCkgfTsKQEAgLTMzMjIsNyArMzMxOCw3IEBAIFJlZlB0cjxU
ZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25z
dCBJbnRTaXplJiBzaXplCiAgICAgLy8gRklYTUU6IFdyaXRlIGluIHRlcm1zIG9mIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoRnJhZ21lbnQoKS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4NzQ0Pi4KICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUo
ZmFsc2UpOwogCi0gICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCkBAIC0zMzMwLDcgKzMzMjYsNyBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4g
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAgIHJh
bmdlLT5pbnNlcnROb2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7CiAKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbiB7IHBvc2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRlci5wdHIo
KSksIHBvc2l0aW9uQWZ0ZXJOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSB9OwotICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRl
ZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKKyAgICBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiAKICAgICByZXR1cm4g
cGxhY2Vob2xkZXI7CiB9CkBAIC0zMzUwLDggKzMzNDYsOCBAQCB2b2lkIEVkaXRvcjo6cmVtb3Zl
VGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQmIHBsYWNlaG9sZGVyKQogICAg
IHBsYWNlaG9sZGVyLnJlbW92ZSgpOwogCiAgICAgLy8gVG8gbWF0Y2ggdGhlIExlZ2FjeSBXZWJL
aXQgaW1wbGVtZW50YXRpb24sIHNldCB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgdG8gYmUgYmVm
b3JlIHdoZXJlIHRoZSBwbGFjZWhvbGRlciB1c2UgdG8gYmUuCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50
KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlvbkJlZm9yZVBs
YWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVs
dFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkRWxl
bWVudCgpID09IHNhdmVkUm9vdEVkaXRhYmxlRWxlbWVudCkKKyAgICAgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbiB7IHNhdmVkUG9zaXRpb25C
ZWZvcmVQbGFjZWhvbGRlciwgU0VMX0RFRkFVTFRfQUZGSU5JVFkgfSwgRnJhbWVTZWxlY3Rpb246
OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIH0KIAogc3RhdGlj
IGlubGluZSB2b2lkIGNvbGxhcHNlQ2FyZXRXaWR0aChJbnRSZWN0JiByZWN0KQpAQCAtMzQwMyw3
ICszMzk5LDcgQEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5n
ZSkgY29uc3QKIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3QKIHsK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbkNoYW5n
ZUNhbGxiYWNrc0Rpc2FibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0
aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5k
aWYKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwpA
QCAtMzQxMiwxNyArMzQwOCwxNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVgogdm9pZCBFZGl0
b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0
aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYgKHN0eWxlLmlzRW1wdHkoKSkgewotICAgICAg
ICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgdHlwaW5nIHN0eWxlLgogICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlOwotICAgIGlmIChhdXRvIGV4aXN0aW5nVHlw
aW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKGF1
dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5
bGUoKSkKICAgICAgICAgdHlwaW5nU3R5bGUgPSBleGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7
CiAgICAgZWxzZQogICAgICAgICB0eXBpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7
Ci0gICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsK
KyAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBpbmdTdHlsZUF0KHN0eWxlLCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkp
OwogCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxlcywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20g
dGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0g
dHlwaW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKQEAgLTM0MzAs
NyArMzQyNiw3IEBAIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGlu
Z1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0CiAgICAgICAgIEFwcGx5U3R5bGVD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlv
biktPmFwcGx5KCk7CiAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlw
aW5nIHN0eWxlLgotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92
ZSh0eXBpbmdTdHlsZSkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5
bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNl
dFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcywgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uKQpAQCAtMzQ4OSwxOSArMzQ4NSwxOSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0
aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3QKIAogYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmco
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9j
dW1lbnQobV9kb2N1bWVudCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmly
c3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKIAogICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFu
Z2UsIERPV05TVFJFQU0pKTsKIAogICAgIGlmICghKG9wdGlvbnMuY29udGFpbnMoRG9Ob3RSZXZl
YWxTZWxlY3Rpb24pKSkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rp
b24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU5OCw3ICszNTk0LDcgQEAgdW5zaWduZWQgRWRp
dG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFu
Z2UsIEZpbmRPcHQKICAgICBpZiAocmFuZ2UpIHsKICAgICAgICAgaWYgKCZyYW5nZS0+b3duZXJE
b2N1bWVudCgpID09ICZkb2N1bWVudCgpKQogICAgICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5n
ZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJhbmdlKG1fZnJhbWUsICpyYW5nZSkpCisg
ICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZSgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFu
Z2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmICghc2VhcmNoUmFuZ2Up
CkBAIC0zNjY4LDcgKzM2NjQsNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogI2VuZGlmCiAK
ICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKIAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHNob3VsZERldGVj
dFRlbGVwaG9uZU51bWJlcnMoKSkKQEAgLTM2OTEsOCArMzY4Nyw2IEBAIHZvaWQgRWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25T
ZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkK
IHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAm
JiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsKIH0KIApAQCAtMzcwNSw5
ICszNjk5LDkgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJz
KCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBtYXJrZWRSYW5nZXM7CiAKLSAgICBGcmFt
ZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOworICAgIEZy
YW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAg
ICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBh
Z2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50
LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5z
ZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM3MjksNyArMzcyMyw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRyPFJhbmdlPiBleHRlbmRlZFJhbmdlID0gZXh0
ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRS
YW5nZSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAg
ICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+
c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2Vz
Q2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzc0Miw3ICszNzM2LDcgQEAg
dm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAg
ICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICB9
CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgIGlmIChhdXRvKiBw
YWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKIH0KIApA
QCAtMzgwMSw5ICszNzk1LDkgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJl
ZCgpCiAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7CiAgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRXb3JkczsKICAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwotICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICAgICAgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJl
dEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CisgICAgICAgIGJvb2wg
Y2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxl
ZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0Nv
bnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKKyAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgICAgIG5ld0Fk
amFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0
V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5k
YXJ5KSk7CiAjZWxzZQpAQCAtMzg1Niw3ICszODUwLDcgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJ
VXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmln
Z2VyZWRCeURpY3RhdGlvbikKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5y
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAKLSAgICBtX29sZFNlbGVj
dGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAg
bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygpOwpAQCAtMzg4Myw3ICszODc3LDcgQEAg
c3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZGUpCiAKIGJvb2wgRWRpdG9y
OjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBt
YXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKIHsKLSAgICBOb2RlKiBub2Rl
ID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJs
ZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5v
ZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM5NTAs
MTAgKzM5NDQsMTAgQEAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2
ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3QKICAgICByZXR1cm4gY2hlY2tp
bmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxl
Y3Rpb24oRnJhbWUmIGZyYW1lKQorc3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VG
b3JTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJl
dHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlv
bi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VG
cm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNl
VGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCkBAIC0zOTY3LDggKzM5NjEs
OCBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbiht
X2ZyYW1lKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JD
dXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZG9jdW1l
bnQpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdv
dWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFu
Z2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAKQEAgLTM5NzcsNyArMzk3MSw3IEBAIFN0cmlu
ZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogICAgIAogUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAog
ewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gbWFrZVJh
bmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogfQogCkBAIC00MDQ0LDcgKzQwMzgsNyBA
QCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgp
IGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKICAgICBOb2RlKiBub2Rl
VG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25T
dGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9y
U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOwogICAgIGlm
ICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkKICAgICAgICAgICAgIG5vZGVU
b1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDg1LDcgKzQwNzksNyBAQCBGb250QXR0cmlidXRlcyBF
ZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlz
dHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExp
c3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0QWxpZ24oKSkgewog
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBAIC00MTExLDcgKzQxMDUsNyBAQCBGb250
QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8gdHlwaW5nU3R5bGUgPSBtYWtlUmVm
UHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSk7CisgICAgYXV0byB0eXBpbmdT
dHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsK
ICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKICAgICAgICAg
YXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwogICAgICAgICBpZiAodmFs
dWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTQxOTksMTIgKzQxOTMsOCBAQCB2b2lk
IEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygpCiAgICAgZm9yIChhdXRv
JiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJZGVudGlmaWVycykKICAgICAgICAgY2xp
ZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyKTsKIAot
ICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1l
bnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IGluc2Vy
dGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQg
PSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikpCisgICAgICAg
IGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50LmF0dGFjaG1lbnRGb3JJZGVudGlmaWVy
KGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50KCktPmRpZEluc2VydEF0dGFjaG1lbnRX
aXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2htZW50LT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciksIGF0dGFjaG1lbnQtPmhhc0VuY2xvc2lu
Z0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTQyMjcsNyArNDIxNyw3IEBAIHZvaWQgRWRpdG9yOjppbnNlcnRBdHRhY2htZW50KGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8dWludDY0X3Q+JiYgZmlsCiAKIHZvaWQg
RWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0
ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAg
ICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0cnVlOwogCkBAIC00MjQ2LDcgKzQy
MzYsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5n
UmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29sIEVkaXRvcjo6dW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEVk
aXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2Vy
JiBtYXJrZXIpCkBAIC00MjYyLDEzICs0MjUyLDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcK
IHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpCiB7CiAgICAgbV9vdmVy
d3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1vZGVFbmFibGVkOwotICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3ZlcndyaXRlTW9kZUVuYWJs
ZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuICptX2ZyYW1lLmRvY3VtZW50KCk7
CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9v
dmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3Rl
ZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQzMjEsOSArNDMwNSw5IEBAIGNvbnN0IEZvbnQqIEVkaXRv
cjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogewogICAg
IGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24o
KS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgp
KSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
bV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQog
CiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUp
IHsKQEAgLTQzMzUsMTEgKzQzMTksMTEgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2Vs
ZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBmb250
OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2Vs
ZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRT
ZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQzNzEsNyArNDM1NSw3IEBAIFJlZlB0cjxIVE1MSW1h
Z2VFbGVtZW50PiBFZGl0b3I6Omluc2VydEVkaXRhYmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6
Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2Vs
ZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4g
c2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGFkOWVkYTI2MThjOWE4ODBiZWNiYjFjZTRk
NjhiYjU5Yjg5YzIwYzAuLmZmYTc3ZDBlNTQ4ZTdjZTc3ZGNkNDdiYjBlNjFjMTBhODQ3N2YwMzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVk
aXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUg
IkZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4
dENoZWNraW5nLmgiCkBAIC0xMTksMTMgKzEyMCwxMyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbiA6IHVpbnQ4X3QgewogCiBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2UgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5n
ZShGcmFtZSYsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNl
bGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRp
b24+ID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpOwogCi0gICAgUmVmPEZyYW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4g
bV9kb2N1bWVudDsKICAgICBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29w
dGlvbnM7CiAgICAgYm9vbCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQpAQCAtMTM3LDcgKzEzOCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSB7CiBwdWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9u
Q2hhbmdlRm9yU2NvcGUoRnJhbWUmIGZyYW1lKQotICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdl
KGZyYW1lLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgOiBtX3NlbGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1l
bnQoKSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVj
dGlvbkNoYW5nZXMpCiAgICAgewogICAgIH0KIApAQCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6
CiBjbGFzcyBFZGl0b3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIGV4cGxpY2l0IEVkaXRvcihGcmFtZSYpOworICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVu
dCYpOwogICAgIH5FZGl0b3IoKTsKIAogICAgIGVudW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50
OF90IHsKQEAgLTI3MSw3ICsyNzIsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAg
ICAgcHVibGljOgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENv
bW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
RnJhbWUmKTsKKyAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBEb2N1bWVudCYpOwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciA9IFN0cmluZygpLCBFdmVudCog
dHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikgY29uc3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsy
ODksNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJu
YWxDb21tYW5kKiBtX2NvbW1hbmQgeyBudWxscHRyIH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRT
b3VyY2UgbV9zb3VyY2U7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAg
ICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQg
Q29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNv
dXJjZSBpcyBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcuCkBAIC01NjcsNyArNTY5LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRl
eHRQbGFjZWhvbGRlckVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdDsKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Rv
Y3VtZW50OyB9CiAKICAgICBib29sIGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAg
Ym9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTgs
NyArNjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlm
aWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAK
LSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQ
dHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1fbGFzdEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxU
ZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA5ZGJhNzA2OWFk
MTQyOGNkYzNiOTBmYjZjMDQ3MWZhYTEwZmI4YzQ0Li5iZDUxODBlYjQwMGVhNzkyMTUxYjZmNzk4
YjYwZWNiOGNmZmRhZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAKQEAgLTExMDksNiArMTEwOSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChG
cmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRp
YyBib29sIGV4ZWN1dGVTd2FwV2l0aE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90
ZWN0aW9uKGZyYW1lLmRvY3VtZW50KCkpOwogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1l
KTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFy
aygpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMTgzNiwxMiArMTgzNywxMiBAQCBzdGF0aWMgY29uc3Qg
RWRpdG9ySW50ZXJuYWxDb21tYW5kKiBpbnRlcm5hbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSkKIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lKQogewotICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21t
YW5kTmFtZSksIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0
dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51
T3JLZXlCaW5kaW5nLCBtX2RvY3VtZW50KTsKIH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6
Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNv
dXJjZSkKIHsKLSAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUp
LCBzb3VyY2UsIG1fZnJhbWUpOworICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChj
b21tYW5kTmFtZSksIHNvdXJjZSwgbV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21t
YW5kSXNTdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lKQpAQCAtMTg1MywxMiArMTg1NCwxMyBAQCBFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQog
ewogfQogCi1FZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21t
YW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQor
RWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29t
bWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAg
ICA6IG1fY29tbWFuZChjb21tYW5kKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9m
cmFtZShjb21tYW5kID8gJmZyYW1lIDogbnVsbHB0cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFu
ZCA/ICZkb2N1bWVudCA6IG51bGxwdHIpCisgICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVu
dC5mcmFtZSgpIDogbnVsbHB0cikKIHsKLSAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7
CisgICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6
Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJp
bmdFdmVudCkgY29uc3QKQEAgLTE4NjgsOSArMTg3MCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5k
OjpleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50
KSBjCiAgICAgICAgIGlmICghYWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCk7Ci0gICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICE9IGRvY3VtZW50KQorCisgICAg
bV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
aWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkgIT0gbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIG1fY29tbWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2
ZW50LCBtX3NvdXJjZSwgcGFyYW1ldGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1MDcyZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1
OS4uYmJjZmNjZTdhZWNiZmRmNzBjM2ZmYjhmNmMyZmY4YzJiZDIwNGMxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5LDE0IEBAIElu
dFJlY3QgRHJhZ0NhcmV0Q29udHJvbGxlcjo6ZWRpdGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1
bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCku
YmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICBy
ZXR1cm4gIWRvY3VtZW50IHx8IGRvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENv
bnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgpOwogfQogCi1GcmFtZVNlbGVjdGlvbjo6RnJh
bWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK0ZyYW1lU2Vs
ZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFtZShkb2N1bWVudD8gZG9jdW1lbnQtPmZyYW1lKCkg
OiBudWxscHRyKQogICAgICwgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oTm9YUG9z
Rm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCkBAIC0xNTYsNyArMTU3LDcg
QEAgRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1f
YWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQogICAgICwgbV9jYXJldFBhaW50KHRydWUpCiAgICAg
LCBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZChmYWxzZSkKLSAgICAsIG1fZm9jdXNlZChmcmFt
ZSAmJiBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRGcmFtZSgpID09IGZyYW1lKQorICAgICwgbV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9mcmFt
ZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZy
YW1lKCkgPT0gbV9mcmFtZSkKICAgICAsIG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKGZhbHNlKQog
ICAgICwgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlKGZhbHNlKQogICAgICwgbV9hbHdheXNBbGln
bkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVjdGlvbihmYWxzZSkKQEAgLTE2NSwxNCAr
MTY2LDI0IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAg
ICAgLCBtX2NhcmV0QmxpbmtzKHRydWUpCiAjZW5kaWYKIHsKLSAgICBpZiAoc2hvdWxkQWx3YXlz
VXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1Vz
ZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpKQogICAgICAgICBtX3NlbGVjdGlvbi5z
ZXRJc0RpcmVjdGlvbmFsKHRydWUpOworICAgIAorICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9
IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOworICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAg
ICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworI2lmIFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8v
IENhcmV0IGJsaW5raW5nIChibGlua3MgfCBkb2VzIG5vdCBibGluaykKKyAgICBzZXRDYXJldFZp
c2libGUoYWN0aXZlQW5kRm9jdXNlZCk7CisjZWxzZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShh
Y3RpdmVBbmRGb2N1c2VkID8gVmlzaWJsZSA6IEhpZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVu
dCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgp
IGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJv
b3QgOiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4g
c2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Ny
b2xsIGFsaWduKQpAQCAtMjg0LDcgKzI5NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBwYXNzCiAg
ICAgRW5kUG9pbnRzQWRqdXN0bWVudE1vZGUgZW5kcG9pbnRzQWRqdXN0bWVudE1vZGUpCiB7CiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBwYXNzZWROZXdTZWxlY3Rpb247Ci0g
ICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rp
b24obV9mcmFtZSkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsKKyAgICBib29sIGlz
RGlyZWN0aW9uYWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3Vt
ZW50KSB8fCBuZXdTZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOwogCiAgICAgVmlzaWJsZVBvc2l0
aW9uIGJhc2UgPSBtX29yaWdpbmFsQmFzZS5pc05vdE51bGwoKSA/IG1fb3JpZ2luYWxCYXNlIDog
bmV3U2VsZWN0aW9uLnZpc2libGVCYXNlKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld0Jhc2Ug
PSBiYXNlOwpAQCAtMzIyLDcgKzMzMyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
Ym9vbCBzaG91bGRDbGVhclR5cGluZ1N0eWxlID0gb3B0aW9ucy5jb250YWlucyhDbGVhclR5cGlu
Z1N0eWxlKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0
aW9uUG9zc2libHlXaXRob3V0RGlyZWN0aW9uOwotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJl
Y3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0Rp
cmVjdGlvbmFsKHRydWUpOwogCiAgICAgaWYgKCFtX2ZyYW1lKSB7CkBAIC0zMzQsNyArMzQ1LDcg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFy
YW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9
PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3Vt
ZW50KiBuZXdTZWxlY3Rpb25Eb2N1bWVudCA9IG5ld1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQo
KSkgewogICAgICAgICBpZiAoUmVmUHRyPEZyYW1lPiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1Nl
bGVjdGlvbkRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9u
RnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1
bWVudCgpKSB7CisgICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAm
JiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2RvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAg
bmV3U2VsZWN0aW9uRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24s
IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7
CiAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGR1cmluZyB0aGUgYWJvdmUg
c2V0IHNlbGVjdGlvbiwgdGhpcyBGcmFtZVNlbGVjdGlvbiBoYXMgYmVlbiBtb2RpZmllZCBieQog
ICAgICAgICAgICAgICAgIC8vIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVj
dGVkLCBidXQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZCBzaW5jZQpAQCAt
MzQ5LDcgKzM2MCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRV
cGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgbV9ncmFudWxhcml0
eSA9IGdyYW51bGFyaXR5OwogCiAgICAgaWYgKGNsb3NlVHlwaW5nKQotICAgICAgICBUeXBpbmdD
b21tYW5kOjpjbG9zZVR5cGluZyhtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xv
c2VUeXBpbmcoKm1fZG9jdW1lbnQpOwogCiAgICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUp
CiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsKQEAgLTM1Nyw3ICszNjgsNyBAQCBib29sIEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0
IFZpc2libGVTZWxlY3RpbwogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9z
ZWxlY3Rpb247CiAgICAgYm9vbCBkaWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0g
bmV3U2VsZWN0aW9uOwogICAgIGlmIChkaWRNdXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJh
bWUtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC0+
ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5nZSgpOwogCiAgICAgbV9zZWxlY3Rpb24gPSBuZXdT
ZWxlY3Rpb247CiAKQEAgLTM3MSwzNSArMzgyLDMxIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNl
dFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlv
CiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKIAogICAgIGlmICghbmV3U2VsZWN0aW9u
LmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERvTm90U2V0Rm9jdXMpKSB7Ci0gICAgICAgIGF1dG8q
IG9sZEZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQo
KTsKKyAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2Vk
RWxlbWVudCgpOwogICAgICAgICBzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCk7CiAgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgbm90IGJlIG5lZWRlZC4KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRv
Y3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkgIT0gb2xkRm9jdXNlZEVsZW1lbnQpCi0gICAgICAg
ICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAg
IGlmIChtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQor
ICAgICAgICAgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIH0KIAog
ICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJv
dyBuYXZpZ2F0aW9uLgogICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkgdGhlIHZlcnRpY2Fs
IGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCiAgICAgbV94UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwog
ICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7Ci0gICAgbV9m
cmFtZS0+ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9w
dGlvbnMpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
c2VsZWN0aW9uLWFwaS8jc2VsZWN0aW9uY2hhbmdlLWV2ZW50CiAgICAgLy8gRklYTUU6IFNwZWMg
ZG9lc24ndCBzcGVjaWZ5IHdoaWNoIHRhc2sgc291cmNlIHRvIHVzZS4KLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoVGFza1NvdXJjZTo6VXNlckludGVy
YWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgbV9k
b2N1bWVudC0+cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFj
dGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2
ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNj
cm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewotICAgIFJlZlB0cjxG
cmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90
ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdB
cHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywgYWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9u
cyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJhbWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2
ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAg
ZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvbikKQEAgLTQxMSwyNyArNDE4LDI3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAgbV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBp
bnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChk
b2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhh
c1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmxh
eW91dENvbnRleHQoKS5pc0xheW91dFBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGludGVudCk7CiAKICAgICBpZiAob3B0aW9ucyAmIElz
VXNlclRyaWdnZXJlZCkgewotICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRp
dG9yKCkuY2xpZW50KCkpCisgICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3VtZW50LT5l
ZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNsaWVudC0+ZGlkRW5kVXNlclRyaWdnZXJl
ZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVj
dGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZyYW1lJiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVw
ZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICNlbHNlCi0gICAgZnJhbWUuZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyArNDQ4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2
ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBSZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6
Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxN
b2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBp
ZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlm
IChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2
aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogfQogCkBAIC00NTcsNyArNDY0LDcg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFY
VGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKICAgICBpZiAobV9zZWxlY3Rpb25SZXZlYWxNb2Rl
ICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90UmV2ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFs
aWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQorICAgICAg
ICBpZiAobV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldo
ZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCiAgICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5
c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25t
ZW50OjphbGlnbkNlbnRlckFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5l
ZWRlZDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGln
bkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6
YWxpZ25Ub3BBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CkBA
IC00NzEsNyArNDc4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2Vs
ZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24oKQogewogI2lmIEVOQUJMRShU
RUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
bV9mcmFtZS0+ZWRpdG9yKCkuc2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKTsKKyAg
ICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygp
OwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MTAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVT
ZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBpc0dldFN0YXJ0KSBjb25zdAogICAg
IC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUgc2FtZSBub2RlcyBhcyBzdGFydC9l
bmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0byB3aGljaCBkZXBlbmRzIG9uIHRoZSB2YWx1
ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBjaGFuZ2VkCiAgICAgLy8gdG8ganVz
dCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRp
dG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5k
cG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhh
dmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2ludCgpKQog
ICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZp
c2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogCiAgICAgcmV0dXJuIGlz
R2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2VsZWN0aW9uLnZpc2li
bGVFbmQoKTsKQEAgLTcyMyw3ICs3MzAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rp
b246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRpbwogewog
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0V29yZFBv
c2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+
ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgewor
ICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8g
c2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8v
IHdvcmQgZnVydGhlciBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAg
ICAgICAvLyBzZW1hbnRpY3Mgb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0
IHVzIGF0IHRoZQpAQCAtODU1LDcgKzg2Miw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVj
dGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAg
ICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1f
c2VsZWN0aW9uLmFmZmluaXR5KCkpLnJpZ2h0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tp
cHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBz
a2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0
b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24o
Y3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYg
KHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEwNzYsNyArMTA4Myw3IEBAIFZpc2libGVQb3NpdGlvbiBG
cmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGJvCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0
ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAg
Ym9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0
b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAg
ICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1l
bnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0
ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBwb3MgPSBsZWZ0V29yZFBv
c2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAg
ICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMzYyLDcgKzEzNjksNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAocmVhY2hlZEJv
dW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYm
IG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAg
IGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVz
ZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVudCAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFu
Z2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Cb3VuZGFyeSwgdGV4dFNlbGVjdGlv
bldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0eShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSB9KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTM3NCw4ICsxMzgxLDggQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rp
b24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRl
cmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjph
Y2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAgIGlm
IChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsK
KyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdB
WE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+c2V0VGV4dFNlbGVjdGlvbkludGVu
dCh0ZXh0U2VsZWN0aW9uSW50ZW50KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSk7CiAg
ICAgfQogCkBAIC0xMzg0LDcgKzEzOTEsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnko
RUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAg
IC8vIE5vdGU6IHRoZSBTVEFSVCBwb3NpdGlvbiB0eXBlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0
IGlzIHVudXNlZCwgaXQgd291bGQgYmUKICAgICAvLyB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHR5
cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gc2V0Lgog
ICAgIExheW91dFVuaXQgeCA9IGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2
aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0
aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5
c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRp
b25FeHRlbmQpOwogCiAgICAgc3dpdGNoIChhbHRlcikgewogICAgIGNhc2UgQWx0ZXJhdGlvbk1v
dmU6CkBAIC0xMzk0LDcgKzE0MDEsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFs
dGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAg
ICAgIGlmICghbV9zZWxlY3Rpb24uaXNDYXJldCgpCiAgICAgICAgICAgICAmJiAoZ3JhbnVsYXJp
dHkgPT0gV29yZEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IFBhcmFncmFwaEdyYW51bGFy
aXR5IHx8IGdyYW51bGFyaXR5ID09IExpbmVHcmFudWxhcml0eSkKLSAgICAgICAgICAgICYmIG1f
ZnJhbWUgJiYgIW1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0
aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkgeworICAgICAgICAgICAgJiYgbV9kb2N1bWVu
dCAmJiAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rp
b25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBsZXQg
dGhlIHNlbGVjdGlvbiBnbyBhY3Jvc3MgdGhlIGJhc2UgcG9zaXRpb24gZGlyZWN0bHkuIE5lZWRl
ZCB0byBtYXRjaCBtYWMKICAgICAgICAgICAgIC8vIGJlaGF2aW9yIHdoZW4sIGZvciBpbnN0YW5j
ZSwgd29yZC1zZWxlY3RpbmcgYmFja3dhcmRzIHN0YXJ0aW5nIHdpdGggdGhlIGNhcmV0IGluCiAg
ICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEgd29yZCBhbmQgdGhlbiB3b3JkLXNlbGVjdGlu
ZyBmb3J3YXJkLCBsZWF2aW5nIHRoZSBjYXJldCBpbiB0aGUKQEAgLTE0MDcsNyArMTQxNCw3IEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAgICAgICAgLy8gU3RhbmRhcmQgTWFjIGJlaGF2
aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91bmRhcnkgaXMgZ3JvdyB0aGUgc2VsZWN0aW9uIHJh
dGhlciB0aGFuIGxlYXZpbmcgdGhlCiAgICAgICAgIC8vIGJhc2UgaW4gcGxhY2UgYW5kIG1vdmlu
ZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4dFZpZXcuCi0gICAgICAgIGlmICghbV9mcmFtZSB8
fCAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9u
V2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlz
Qm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9j
dW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5F
eHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5k
YXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAgICAgIHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRy
aWdnZXJlZCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOwpAQCAtMTUxNyw3ICsxNTI0
LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNp
Z25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0aWMKICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBV
c2VyVHJpZ2dlcmVkKQogICAgICAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJp
dHk7CiAKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQp
OworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE1NzUsNyArMTU4Miw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAgICAgbV9jYXJldEJsaW5rVGltZXIu
c3RvcCgpOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpKQorICAgIGlmIChhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygp
KQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAgc2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRl
ZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY1NSw5ICsxNjYyLDkgQEAgc3RhdGljIGJvb2wg
aXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAog
SW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVG
aXhlZCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwotICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRP
clN0eWxlKCptX2ZyYW1lKTsKKyAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JT
dHlsZSgqbV9kb2N1bWVudCk7CiAgICAgcmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAgICAgaWYgKGlu
c2lkZUZpeGVkKQogICAgICAgICAqaW5zaWRlRml4ZWQgPSBtX2NhcmV0SW5zaWRlUG9zaXRpb25G
aXhlZDsKQEAgLTE2NzUsMTAgKzE2ODIsMTAgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21w
dXRlQ2FyZXRSZWN0KCkKICAgICBpZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX2RvY3VtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiB2ID0gbV9kb2N1bWVudC0+dmlldygp
OwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNjkwLDcgKzE2OTcs
NyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgICAgICAg
ICAgY2xlYXJDYXJldFJlY3QoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVN0YXJ0ID0gbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAg
ICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KG1fZnJhbWUtPmRvY3VtZW50KCksIHZpc2libGVT
dGFydCkpIHsKKyAgICAgICAgICAgIGlmICh1cGRhdGVDYXJldFJlY3QobV9kb2N1bWVudCwgdmlz
aWJsZVN0YXJ0KSkgewogICAgICAgICAgICAgICAgIGNhcmV0Tm9kZSA9IHZpc2libGVTdGFydC5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgICAgICAgICAgbV9hYnND
YXJldEJvdW5kc0RpcnR5ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE3MTUsNyArMTcyMiw3
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGlmIChSZW5kZXJWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKSB7CisgICAgaWYgKFJl
bmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKICAgICAgICAgYm9v
bCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUgPSBtX3NlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtX3ByZXZpb3VzQ2FyZXROb2RlICYmIG1fcHJldmlvdXND
YXJldE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpOwogICAgICAgICBpZiAoc2hvdWxkUmVwYWlu
dENhcmV0KHZpZXcsIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSkpIHsK
ICAgICAgICAgICAgIGlmIChtX3ByZXZpb3VzQ2FyZXROb2RlKQpAQCAtMTg5NCwxMiArMTkwMSwx
MSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9p
bnQpIGNvbnN0CiAgICAgaWYgKCFpc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBhdXRvKiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFk
b2N1bWVudCkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7Ci0gICAgZG9jdW1lbnQtPmhpdFRl
c3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKKyAgICBtX2RvY3VtZW50LT5oaXRUZXN0KEhp
dFRlc3RSZXF1ZXN0KCksIHJlc3VsdCk7CiAgICAgTm9kZSogaW5uZXJOb2RlID0gcmVzdWx0Lmlu
bmVyTm9kZSgpOwogICAgIGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5NjgsOSArMTk3NCw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQg
PSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVu
dCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKGlzPEhUTUxTZWxlY3RF
bGVtZW50Pihmb2N1c2VkRWxlbWVudCkpIHsKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNl
bGVjdEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50
KTsKICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQuY2FuU2VsZWN0QWxsKCkpIHsKQEAgLTIwMDAs
OCArMjAwNCw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgpCiAgICAgICAgIGlm
IChyb290KQogICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSByb290LT5zaGFkb3dIb3N0
KCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gZG9jdW1lbnQtPmJv
ZHlPckZyYW1lc2V0KCk7CisgICAgICAgICAgICByb290ID0gbV9kb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IG1fZG9jdW1lbnQtPmJv
ZHlPckZyYW1lc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFyb290KQpAQCAtMjA1
OCw5ICsyMDYyLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5n
ZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgU2hvdWxkQ2wKIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgYm9vbCBhY3RpdmVBbmRG
b2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7Ci0gICAgUmVmPERvY3VtZW50PiBkb2N1bWVu
dCgqbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAKLSAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5l
ZWRlZCgpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAogI2lmIFVT
RShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3MgfCBkb2VzIG5v
dCBibGluaykKQEAgLTIwNzEsNyArMjA3NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3Vz
ZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBSZW5kZXJPYmplY3Q6OnNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAgIC8vIFJlbmRlck9iamVjdDo6c2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwKICAgICAv
LyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFpbnRlZC4KLSAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkpCisgICAgaWYg
KFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZp
ZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8vIENhcmV0IGFwcGVhcnMgaW4gdGhl
IGFjdGl2ZSBmcmFtZS4KQEAgLTIwODIsNyArMjA4NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBTdHlsZTo6UmVz
b2x2ZXI6OmNoZWNrT25lU2VsZWN0b3IoKSBhbmQKICAgICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1
c2VkKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwgd2UgaGF2ZSB0bwogICAgIC8vIHVw
ZGF0ZSBzdHlsZSBhbmQgdGhlbWUgc3RhdGUgdGhhdCBkZXBlbmRlZCBvbiB0aG9zZS4KLSAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpKSB7CisgICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpKSB7CiAg
ICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgaWYg
KFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICAg
ICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKQEAg
LTIxMDcsMTMgKzIxMTAsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZChib29s
IGZsYWcpCiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+
cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBtX2ZvY3Vz
ZWQgJiYgbV9kb2N1bWVudC0+cGFnZSgpICYmIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuaXNBY3RpdmUoKTsKIH0KIAogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotaW5saW5l
IHN0YXRpYyBib29sIHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChGcmFtZSog
ZnJhbWUpCitpbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdD
b21tYW5kKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigp
Lmxhc3RFZGl0Q29tbWFuZCgpICYmIGZyYW1lLT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+
c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigp
Lmxhc3RFZGl0Q29tbWFuZCgpICYmIGRvY3VtZW50LT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQo
KS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKIH0KICNlbmRpZgogCkBAIC0yMTMyLDEyICsy
MTM1LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIGJv
b2wgcGFpbnRCbG9ja0N1cnNvciA9IG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yICYmIG1fc2VsZWN0
aW9uLmlzQ2FyZXQoKSAmJiAhaXNMb2dpY2FsRW5kT2ZMaW5lKG1fc2VsZWN0aW9uLnZpc2libGVF
bmQoKSk7CiAgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkID0gcmVjb21wdXRlQ2Fy
ZXRSZWN0KCk7CiAKLSAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1
bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGJvb2wgc2hvdWxk
QmxpbmsgPSAhcGFpbnRCbG9ja0N1cnNvciAmJiBjYXJldElzVmlzaWJsZSgpICYmIGlzQ2FyZXQo
KSAmJiAob2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZyk7
CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3AgdGhlIGJsaW5rIHRpbWVyIHNvIHdl
IGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8vIGJsYWNrIGNhcmV0IGluIHRoZSBuZXcgbG9jYXRp
b24uCi0gICAgaWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8
IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChtX2ZyYW1lKSkKKyAgICBpZiAo
Y2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJs
aW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZG9jdW1lbnQpKQogICAgICAgICBtX2NhcmV0Qmxp
bmtUaW1lci5zdG9wKCk7CiAKICAgICAvLyBTdGFydCBibGlua2luZyB3aXRoIGEgYmxhY2sgY2Fy
ZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYgd2UncmUKQEAgLTIxNTMsNyArMjE1Niw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIH0KICNlbmRpZgog
Ci0gICAgUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAg
IFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCF2
aWV3KQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMDIsOCArMjIwNSw4IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eShDYXJldFZpc2liaWxpdHkgdmlzaWJpbGl0eSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCB0cmlnZ2VyIGEg
c3luY2hyb25vdXMgbGF5b3V0IGhlcmUuCi0gICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIHVwZGF0
ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKKyAgICBpZiAobV9k
b2N1bWVudCkKKyAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUo
Km1fZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCiAgICAgaWYgKG1fY2FyZXRQ
YWludCkgewpAQCAtMjI0NywxMCArMjI1MCwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRG
b2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBpZiAoaXNOb25lKCkgfHwgIWlzRm9jdXNlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGlm
IChjYXJldEJyb3dzaW5nKSB7CiAgICAgICAgIGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3Np
bmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9uLmJhc2UoKSkpIHsKLSAgICAgICAgICAgIG1fZnJh
bWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAq
bV9mcmFtZSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJhbWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2MiwxNiArMjI2NSwxNiBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICAgICAgICAgIC8vIHNv
IGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBi
ZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwogICAgICAgICAgICAgLy8gd29yayBpbiB0aGUgbG9uZyB0
ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0aGlzIHRpbWUuCiAgICAgICAgICAg
ICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkgJiYgIWlzRnJhbWVFbGVtZW50KHRhcmdl
dCkpIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
LnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJhbWUpOworICAgICAgICAgICAgICAgIG1f
ZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFy
Z2V0LCAqbV9mcmFtZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7
CiAgICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1l
bnQobnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQtPnNldEZvY3VzZWRFbGVtZW50KG51bGxw
dHIpOwogICAgIH0KIAogICAgIGlmIChjYXJldEJyb3dzaW5nKQotICAgICAgICBtX2ZyYW1lLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2Zy
YW1lKTsKKyAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRG
b2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFtZSk7CiB9CiAKIHZvaWQgRHJhZ0NhcmV0Q29u
dHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0NvbnRleHQmIHAs
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJl
Y3QpIGNvbnN0CkBAIC0yMzAwLDE2ICsyMzAzLDE2IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNo
b3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNv
CiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigp
LmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91
bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9CiAK
IEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVD
b250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogewotICAgIGlmICghbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KCk7CiAKLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9m
cmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
OworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50
KTsKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOwogICAg
IGlmICghcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIApAQCAtMjMy
NSwxNCArMjMyOCwxNCBAQCBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5k
cyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udAogCiB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0IHRleHRSZWN0SGVpZ2h0KSBjb25zdAog
ewotICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKCFtX2RvY3Vt
ZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9kb2N1bWVudC0+dmlldygp
LT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpOwogICAgIGZvciAoYXV0byYgcmVjdCA6IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UsIHRleHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0
YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkpKSB7CiAgICAgICAgIGF1dG8gaW50ZXJzZWN0
aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2aXNpYmxlQ29udGVudFJlY3QpOwogICAgICAg
ICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKQpAQCAtMjM2NCw3ICsyMzY3LDcgQEAg
c3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiBIVE1M
Rm9ybUVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSgpIGNvbnN0CiB7CiAgICAg
Ly8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBu
b2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzLgotICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzdGFydCA9
IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAg
c3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQpA
QCAtMjQwNyw4ICsyNDEwLDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9u
KFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICAgICAgICAgICAg
ICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZl
YWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9s
bGluZzo6WWVzIH0pOwogICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2Uo
KTsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2Vs
ZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKG1f
ZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJh
bWUoKm1fZnJhbWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQpAQCAtMjQyNiwx
NyArMjQyOSwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgp
CiAgICAgLy8gUHV0IGEgY2FyZXQgaW5zaWRlIHRoZSBib2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUg
aXMgZWRpdGFibGUgKGVpdGhlciB0aGUKICAgICAvLyBlbnRpcmUgV2ViVmlldyBpcyBlZGl0YWJs
ZSBvciBkZXNpZ25Nb2RlIGlzIG9uIGZvciB0aGlzIGRvY3VtZW50KS4KIAotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJy
b3dzaW5nRW5hYmxlZCgpOwotICAgIGlmICghaXNOb25lKCkgfHwgIShkb2N1bWVudC0+aGFzRWRp
dGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQorICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBpZiAo
IWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJv
d3NpbmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZG9jdW1lbnQgfHwgIShp
c05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24u
c3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRh
YmxlU3R5bGUoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0
T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rp
b24uYWZmaW5pdHkoKSkpKSB8fCAhbV9kb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAg
ICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIGlmIChhdXRvKiBib2R5ID0gZG9jdW1lbnQtPmJv
ZHkoKSkKKyAgICBpZiAoYXV0byogYm9keSA9IG1fZG9jdW1lbnQtPmJvZHkoKSkKICAgICAgICAg
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKQEAgLTI0NDYsNyArMjQ0OCw3IEBAIGJvb2wgRnJh
bWVTZWxlY3Rpb246OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBuZXdTZWxlY3Rpb24pCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNr
c0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1f
ZnJhbWUtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2Vs
ZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOworICAgIHJldHVybiBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1Nl
bGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZhbHNlKTsKIH0KIAogYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgpCkBAIC0yNDY0LDcgKzI0NjYsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRT
aG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgPSBzaG91bGRT
aG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKIH0K
QEAgLTI0ODIsMTMgKzI0ODQsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2NoZWR1bGVBcHBl
YXJhbmNlVXBkYXRlQWZ0ZXJTdHlsZUNoYW5nZSgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmFw
cGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKCkKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZy
YW1lKCptX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RvcigqbV9kb2N1bWVudCk7
CiAgICAgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpOwogfQogCiB2
b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hh
bmdlKCkKIHsKLSAgICBpZiAoYXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50
KCkpCisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgp
KQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmls
aXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKQEAgLTI3MjMs
NyArMjcyNSw3IEBAIFJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRp
bmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5n
dGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRS
YW5nZSA9IG1fZG9jdW1lbnQtPmNyZWF0ZVJhbmdlKCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0
YXJ0KG5vZGUsIGxvY2F0aW9uKTsKICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0
aW9uICsgbGVuZ3RoKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVT
ZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CkBAIC0yOTA0LDcg
KzI5MDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0
QmxpbmtzKQogICAgIGlmIChtX2NhcmV0QmxpbmtzID09IGNhcmV0QmxpbmtzKQogICAgICAgICBy
ZXR1cm47CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7IAorICAgIG1fZG9jdW1lbnQt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIGlmIChtX2NhcmV0
UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50ID0gZmFsc2U7IAogICAgICAgICBpbnZhbGlk
YXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmlu
ZGV4IGU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZlMzJjYWVkMTY1YTA1MDguLjVhYWY5YTA4OWIz
YjE5ZGZhMDEwZWQwNzA5ZDQyZGVlYWUwYjVlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2Vs
ZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZy
YW1lU2VsZWN0aW9uKERvY3VtZW50KiA9IG51bGxwdHIpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
RWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAg
ICAgIApAQCAtMzM4LDYgKzMzOCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGRpc3BhdGNoU2Vs
ZWN0U3RhcnQoKTsKIAorICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEZyYW1lKiBtX2Zy
YW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlmZjlmMzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2
MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEyNGNmMTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNTAs
NyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkCiAKIHZvaWQgSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgYm9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0g
ZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0VuYWJsZWQoKTsKKyAgICBib29sIHBhc3N3
b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNldHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxl
ZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVkKQogICAgICAgICBkb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAppbmRleCAxNzZkOGYwODlh
ZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZiLi4yNzM1NWU2NmZiODlkNTU0MmNkNmE5YmVh
ODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIEluc2VydExpbmVC
cmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5n
U3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAgUmVmUHRyPEVk
aXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0
eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGlu
ZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGU5MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIw
OGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1MTM2OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0x
NDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAg
IC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxlY3Rpb24uIFRoZSByZXN0IG9mIHRoaXMgZnVu
Y3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1NlbGVjdGlvbiwgc28gYmFpbCBvdXQuCiAgICAg
ICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgp
KSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgpLmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVu
YWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9ybU92ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0
SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMjIsNyArMjIy
LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAg
ICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgotICAg
IGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9u
KCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdT
dHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgewogICAgICAgICB0
eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRQb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQ
cmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIXR5cGluZ1N0eWxlLT5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5k
LmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFkOTM5ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUw
ODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQxM2YwNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02
MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkK
ICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkK
KyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNl
bGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghY2hhcmFjdGVyQ291bnQoKm1f
cmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5
OTE3MDJmNjVlNzg3Li40OTY5OTE5ZDkxYTExNDk1YzI5OGM5MmE3NjY3MjZiOTJlMTY5NTA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6IENhbiB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIg
dGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQ/ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8g
YmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQgYWZ0ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3Ig
dXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgp
OwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgZGVzdGluYXRpb24gdG8gZW5kIHVwIGluc2lk
ZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQuICBUbyBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRo
ZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBw
b3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUgc2FtZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4
IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4ZTliYTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3
ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDAsNyArNDAsNyBAQCBTZXRTZWxlY3Rpb25D
b21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAg
aWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYg
IW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBoYW5lZCgpKSB7CiAgICAgICAgIHNlbGVjdGlv
bi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCwgbV9vcHRpb25zKTsKQEAgLTUwLDcgKzUw
LDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIAogdm9pZCBTZXRTZWxl
Y3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSkgJiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCku
aXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0
aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hl
Y2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgzNjZiNTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4u
NTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0OThmZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtOTgsOCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hl
Y2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQoKQogICAgIG1fY2hlY2tlciA9IG51bGxwdHI7
CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1f
ZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1l
bnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV90aW1lclRvUHJvY2Vzc1F1
ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1
ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzExNCw3IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxs
Q2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50KiBTcGVsbENoZWNrZXI6OmNsaWVudCgpIGNv
bnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOworICAgIFBhZ2UqIHBhZ2Ug
PSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JDbGllbnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVl
dWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVja2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQo
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpLmFz
eW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2Vy
OjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTE3NCw3ICsx
NzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1Jl
cXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7Ci0gICAgY2xpZW50KCkt
PnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZT
dHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxs
Q2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTcGVsbENo
ZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIs
IGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZnJhbWUuZWRpdG9y
KCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOworICAg
IG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVl
c3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXIudG9VSW50
NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkKICAgICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRl
bnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBTcGVsbENoZWNr
ZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3REYXRhLmNoZWNraW5nVHlwZXMoKS5jb250YWlu
cyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkKICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFk
ZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNF
bXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3Zl
TWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVz
KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFya2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9j
ZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAg
IGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5ZmI1YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJj
MC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4YTg2NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03Niw3ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hl
Y2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0g
ICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1lJik7CisgICAgZXhwbGljaXQgU3BlbGxDaGVj
a2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hlY2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5j
aHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIpOwogICAg
IHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IFZlY3Rv
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1
bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xh
c3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBt
X2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNm
M2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIwODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0
MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1faGFzQmVlblVuZG9u
ZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rp
b24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3JyZWN0ZWQsIG1fY29ycmVjdGlvbik7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFy
dGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwgbV9jb3JyZWN0aW9uKTsKICAgICAgICAgICAg
IG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMDMsNyAr
MTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBp
ZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZy
YW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNv
cnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUobV9z
ZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlv
bk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IDVhNmM1M2MwMzgz
NzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUuLmYzMTI4ZDdlYTU3ZDU2NzYzOTE4YTMxM2Fi
NzdiNjY0OWU1YjY0MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5nQ29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1
bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBjb24KIAogdm9pZCBU
eXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25z
IG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQogewotICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAg
IGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKKyAgICBpZiAoIWRvY3VtZW50LnNl
bGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFJlZlB0cjxU
eXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGls
bE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxl
dGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9zaXRpb25UeXBlKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2
ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCArMTgwLDggQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRl
eHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9j
dW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewog
ICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAgICAgICBp
ZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0Nv
bW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKLSAgICAgICAg
ICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5
cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZyYW1lKCkpOworICAgICAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlv
bklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCks
IGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21w
bGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAg
ICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmco
b3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTE5OSwxMCArMTk2LDkgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0
aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtl
eVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBGSVhNRTogRm9yd2FyZCBkZWxldGUgaW4gVGV4
dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9zZSBhIG5ldyB0eXBpbmcgY29tbWFuZC4KLSAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwogICAgIGlmIChncmFudWxhcml0eSA9
PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5
cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZy
b21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBmcmFtZSk7CisgICAg
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgeworICAgICAgICAgICAg
dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5n
Q29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRp
b25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50
U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEw
ICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERv
Y3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLAogICAgIFR5cGluZ0NvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtleSwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywg
Z3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNl
bGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlw
aW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxl
Y3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGlu
Z0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAg
IFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9
PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklm
RGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZAogCiB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRl
eHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvbikKIHsK
LSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7
Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkudXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0
WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0Fm
ZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOwogICAgIAotICAgIGlu
c2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwg
b3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGRv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9
CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVlZCB0byB0YWtlIHNlbGVjdGlvbkZvckluc2Vy
dGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBGcmFtZVNlbGVjdGlvbidzIGN1cnJlbnQg
c2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21w
b3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1l
KCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlz
aWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAgU3RyaW5nIG5ld1RleHQgPSBkaXNwYXRj
aEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQsIHNlbGVjdGlvbkZvckluc2VydGlvbiwgY29t
cG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogICAgIAogICAgIC8vIFNl
dCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxlY3Rpb24gYXBwcm9wcmlhdGVseSBpZiB3ZSBh
cmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBj
dXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBjaGFuZ2UgRWRpdENv
bW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3VzdG9tIHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFs
IHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBvZiB0aGUgY29tbWFuZHMuCi0gICAgaWYgKFJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9y
VHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBpZiAobGFzdFR5cGluZ0NvbW1hbmQtPmVuZGlu
Z1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvckluc2VydGlvbikgewogICAgICAgICAgICAgbGFz
dFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlv
bik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNl
bGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYsMTIgKzI1NSwxMiBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8gY21kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRl
KGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBvcHRpb25zLCBjb21wb3NpdGlvblR5cGUp
OwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQoZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwg
c2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsKKyAgICBhcHBseVRleHRJ
bnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1lKCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9y
SW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0g
ICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBp
bmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAg
aWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdD
b21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9u
KTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29t
cG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFp
bkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRM
aW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiAKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3Vt
ZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1l
bnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdD
b21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkp
IHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24oZmFsc2Up
OwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21w
b3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2
LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
SW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIAogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1l
KCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAg
ICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1
dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9u
VHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRv
Y29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcsOSArMjk2LDkgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25z
IG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFn
cmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkKK1JlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBp
bmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKERvY3VtZW50
JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0
Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpOworICAgIFJlZlB0cjxD
b21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0gZG9jdW1lbnQuZWRpdG9yKCku
bGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFsYXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0
Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwgIXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQq
PihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09wZW5Gb3JNb3JlVHlwaW5nKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYgKzMxMCwxNiBAQCBib29sIFR5cGluZ0NvbW1h
bmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFuZFVudGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgp
IGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxpbmdJbml0aWFsVHlwaW5nQ29tbWFuZCB8fCBl
ZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0aW5nQWN0aW9uKCkpOwogfQogCi12b2lkIFR5
cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1lKiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFu
ZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxP
cGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9j
dW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RF
ZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBm
cmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQordm9pZCBUeXBpbmdD
b21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9y
TW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5l
d1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdD
b21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7
CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxh
c3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbk9uTGFzdEluc2VydENvbW1h
bmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00MzYsMTkgKzQyNSwxNyBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogewotICAg
IEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0KICNpZiBQTEFURk9STShNQUMpCi0gICAg
aWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi0g
ICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rp
b25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1
YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigp
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50
KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAg
ICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
KCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3Rp
dHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21h
dGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAo
ZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAg
ICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgog
ICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxlY3Rpb24gdGhhdCByZXN1bHRzIGFmdGVyIHR5
cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2
Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAgICAgIFN0cmluZyBzdHJp
cHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAgIGlmIChyYW5nZSAmJiAoY29tbWFuZFR5cGUg
PT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21t
YW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Oklu
c2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCkpCiAgICAgICAgICAgICAgICAg
c3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91
c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kVHlwZSA9PSBUeXBp
bmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigp
LnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BB
UkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8gSWYgdGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhp
cyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNvdWxkIGJlIHJlbW92ZWQ6CkBAIC00ODMsNyAr
NDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmco
RVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9
IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdvcmRTaWRlKTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIHN0YXJ0V29yZFNpZGUpOwogICAgICAgICBp
ZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigpLCBmYWxzZSk7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYgKzQ4NCwyNiBAQCBib29sIFR5cGluZ0NvbW1h
bmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBl
LCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0
aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAgICAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3Io
KS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFu
Z2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndp
bGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNG
b3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVk
aXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJl
dHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3Rh
dGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5
cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZUZvckFkZGVk
VHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgUmVmUHRy
PEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFtZSgpKTsKIAogICAgIHVwZGF0ZVByZXNl
cnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAg
IGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogICAgIC8vIFNpbmNl
IHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFsc28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQg
b3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQgaGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hh
bmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKICNl
bHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNraW5nIGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVj
a2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50IGlzc3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3
Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBhcyBtaXNzcGVsbGVkLgogICAgIG1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKLSAgICBmcmFt
ZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3Io
KS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5kaWYKIH0KIApAQCAtNTM1LDkgKzUyMiw5IEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29u
c3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAgICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21t
YW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJ
bnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51dGY4KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRl
ZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwotICAgIHJlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0
VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5y
ZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAsOSArNTM3LDYgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKGNvbnN0IFN0cmluZyAmdGV4dCwgYm9v
bCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9u
ZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNw
YWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFj
dGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShX
VEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0VGV4dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5
LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1l
KCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9P
cGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxp
dHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydExpbmVCcmVhaygpOwotICAg
IHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCku
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFt
ZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRleHQucG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
LCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJl
cGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246
OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJh
bWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRU
b09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNlcGFyYXRvcik7CiB9CiAKIHZvaWQgVHlwaW5n
Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgp
CiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCBy
ZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhU
ZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4i
LCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigp
LT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7
CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCkKICAgICB9CiAgICAgICAgIAogICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlB
Y2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2Vk
VGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5
UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAg
ICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgp
LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShy
ZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNjUyLDEwICs2MjcsOSBAQCBi
b29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJv
b2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFt
ZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+
IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50
KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2Up
OwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAgLTc0OCwyMCArNzIyLDIwIEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGJvb2wgc2hvdWxkQWRkCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8g
V29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUz
NzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hvdWxkIHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8g
bWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIGNsb3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFm
cmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUp
KQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2Vs
ZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVs
ZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxs
UmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9y
OjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhl
IGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUg
Y29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7
CkBAIC03NzgsMTAgKzc1Miw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3Nl
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAKIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2lsbFJpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVm
UHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVk
aXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAg
ICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87CkBAIC04NTUsMTMgKzgyOCwx
MyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRp
bmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUp
OworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2Fy
ZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlv
blRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1
bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0
ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1h
bmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUu
Zmlyc3RSYW5nZSgpKSkKQEAgLTg3MSw3ICs4NDQsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBz
aAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rp
b25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJh
bWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5k
VGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpz
ZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxS
aW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3
aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJV
bmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlv
blRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1
ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRp
emVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5k
ZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRi
ZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGlu
c2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lk
IGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYpOwotICAg
IHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VU
eXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2
b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3Jl
VHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lk
IGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlw
aW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2
b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4
dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVU
eXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5Gb3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBj
bG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0
aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JU
eXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9B
cHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBA
IC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1
dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0
RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVT
ZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBG
cmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1
cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCosIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVw
ZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBpbmdDb21tYW5kKTsKICAgICBib29sIHdpbGxB
ZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNv
bnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBSZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUx
NDRjOWM3NWI3ODRkYjU2MTI5MmU3OTQyNzdiZmI3NmQ1OWUuLjkxMGRlZWY3MDg0ZDFmZGM4ZTBm
OWFlMDZlOTEzYTExYzc2M2YxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQpAQCAtODAsOCArODAsOCBAQCBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKgog
CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKQogewotICAgIHJldHVybiBz
ZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZh
Y3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVD
b21wb3NlZFRyZWU6Ok5vKTsKKyAgICByZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFw
cGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6
Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2RvY3VtZW50
LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNl
cmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiB9
CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpAQCAtMTA3LDEwICsxMDcsMTAgQEAg
dm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1l
bnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3Ry
aW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICph
dHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBj
b250ZW50OwotICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+
b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKKyAgICBjb250ZW50LmNvbnRlbnRPcmln
aW4gPSBtX2RvY3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29u
dGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAg
Y29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9y
bWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5j
b250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6
IG51bGxwdHI7CkBAIC0xMjUsMTAgKzEyNSwxMCBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIAogdm9pZCBFZGl0b3I6Ondy
aXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkK
IHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVk
U3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5n
RnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIAogICAg
IFBhc3RlYm9hcmRXcml0ZXJEYXRhOjpXZWJDb250ZW50IHdlYkNvbnRlbnQ7Ci0gICAgd2ViQ29u
dGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVy
Rm9yUGFzdGVib2FyZCgpOworICAgIHdlYkNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1l
bnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICB3ZWJDb250ZW50LmNhblNt
YXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICB3ZWJDb250ZW50
LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsK
ICAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRh
aW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVs
bHB0cjsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFz
dGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogCiBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpCiB7Ci0gICAgYXV0
byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbigmbV9mcmFt
ZSk7CisgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVj
dGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIGlmICghYXJjaGl2ZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFyY2hpdmUtPnJh
d0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpKTsKQEAgLTE3MSwxMSArMTcxLDExIEBAIFN0cmlu
ZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkK
IAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcg
bWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1fZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcpKSB7
CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkgeworICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50LmZyYW1lKCksIGF0dHJpYnV0ZWRTdHJpbmcp
KSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxl
Y3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAg
ICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2Us
IGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKICAgICAgICAgfQpAQCAtMjIxLDcgKzIy
MSw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0YUluUlRGRm9ybWF0KE5TQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nKQogLy8gT3IgcmVmYWN0b3Igc28gaXQgZG9lcyBub3QgZG8g
dGhhdC4KIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgV2ViQ29udGVudFJlYWRl
ciByZWFkZXIobV9mcmFtZSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQpOworICAgIFdlYkNvbnRl
bnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5U
ZXh0KTsKICAgICBwYXN0ZWJvYXJkLnJlYWQocmVhZGVyKTsKICAgICBjaG9zZVBsYWluVGV4dCA9
IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0OwogICAgIHJldHVybiBXVEZNb3ZlKHJl
YWRlci5mcmFnbWVudCk7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBFZGl0b3I6OnRha2VGaW5k
U3RyaW5nRnJvbVNlbGVjdGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
IHN0cmluZ0Zyb21TZWxlY3Rpb24gPSBtX2ZyYW1lLmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5j
b2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkpOworICAgIGF1dG8gc3RyaW5nRnJv
bVNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlF
bmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSk7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIHR5cGVzLmFwcGVuZChTdHJpbmcobGVn
YWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0Vk
aXRvckd0ay5jcHAKaW5kZXggNzA2ZTgyNjczZjA4MTMzMzczNWU1ODcxMjc4YzhkNDUwZDBiNjli
Yy4uMWRhODFmNzE4ZDkyMzU4MjNiMDM4MWZlMmJiZGUxMTlkODI1MDZkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgRWRp
dG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNl
dDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4
dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgbV9mcmFtZSwgKnJhbmdlLCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsK
KyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZy
b21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdl
LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxh
aW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0
aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFn
bWVudCk7CkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICBQYXN0ZWJvYXJkV2ViQ29u
dGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAgICBwYXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENv
cHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgcGFzdGVib2FyZENvbnRl
bnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpOwotICAgIHBhc3RlYm9hcmRD
b250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2Nh
bEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6
OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50
Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZp
bGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6
OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogICAgIHBhc3RlYm9hcmQud3JpdGUo
cGFzdGVib2FyZENvbnRlbnQpOwogfQogCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9y
Ojp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2Um
IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewot
ICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShwYXN0ZWJvYXJkLCBt
X2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOworICAgIHJl
dHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShwYXN0ZWJvYXJkLCAqbV9kb2N1
bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KaW5kZXggZjJhMmQ1MmFjNWFiZjRlNGYxMzExM2NhMjVkMWIyMGExNzM4ZmE2OS4u
MWJmY2E1OTEzZDY0NjQxYzA4MmZlZjc2NWFiYTE5ZTkwOTBhZDE3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtODMsNyArODMsNyBAQCB2b2lkIEVkaXRvcjo6
c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGly
ZWN0aW9uIGRpcgogICAgIC8vIElmIHRoZSB0ZXh0IGhhcyBsZWZ0IG9yIHJpZ2h0IGFsaWdubWVu
dCwgZmxpcCBsZWZ0LT5yaWdodCBhbmQgcmlnaHQtPmxlZnQuIAogICAgIC8vIE90aGVyd2lzZSwg
ZG8gbm90aGluZy4KIAotICAgIGF1dG8gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0
eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBhdXRvIHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3Rh
cnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFzZWxlY3Rp
b25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCiAgICAgICAgICByZXR1cm47CiAK
QEAgLTEyNywxNCArMTI3LDE0IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hh
bmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgaWYgKCFu
ZXdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQg
PSBtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CisgICAgRWxlbWVudCogZm9j
dXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKGZvY3Vz
ZWRFbGVtZW50ICYmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpIHx8
IChpczxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpCiAgICAgICAgICYmIChkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLmlzVGV4dEZpZWxkKCkKICAg
ICAgICAgICAgIHx8IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCku
aXNTZWFyY2hGaWVsZCgpKSkpKSB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gV3JpdGluZ0Rp
cmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIG1fZG9jdW1lbnQudXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNDcsNyArMTQ3LDcgQEAg
dm9pZCBFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0eWxlcygpCiB7CiAgICAgLy8gVGhpcyBm
dW5jdGlvbiByZW1vdmVzIHN0eWxlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBtb2RpZnkgYnkgYXBw
bHlpbmcgdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCiAgICAgCi0gICAgYXV0byBlZGl0aW5nU3R5bGUg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmJvZHlPckZyYW1lc2V0
KCkpOworICAgIGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUobV9kb2N1
bWVudC5ib2R5T3JGcmFtZXNldCgpKTsKICAgICBhdXRvIGRlZmF1bHRTdHlsZSA9IGVkaXRpbmdT
dHlsZS0+c3R5bGUoKS0+bXV0YWJsZUNvcHkoKTsKICAgICAKICAgICAvLyBUZXh0IHdpZGdldHMg
aW1wbGVtZW50IGJhY2tncm91bmQgY29sb3IgdmlhIHRoZSBVSVZpZXcgcHJvcGVydHkuIFRoZWly
IGJvZHkgZWxlbWVudCB3aWxsIG5vdCBoYXZlIG9uZS4KQEAgLTIxOSw3ICsyMTksNyBAQCB2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRp
b25TZXQ8UGFzdGVPcHRpb24+CiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVk
UmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5UZXh0ID0gb3B0aW9ucy5jb250YWlucyhQYXN0
ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwotICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKG1f
ZnJhbWUsICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVh
ZGVyKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOwogICAgIGlu
dCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNsaWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXND
b3VudCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXM7
ICsraSkgewogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjbGll
bnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpKTsKQEAgLTI0Myw3ICsyNDMsNyBA
QCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJk
LCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAKIHZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25Q
aHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBpZCBtZXRh
ZGF0YSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKGRpY3RhdGlvblBocmFzZXMuaXNFbXB0eSgpKQpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQg
RWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgLy8gU29tZSBkYXkgd2UgY291bGQgbWFrZSB0aGVtIFVu
ZG9hYmxlLCBhbmQgbGV0IGNhbGxlcnMgY2xlYXIgdGhlIFVuZG8gc3RhY2sgZXhwbGljaXRseSBp
ZiB0aGV5IHdpc2guCiAgICAgY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKIAotICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFy
KCk7CiAKICAgICBlbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAKQEAgLTMzOSw3ICszMzksNyBA
QCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBFbGVtZW50JiBlbGVtZW50KQogCiAgICAgLy8gQXMgYSBzaWRlIGVmZmVjdCB0aGlzIGZ1bmN0
aW9uIHNldHMgYSBjYXJldCBzZWxlY3Rpb24gYWZ0ZXIgdGhlIGluc2VydGVkIGNvbnRlbnQuIE11
Y2ggb2Ygd2hhdAogICAgIC8vIGZvbGxvd3MgaXMgbW9yZSBleHBlbnNpdmUgaWYgdGhlcmUgaXMg
YSBzZWxlY3Rpb24sIHNvIGNsZWFyIGl0IHNpbmNlIGl0J3MgZ29pbmcgdG8gY2hhbmdlIGFueXdh
eS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5jbGVhcigpOwogCiAgICAgLy8gY2xlYXIgb3V0IGFsbCBjdXJyZW50IGNoaWxkcmVu
IG9mIGVsZW1lbnQKICAgICBlbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CkBAIC0zODAsNyArMzgw
LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYg
dGV4dCwgRWxlbWVudCYgZWxlbWVudCkKICAgICBzZWxlY3Rpb24uc2V0QmFzZSh2aXNpYmxlUG9z
KTsKICAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KHZpc2libGVQb3MpOwogCi0gICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogCiAgICAgY2xpZW50KCktPnJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cygpOwogfQpAQCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQgRWRpdG9yOjpz
ZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1l
bnQpCiAvLyBoYXZlIGEgc3RhbGUgc2VsZWN0aW9uLgogdm9pZCBFZGl0b3I6OmVuc3VyZUxhc3RF
ZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCkKIHsKLSAg
ICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9u
SWZPcGVuRm9yTW9yZVR5cGluZygmbV9mcmFtZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcobV9kb2N1bWVudCwgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCmluZGV4IDVkMTVh
NjQ2MWM1NjliNjNhY2M2MTU3OTVlMzQ0NzcwOGE0ZDU1NzcuLjEyZmQ2YTQzZWEwNWEyYTBlNzJi
NzRiYTcyZDk2Mjg2NDcwNWJhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bGlid3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3
cGUvRWRpdG9yTGliV1BFLmNwcApAQCAtNjcsOCArNjcsOCBAQCB2b2lkIEVkaXRvcjo6d3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKICAgICBQYXN0
ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAgICBwYXN0ZWJvYXJkQ29udGVu
dC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCk7Ci0gICAgcGFzdGVib2FyZENv
bnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2Fs
RmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CisgICAgcGFzdGVib2FyZENvbnRlbnQu
bWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmls
ZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6
WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiAgICAgcGFzdGVib2FyZC53cml0ZShw
YXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBFZGl0b3I6OnBh
c3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3Rl
T3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBh
c3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFp
bnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQp
OwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFz
UXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAyOTE4MjQ2NWQ4Y2Yy
OTM5Y2IyMTYwMjQ5ZmVhMmFlMTFlYTE3YzdjLi45ODQxYzk0ZmFhMjEzZmQwODJlNTgxMjBlMWEy
Yjc0ZmEzODY5OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBA
IC0xMDMsNyArMTAzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogdm9pZCBFZGl0b3I6OnJl
YWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQog
ewogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7Ci0gICAgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7
IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3Rl
QXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTEzNywxNiArMTM3LDE2
IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJvYXJkKE5vZGUqIG5vZGUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogCi0gICAg
aWYgKCZub2RlLT5kb2N1bWVudCgpICE9IG1fZnJhbWUuZG9jdW1lbnQoKSkKKyAgICBpZiAobm9k
ZS0+ZG9jdW1lbnQoKSAhPSBtX2RvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8
RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3Rvciht
X2RvY3VtZW50KTsKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVu
dCgpLCBQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIFBv
c2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpKTsKLSAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgp
KSwgRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNl
bGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpOwogCi0gICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBw
YXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgZ2V0SW1hZ2UoRWxlbWVu
dCYgaW1hZ2VFbGVtZW50LCBSZWZQdHI8SW1hZ2U+JiBpbWFnZSwgQ2FjaGVkSW1hZ2UqJgogCiB2
b2lkIEVkaXRvcjo6c2VsZWN0aW9uV2lsbENoYW5nZSgpCiB7Ci0gICAgaWYgKCFoYXNDb21wb3Np
dGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpKQorICAgIGlmICghaGFzQ29tcG9zaXRpb24oKSB8fCBpZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FuY2VsQ29tcG9zaXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dp
bi9FZGl0b3JXaW4uY3BwCmluZGV4IDA5NjRjY2I0ZmJkN2FjMzZiMThmMzQxNmY0MjBhMjdkYmU5
NjkxNzguLjJmNzJjYjRmMDA0NTFjYmJlNDQyYzBlOWEzMTI2N2M4YjhjMjBkNzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcApAQCAtNDIsNyArNDIsNyBAQCB2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRp
b25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFp
blRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2Fy
ZC0+ZG9jdW1lbnRGcmFnbWVudChtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFz
dGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQo
Km1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAm
JiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1
b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC02OSw5ICs2OSw5IEBAIHN0YXRp
YyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRh
KFBsYXRmb3JtRHJhZ0RhdGEmCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJD
b250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmLCBib29s
IC8qYWxsb3dQbGFpblRleHQqLywgYm9vbCYgLypjaG9zZVBsYWluVGV4dCovKQogewogICAgIGlm
IChDT01QdHI8SURhdGFPYmplY3Q+IHBsYXRmb3JtRHJhZ0RhdGEgPSBwYXN0ZWJvYXJkLmRhdGFP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgq
cGxhdGZvcm1EcmFnRGF0YSwgbV9mcmFtZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVu
dEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEsICptX2RvY3VtZW50LmZyYW1lKCkp
OwogCi0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJk
LmRyYWdEYXRhTWFwKCksIG1fZnJhbWUpOworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21Q
bGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0YU1hcCgpLCAqbV9kb2N1bWVudC5mcmFtZSgp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKaW5kZXggYzcxNmQ3MjgwZjQ2MmNiNTY3Mzc1N2I0YmE0ZTNiMjRhYmVlOGRlMC4u
MjkyNzQ3M2E0YTU5NjM4YmM4MmFmYmI5MDRiZWE2M2FkMDUyMzQ5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC01NDEsMTEgKzU0MSwxNCBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpzdG9wKCkKIHZvaWQgRnJhbWVMb2FkZXI6OndpbGxUcmFuc2l0aW9uVG9Db21taXR0ZWQo
KQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBmcmFtZSBpcyBzdGls
bCBmdWxseSBpbiBwbGFjZSAobm90IGNhY2hlZCwgbm90IGRldGFjaGVkKSwgYnV0IHdpbGwgYmUg
cmVwbGFjZWQuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwor
ICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZyYW1lLmVk
aXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICBpZiAoZG9jdW1lbnQtPmVkaXRvcigpLmhh
c0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gVGhlIHRleHQgd2FzIGFscmVhZHkgcHJlc2Vu
dCBpbiBET00sIHNvIGl0J3MgYmV0dGVyIHRvIGNvbmZpcm0gdGhhbiB0byBjYW5jZWwgdGhlIGNv
bXBvc2l0aW9uLgotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigp
OwotICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLmVkaXRv
cigpLmNsaWVudCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5lZGl0b3IoKS5jb25maXJtQ29tcG9z
aXRpb24oKTsKKyAgICAgICAgaWYgKEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50ID0gZG9jdW1l
bnQtPmVkaXRvcigpLmNsaWVudCgpKSB7CiAgICAgICAgICAgICBlZGl0b3JDbGllbnQtPnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOwogICAgICAgICAgICAgZWRpdG9yQ2xpZW50
LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CiAgICAgICAgIH0KQEAgLTU2OCw3ICs1
NzEsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgpCiAKICAgICBzdG9wTG9hZGluZyh1
bmxvYWRFdmVudFBvbGljeSk7CiAgICAgCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpOworICAgIGlmIChjdXJyZW50RG9jdW1lbnQpCisgICAgICAgIGN1cnJl
bnREb2N1bWVudC0+ZWRpdG9yKCkuY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKIH0KIAogYm9v
bCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTCgpCkBAIC01ODAsNyArNTg0LDYgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6ZGlkT3BlblVSTCgpCiAgICAgfQogCiAgICAgbV9mcmFtZS5uYXZpZ2F0aW9uU2No
ZWR1bGVyKCkuY2FuY2VsKCk7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhckxhc3RFZGl0Q29t
bWFuZCgpOwogCiAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGlj
aXRDbG9zZSA9IGZhbHNlOwpAQCAtNjQzLDggKzY0Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRDbGVhcldpbmRvd05hbWUoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBEb2N1bWVudCYg
bmV3CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9v
bCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib29sIGNs
ZWFyRnJhbWVWaWV3LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVET01XaW5kb3dDcmVh
dGlvbikKIHsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyKCk7Ci0KICAgICBib29sIG5lZWRl
ZENsZWFyID0gbV9uZWVkc0NsZWFyOwogICAgIG1fbmVlZHNDbGVhciA9IGZhbHNlOwogCkBAIC02
NzMsNyArNjc0LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3Vt
ZW50LCBib29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbAogICAgICAgICAgICAgbV9mcmFt
ZS50cmVlKCkuc2V0TmFtZShudWxsQXRvbSgpKTsKICAgICB9CiAKLSAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOwogICAgIG1fZnJhbWUuZXZlbnRIYW5kbGVy
KCkuY2xlYXIoKTsKIAogICAgIGlmIChjbGVhckZyYW1lVmlldyAmJiBtX2ZyYW1lLnZpZXcoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMzg1ZTM3YTZkMGM5MGU2MzNhM2I3YjQyODcyYzYxNmUz
ODA4NjQyNi4uMjkwN2I0ODViOTRjNjZhYzUwNjg1Yzk5ZGMxNWRkNWVlZWZmY2QwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFn
ZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxv
YQogICAgICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNj
aGVkdWxlcj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAg
ICwgbV9zY3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAg
LCBtX2VkaXRvcihtYWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rp
b24obWFrZVVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlv
bkNvbnRyb2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigqdGhpcykp
CiAgICAgLCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAg
ICwgbV90ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTU1NCw3
ICs1NTIsNyBAQCBib29sIEZyYW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2Ug
RE9NUGFzdGVBY2Nlc3NQb2xpY3k6OkRlbmllZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6Ok5vdFJlcXVlc3RlZFlldDogewotICAgICAgICBh
dXRvKiBjbGllbnQgPSBtX2VkaXRvci0+Y2xpZW50KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9
IGVkaXRvcigpLmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtOTM3LDcgKzkzNSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRU
ZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9y
CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29y
cmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBh
bj0iZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAv
LyBGSVhNRTogSG93IHRvIGhhbmRsZSBjb21wb3VuZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJk
aXNhYmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4
IDNkNDNhOTRiZWE5NTU2Yzk4ZGM3NDIzYWI3ZWFkOWE5MmE1MmM2ZmUuLjA5MzJhODNjYjY3NGY2
ZjhjOTYxMWVkOWY2OTk5ZDE3YjYyZDE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3
U2l6ZU9yTm90LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50
aWZpZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmll
ci5oIgpAQCAtMTYzLDE0ICsxNjQsMTQgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBkb2N1bWVu
dCgpIGNvbnN0OwogICAgIEZyYW1lVmlldyogdmlldygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBl
ZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJu
IGRvY3VtZW50KCktPmVkaXRvcigpOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25z
dCB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZl
bnRIYW5kbGVyKCkgeyByZXR1cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhh
bmRsZXImIGV2ZW50SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAg
ICAgRnJhbWVMb2FkZXImIGxvYWRlcigpIGNvbnN0OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXIm
IG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KLSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAg
ICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1l
bnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBD
U1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNv
bnRyb2xsZXI7IH0KICAgICBjb25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmltYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzks
NiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVS
ZWY8U2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9l
ZGl0b3I7Ci0gICAgVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBV
bmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwog
CiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRv
ci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZS4uM2Vl
ZTQyZmYwY2QxZTczY2YwMWIyOTVlOThkMjg1NGU5YmI3Y2ZkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCkBAIC02OCwyMSArNjgsMTYgQEAgUmVmPFRleHRJbmRpY2F0b3I+
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKIAog
UmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25z
dCBSYW5nZSYgcmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6
ZSBtYXJnaW4pCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpLmZyYW1lKCk7CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKTsKIAotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLQotICAg
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25P
cHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKTsKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRk
KFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAg
dGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpF
bmFibGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25D
aGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwg
dGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
IHNlbGVjdGlvbkNoYW5nZShkb2N1bWVudCwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOwog
CkBAIC05MSw3ICs4Niw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAKICAgICBib29sIGlu
ZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUlu
ZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxl
Y3Rpb24pKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZG9jdW1lbnQtPmZy
YW1lKCksIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0
YSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMDJmMWMzMjNmOWMxMWFiNWQxOWI3OGNhMDNiZjUxYThmOThhYjA2OS4uZmE5
N2UwYzMyZDJmODRkYWI2MWQ4NjNiMDNkZTU3ZDJkYmEzNzUyOSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIwLTA0LTIzICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisg
ICAgICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2
OTQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRlZCBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIGNyYXNoLgorCisgICAgICAgICogZWRpdGlu
Zy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVu
LWVkaXQtY29tbWFuZC1jcmFzaC5odG1sOiBBZGRlZC4KKworICAgICAgICBNb2RpZnkgdGhlIHRl
c3QgcmVzdWx0LiBGcmFtZVNlbGVjdGlvbiBpcyBiZWluZyBkZXN0cnVjdGVkIGFsb25nIHdpdGgK
KyAgICAgICAgZG9jdW1lbnQgc28gYW4gYWRkaXRpb25hbCBzZWxlY3Rpb24gY2hhbmdlIG5vdGlm
aWNhdGlvbiBpcyBleHBlY3RlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL3Bh
c3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTA0LTEz
ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIGh0
dHAvdGVzdHMvaW4tYXBwLWJyb3dzZXItcHJpdmFjeS9hcHAtYm91bmQtZG9tYWluLmh0bWwgaXMg
YSBjb25zdGFudCBmYWlsdXJlIG9uIGlPUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0
LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwNDAzNDIzZTU5MDk1MDI2
NWYwOGEzMjkyNmU2NjE3ZDAxOGE3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9l
ZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSBAQAorVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93ZWQgYnkg
YW4gZWRpdCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2gg
b3IgaGl0IGFuIGFzc2VydGlvbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5z
ZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFz
aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNhZjM4MWQ5ZWY1YTNmZDk0ZWIyMTA5MGMyYTIyZmJjMDc1MTJh
YWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNl
cnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzxi
b2R5PjxpbWFnZT48L2ltYWdlPjxmb3JtIGlkPWZvcm0gY29udGVudEVkaXRhYmxlPXRydWU+PG9i
amVjdCBkYXRhPT8gb25sb2FkPW9iamVjdE9uTG9hZCgpPjwvb2JqZWN0PjwvZm9ybT48ZGlhbG9n
IG9wZW49InRydWUiPmE8L2RpYWxvZz4KKzxzY3JpcHQ+CisgICAgZG9jdW1lbnQuZ2V0U2VsZWN0
aW9uKCkuZW1wdHkoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgic2VsZWN0QWxsIiwgZmFs
c2UpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gb2JqZWN0T25Mb2FkKCkgeworICAgICAgICBkb2N1bWVudC5leGVjQ29t
bWFuZCgiaW5zZXJ0VW5vcmRlcmVkTGlzdCIsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoIml0YWxpYyIsIGZhbHNlKTsKKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1l
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxw
PiBUZXN0cyBpbnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0
ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwv
cD4iOworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9KTsKKyAgICB9Cis8L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQv
ZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQK
aW5kZXggZDZiYzdiMWU2ZjAzZTNiNDhhZjA0MThjNjU1MDRhNGQyMTM3YzFhYy4uZTViZGQyYTBi
ZmQ4OTUyZDk3NjZhNDM3Y2FjZWE0NjY0ODk3Nzg2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2Fy
ZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQKQEAgLTQsNiArNCw3IEBAIEVESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbk5vdGlmaWNhdGlvCiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAwIG9m
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4dCA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2Vs
ZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW9uCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmll
dyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397490</attachid>
            <date>2020-04-24 12:55:01 -0700</date>
            <delta_ts>2020-04-24 16:07:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200424125500.patch</filename>
            <type>text/plain</type>
            <size>223575</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uNzQxYWZkNjAxMWVhNWZiMTE3NDg3YWU2ZTczMTE0
Nzc2NDA5ZmY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAyMC0wNC0yMyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFuYWdlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBw
bGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9NYXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVk
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eURpY3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5n
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0
eWxlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVy
Z2VQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5w
dXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdy
YXBoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVB
bmRBcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2Fu
REhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2hvdWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRo
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0
aFNtYXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVu
dFRhcmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBh
c3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpsZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRB
dENhcmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0
aW9uVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVj
dGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50
T2ZBdHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92
ZXJ3cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRp
bmdTdGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9j
dW1lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29w
ZTo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFu
ZDo6Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUg
Y29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5
TW91c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9y
UGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmN1cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6
aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRp
ZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVk
KToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNl
bGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlR5
cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5l
d2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVh
a0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1
b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdp
dGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0Rp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0
eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRT
ZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndwZS9F
ZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvd2lu
L0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAt
MDQtMTMgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tn
cm91bmQgaW1hZ2VzIHNob3VsZCBmaWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlz
dGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNm
NGYxZDM3NGE2NmJkYjI5Li4yYmE5MGQzMjAzZmI1OTMyZDVjN2U3N2MzZWZhYWM5ZmFlNTFjZWJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6
RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRD
bGFzc2VzLCB1bnNpZwogICAgICwgbV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRh
dGlvbihmcmFtZSkpCiAgICAgLCBtX2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpKQogICAgICwgbV91bmRvTWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkK
KyAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3Nl
bGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRv
IGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0y
NDk3LDcgKzI0OTksNyBAQCB2b2lkIERvY3VtZW50OjpkZXN0cm95UmVuZGVyVHJlZSgpCiAgICAg
ICAgIHZpZXcoKS0+ZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9t
RnJhbWUoKQogewogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAg
IHJldHVybjsKQEAgLTI1OTAsNiArMjU5Miw4IEBAIHZvaWQgRG9jdW1lbnQ6OnByZXBhcmVGb3JE
ZXN0cnVjdGlvbigpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoSFRNTE1l
ZGlhRWxlbWVudEludmFsaWRJRCk7CiAgICAgfQogCisgICAgZWRpdG9yKCkuY2xlYXIoKTsKKyAg
ICBzZWxlY3Rpb24oKS53aWxsQmVSZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgZGV0YWNoRnJv
bUZyYW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKaW5kZXggMzRmZDAwZTE1Yjg4ZDcyMmU5NWE5OWI1Y2NiZjBiMDA1YjdmODI3ZS4uMmMzZmJi
ZGQ5MDc0ZjhhOTk4MTllODliOTMxYmJiODFjYzY0ZjY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
QEAgLTExOSw2ICsxMTksNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7CiBjbGFz
cyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRpdGluZ0Jl
aGF2aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZlbnRMb29w
VGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjcsNiArMTI4LDcg
QEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3JtQ29udHJv
bGxlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBGcmFtZVZp
ZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQ7CkBA
IC02MjUsNyArNjI3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWNvbWVDdXJyZW50RG9j
dW1lbnRJbkZyYW1lKCk7CiAgICAgdm9pZCBkZXN0cm95UmVuZGVyVHJlZSgpOwotICAgIHZvaWQg
cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbUZyYW1l
KCk7CiAKICAgICAvLyBPdmVycmlkZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG1ldGhvZHMgdG8g
ZG8gYWRkaXRpb25hbCB3b3JrCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRCeXBhc3NN
YWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbDsKQEAgLTE1NzYsNiAr
MTU3OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9t
Q29udGVudCgpIHsgbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCA9IHRydWU7IH0K
ICAgICBib29sIGhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudDsgfQogCisgICAgRWRpdG9yJiBl
ZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKwogcHJvdGVjdGVkOgogICAg
IGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxh
Y2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVu
c2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdz
ID0gMCk7CkBAIC0yMTE2LDYgKzIxMjMsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjsKIAogICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lkZW50aWZp
ZWRFbGVtZW50c01hcDsKKworICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOworICAgIFVu
aXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCiBFbGVtZW50KiBldmVu
dFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggM2Y0ZmNi
M2FhNjlmY2I1YWM4MTFiNGU4Yzc5MWE4MTQ3YjM0ZmQ2OS4uYTlhYzkzODk3MjU0ZTZmODQ5MjU3
ZDAwYmJmMTIwYzAzNzllZjA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0YXRpYyBi
b29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQorQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3VtZW50KGRv
Y3VtZW50KQogewogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGlu
ZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJl
bnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYg
KGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKQEAg
LTE0OSw3ICsxNDksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRp
bmdDb3JyZWN0aW9uKCkgY29uc3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpp
c1NwZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gIW1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtlcnMobWlz
c3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwor
ICAgIHJldHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVsbGluZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpCiAgICAgaWYgKG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlv
bikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3NpdGlvbiBj
YXJldFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
OwogCiAgICAgaWYgKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkgPT0gY2Fy
ZXRQb3NpdGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChkaXNt
aXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQpKTsKQEAg
LTIyMCwxMiArMjIwLDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYgKEFsdGVy
bmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAg
ICAgIGNsaWVudC0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJl
c3BvbnNlOjpSZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0KCk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZD
b3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwg
RnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgYXV0byByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVu
ZCgpKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2RvY3VtZW50LmZyYW1lKCkpOwor
ICAgIG1fZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7CisgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKIAotICAgIGF1dG8mIG1hcmtlcnMgPSBtX2Zy
YW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9kb2N1bWVu
dC5tYXJrZXJzKCk7CiAgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBE
b2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1hcmtl
cihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJrZXJzLmFkZE1h
cmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwpAQCAt
MjM2LDEyICsyMzYsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZp
cmVkKCkKICAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gZmFsc2U7CiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOiB7Ci0gICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNl
bGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAg
ICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihw
LCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdvcmRz
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxs
aW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hv
d0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50
V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9y
KCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNr
aW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVm
KCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2
NCw3ICsyNjQsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQo
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxh
aW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFy
YWdyYXBoUmFuZ2UoKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFy
YWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMp
OworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4
dCwgcGFyYWdyYXBoVGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3Vn
Z2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzAyLDcgKzMwMiw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGlt
ZXJGaXJlZCgpCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5n
ZVdpdGhBbHRlcm5hdGl2ZSA9IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYg
KCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0
aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5h
dGl2ZSB8fCBtX2RvY3VtZW50ICE9IHJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4
dCgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpOwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCkKIAogRmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZv
clJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3
ID0gbV9mcmFtZS52aWV3KCk7CisgICAgYXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+
dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4g
dmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBGbG9hdFJl
Y3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbgogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
KQogewotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rp
b24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2Vy
IG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMs
IHdlIHNob3cgdGhlIHBhbmVsCiAgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNv
cnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8v
IHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5l
bCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdApAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlm
IChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvcigpKQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9y
KTsKKyAgICAgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1h
cmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFj
ZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29y
aWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAt
Mzk1LDE1ICszOTUsMTUgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBpZiAoIWNv
bW1hbmQtPndhc0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRv
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFy
dGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5k
KCkpOwotICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsK
KyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBjb21tYW5kLT5zdGFy
dGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5k
KCkpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBtYXJr
ZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBt
YXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVt
cHRpb24pOwogfQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVk
aXRvckNsaWVudCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFn
ZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFn
ZSgpID8gJm1fZG9jdW1lbnQucGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAK
IFRleHRDaGVja2VyQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tl
cigpCkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpt
YXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBpZiAo
ZW5kT2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNl
bGVjdGlvbik7CisgICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVh
dGUobV9kb2N1bWVudCwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9u
KTsKICAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
KTsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRl
c3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDc5LDEyICs0NzksMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJl
Y2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICAvLyBNYXJrIHRo
aXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rp
b24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBl
cyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAg
Ly8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5t
YXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRB
dXRvY29ycmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9u
LCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVw
bGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJh
bmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsK
LSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1l
LmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1h
cmtlckNvbnRyb2xsZXIgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBpZiAobWFya2VyQ29u
dHJvbGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQpKSB7CiAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdU
eXBlOjpDb3JyZWN0aW9uKQogICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VG
b3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBs
YWNlZCwgcmVzdWx0LnJlcGxhY2VtZW50KTsKQEAgLTQ5OSw3ICs0OTksNyBAQCBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQoY29uc3QgVAogCiAgICAgUG9zaXRpb24gYmVnaW5uaW5nT2ZSYW5nZSA9IHJhbmdlV2l0
aEFsdGVybmF0aXZlLnN0YXJ0UG9zaXRpb24oKTsKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFy
YWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKLSAgICBhdXRvIHBy
ZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgp
LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CisgICAgYXV0
byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgcHJl
Y2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmluZ09mUmFuZ2UpOwogCiAgICAgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci5tYXJr
ZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0
ZWRBdXRvY29ycmVjdGlvbik7CiAgICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJz
KSB7CkBAIC01MjAsNyArNTIwLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpy
ZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBpZiAo
IXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2RlID0g
ZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZz
ZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUs
IG1hcmtlci5lbmRPZmZzZXQoKSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0
KHdvcmRSYW5nZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNTU4LDcgKzU1OCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAK
IEFsdGVybmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyBtX2ZyYW1l
LnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOworICAgIHJldHVybiBt
X2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2RvY3VtZW50LnBhZ2Uo
KS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRp
dmVUZXh0KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25z
dCBSYW5nZSYgcmFuZ2UsCiAKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQg
dGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4
OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24g
PSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7Ci0gICAgYXV0byB1
cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2lu
dChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF1dG8gdXBk
YXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJvdW5kYXJ5UG9pbnQo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKICAgICBpZiAoIXVw
ZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwog
ICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IHVwZGF0
ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRlZFBhcmFncmFwaEVu
ZENvbnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJlY3Rpb25PZmZzZXRJ
blBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYxNywxMSArNjE3LDExIEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdFdmVudCkKICAgICAg
ICAgdGFyZ2V0ID0gdHJpZ2dlcmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBlbHNlCi0gICAgICAg
IHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQo
KSk7CisgICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KCZtX2Rv
Y3VtZW50KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
YXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2ZyYW1lLndpbmRv
d1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgYXV0byBldmVudCA9
IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZyYW1lKCktPndpbmRv
d1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZXZlbnQtPnNldFVu
ZGVybHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KGV2ZW50KTsKQEAgLTY1Myw3ICs2NTMsNyBAQCBWZWN0b3I8U3RyaW5nPiBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRAog
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZl
KGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9B
TFRFUk5BVElWRVMpCi0gICAgYXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKKyAgICBh
dXRvJiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8gc2VsZWN0aW9uID0g
ZWRpdG9yLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNo
b3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmluZGV4IDk0Nzc0YTc2
YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZjMzA4OGRjMjc3YjNm
NzkxY2Y4MjMxYjkwNjMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKIGNsYXNz
IEVkaXRvckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5nZTsK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKQEAgLTYx
LDcgKzYxLDcgQEAgY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcihGcmFtZSYgZnJhbWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJhbWUoZnJhbWUpIHsg
fSkKKyAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBkb2N1
bWVudCkgVU5MRVNTX0VOQUJMRUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7IH0pCiAgICAgfkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAgICB2b2lk
IHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlKSBVTkxFU1Nf
RU5BQkxFRCh7IH0pCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBBbHRlcm5hdGl2
ZVRleHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlmCiAKLSAgICBGcmFt
ZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAKICN1bmRlZiBVTkxF
U1NfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAppbmRleCAxNGUzYzc4NmM0ZmYxZGI3Yjg1NjAxNTE0ODczOTBkYzM3MzE5MTUwLi5h
N2QxYjk2NTI0NjQyMGQxMTgyNjZjNTNhNWZkNTFiZWM3OTQ2ODE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMjI4LDE3ICsyMjgs
MTcgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkKICAgICAvLyB1cCB0
aGUgY29tcG9zaXRpb24gd2lsbCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNvbXBvc2l0aW9uLCBh
cyBpbiA8cmRhcjovL3Byb2JsZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3RvcCBoYW5kbGVzIHRo
aXMgaW4gLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSwgYnV0
IHRoZSBwaG9uZQogICAgIC8vIGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBmcmFtZS0+ZWRpdG9y
KCkuY2FuY2VsQ29tcG9zaXRpb24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5jYW5jZWxD
b21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53aWxsVW5h
cHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCkud2lsbFVu
YXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IHNpemUg
PSBtX2NvbW1hbmRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZTsgaTsgLS1pKQog
ICAgICAgICBtX2NvbW1hbmRzW2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRp
dG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCku
dW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbkZvclVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENh
Y2hlKCkpOwpAQCAtMjU4LDEzICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
OjpyZWFwcGx5KCkKICAgICAvLyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtlIGZvciB0aGUgY3Jl
YXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53
aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCku
d2lsbFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChh
dXRvJiBjb21tYW5kIDogbV9jb21tYW5kcykKICAgICAgICAgY29tbWFuZC0+ZG9SZWFwcGx5KCk7
CiAKLSAgICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9k
b2N1bWVudC0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhP
YmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHkobV9kb2N1bWVudC0+
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBAIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQogCiBib29sIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3Io
KS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAg
ICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJn
ZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
YXBwbHkoKQpAQCAtMzc4LDEzICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
YXBwbHkoKQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQoKQog
ewotICAgIGZyYW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3Vt
ZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBWZWN0b3I8UmVmUHRy
PFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpOwotICAgIGF1
dG8gZmlyc3RSYW5nZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOworICAgIGF1dG8gZmlyc3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgcmV0dXJu
IHsgfTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAg
ICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAi
V2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVudCBo
ZXJlLgogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVu
ZCwgRE9XTlNUUkVBTSkpOwotICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigp
LmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAg
ZGVsZXRlU2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAogICAgIEFTU0VS
VChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aXNDb25uZWN0ZWQo
KSk7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3Zl
UGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAg
ICBvcHRpb25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSk7CiAgICAg
YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShk
b2N1bWVudCgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0gICAgZnJhbWUoKS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7
CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihl
bmRpbmdTZWxlY3Rpb24oKSk7CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGluIGFuIGVt
cHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVtcHR5IHBhcmFncmFw
aCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVjdGlvbklzRW1wdHlQ
YXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNTdGFydE9mUGFyYWdy
YXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0VuZE9mUGFyYWdyYXBo
KGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1MDYxMmIwY2Vl
M2MzOTcxMTYzNWM4NWIxN2QyZGUzODhhYjIuLjExOTdmMTJmNjdjYmY5N2VlYjY0ZjM0MGVhZmFi
ODcyYWNiODhiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2ZXIsIGlmIHR5cGlu
ZyBzdHlsZSB3YXMgcHJldmlvdXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQgbm9kZSBhdCB0aGUg
cHJldmlvdXMKICAgICAvLyBwb3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBuZWVkIHRvIGNsZWFy
IHRoYXQgc3R5bGUgYXMgd2VsbC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgbV91cHN0cmVhbVN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBmcmFtZSgpLnNl
bGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTc0
MCw3ICs3NDAsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBo
cygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3Rh
cnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2VkID0gUmFuZ2U6OmNy
ZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0Jl
UmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGllbnQoKS0+
c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2Vk
LnB0cigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdp
bGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJl
cXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTgxNCw3ICs4MTQsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUo
KQogICAgIC8vIEluIHRoaXMgY2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRoZSBuZXcgY2hhcmFj
dGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBkZWxldGVkIG9uZXMs
CiAgICAgLy8gYnV0LCBpZiB3ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29tZSBiYWNrIGFuZCBz
dGFydCB0eXBpbmcgdGhhdCBzdHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28gc2VlIAogICAgIC8v
IHByZXNlcnZlVHlwaW5nU3R5bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLnNl
dFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBkb2N1bWVudCgpLnNl
bGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKIH0KIAog
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKQEAgLTg4
NSw3ICs4ODUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
IGlmICghbV9yZXBsYWNlKSB7CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9z
aW5nVGV4dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAgICAgICAg
IGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQotICAgICAgICAgICAg
ZnJhbWUoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9s
KTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxCZURlbGV0ZWRJblRl
eHRGaWVsZCh0ZXh0Q29udHJvbCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0aGlzIHRvIGxhdGVy
IG1ha2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05NDAsNyArOTQwLDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAKICAgICBib29sIHNob3VsZFJlYmFs
YWNlV2hpdGVTcGFjZSA9IHRydWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkpIHsKKyAgICBpZiAo
IWRvY3VtZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNl
c0luU2VjdXJlRmllbGQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9lbmRpbmdQb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkpIHsKICAgICAg
ICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwpAQCAtOTU0LDcg
Kzk1NCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgY2Fs
Y3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFvcmlnaW5hbFN0cmlu
Zy5pc0VtcHR5KCkpCi0gICAgICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0
aW9uQXRQb3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CisgICAgICAg
IGRvY3VtZW50KCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2Vu
ZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwgZW5kaW5nU2VsZWN0
aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRTdGF0ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMzZjdkYTE3Yzc4OTRl
MmNmNzg1NTU5YmM4NzZjODg0NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYwMDU2Yzc3Mzc3MDBl
MmI4ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAtMzIsNyAr
MzIsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKQEAgLTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21tYW5kOjpFZGl0Q29t
bWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKICAgICA6
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlv
bikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0U3RhcnRpbmdTZWxl
Y3Rpb24obV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
IHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlvbik7CiB9CiAKIEVk
aXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRp
bmdTZWxlY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewotICAgIEFTU0VSVChk
b2N1bWVudC5mcmFtZSgpKTsKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzdGFydGluZ1NlbGVj
dGlvbik7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbik7CiB9CiAKIEVk
aXRDb21tYW5kOjp+RWRpdENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1lJiBFZGl0Q29tbWFu
ZDo6ZnJhbWUoKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVy
biAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRpdENvbW1hbmQ6OmZy
YW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAgICByZXR1
cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0Q29tbWFuZDo6ZWRp
dGluZ0FjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0FjdGlvbjsKQEAgLTE2
OCwxMSArMTUzLDcgQEAgc3RhdGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21w
b3NpdGlvbklmUG9zc2libGUoRWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9vbCBFZGl0Q29tbWFu
ZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0gICAgYXV0byogZnJh
bWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBjb250YWluZXIgPSBt
X2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUo
KTsKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMTcs
NyArMTk4LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBpZiAoIUFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbih0eXBlLCB0ZXh0LCBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKaW5k
ZXggZGViY2ZmMDI0NWVkZjBkZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4uMmY2N2NkNzMzNGMy
YzhiZDU2OTBmMTEzNWMxMGQwMDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENv
bW1hbmQuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb21w
b3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKLWNsYXNz
IEZyYW1lOwogCiBTdHJpbmcgaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oRWRpdEFjdGlv
bik7CiAKQEAgLTY0LDggKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEVkaXRDb21t
YW5kKERvY3VtZW50JiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAg
ICBFZGl0Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUoKSBjb25zdDsKLSAg
ICBGcmFtZSYgZnJhbWUoKTsKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4g
bV9kb2N1bWVudDsgfQogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJlbnQoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZmMy
ZWZhOTUxZmY1MGE2ZmFkMzY5NDgzNTk5NmI4NTljZTU3OWZiMS4uOWI3Y2ZkMmE2ZTNiNWIzY2Ey
Y2NkMDU5NTM1NTVhYTIyYjI2ZmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBA
IC04NjksNyArODY5LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0IE5vZGUqIG5vZGUp
CiAKIFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoRG9jdW1l
bnQmIGRvY3VtZW50KQogewotICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUoKS0+ZWRpdG9yKCku
ZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChkb2N1bWVudC5lZGl0
b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNlIEVkaXRvclBhcmFn
cmFwaFNlcGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCk7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc1A6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggMGVhODk5MDc3OWMyMzNlODE0
NDg3YzcxMGViMzBlZTU5MjBiZDU4ZC4uMmM3NmFhZjE5ZGMyNDZhYTRmZGRlMTY2MWJiZWQxMjU0
MzE2YTUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTY4
Niw3ICsxNjg2LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5
bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJvcGVydGllc05vdElu
KCpzdHlsZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpjcmVhdGUoKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhtdXRh
YmxlU3R5bGUuZ2V0KCkpOwotICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQt
PmZyYW1lKCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOworICAgIGJvb2wgc2hvdWxk
U3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOwog
ICAgIGlmICghc2hvdWxkU3R5bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0VGV4dFN0eWxlcygq
ZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVs
dFNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRi
ZjYzYzA3YTlhMDllMzc5YmYxOTM4ZGM1OGEyLi5kMzA1ZjZiMDVmZGM1NmIzNzQ5MzRkMmVhZDdi
YWExMzkwMzIyYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzMsOCArMTcz
LDggQEAgc3RhdGljIFN0cmluZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlv
bihFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4dENvbW1hbmQgOiBw
dWJsaWMgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAgQ2xlYXJUZXh0Q29t
bWFuZChEb2N1bWVudCYgZG9jdW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENyZWF0ZUFuZEFwcGx5
KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRpYyB2b2lkIENyZWF0
ZUFuZEFwcGx5KERvY3VtZW50Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODksMTcgQEAgRWRpdEFj
dGlvbiBDbGVhclRleHRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4g
RWRpdEFjdGlvbjo6RGVsZXRlOwogfQogCi12b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFu
ZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFyVGV4dENvbW1hbmQ6
OkNyZWF0ZUFuZEFwcGx5KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoZnJhbWUtPnNl
bGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJvdW5kIHN0YWxlIGNv
bXBvc2l0aW9uIHN0YXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigpOworICAgIGRvY3Vt
ZW50LmVkaXRvcigpLmNsZWFyKCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBv
bGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21tYW5kID0gYWRvcHRS
ZWYoKm5ldyBDbGVhclRleHRDb21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkpOworICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CisgICAgYXV0
byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoZG9jdW1lbnQp
KTsKICAgICBjbGVhckNvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7
CiAgICAgY2xlYXJDb21tYW5kLT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsyMDcsMjQgQEAgdm9p
ZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZy
YW1lKQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVu
aWNvZGU7CiAKLVRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hh
bmdlKEZyYW1lJiBmcmFtZSwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2Vs
ZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zKQotICAg
IDogbV9mcmFtZShmcmFtZSkKK1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2Vs
ZWN0aW9uQ2hhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlv
bj4gdGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9u
PiBvcHRpb25zKQorICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50KSkKICAgICAsIG1f
b3B0aW9ucyhvcHRpb25zKQotICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZnJh
bWUuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwgbV93YXNJZ25vcmlu
Z1NlbGVjdGlvbkNoYW5nZXMoZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdl
cygpKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVz
V2VyZUVuYWJsZWQoZnJhbWUuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgp
KQorICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3VtZW50LnNlbGVjdGlv
bigpLmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246
OkVuYWJsZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRV
cGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmIChv
cHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUp
OworICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRy
dWUpOwogCiAgICAgaWYgKHRlbXBvcmFyeVNlbGVjdGlvbikgewotICAgICAgICBtX3NlbGVjdGlv
blRvUmVzdG9yZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBtX3Nl
bGVjdGlvblRvUmVzdG9yZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
ICAgICBzZXRTZWxlY3Rpb24odGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkpOwogICAgIH0KIH0K
QEAgLTIzNiwxMiArMjM2LDEyIEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6flRlbXBvcmFy
eVNlbGVjdGlvbkNoYW5nZSgpCiAKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAgIGF1dG8gcmV2ZWFs
U2VsZWN0aW9uID0gbV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpSZXZlYWxT
ZWxlY3Rpb24gPyBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRpdG9yOjpSZXZlYWxT
ZWxlY3Rpb246Ok5vOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24p
OworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
KG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24pOwogICAgIH0K
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFy
eVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVw
ZGF0ZXNXZXJlRW5hYmxlZCk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFVw
ZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CiAj
ZW5kaWYKIH0KIApAQCAtMjUwLDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3JhcnlTZWxlY3Rpb25D
aGFuZ2U6OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAg
ICAgYXV0byBvcHRpb25zID0gRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKCk7CiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9O
b3RTZXRGb2N1cykKICAgICAgICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0
Rm9jdXMpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24s
IG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxl
Y3Rpb24sIG9wdGlvbnMpOwogfQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIgaGFzIG1vdmVk
IHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8gd2Ugc2hvdWxkIHVz
ZSB0aGUgdGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRpdGluZyBvcGVyYXRp
b24uCiBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCog
ZXZlbnQpCiB7Ci0gICAgYXV0byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uOwogICAg
IC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxl
Y3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYsMTIgKzI3NiwxMiBA
QCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZl
bnQpCiAvLyBGdW5jdGlvbiBjb25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZpb3IgYSBmYWxsYmFj
ayB3aGVuIFBhZ2Ugb3IgU2V0dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVkaXRpbmdCZWhhdmlv
ciBFZGl0b3I6OmJlaGF2aW9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ0JlaGF2aW9y
KG1fZnJhbWUuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOworICAgIHJldHVybiBF
ZGl0aW5nQmVoYXZpb3IobV9kb2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUo
KSk7CiB9CiAKIEVkaXRvckNsaWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25zdAogewotICAgIGlm
IChQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Rv
Y3VtZW50LnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JDbGllbnQoKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJvb2wgRWRpdG9yOjpo
YW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0b3I6OmNhbkVkaXQo
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5F
ZGl0UmljaGx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVybiBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAK
IGVudW0gY2xhc3MgQ2xpcGJvYXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0NDIsNyBAQCBzdGF0
aWMgYm9vbCBkaXNwYXRjaENsaXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50PiYmIHRhcmdldCwg
Q2xpcGJvYXJkRXZlbnRLaW5kCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1dCgpCiB7Ci0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRG
aWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xp
cGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVu
dEtpbmQ6OkJlZm9yZUN1dCk7CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRI
VE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50
KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpCZWZv
cmVDb3B5KTsKIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9yOjpjYW5Db3B5KCkg
Y29uc3QKIHsKICAgICBpZiAoaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQo
KSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlzSW5Q
YXNzd29yZEZpZWxkKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5w
dXRGcm9tRWRpdGluZygpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgp
LmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5OCw3ICs0OTgsNyBA
QCBib29sIEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuRGVsZXRl
KCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0
dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKIH0KIApAQCAtNTI0LDcgKzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRTbWFydERlbGV0
ZSgpCiB7CiAgICAgaWYgKGJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnREZWxldGUoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuZ3JhbnVs
YXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAKIGJvb2wgRWRpdG9y
OjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIGJvb2wgRWRp
dG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRl
eHRHcmFudWxhcml0eSBnCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoaXNUeXBpbmdB
Y3Rpb24pIHsKICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZG9j
dW1lbnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVs
ZXRlIDogMCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJF
ZGl0aW5nT3BlcmF0aW9uKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBFZGl0b3I6OmRlbGV0
ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFy
aXR5IGcKIAogdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShib29s
IHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
aXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl
LCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEVkaXRv
cjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRB
Y3Rpb24gZWRpdGluZwogCiB2b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsKLSAgICBDbGVhclRl
eHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xlYXJUZXh0Q29tbWFu
ZDo6Q3JlYXRlQW5kQXBwbHkobV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFz
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQpA
QCAtNjYxLDcgKzY2MSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1
bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAKIHZvaWQgRWRpdG9y
OjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50
LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0
UmVwbGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24s
IE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlv
bi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4OSwxOSArNjg5
LDE5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50
RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1hZ2VFbGVtZW50c1Rv
TG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldmVhbFNl
bGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0aW9uID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmll
bGQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpQYXN0ZSkgewog
ICAgICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2li
bGVQb3NpdGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQo
KSk7Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUs
IHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+
c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwog
ICAgIH0KIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYm
IGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAgICAgIFN0cmluZyB0
ZXh0ID0gY29tbWFuZC0+ZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwotICAgICAgICByZXBs
YWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4dCwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCks
IEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVk
QnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KIApAQCAtNzI4
LDcgKzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0cjxSYW5nZT4gRWRp
dG9yOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShS
YW5nZSogcmFuZ2UpIGNvbnN0CkBAIC03NDQsNyArNzQ0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3Vs
ZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIAogYm9vbCBFZGl0b3I6OnRyeURIVE1M
Q29weSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJ
blBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlv
bigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkNvcHkpOwpAQCAtNzUyLDcgKzc1Miw3IEBAIGJvb2wg
RWRpdG9yOjp0cnlESFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxk
KCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3
b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlz
cGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBi
b2FyZEV2ZW50S2luZDo6Q3V0KTsKQEAgLTc2MCw3ICs3NjAsNyBAQCBib29sIEVkaXRvcjo6dHJ5
REhUTUxDdXQoKQogCiBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKIHsK
LSAgICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJ
bnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQp
CisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxk
U3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2xpZW50
KCkgJiYgY2xpZW50KCktPnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UsIGFjdGlvbik7CkBA
IC03ODIsMTcgKzc4MiwxNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKIAogYm9vbCBFZGl0b3I6
Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBzdGFydE5vZGU7Ci0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5v
ZGUoKTsKLSAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgIGlmIChtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAg
aWYgKGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2soZW5kTm9kZSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlCi0gICAgICAgIHN0YXJ0Tm9k
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC04MTIsMTIgKzgxMiwxMiBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVj
dGlvbigpIGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0
YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsK
LSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxl
bWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRh
Zyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CisgICAgfSBlbHNlIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFy
dE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xv
c2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5k
KCksIHVsVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9k
ZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBA
IC04MjcsMTIgKzgyNywxMiBAQCBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVub3JkZXJlZExp
c3RTdGF0ZSgpIGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RT
dGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7
Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQogICAgICAg
ICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xU
YWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOworICAgIH0gZWxzZSBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgYXV0byogc3Rh
cnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZyk7CisgICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNs
b3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVu
ZCgpLCBvbFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5v
ZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7CiAgICAgfQpA
QCAtODcyLDcgKzg3Miw3IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0cjxO
b2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC04ODIsNyArODgyLDcgQEAgUmVm
UHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8
Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogewotICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisg
ICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xp
c3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsT3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC04OTIsNyArODkyLDcgQEAgUmVmUHRy
PE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCkKIAogUmVm
UHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKQog
ewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25l
KCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+
IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTkwMiw3ICs5MDIsNyBA
QCBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJl
ZCgpCiAKIHZvaWQgRWRpdG9yOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxD
b21tYW5kOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC05MzIs
NyArOTMyLDcgQEAgRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIAogRWxlbWVudCogRWRpdG9yOjpmaW5k
RXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmluZEV2ZW50
VGFyZ2V0RnJvbShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXR1cm4g
ZmluZEV2ZW50VGFyZ2V0RnJvbShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
IH0KIAogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtOTQ2LDEzICs5NDYsMTMgQEAgdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uLAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
c2VsZWN0aW9uVHlwZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpOworICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZp
c2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJp
bmcgaW5wdXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdB
Y3Rpb24pOwogICAgIFN0cmluZyBpbnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRp
dGluZ1N0eWxlQW5kQWN0aW9uKCpzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChl
bGVtZW50ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5h
bWUsIGlucHV0RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NjksNyArOTY5LDgg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwg
RWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBj
bGllbnQoKS0+ZGlkQXBwbHlTdHlsZSgpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xp
ZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgZGlzcGF0
Y2hJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9
CkBAIC05ODQsMTMgKzk4NSwxMyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShT
dHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3RpbwogICAgIGlmICgh
c3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOworICAgIGF1dG8gc2Vs
ZWN0aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpOwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2Vs
ZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaW5wdXRUeXBlTmFtZSA9IGlu
cHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pOwogICAgIFN0cmluZyBp
bnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9uKHN0
eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFJl
ZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgIWRpc3BhdGNoQmVm
b3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTEwMDUsNyArMTAwNiw3IEBAIHZvaWQgRWRpdG9yOjphcHBs
eVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0Umlj
aGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgp
LT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRB
cHBseVN0eWxlKHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGlu
Z0FjdGlvbik7CiB9CkBAIC0xMDE2LDcgKzEwMTcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHls
ZVRvU2VsZWN0aW9uKFJlZjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
ZwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4
dCBkZWNvcmF0aW9ucyBzaW5jZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNs
aWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVz
b2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hv
dWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5w
dHIoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGlu
Z0FjdGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEwMjgsMjUgQEAgdm9pZCBF
ZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0
eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwg
IWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50
KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUs
IGVkaXRpbmdBY3Rpb24pOwogfQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHls
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7
Ci0gICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0
aW9uU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpCisgICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0g
RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikp
CiAgICAgICAgIHJldHVybiBlZGl0aW5nU3R5bGUtPmhhc1N0eWxlKHByb3BlcnR5SUQsIHZhbHVl
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uSGFz
U3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25z
dAogewotICAgIHJldHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSkt
PnRyaVN0YXRlT2ZTdHlsZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBy
ZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9m
U3R5bGUobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIFN0cmluZyBF
ZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCiB7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0
aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLAorICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGlu
Z1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSwKICAgICAgICAgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cik7CiAgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTExMzYsNyArMTEzNyw3IEBAIHZvaWQgRWRp
dG9yOjphcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCYgY29tbWFuZCkKICAgICAg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZygm
Y29tbWFuZCk7CiAKICAgICAgICAgaWYgKCFjb21tYW5kLnByZXNlcnZlc1R5cGluZ1N0eWxlKCkp
Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAg
ICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAg
ICAgICAgIC8vIENvbW1hbmQgd2lsbCBiZSBlcXVhbCB0byBsYXN0IGVkaXQgY29tbWFuZCBvbmx5
IGluIHRoZSBjYXNlIG9mIHR5cGluZwogICAgICAgICBpZiAobV9sYXN0RWRpdENvbW1hbmQuZ2V0
KCkgPT0gJmNvbW1hbmQpCkBAIC0xMjAwLDExICsxMjAxLDExIEBAIHZvaWQgRWRpdG9yOjpyZWFw
cGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24mIGNvbXBvc2l0aW9uKQogICAgIHJl
c3BvbmRUb0NoYW5nZWRDb250ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCi1FZGl0b3I6OkVkaXRv
cihGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorRWRpdG9yOjpFZGl0b3IoRG9j
dW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fa2ls
bFJpbmcobWFrZVVuaXF1ZTxQQUw6OktpbGxSaW5nPigpKQotICAgICwgbV9zcGVsbENoZWNrZXIo
bWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+KGZyYW1lKSkKLSAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGZyYW1lKSkK
KyAgICAsIG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihkb2N1bWVudCkp
CisgICAgLCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyPihkb2N1bWVudCkpCiAgICAgLCBtX2VkaXRvclVJVXBkYXRlVGltZXIo
KnRoaXMsICZFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoVEVM
RVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICwg
bV90ZWxlcGhvbmVOdW1iZXJEZXRlY3Rpb25VcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpCkBAIC0xMjIwLDcgKzEyMjEsNyBAQCB2b2lk
IEVkaXRvcjo6Y2xlYXIoKQogICAgIGlmIChtX2NvbXBvc2l0aW9uTm9kZSkgewogICAgICAgICBt
X2NvbXBvc2l0aW9uTm9kZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGNs
aWVudCA9IHRoaXMtPmNsaWVudCgpKQotICAgICAgICAgICAgY2xpZW50LT5kaXNjYXJkZWRDb21w
b3NpdGlvbigmbV9mcmFtZSk7CisgICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0
aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgfQogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25V
bmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xl
YXIoKTsKQEAgLTEyMjksNiArMTIzMCw3IEBAIHZvaWQgRWRpdG9yOjpjbGVhcigpCiAgICAgbV9t
YXJrID0geyB9OwogICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSB7IH07CiAg
ICAgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAKICNpZiBFTkFCTEUoVEVM
RVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIG1f
dGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIuc3RvcCgpOwpAQCAtMTIzOCwxMiAr
MTI0MCwxMiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQsIFRleHRFdmVudElu
cHV0VHlwZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCku
aGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1dFR5cGUpOwor
ICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJ
bnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKIH0KIAogYm9vbCBF
ZGl0b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRl
eHQpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0
RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4
dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNl
cnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9u
QWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZl
bnQpCkBAIC0xMzAzLDEwICsxMzA1LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0
U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAg
ICAgICAgIC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRpb25hbGl6ZSByZXZlYWxpbmcg
c2VsZWN0aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBiaXQKICAg
ICAgICAgICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3VzZWQgZnJhbWUuCiAgICAgICAg
ICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rp
b25BZnRlckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVkaXRlZEZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8q
IHBhZ2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFn
ZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTEzMTksMTAgKzEzMTksMTAgQEAgYm9vbCBFZGl0b3I6Omluc2Vy
dExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAg
IGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9u
IGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KTsKICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNv
bnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKGRvY3VtZW50
KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2Nv
cnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTEzMzksMTAgKzEzMzksMTAgQEAgYm9vbCBFZGl0
b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkp
CiAgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5z
ZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9F
ZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJv
b2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
PmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRvY3VtZW50KCksIGF1dG9jb3Jy
ZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3IgOiAwKTsKQEAgLTE0MDYsNyArMTQwNiw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0
T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgICAgIHVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAgIH0KIAotICAgIGlmIChlbmNs
b3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZv
ckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNm
ZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFj
ZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAgICAgICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxwdHI7CkBAIC0xNDI1LDcgKzE0
MjUsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZp
ZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3Rl
Ym9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBG
SVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0g
ICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxl
Y3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVk
ZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpj
cmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21h
cnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4
dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTE0MzQsMTAg
KzE0MzQsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3Bl
Y2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFjdGlvbikgewogICAgICAgICBT
dHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9y
VmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBv
c2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAg
IGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBF
ZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25G
b3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAg
ICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApAQCAtMTQ1NCw3ICsxNDU0LDcg
QEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIHJl
dHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7
CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVz
c29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7Ci0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3Rl
T3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFp
blRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0NzksNyArMTQ3OSw3IEBAIHZv
aWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBw
cmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0
ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0LCBQ
YXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxh
aW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAtMTYxNyw3ICsxNjE3LDcgQEAg
dm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0IFJlbmRlckxheWVyJiBsYXll
cikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9u
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRh
aW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CiAg
ICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODUxLDggKzE4
NTEsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkKIHZvaWQgRWRpdG9yOjpzZXRC
YXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBiYXNlV3JpdGluZ0RpcmVjdGlv
bkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAgIGlmIChpblNhbWVQYXJhZ3Jh
cGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpCisgICAgICAgICYm
IGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCiAg
ICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4ODIsNyArMTg4Miw3IEBAIFdy
aXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0
YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRpbmdEaXJlY3Rpb246OkxlZnRU
b1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHBvcyA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVx
dWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkxNyw3ICsxOTE3LDcgQEAg
dm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAvLyBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihyYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0KIAogdm9pZCBFZGl0b3I6OmNv
bmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUyLDI4ICsxOTUyLDI4IEBAIHZvaWQgRWRpdG9yOjpj
b25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBjbGFzcyBTZXRDb21wb3Np
dGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlKEZyYW1lJiBmcmFt
ZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUlu
ZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlKERvY3VtZW50JiBkb2N1bWVu
dCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQorICAgICAgICAsIG1f
dHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUoKSkKICAgICB7Ci0gICAgICAg
IG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAg
ICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7
CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQogICAgIHsKLSAgICAgICAgbV9m
cmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Ci0gICAgICAg
IGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAg
ICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxz
ZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3Io
KS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+ZGlkVXBkYXRlQ29tcG9zaXRp
b24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7CisgICAgUmVmUHRyPERvY3Vt
ZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yIG1fdHlwaW5n
R2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogewogICAgIEFTU0VSVCht
b2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKTsK
LSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9mcmFtZSk7Cisg
ICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9jdW1lbnQpOwog
CiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAgICAgICAgIEFTU0VSVCh0ZXh0
ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4NCw3ICsxOTg0LDcgQEAgdm9pZCBFZGl0b3I6OnNl
dENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUp
CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3Rv
bUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGN1cnJlbnQgY29t
cG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVkIGNvbXBvc2l0aW9uIHRleHQg
aWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBAIC0yMDAwLDEzICsyMDAwLDEz
IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENv
bXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24p
IHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0aGF0IGRpc2FncmVlcyBhYm91
dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMgd2l0aCB0eXBpbmcgbGF0ZXIg
b24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKCZtX2ZyYW1lKTsKKyAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVudCk7CiAgICAgfQogfQogCiB2
b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9z
aXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCwgdW5z
aWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9z
aXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0
aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVzIHN0eWxlcyBiZWZvcmUgc2V0
dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZlbnQKICAgICAvLyBpbnNlcnRp
bmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0ZXh0IG5vZGVzIG9kZGx5LgpA
QCAtMjAxNSw3ICsyMDE1LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KIAogICAgIHNlbGVj
dENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkK
KyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjAyMywx
MCArMjAyMywxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIGlmIChpc1N0YXJ0aW5n
VG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8vIFdlIHBhc3MgVHlwaW5nQ29t
bWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSBy
ZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4gZmluYWxpemVkLgogICAgICAg
ICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1lbnQoKSwgMCwgVHlwaW5nQ29t
bWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChjdXJyZW50U2VsZWN0
aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVsZXRpb24gd2FzIHByZXZlbnRl
ZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBzbyB0
aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29tcG9zZWQuCi0gICAgICAgICAg
ICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5k
KCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRT
ZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwODIsOCArMjA4Miw4
IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0
IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRl
eHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBo
YXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKLSAgICAgICAgUG9z
aXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
KyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKICAgICAgICAgTm9kZSogYmFz
ZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIHVuc2lnbmVkIGJhc2VPZmZz
ZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIE5vZGUqIGV4dGVu
dE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIxMDksNyArMjEwOSw3IEBAIHZv
aWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3Rv
cjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6
bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsg
c2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFy
dCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rp
b246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTIxMjMsNyArMjEyMyw3IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAg
ICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTM5LDcgKzIxMzksNyBAQCB2b2lkIEVk
aXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBPbiBNYWMgT1Mg
WCwgd2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBwYW5l
bCwgd2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91bGQgcmVtb3ZlIG1pc3NwZWxs
aW5nIG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjovL3Byb2JsZW0v
NTM5NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVN
YXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0y
MTUyLDE0ICsyMTUyLDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKIAogdm9pZCBF
ZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9u
KQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKLQorICAgIFJlZjxEb2N1
bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgCiAgICAgLy8gVGhlIGJh
c2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2VzIC0gZnJvbSB0aGUgc2VsZWN0
aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAgIC8vIHRoZW4gd2Ugd3JhcCBh
bmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94aW1hdGVseSkgd2hlcmUgd2Ug
c3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24s
IHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcgYXQgdGhlIHNlbGVjdGlvbiBl
bmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsu
Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdl
ID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNl
bGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsyMzA4LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFu
Y2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91Ymxl
ZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAgIGF1dG8gYmFk
R3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2Us
IHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwucmFuZ2UubG9jYXRpb24sIGdy
YW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rp
b24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAog
ICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdy
YW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMo
KS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3Jh
bW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMyMCw4ICsyMzIwLDggQEAgdm9pZCBF
ZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9u
KQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0ZXIu
CiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFj
dGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVsbGluZ09mZnNldCwgbWlzc3Bl
bGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3Nw
ZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICAgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIzMzUsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNz
cGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAogICAgIGlm
ICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwg
IWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlz
Q29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM4OSw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxs
ZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFt
bWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpyYW5nZSkuaXNV
bmdyYW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0MDQsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0
b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAK
ICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAg
dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0
MTIsNyArMjQxMiw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vCiB7CiAgICAgaWYgKHVuaWZp
ZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwot
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0Nh
cmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0
U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlv
biA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7CiAgICAgICAgICAgICB3b3Jk
U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKQEAgLTI0
NzIsNyArMjQ3Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
cihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBi
b29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUp
OworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAg
ICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjU5NCwxOSArMjU5NCwxOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgIC8v
IElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3NwZWxs
ZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlzRW1w
dHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbigqbWlzc3BlbGxp
bmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNl
bGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBp
ZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsK
KyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRU
ZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hv
dWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3Rl
ZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0
aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNt
YXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAKICAgICAgICAgLy8gUmVzZXQg
dGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwotICAg
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCkpCkBAIC0yNjc4LDcgKzI2NzgsNyBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5h
YmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5n
RW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tp
bmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7
CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAt
MjcyNiw3ICsyNzI2LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAocGFyYWdy
YXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgYXN5bmNo
cm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CisgICAgYm9vbCBhc3luY2hyb25v
dXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAogICAgIC8vIEluIGFzeW5jaHJv
bm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNl
LgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5
cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7CkBAIC0yNzQxLDcgKzI3
NDEsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0KIAogICAgIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRD
aGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJlc3Vs
dHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9mUGFy
YWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZWRP
cHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAg
ICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdHMpOwog
fQogCkBAIC0yNzg3LDcgKzI3ODcsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2lu
Z1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYQogCiB2b2lk
IEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAgIFJl
ZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3Rl
ZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0Q2hlY2tpbmdPcHRpb25zID0g
cmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFw
aCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJlcXVlc3QuYXV0b21hdGljUmVw
bGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKQEAgLTI4MTEsOSAr
MjgxMSw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNr
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rp
b25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9y
bVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBzaG91bGRDaGVja0ZvckNvcnJl
Y3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CisgICAg
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUo
KSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAgLy8g
QXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBs
YXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICAgICAgUG9zaXRpb24g
Y2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7
CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3JhcGgub2Zmc2V0VG8oY2FyZXRQ
b3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgICAgICByZXN0b3JlU2VsZWN0
aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+
IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0KCkubGVuZ3RoKCkgfHwgcGFy
YWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBuZXdsaW5lQ2hhcmFjdGVyKSkK
QEAgLTI4OTUsMTMgKzI4OTUsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNv
bnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2Uo
cmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRv
UmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxl
Y3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25U
b1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykg
ewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVj
dGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rp
b25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJD
aGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQpAQCAt
MjkxMCw3ICsyOTEwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNw
ZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAg
ICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFy
YWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJl
c3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQq
IHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9u
KHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsKICAgICAgICAg
ICAgICAgICB9CiAKQEAgLTI5NDAsMTMgKzI5NDAsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8
VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKICAg
ICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAmJiBzZWxlY3Rpb25PZmZzZXQg
PD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewogICAgICAgICAgICAgYXV0byBz
ZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKHsgMCwgc2VsZWN0aW9u
T2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0
aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERP
V05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJv
dW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0
aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0
aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0g
ICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAg
ICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3
YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMDIz
LDggKzMwMjMsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIE9mIGNvdXJzZSwg
aWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90ZW50aWFsbHkgd2lsbCBlZGl0
IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMgb2YKICAgICAvLyBzZWxlY3Rp
b24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGJvdW5kYXJpZXMuCiAg
ICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZT
ZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKHN0YXJ0
T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGaXJzdCB3b3Jk
IGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUgc3RhcnQgb2Ygc2VsZWN0aW9u
LgpAQCAtMzA5NiwxMSArMzA5Niw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0
cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2lu
dCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3
aW5kb3dQb2ludCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUmVmUHRy
PEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwog
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1l
VmlldykKQEAgLTMxMTcsNyArMzExMyw3IEBAIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25B
ZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSA9IFNlbGVj
dGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNl
bGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlvbik7CisgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24ocmV2ZWFsTW9kZSwgYWxpZ25t
ZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4
aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI1LDcgQEAgdm9pZCBFZGl0b3I6OnNldEln
bm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRS
ZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3Vw
cHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9u
IGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAogICAgIGlmICghaWdub3JlKQot
ICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNlbmRpZgogICAgIGlmICghaWdu
b3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09IFJldmVhbFNlbGVjdGlvbjo6
WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwpAQCAtMzE1Miw3
ICszMTQ4LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVk
JiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsKICAgICBpZiAoIW1fY29tcG9z
aXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAg
ICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzUsNyArMzE3MSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFu
c3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0zMjAwLDEwICszMTk2LDEwIEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQog
ICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKIAog
ICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAgaWYgKG5ld1NlbGVjdGlvbiAh
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgIGlmICghbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBp
ZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsK
KyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIH0KIAogICAgIC8v
IEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAtMzI1NSw3ICszMjUxLDcgQEAg
dm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKQogCiB2b2lkIEVk
aXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRp
b24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBJ
ZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBkb24ndCB1cGRhdGUgdGhlIHNl
bGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCkuaXNPcnBoYW4oKSB8fCBuZXdT
ZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjUsOSArMzI2MSw5IEBAIHZvaWQgRWRp
dG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyB3b3JrIHRoYXQgaXQgbXVz
dCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBjYW4gYmUg
aW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4gcHJvZHVj
ZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NzI5MzE1
PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMgZm9yIHNl
bGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAgYm9vbCBzZWxlY3Rpb25EaWRO
b3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8
fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
KQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24s
IG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBu
ZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBp
ZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKIAog
ICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHZpc3Vh
bGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIERPTS4KICAgICAv
LyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4gdGhlIGZvbGxvd2luZyAodGhl
IGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODIsMTMgKzMyNzgsMTMgQEAgdm9pZCBFZGl0
b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBu
ZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgaWYgKHNlbGVjdGlv
bkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5y
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIFN0cmlu
ZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3I7Ci0gICAgaWYgKG1fZnJh
bWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRh
cmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2Vz
RmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMjk2
LDcgKzMyOTIsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAogU3RyaW5n
IEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKICAgICBUZXh0
SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvckVtaXRzSW1hZ2VBbHRUZXh0
OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRh
cmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAgIGJlaGF2aW9yIHw9IFRleHRJ
dGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBzZWxlY3RlZFRleHQoYmVoYXZp
b3IpOwogfQpAQCAtMzMwNCw3ICszMzAwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0
Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dChUZXh0
SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAgICAvLyBXZSByZW1vdmUgJ1ww
JyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhl
IHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBhdXRvIGVu
ZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNP
cnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCkBAIC0zMzE0LDcgKzMz
MTAsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
YmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWY8RG9jdW1l
bnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAtMzMyMiw3ICszMzE4LDcgQEAg
UmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9s
ZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2Yg
cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFy
dERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKQEAgLTMzMzAsNyArMzMyNiw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJF
bGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXpl
CiAgICAgcmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAgIFZp
c2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9s
ZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0gICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVj
dGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxl
Y3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAogICAg
IHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNTAsOCArMzM0Niw4IEBAIHZvaWQgRWRpdG9y
OjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vob2xk
ZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUgTGVn
YWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB0
byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAobV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNl
ZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9u
QmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9u
OjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQtPmZv
Y3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2ZWRQ
b3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogfQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3QpCkBA
IC0zNDAzLDcgKzMzOTksNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFu
Z2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBj
b25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgp
ICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkgJiYg
Y2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwpAQCAtMzQxMiwxNyArMzQwOCwxNyBAQCBib29s
IEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9s
ZFNlbGVjdGlvbiwgY29uc3QgVgogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHls
ZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAg
aWYgKHN0eWxlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFy
VHlwaW5nU3R5bGUoKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGlu
Z1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhl
IGN1cnJlbnQgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0
eWxlOwotICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKICAgICAgICAgdHlwaW5nU3R5bGUg
PSBleGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CiAgICAgZWxzZQogICAgICAgICB0eXBpbmdT
dHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRl
VHlwaW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVU
eXBpbmdTdHlsZUF0KHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0
eWxlcywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gdHlwaW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1v
dmVCbG9ja1Byb3BlcnRpZXMoKTsKQEAgLTM0MzAsNyArMzQyNiw3IEBAIHZvaWQgRWRpdG9yOjpj
b21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0CiAgICAgICAgIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwg
YmxvY2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CiAKICAgICAvLyBTZXQg
dGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOworICAgIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOwog
fQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGll
cyYgcHJvcGVydGllcywgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ4OSwxOSArMzQ4
NSwxOSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29u
c3QKIAogYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRP
cHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOwor
ICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdl
T2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsK
IAogICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJh
bmdlLCBET1dOU1RSRUFNKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKIAogICAgIGlm
ICghKG9wdGlvbnMuY29udGFpbnMoRG9Ob3RSZXZlYWxTZWxlY3Rpb24pKSkKLSAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MzU5OCw3ICszNTk0LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICBpZiAocmFuZ2Up
IHsKICAgICAgICAgaWYgKCZyYW5nZS0+b3duZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQog
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzRnJh
bWVJblJhbmdlKG1fZnJhbWUsICpyYW5nZSkpCisgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5S
YW5nZSgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIGlmICghc2VhcmNoUmFuZ2UpCkBAIC0zNjY4LDcgKzM2NjQsNyBAQCB2b2lk
IEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiwgT3B0aW9uU2V0PEZyYW1lUwogI2VuZGlmCiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAg
IGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAg
Y2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsK
IAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgaWYgKHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSkKQEAgLTM2
OTEsOCArMzY4Nyw2IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9yOjpz
aG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVs
ZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6
aXNTdXBwb3J0ZWQoKTsKIH0KIApAQCAtMzcwNSw5ICszNjk5LDkgQEAgdm9pZCBFZGl0b3I6OnNj
YW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UmFu
Z2U+PiBtYXJrZWRSYW5nZXM7CiAKLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1Jh
bmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAg
ICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2Ut
PnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdl
c0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MjksNyArMzcyMyw3IEBA
IHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgUmVm
UHRyPFJhbmdlPiBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBpZiAoYXV0byog
cGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1l
bnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigp
LnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzc0Miw3ICszNzM2LDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25G
b3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1i
ZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1f
ZnJhbWUucGFnZSgpKQorICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAg
ICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9u
ZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKIH0KIApAQCAtMzgwMSw5ICszNzk1LDkgQEAgdm9pZCBF
ZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNl
bnRXb3JkczsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwot
ICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBW
aXNpYmxlUG9zaXRpb24gbmV3U3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSk7CisgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQu
c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJv
d3NpbmcpIHsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICAgICAgICAgIG5ld0FkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29y
ZChuZXdTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAjZWxzZQpAQCAtMzg1Niw3ICsz
ODUwLDcgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYg
KCFtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbikKICAgICAgICAg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9s
ZFNlbGVjdGlvbik7CiAKLSAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRv
clVJVXBkYXRlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgbm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBk
YXRlcygpOwpAQCAtMzg4Myw3ICszODc3LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmth
YmxlKE5vZGUqIG5vZGUpCiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZv
cihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxl
bmd0aCkgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAg
IE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM5NTAsMTAgKzM5NDQsMTAgQEAgT3B0aW9uU2V0PFRl
eHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0
IE5vZGUmIHJvb3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0
cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQorc3RhdGlj
IFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8g
d29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNl
bGVjdGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0
KCkpIDogZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogc3Rh
dGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24pCkBAIC0zOTY3LDggKzM5NjEsOCBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVX
b3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3Ry
aW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcg
PSBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihtX2ZyYW1lKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRp
ZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgIGlmIChyYW5nZUZvckN1cnJl
bnRseVR5cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkK
ICAgICAgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7
CiAKQEAgLTM5NzcsNyArMzk3MSw3IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0
ZVJlcXVlc3QoKSBjb25zdAogICAgIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5n
ZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQo
KSkpOwogfQogCkBAIC00MDQ0LDcgKzQwMzgsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZv
bnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0
ZXMgYXR0cmlidXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1
dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3Zl
KTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5m
cmFtZSgpLCBub2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5v
ZGVUb1JlbW92ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDg1
LDcgKzQwNzksNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxl
Y3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0
ZXMudGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3Jk
ZXIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1
dGVzLnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09y
ZGVyKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBz
d2l0Y2ggKHN0eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Umln
aHQ6CkBAIC00MTExLDcgKzQxMDUsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRy
aWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIGF1dG8gdHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlw
aW5nU3R5bGUoKSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlw
aW5nU3R5bGUtPnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5z
dHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkp
IHsKQEAgLTQxOTksMTIgKzQxOTMsOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRh
Y2htZW50VXBkYXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFj
aG1lbnRJZGVudGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRX
aXRoSWRlbnRpZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFt
ZS5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAg
IGZvciAoYXV0byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7
Ci0gICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklk
ZW50aWZpZXIoaWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2Rv
Y3VtZW50LmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAg
Y2xpZW50KCktPmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBh
dHRhY2htZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3Jj
QXR0ciksIGF0dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyMjcsNyArNDIxNyw3IEBAIHZv
aWQgRWRpdG9yOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0
aW9uYWw8dWludDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRp
ZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5k
aWRhdGUgPSB0cnVlOwogCkBAIC00MjQ2LDcgKzQyMzYsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxl
QWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQog
CiBib29sIEVkaXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAg
IHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVz
Rm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjYyLDEzICs0MjUy
LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNv
bnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3Jp
dGVNb2RlRW5hYmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3
cml0ZU1vZGVFbmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Js
b2NrQ3Vyc29yKG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9y
Ojpkb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0g
ICAgcmV0dXJuICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAK
IFJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQzMjEs
OSArNDMwNSw5IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBo
YXNNdWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsK
IAotICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1Jl
bW92ZTsKLSAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2Zy
YW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBz
dHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9S
ZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQg
PSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMzUsMTEgKzQzMTksMTEgQEAg
Y29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9u
dHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0
aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7Cisg
ICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0
YXRpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQz
NzEsNyArNDM1NSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omluc2VydEVk
aXRhYmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJ
bWFnZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2Vs
ZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmlu
ZGV4IGFkOWVkYTI2MThjOWE4ODBiZWNiYjFjZTRkNjhiYjU5Yjg5YzIwYzAuLmZmYTc3ZDBlNTQ4
ZTdjZTc3ZGNkNDdiYjBlNjFjMTBhODQ3N2YwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkVk
aXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9h
cmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTksMTMgKzEy
MCwxMyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4X3Qgewog
CiBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZpc2libGVT
ZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uPiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KERvY3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9w
dGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJDT1JFX0VY
UE9SVCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZyYW1lPiBt
X2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRpb25TZXQ8
VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dhc0lnbm9y
aW5nU2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTM3LDcg
KzEzOCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSB7
CiBwdWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUmIGZyYW1l
KQotICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQsIFRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgOiBt
X3NlbGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBUZW1wb3Jh
cnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewogICAgIH0K
IApAQCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihGcmFtZSYp
OworICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsKIAogICAg
IGVudW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIsNyBAQCBw
dWJsaWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBXRUJDT1JF
X0VYUE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxD
b21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29tbWFuZChj
b25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBEb2N1bWVu
dCYpOwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcm
IHBhcmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikg
Y29uc3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dl
cmluZ0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0
ZToKICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQgeyBudWxs
cHRyIH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAgICAgIFJl
ZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1l
OwogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1lbnVPcktl
eUJpbmRpbmcuCkBAIC01NjcsNyArNTY5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQmKTsKIAog
cHJpdmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1bWVudCYg
ZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29sIGNhbkRl
bGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFz
dGVib2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTgsNyArNjIwLDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcm
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBE
b2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1f
bGFzdEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAg
ICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAppbmRleCA5ZGJhNzA2OWFkMTQyOGNkYzNiOTBmYjZjMDQ3MWZhYTEwZmI4
YzQ0Li5iZDUxODBlYjQwMGVhNzkyMTUxYjZmNzk4YjYwZWNiOGNmZmRhZWFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTExMDksNiArMTEwOSw3IEBAIHN0
YXRpYyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0aE1hcmso
RnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYp
CiB7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50KCkpOwog
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMTgz
NiwxMiArMTgzNywxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBpbnRl
cm5hbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpDb21tYW5k
IEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAgIHJldHVy
biBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9tTWVudU9y
S2V5QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5k
KGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3VtZW50KTsK
IH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4gQ29tbWFu
ZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOworICAgIHJl
dHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9kb2N1
bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVudU9yS2V5
QmluZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTg1MywxMiArMTg1NCwxMyBA
QCBFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1hbmQ6OkNv
bW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5k
U291cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNv
bnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBz
b3VyY2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5kKQogICAg
ICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1lIDogbnVs
bHB0cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxwdHIpCisg
ICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikKIHsKLSAg
ICBBU1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1f
ZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJp
bmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4NjgsOSAr
MTg3MCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxsb3dFeGVj
dXRpb25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQtPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2ZyYW1lLT5k
b2N1bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkgIT0g
bV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29tbWFuZC0+
ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1ldGVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1
MDcyZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OS4uNDQ2MWZiMTFlNzY4OGY4NGY1NGFkZjg5
NTNlY2EyNWU5NDhhZDAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKQEAgLTEzOSwxMyArMTM5LDE0IEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJvbGxlcjo6
ZWRpdGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlv
bmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRBbHdh
eXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0
dXJuICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNl
bGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4gIWRvY3VtZW50IHx8IGRvY3VtZW50
LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25h
bCgpOwogfQogCi1GcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQot
ICAgIDogbV9mcmFtZShmcmFtZSkKK0ZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1
bWVudCogZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFt
ZShkb2N1bWVudD8gZG9jdW1lbnQtPmZyYW1lKCkgOiBudWxscHRyKQogICAgICwgbV94UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24o
KSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAjaWYgRU5BQkxF
KFRFWFRfQ0FSRVQpCkBAIC0xNTYsNyArMTU3LDcgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1lU2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQog
ICAgICwgbV9jYXJldFBhaW50KHRydWUpCiAgICAgLCBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRl
ZChmYWxzZSkKLSAgICAsIG1fZm9jdXNlZChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpICYmIGZyYW1l
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGZyYW1lKQorICAg
ICwgbV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gbV9mcmFtZSkKICAgICAsIG1f
c2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKGZhbHNlKQogICAgICwgbV9wZW5kaW5nU2VsZWN0aW9uVXBk
YXRlKGZhbHNlKQogICAgICwgbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGlu
Z1NlbGVjdGlvbihmYWxzZSkKQEAgLTE2NSwxNCArMTY2LDI0IEBAIEZyYW1lU2VsZWN0aW9uOjpG
cmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2NhcmV0QmxpbmtzKHRydWUpCiAj
ZW5kaWYKIHsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9m
cmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9j
dW1lbnQpKQogICAgICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOworICAg
IAorICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOworICAg
IGlmIChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwor
I2lmIFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3MgfCBk
b2VzIG5vdCBibGluaykKKyAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9jdXNlZCk7Cisj
ZWxzZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8gVmlzaWJsZSA6
IEhpZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0
YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2Vs
ZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICByZXR1
cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJv
b3QgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB1
c2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduKQpAQCAtMjg0LDcgKzI5NSw3
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBwYXNzCiAgICAgRW5kUG9pbnRzQWRqdXN0bWVudE1vZGUg
ZW5kcG9pbnRzQWRqdXN0bWVudE1vZGUpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3Rpb24gPSBwYXNzZWROZXdTZWxlY3Rpb247Ci0gICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgbmV3U2VsZWN0aW9u
LmlzRGlyZWN0aW9uYWwoKTsKKyAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBuZXdTZWxlY3Rpb24uaXNEaXJl
Y3Rpb25hbCgpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJhc2UgPSBtX29yaWdpbmFsQmFzZS5p
c05vdE51bGwoKSA/IG1fb3JpZ2luYWxCYXNlIDogbmV3U2VsZWN0aW9uLnZpc2libGVCYXNlKCk7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld0Jhc2UgPSBiYXNlOwpAQCAtMzIyLDcgKzMzMyw3IEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFu
Y2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgYm9vbCBzaG91bGRDbGVhclR5cGluZ1N0eWxl
ID0gb3B0aW9ucy5jb250YWlucyhDbGVhclR5cGluZ1N0eWxlKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uUG9zc2libHlXaXRob3V0RGlyZWN0aW9u
OwotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSkK
KyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkp
CiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogCiAgICAgaWYg
KCFtX2ZyYW1lKSB7CkBAIC0zMzQsNyArMzQ1LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8K
ICAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBh
biBpbmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3VtZW50KiBuZXdTZWxlY3Rpb25Eb2N1bWVudCA9
IG5ld1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoUmVmUHRyPEZy
YW1lPiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1NlbGVjdGlvbkRvY3VtZW50LT5mcmFtZSgpKSB7
Ci0gICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxl
Y3Rpb25Eb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAo
bmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBt
X2RvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uRnJhbWUtPnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICAgICAgLy8gSXQncyBw
b3NzaWJsZSB0aGF0IGR1cmluZyB0aGUgYWJvdmUgc2V0IHNlbGVjdGlvbiwgdGhpcyBGcmFtZVNl
bGVjdGlvbiBoYXMgYmVlbiBtb2RpZmllZCBieQogICAgICAgICAgICAgICAgIC8vIHNlbGVjdEZy
YW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkLCBidXQgdGhhdCB0aGUgc2VsZWN0aW9u
IGlzIG5vIGxvbmdlciB2YWxpZCBzaW5jZQpAQCAtMzQ5LDcgKzM2MCw3IEBAIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlz
aWJsZVNlbGVjdGlvCiAgICAgbV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5OwogCiAgICAgaWYg
KGNsb3NlVHlwaW5nKQotICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhtX2ZyYW1l
KTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoKm1fZG9jdW1lbnQpOwogCiAg
ICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUo
KTsKQEAgLTM1Nyw3ICszNjgsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25X
aXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIFZpc2li
bGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBkaWRNdXRh
dGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlmIChkaWRN
dXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxD
aGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5n
ZSgpOwogCiAgICAgbV9zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247CiAKQEAgLTM3MSwzNSArMzgy
LDMxIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0Fw
cGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRh
dGUoKTsKIAogICAgIGlmICghbmV3U2VsZWN0aW9uLmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERv
Tm90U2V0Rm9jdXMpKSB7Ci0gICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICAgICAgYXV0byogb2xkRm9jdXNl
ZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgICAgICBzZXRGb2N1
c2VkRWxlbWVudElmTmVlZGVkKCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGJlIG5l
ZWRlZC4KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkg
IT0gb2xkRm9jdXNlZEVsZW1lbnQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51
cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5mb2N1c2VkRWxl
bWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC0+dXBk
YXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIH0KIAogICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBw
b3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgogICAgIC8vIEl0IHdp
bGwgYmUgcmVzdG9yZWQgYnkgdGhlIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBu
ZWNlc3NhcnkuCiAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFy
ZW50SWZGdWxseVNlbGVjdGVkKCk7Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCkucmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPmVk
aXRvcigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsK
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0aW9uLWFwaS8jc2VsZWN0aW9uY2hh
bmdlLWV2ZW50CiAgICAgLy8gRklYTUU6IFNwZWMgZG9lc24ndCBzcGVjaWZ5IHdoaWNoIHRhc2sg
c291cmNlIHRvIHVzZS4KLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5xdWV1ZVRhc2tUb0Rpc3Bh
dGNoRXZlbnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50
OjpJc0NhbmNlbGFibGU6Ok5vKSk7CisgICAgbV9kb2N1bWVudC0+cXVldWVUYXNrVG9EaXNwYXRj
aEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQogewotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFt
ZSk7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYg
KCFzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9u
cywgYWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWlu
RnJhbWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1v
ZGU6OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNl
bGVjdGlvbikKQEAgLTQxMSwyNyArNDE4LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAg
ICAgbV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0
aW9uVXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVj
YWxjKCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3
KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAg
aWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmxheW91dENvbnRleHQoKS5pc0xheW91dFBlbmRp
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGlu
dGVudCk7CiAKICAgICBpZiAob3B0aW9ucyAmIElzVXNlclRyaWdnZXJlZCkgewotICAgICAgICBp
ZiAoYXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIGlm
IChhdXRvKiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAg
ICAgIGNsaWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9
CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxl
KEZyYW1lJiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlv
dXRPclN0eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkK
LSAgICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKICNlbHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwor
ICAgIGRvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEs
NyArNDQ4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUo
UmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9
PSBSZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlv
blJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5n
U2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1
bWVudC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVj
dGlvbigpOwogfQogCkBAIC00NTcsNyArNDY0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBk
YXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQK
ICAgICBpZiAobV9zZWxlY3Rpb25SZXZlYWxNb2RlICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRv
Tm90UmV2ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAg
ICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVu
U2VsZWN0aW9uSXNSZXZlYWxlZCgpKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+ZWRpdG9yKCku
YmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCiAg
ICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2
ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyA6IFNj
cm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGlu
Z1NlbGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXMgOiBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CkBAIC00NzEsNyArNDc4LDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hh
bmdlSW50ZW50JiBpbnQKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNG
b3JTZWxlY3Rpb24oKQogewogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikg
JiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3
MTAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZv
cm0oYm9vbCBpc0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2lu
dCB0byB0aGUgc2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAv
LyB0byB3aGljaCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlz
IGNhbiBiZSBjaGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0g
ICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdh
eXNFeHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVu
dCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNl
bGVjdGlvbkZyb21FeHRlbnRFbmRwb2ludCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24u
aXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOwogCiAgICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MzAsNyBA
QCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0
Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRpbwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwog
Ci0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRT
a2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgeworICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9j
dW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0
KCkpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3Zpbmcgcmln
aHQsIHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVydGhlciBhbmQgdGhlbiBtb3Zl
IG9uZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBzZW1hbnRpY3Mgb2YgcHJldmlv
dXNXb3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRoZQpAQCAtODU1LDcgKzg2Miw3
IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9z
aXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnJpZ2h0
KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdy
YW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVu
TW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0g
bV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBT
cGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBv
c2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAg
ICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNl
V2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEwNzYs
NyArMTA4Myw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5n
TGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3MgPSBW
aXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpLmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1Jp
Z2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBT
cGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5n
UmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBj
dXJyZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpOwogICAgICAgICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tp
cHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBA
IC0xMzYyLDcgKzEzNjksNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRp
b24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNl
clRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6
YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlz
UmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVudCAm
JiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlm
eUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVT
ZWxlY3Rpb25Cb3VuZGFyeSwgdGV4dFNlbGVjdGlvbldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0
eShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpAQCAtMTM3NCw4ICsxMzgxLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRl
cmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAg
aWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBv
cmlnaW5hbFN0YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAobV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0g
ICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUq
IGNhY2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAg
ICBjYWNoZS0+c2V0VGV4dFNlbGVjdGlvbkludGVudCh0ZXh0U2VsZWN0aW9uSW50ZW50KGFsdGVy
LCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSk7CiAgICAgfQogCkBAIC0xMzg0LDcgKzEzOTEsNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgIC8vIE5vdGU6IHRoZSBTVEFSVCBwb3NpdGlv
biB0eXBlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQgd291bGQgYmUKICAg
ICAvLyB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHR5cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb24gc2V0LgogICAgIExheW91dFVuaXQgeCA9IGxpbmVEaXJl
Y3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9zZWxl
Y3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlv
bihtX2ZyYW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlv
bi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1f
ZG9jdW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgc3dpdGNoIChh
bHRlcikgewogICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6CkBAIC0xMzk0LDcgKzE0MDEsNyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAgICAgIGlmICghbV9zZWxlY3Rpb24uaXNDYXJl
dCgpCiAgICAgICAgICAgICAmJiAoZ3JhbnVsYXJpdHkgPT0gV29yZEdyYW51bGFyaXR5IHx8IGdy
YW51bGFyaXR5ID09IFBhcmFncmFwaEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IExpbmVH
cmFudWxhcml0eSkKLSAgICAgICAgICAgICYmIG1fZnJhbWUgJiYgIW1fZnJhbWUtPmVkaXRvcigp
LmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQo
KSkgeworICAgICAgICAgICAgJiYgbV9kb2N1bWVudCAmJiAhbV9kb2N1bWVudC0+ZWRpdG9yKCku
YmVoYXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgp
KSB7CiAgICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIHNlbGVjdGlvbiBnbyBhY3Jvc3MgdGhl
IGJhc2UgcG9zaXRpb24gZGlyZWN0bHkuIE5lZWRlZCB0byBtYXRjaCBtYWMKICAgICAgICAgICAg
IC8vIGJlaGF2aW9yIHdoZW4sIGZvciBpbnN0YW5jZSwgd29yZC1zZWxlY3RpbmcgYmFja3dhcmRz
IHN0YXJ0aW5nIHdpdGggdGhlIGNhcmV0IGluCiAgICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9m
IGEgd29yZCBhbmQgdGhlbiB3b3JkLXNlbGVjdGluZyBmb3J3YXJkLCBsZWF2aW5nIHRoZSBjYXJl
dCBpbiB0aGUKQEAgLTE0MDcsNyArMTQxNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlm
eShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAK
ICAgICAgICAgLy8gU3RhbmRhcmQgTWFjIGJlaGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91
bmRhcnkgaXMgZ3JvdyB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCiAgICAg
ICAgIC8vIGJhc2UgaW4gcGxhY2UgYW5kIG1vdmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4
dFZpZXcuCi0gICAgICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZp
b3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8
fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAg
ICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAg
ICAgIHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jaygpOwpAQCAtMTUxNyw3ICsxNTI0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0
aWMKICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBtX2dy
YW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVjdGlvbi5zZXRJ
c0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUp
IHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGly
ZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkg
fHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTE1NjcsNyArMTU3NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyKCkKICAgICBzZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6
cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92
ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxh
cml0eTsKIApAQCAtMTU3NSw3ICsxNTgyLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFy
ZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAjZW5kaWYK
IAotICAgIGlmIChhdXRvKiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAg
aWYgKGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXct
PnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAKICAgICBzZXRTZWxlY3Rpb25XaXRob3V0
VXBkYXRpbmdBcHBlYXJhbmNlKFZpc2libGVTZWxlY3Rpb24oKSwgZGVmYXVsdFNldFNlbGVjdGlv
bk9wdGlvbnMoKSwgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxh
cml0eSk7CkBAIC0xNjU1LDkgKzE2NjIsOSBAQCBzdGF0aWMgYm9vbCBpc05vbk9ycGhhbmVkQ2Fy
ZXQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBJbnRSZWN0IEZyYW1lU2Vs
ZWN0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKQogewotICAgIGlm
ICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUp
OworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50
KTsKICAgICByZWNvbXB1dGVDYXJldFJlY3QoKTsKICAgICBpZiAoaW5zaWRlRml4ZWQpCiAgICAg
ICAgICppbnNpZGVGaXhlZCA9IG1fY2FyZXRJbnNpZGVQb3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwx
MCArMTY4MiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQog
ICAgIGlmICghc2hvdWxkVXBkYXRlQ2FyZXRSZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEZyYW1lVmlldyogdiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXco
KTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCF2KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OTAsNyArMTY5Nyw3IEBAIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgICAgICBjbGVhckNhcmV0UmVj
dCgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
U3RhcnQgPSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgICAgIGlmICh1cGRh
dGVDYXJldFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwgdmlzaWJsZVN0YXJ0KSkgeworICAgICAg
ICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAg
ICAgICAgICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkg
PSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTcxNSw3ICsxNzIyLDcgQEAgYm9vbCBGcmFtZVNl
bGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAj
aWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpIHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9
IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewogICAgICAgICBib29sIHByZXZpb3VzT3JOZXdD
YXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSA9IG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxl
KCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUgJiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKSk7CiAgICAgICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmlldywgcHJl
dmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlKSkgewogICAgICAgICAgICAgaWYg
KG1fcHJldmlvdXNDYXJldE5vZGUpCkBAIC0xODk0LDEyICsxOTAxLDExIEBAIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKICAgICBp
ZiAoIWlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8qIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQorICAgIGlm
ICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0UmVxdWVz
dCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwg
cmVzdWx0KTsKICAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAg
aWYgKCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTk2OCw5ICsxOTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpzZWxlY3RBbGwoKQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCk7Ci0KLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1
c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+
Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRF
bGVtZW50KSkgewogICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRv
d25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpZiAo
c2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwoKSkgewpAQCAtMjAwMCw4ICsyMDA0LDggQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICAgICAgaWYgKHJvb3QpCiAgICAgICAg
ICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHJvb3QtPnNoYWRvd0hvc3QoKTsKICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAg
ICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsK
KyAgICAgICAgICAgIHJvb3QgPSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbV9kb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIXJvb3QpCkBAIC0yMDU4LDkgKzIwNjIsOCBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmlu
aXR5IGFmZmluaXR5LCBTaG91bGRDbAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0
aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFjdGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3Vz
ZWRBbmRBY3RpdmUoKTsKLSAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KCptX2ZyYW1lLT5kb2N1
bWVudCgpKTsKIAotICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgbV9k
b2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCiAjaWYgVVNFKFVJS0lUX0VESVRJTkcp
CiAgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQpAQCAtMjA3
MSw3ICsyMDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVD
aGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBk
YXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgotICAgIGlmIChSZW5kZXJWaWV3
KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmll
dyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCku
cmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpA
QCAtMjA4Miw3ICsyMDg1LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZl
U3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVT
ZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoKSBjaGVjayBpZiB0
aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAgICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0
aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3NlLgotICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKICAgICAgICAgZWxlbWVudC0+
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQpAQCAtMjEwNywxMyArMjExMCwx
MyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkKGJvb2wgZmxhZykKIAogYm9vbCBG
cmFtZVNlbGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9mb2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50
LT5wYWdlKCkgJiYgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2
ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1pbmxpbmUgc3RhdGljIGJvb2wgc2hv
dWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKEZyYW1lKiBmcmFtZSkKK2lubGluZSBz
dGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRG9jdW1lbnQq
IGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5k
KCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRC
bGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5k
KCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2Fy
ZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIxMzIsMTIgKzIxMzUsMTIgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgYm9vbCBwYWludEJsb2NrQ3Vy
c29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpICYm
ICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAgICBib29s
IGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsKIAotICAg
IGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0Vu
YWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgYm9vbCBzaG91bGRCbGluayA9ICFwYWludEJs
b2NrQ3Vyc29yICYmIGNhcmV0SXNWaXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChvbGRTZWxlY3Rp
b24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKIAogICAgIC8vIElmIHRo
ZSBjYXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGltZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0
aCBhCiAgICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhlIG5ldyBsb2NhdGlvbi4KLSAgICBpZiAoY2Fy
ZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5r
aW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZnJhbWUpKQorICAgIGlmIChjYXJldFJlY3RDaGFuZ2Vk
T3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGlu
Z0NvbW1hbmQobV9kb2N1bWVudCkpCiAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsK
IAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3Qg
dG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsyMTU2LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyogdmll
dyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjIwMiw4ICsyMjA1LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2Fy
ZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlv
dXQgaGVyZS4KLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRh
dGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIGlmIChtX2RvY3VtZW50KQorICAgICAg
ICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAK
ICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3
LDEwICsyMjUwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQoKQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRC
cm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5z
ZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgaWYgKGNhcmV0QnJvd3Npbmcp
IHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQo
bV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAg
ICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVs
ZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMjYyLDE2ICsyMjY1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZv
Y3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNGcmFt
ZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gbWFr
ZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlz
IHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQtPmlz
TW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAgICAg
ICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1l
bnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0YXJn
ZXQgPSB0YXJnZXQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKICAgICAgICAgfQotICAg
ICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKKyAg
ICAgICAgbV9kb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CiAgICAgfQogCiAg
ICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAgICBt
X2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51
bGxwdHIsICptX2ZyYW1lKTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERy
YWdDYXJldChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIz
MDAsMTYgKzIzMDMsMTYgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAobV9mcmFt
ZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3Vs
ZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBy
ZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0IEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlz
aWJsZUNvbnRlbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAg
IGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAgIHVw
ZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKLSAgICBhdXRv
KiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgdXBkYXRlU2Vs
ZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJl
bmRlclZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3
KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCkBAIC0yMzI1LDE0ICsyMzI4LDE0IEBA
IEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVD
b250ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBw
ZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRl
eHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Zy
YW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQtPnJlbmRlclZpZXco
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVj
dChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgYXV0
byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50LT52aWV3KCktPnZpc2libGVDb250ZW50
UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAg
Zm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2Vs
ZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJz
ZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0
aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0LDcgKzIzNjcsNyBAQCBzdGF0aWMgSFRNTEZvcm1F
bGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJh
bWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkgY29uc3QKIHsKICAgICAvLyBTdGFydCBsb29raW5n
IGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRo
ZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVudC0+Zm9j
dXNlZEVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQogICAgICAgICBzdGFydCA9IG1fc2VsZWN0
aW9uLnN0YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCkBAIC0yNDA3LDggKzI0MTAs
OCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFs
TW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogICAgICAgICAgICAgICAgIGxheWVyLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdubWVu
dCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAg
ICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhm
YWxzZSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnBh
Z2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGlu
Z0ZyYW1lKCptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgp
KQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVu
dCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0yNDI2LDE3ICsyNDI5LDE2IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKICAgICAvLyBQdXQgYSBj
YXJldCBpbnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0
aGVyIHRoZQogICAgIC8vIGVudGlyZSBXZWJWaWV3IGlzIGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUg
aXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGNh
cmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7
Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwg
Y2FyZXRCcm93c2luZykpCisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGlmICghaXNOb25lKCkgfHwgISht
X2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAg
IHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3Rh
cnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVj
dGlvbi5hZmZpbml0eSgpKSkpIHx8ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAg
IGlmICghbV9kb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2li
bGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkp
IHx8ICFtX2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKICNl
bmRpZgogCi0gICAgaWYgKGF1dG8qIGJvZHkgPSBkb2N1bWVudC0+Ym9keSgpKQorICAgIGlmIChh
dXRvKiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpKQogICAgICAgICBzZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoYm9keSksIERPV05TVFJF
QU0pKTsKIH0KIApAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikK
ICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCku
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVj
dGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigp
LnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxl
Y3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjpkaXNw
YXRjaFNlbGVjdFN0YXJ0KCkKQEAgLTI0NjQsNyArMjQ2Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihib29sIHNob3VsZFNob3dCbG9ja0N1cnNvcikK
IHsKICAgICBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciA9IHNob3VsZFNob3dCbG9ja0N1cnNvcjsK
IAotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogCiAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ4
NCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRl
clN0eWxlQ2hhbmdlKCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRp
bWVyRmlyZWQoKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOwor
ICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdG9yKCptX2RvY3VtZW50KTsKICAgICB1cGRhdGVBcHBl
YXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UoKQogewotICAgIGlm
IChhdXRvKiBjbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICBpZiAoYXV0
byogY2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgIGNsaWVu
dC0+dXBkYXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKCk7CiAK
ICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwpAQCAtMjcyMyw3ICsyNzI1LDcgQEAgUmVm
UHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rp
b24oaW50IGFtb3VudCkgY29uc3QKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VP
bkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkK
IHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9kb2N1bWVu
dC0+Y3JlYXRlUmFuZ2UoKTsKICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRp
b24pOwogICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5ndGgpOwog
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0
UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKQEAgLTI5MDQsNyArMjkwNiw3IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MpCiAgICAgaWYg
KG1fY2FyZXRCbGlua3MgPT0gY2FyZXRCbGlua3MpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFC
TEUoVEVYVF9DQVJFVCkKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsgCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKG1fY2FyZXRQYWludCkgewogICAgICAg
ICBtX2NhcmV0UGFpbnQgPSBmYWxzZTsgCiAgICAgICAgIGludmFsaWRhdGVDYXJldFJlY3QoKTsg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1
OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVhMDUwOC4uNTVkMjkzNDgxM2RlNzBlNjViZDJjMGQ0Mzdi
N2ZmZjE0N2RhNTdhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApA
QCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0g
bnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9j
dW1lbnQqID0gbnVsbHB0cik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAgICAgCkBAIC0xNTgsNyAr
MTU4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5n
ZShSYW5nZSosIEVBZmZpbml0eSwgU2hvdWxkQ2xvc2VUeXBpbmcsIEVVc2VyVHJpZ2dlcmVkID0g
Tm90VXNlclRyaWdnZXJlZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yRGVz
dHJ1Y3Rpb24oKTsKKyAgICB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIAogICAg
IHZvaWQgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0KCk7CiAgICAgdm9pZCBzY2hlZHVsZUFw
cGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCk7CkBAIC0zMzgsNiArMzM4LDcgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisgICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBMYXlvdXRVbml0IG1feFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggNzMwNzZkZTFiNzliOWYw
OWZmOWYzMTI3YTgzZTViMDgzZDU3ODU5My4uNjYwMWRiOGZjYjRlMzdmNGFkYjIwYWYxNzgyZTIy
MTI0Y2YxM2JkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5z
aWduZWQKIAogdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAg
ICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBmcmFtZSgpLnNldHRpbmdzKCkucGFzc3dvcmRF
Y2hvRW5hYmxlZCgpOworICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGRvY3VtZW50KCku
c2V0dGluZ3MoKS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CiAgICAgaWYgKHBhc3N3b3JkRWNob0Vu
YWJsZWQpCiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVh
a0NvbW1hbmQuY3BwCmluZGV4IDE3NmQ4ZjA4OWFmNTAyNjZkZDg5OGZhOTc3NGY5NzQxZGIzOTlk
ZmIuLjI3MzU1ZTY2ZmI4OWQ1NTQyY2Q2YTliZWE4OGUyYzI2MmY1MDc4M2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcApAQCAtMTQy
LDcgKzE0Miw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAg
ICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCiAKLSAg
ICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCku
dHlwaW5nU3R5bGUoKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRv
Y3VtZW50KCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKIAogICAgIGlmICh0eXBpbmdTdHls
ZSAmJiAhdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBcHBseSB0aGUgdHlw
aW5nIHN0eWxlIHRvIHRoZSBpbnNlcnRlZCBsaW5lIGJyZWFrLCBzbyB0aGF0IGlmIHRoZSBzZWxl
Y3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5k
ZXggZTkxMzFmNmZiZjMyZDg2MzA1MGFhMWVmMjA4ZTViNGY0NDA0OWI2YS4uMWJiMGQwNTI4NzBj
NDUxMzY5OTQ3MTlkMGVjMDY1YjNlZDA5NmQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEluc2VydFRl
eHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gYW55dGhpbmcgb3RoZXIgdGhhbiBOb1Nl
bGVjdGlvbi4gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhIHJlYWwgZW5kaW5n
U2VsZWN0aW9uLCBzbyBiYWlsIG91dC4KICAgICAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZnJhbWUoKS5lZGl0
b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKKyAgICB9IGVsc2UgaWYgKGRvY3VtZW50
KCkuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChwZXJm
b3JtT3ZlcndyaXRlKG1fdGV4dCwgbV9zZWxlY3RJbnNlcnRlZFRleHQpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICBzZXRFbmRpbmdTZWxlY3Rpb25XaXRob3V0VmFsaWRhdGlvbihzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUg
dGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCi0gICAgaWYgKFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5
cGluZ1N0eWxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7CisgICAgaWYg
KFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS50eXBpbmdTdHlsZSgpKSB7CiAgICAgICAgIHR5cGluZ1N0eWxlLT5wcmVwYXJlVG9BcHBseUF0
KGVuZFBvc2l0aW9uLCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CiAg
ICAgICAgIGlmICghdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIGFwcGx5U3R5
bGUodHlwaW5nU3R5bGUuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDU0NjBiNzVjYWJkMjNkZDU1
YWQ5MzlkMDE0YjU4MjkyZWQ5ZDRlYTIuLjY4ZTA4MzUyYTRjMTBkODY4YmYxZTQ2OWJmNzVjOTU2
ZDEzZjA1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VS
YW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBSZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9yYW5nZVRvQmVSZXBsYWNl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQorICAgIGlmICghZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNlZCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4
IDUyNzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcuLjQ5Njk5MTlkOTFhMTE0
OTVjMjk4YzkyYTc2NjcyNmI5MmUxNjk1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMTgxLDcgKzExODEsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBGSVhN
RTogQ2FuIHRoaXMgd2FpdCB1bnRpbCBhZnRlciB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIHBlcmZv
cm1lZD8gIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQogICAgIC8vIGFueSB3b3JrIHBlcmZvcm1l
ZCBhZnRlciB0aGlzIHRoYXQgcXVlcmllcyBvciB1c2VzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAg
ZnJhbWUoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRo
ZSBkZXN0aW5hdGlvbiB0byBlbmQgdXAgaW5zaWRlIG5vZGVzIHRoYXQgd2VyZW4ndCBzZWxlY3Rl
ZC4gIFRvIGF2b2lkIHRoYXQsIHdlIG1vdmUgdGhlCiAgICAgLy8gcG9zaXRpb24gZm9yd2FyZCB3
aXRob3V0IGNoYW5naW5nIHRoZSB2aXNpYmxlIHBvc2l0aW9uIHNvIHdlJ3JlIHN0aWxsIGF0IHRo
ZSBzYW1lIHZpc2libGUgbG9jYXRpb24sIGJ1dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYzA2NWMwMmNhMTNmZDI1MTcwZDZiMjFiMWY4
OThlOWJhNzliZTYzOC4uMGRkMjZhODFlOTBiNjc4NzRjMzM1Y2VmMTIxMDdlMjE0YmRmZDg2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCkBA
IC00MCw3ICs0MCw3IEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpCiAKIHZvaWQgU2V0U2VsZWN0
aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9
IGZyYW1lKCkuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRv
Y3VtZW50KCkuc2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNl
bGVjdGlvbihtX3NlbGVjdGlvblRvU2V0KSAmJiAhbV9zZWxlY3Rpb25Ub1NldC5pc05vbmVPck9y
cGhhbmVkKCkpIHsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvblRv
U2V0LCBtX29wdGlvbnMpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFNldFNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7
Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCkuc2VsZWN0aW9uKCk7Cisg
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCk7CiAK
ICAgICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlv
bigpKSAmJiAhc3RhcnRpbmdTZWxlY3Rpb24oKS5pc05vbmVPck9ycGhhbmVkKCkpCiAgICAgICAg
IHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9vcHRpb25zKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAxNzJkODVmZDQ2NmYy
ODM2NmI1NTgwNmQwOWJmNjAxZmUxYzVmODE5Li41MGMxNzUzZjE2ZDk2OGZhOTZiYzJiYzZiNjEx
YjQ5OGZmMjQ5NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hl
Y2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBA
IC05OCw4ICs5OCw4IEBAIHZvaWQgU3BlbGxDaGVja1JlcXVlc3Q6OnJlcXVlc3RlckRlc3Ryb3ll
ZCgpCiAgICAgbV9jaGVja2VyID0gbnVsbHB0cjsKIH0KIAotU3BlbGxDaGVja2VyOjpTcGVsbENo
ZWNrZXIoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1NwZWxsQ2hlY2tlcjo6
U3BlbGxDaGVja2VyKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiAgICAgLCBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgqdGhpcywgJlNwZWxsQ2hl
Y2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QpCiB7CiB9CkBAIC0xMTQsNyAr
MTE0LDcgQEAgU3BlbGxDaGVja2VyOjp+U3BlbGxDaGVja2VyKCkKIAogVGV4dENoZWNrZXJDbGll
bnQqIFNwZWxsQ2hlY2tlcjo6Y2xpZW50KCkgY29uc3QKIHsKLSAgICBQYWdlKiBwYWdlID0gbV9m
cmFtZS5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpOwogICAgIGlm
ICghcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHBhZ2UtPmVkaXRv
ckNsaWVudCgpLnRleHRDaGVja2VyKCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBTcGVsbENo
ZWNrZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KCkKIAogYm9vbCBTcGVsbENo
ZWNrZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHJl
dHVybiBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKTsKIH0KIAogYm9vbCBTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFu
Z2UmIHJhbmdlKSBjb25zdApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpp
bnZva2VSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogICAgIGlmICgh
Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gV1RG
TW92ZShyZXF1ZXN0KTsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1f
cHJvY2Vzc2luZ1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
IGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9wcm9jZXNzaW5nUmVxdWVzdCwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgU3BlbGxDaGVj
a2VyOjplbnF1ZXVlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKQEAg
LTE5OSw3ICsxOTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soVGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVjdAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQW5kUmVwbGFjZUZvcigqbV9wcm9j
ZXNzaW5nUmVxdWVzdCwgcmVzdWx0cyk7CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQW5k
UmVwbGFjZUZvcigqbV9wcm9jZXNzaW5nUmVxdWVzdCwgcmVzdWx0cyk7CiAKICAgICBpZiAobV9s
YXN0UHJvY2Vzc2VkSWRlbnRpZmllci50b1VJbnQ2NCgpIDwgaWRlbnRpZmllci50b1VJbnQ2NCgp
KQogICAgICAgICBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKQEAgLTIx
OSw3ICsyMTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKFRleHRDaGVj
a2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgogICAgICAgICBpZiAocmVxdWVz
dERhdGEuY2hlY2tpbmdUeXBlcygpLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIp
KQogICAgICAgICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsK
ICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2ZyYW1l
LmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3Qt
PmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOworICAgICAgICAgICAgbV9kb2N1bWVudC5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1Jhbmdl
KCksIG1hcmtlclR5cGVzKTsKICAgICB9CiAgICAgZGlkQ2hlY2soaWRlbnRpZmllciwgcmVzdWx0
cyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAppbmRleCBjMzZhZTJjMzBm
ZTlmYjViZWY2NzA3MzIyMmVjNDNlNDRhZDdmMmMwLi5kMTlmY2ZkZTM4NDE1YjAxMTVjZjhjZGFh
NDhhODY2MDhhODExOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKQEAg
LTc2LDcgKzc2LDcgQEAgY2xhc3MgU3BlbGxDaGVja2VyIHsKIHB1YmxpYzoKICAgICBmcmllbmQg
Y2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiAKLSAgICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRnJh
bWUmKTsKKyAgICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRG9jdW1lbnQmKTsKICAgICB+U3BlbGxD
aGVja2VyKCk7CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0OwpAQCAt
MTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDaGVja0NhbmNlbChUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRDaGVjayhUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKIAot
ICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogICAgIFRleHRD
aGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOwogICAgIFRl
eHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwCmluZGV4IDk5ZThmMTU4ODhlYWU5M2YzZDY4ZTA0ZDg5ZWZmNTc1NjQ2YmMzNzkuLjU5
MjA4NDUzNTFlYTQwM2I4Yzg3MzQzYWRhNzZiNzQzNjNkZjA1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApAQCAtNjUs
NyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGlmICghbV9oYXNCZWVuVW5kb25lKSB7Ci0gICAgICAgICAgICBmcmFtZSgpLmVk
aXRvcigpLnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2Nv
cnJlY3RlZCwgbV9jb3JyZWN0aW9uKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCku
dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fY29ycmVjdGVk
LCBtX2NvcnJlY3Rpb24pOwogICAgICAgICAgICAgbV9oYXNCZWVuVW5kb25lID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKKyAgICBpZiAoIWRvY3VtZW50
KCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJl
Y3RlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNl
dFNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQsIEZyYW1l
U2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246
OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKaW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRmNTYxOGZiYWJiMjVh
ZS4uZjMxMjhkN2VhNTdkNTY3NjM5MThhMzEzYWI3N2I2NjQ5ZTViNjQwMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNjMsMTMgKzE2MywxMCBAQCBUeXBp
bmdDb21tYW5kOjpUeXBpbmdDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgRVR5cGluZ0NvbW1h
bmQgY29tbWFuZFR5cGUsIGNvbgogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlv
bihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlw
ZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUo
KTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuaXNS
YW5nZSgpKQorICAgIGlmICghZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Cisg
ICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBp
bmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0
aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShjb21w
b3NpdGlvblR5cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVu
dFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTE4Myw4
ICsxODAsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCYg
ZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbQogdm9pZCBUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJh
Y3RlckdyYW51bGFyaXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFz
dFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpk
b2N1bWVudC5mcmFtZSgpKSkgewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJl
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQu
ZnJhbWUoKSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0Nv
bW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkg
eworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAgICAgICAgbGFz
dFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBs
ZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlw
ZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5z
ZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tp
bmcpOwpAQCAtMTk5LDEwICsxOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVBy
ZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcgogdm9pZCBU
eXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQs
IE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIC8v
IEZJWE1FOiBGb3J3YXJkIGRlbGV0ZSBpbiBUZXh0RWRpdCBhcHBlYXJzIHRvIG9wZW4gYW5kIGNs
b3NlIGEgbmV3IHR5cGluZyBjb21tYW5kLgotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZy
YW1lKCk7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5KSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKLSAgICAgICAgICAg
IHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGlu
Z0NvbW1hbmQuZ2V0KCksIGZyYW1lKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5k
PiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBp
bmcoZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZy
b21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudCk7CiAg
ICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25z
ICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2
ZW50U3BlbGxDaGVja2luZyk7CkBAIC0yMTQsMTAgKzIxMCw5IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9w
dGlvbnMsCiAgICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBGb3J3YXJkRGVsZXRl
S2V5LCBlbXB0eVN0cmluZygpLCBvcHRpb25zLCBncmFudWxhcml0eSktPmFwcGx5KCk7CiB9CiAK
LXZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVu
dFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBGcmFtZSogZnJhbWUpCit2
b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRG9jdW1lbnQmIGRvY3VtZW50
KQogewotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2Vs
ZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgIGlmIChjdXJyZW50U2VsZWN0aW9uID09IHR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVj
dGlvbigpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyNywzMSArMjIyLDI1IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlv
bihUeXBpbmdDb21tYW5kCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29t
cG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIGlmICghdGV4dC5pc0VtcHR5KCkp
Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKKyAgICAgICAgZG9jdW1lbnQuZWRp
dG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3
bGluZSh0ZXh0WzBdKSk7CiAgICAgCi0gICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3NpdGlvbik7CisgICAg
aW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIG9wdGlvbnMsIGNvbXBvc2l0aW9uKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZG4ndCBu
ZWVkIHRvIHRha2Ugc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLiBJdCBzaG91bGQgYmUgaWRlbnRpY2Fs
IHRvIEZyYW1lU2VsZWN0aW9uJ3MgY3VycmVudCBzZWxlY3Rpb24uCiB2b2lkIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2VydGlvbiwgT3B0aW9ucyBvcHRp
b25zLCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBSZWZQdHI8
RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAg
ICAgTE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0ICh0ZXh0ICVzKSIsIHRl
eHQudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rp
b24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlv
biBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAK
ICAgICBTdHJpbmcgbmV3VGV4dCA9IGRpc3BhdGNoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQodGV4
dCwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBvc2l0
aW9uUGVuZGluZyk7CiAgICAgCiAgICAgLy8gU2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHNl
bGVjdGlvbiBhcHByb3ByaWF0ZWx5IGlmIHdlIGFyZSB1c2luZyBhIHNlbGVjdGlvbgogICAgIC8v
IHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSW4gdGhlIGZ1
dHVyZSwgd2Ugc2hvdWxkIGNoYW5nZSBFZGl0Q29tbWFuZAogICAgIC8vIHRvIGRlYWwgd2l0aCBj
dXN0b20gc2VsZWN0aW9ucyBpbiBhIGdlbmVyYWwgd2F5IHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxs
IG9mIHRoZSBjb21tYW5kcy4KLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUp
KSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxh
c3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAg
IGlmIChsYXN0VHlwaW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkgIT0gc2VsZWN0aW9uRm9y
SW5zZXJ0aW9uKSB7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U3RhcnRpbmdT
ZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKQEAgLTI2
NiwxMiArMjU1LDEyIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYg
ZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzCiAgICAgfQogCiAgICAgYXV0
byBjbWQgPSBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEluc2VydFRleHQsIG5ld1Rl
eHQsIG9wdGlvbnMsIGNvbXBvc2l0aW9uVHlwZSk7Ci0gICAgYXBwbHlUZXh0SW5zZXJ0aW9uQ29t
bWFuZChmcmFtZS5nZXQoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJl
bnRTZWxlY3Rpb24pOworICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQoZG9jdW1lbnQuZnJh
bWUoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJlbnRTZWxlY3Rpb24p
OwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9j
dW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+
IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
ZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhk
b2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRp
b24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0
aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTI4NCw3ICsyNzMsNyBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9jdW1lbnQs
IE9wdGlvbnMgb3B0aW9ucykKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChS
ZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFu
ZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0SXNBdXRvY29tcGxldGlvbihmYWxzZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRBbmRO
b3RpZnlBY2Nlc3NpYmlsaXR5KCk7CkBAIC0yOTYsNyArMjg1LDcgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRv
Y3VtZW50KQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihE
b2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3Bl
bkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElz
QXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwog
ICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25J
bmRpY2F0b3Iob3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTMw
Nyw5ICsyOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cihEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucwogICAgIFR5cGluZ0NvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yLCBlbXB0eVN0cmluZygp
LCBvcHRpb25zKS0+YXBwbHkoKTsKIH0KIAotUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0Nv
bW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmIGZyYW1l
KQorUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIFJlZlB0cjxD
b21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0gZnJhbWUuZWRpdG9yKCkubGFz
dEVkaXRDb21tYW5kKCk7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRp
dENvbW1hbmQgPSBkb2N1bWVudC5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAo
IWxhc3RFZGl0Q29tbWFuZCB8fCAhbGFzdEVkaXRDb21tYW5kLT5pc1R5cGluZ0NvbW1hbmQoKSB8
fCAhc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmlz
T3BlbkZvck1vcmVUeXBpbmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMyMSwx
NiArMzEwLDE2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6c2hvdWxkRGVmZXJXaWxsQXBwbHlDb21t
YW5kVW50aWxBZGRpbmdUeXBpbmdDb21tYW5kKCkgY29uc3QKICAgICByZXR1cm4gIW1faXNIYW5k
bGluZ0luaXRpYWxUeXBpbmdDb21tYW5kIHx8IGVkaXRBY3Rpb25Jc0RlbGV0ZUJ5VHlwaW5nKGVk
aXRpbmdBY3Rpb24oKSk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRnJh
bWUqIGZyYW1lKQordm9pZCBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhEb2N1bWVudCYgZG9j
dW1lbnQpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkKKyAgICBp
ZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0Nv
bW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpCiAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5jbG9zZVR5cGluZygpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZv
aWQgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlv
bklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBuZXdTZWxlY3Rpb24pCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFu
ZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQogewotICAgIGlmIChSZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5
cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1Nl
bGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0RW5k
aW5nU2VsZWN0aW9uT25MYXN0SW5zZXJ0Q29tbWFuZChuZXdTZWxlY3Rpb24pOwogICAgIH0KQEAg
LTQzNiwxOSArNDI1LDE3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKCkK
IAogdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGlu
Z0NvbW1hbmQgY29tbWFuZFR5cGUpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KTsKLQogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlz
QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVk
aXRvcigpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAhZnJh
bWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAg
ICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKSkK
KyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1F1b3Rl
U3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlz
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5l
ZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYg
IWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1lLmVkaXRvcigpLmlzSGFuZGxpbmdB
Y2NlcHRlZENhbmRpZGF0ZSgpKQorICAgIGlmIChkb2N1bWVudCgpLmVkaXRvcigpLmlzSGFuZGxp
bmdBY2NlcHRlZENhbmRpZGF0ZSgpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICgh
ZnJhbWUuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBp
ZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgLy8gVGFrZSBhIGxvb2sgYXQgdGhlIHNl
bGVjdGlvbiB0aGF0IHJlc3VsdHMgYWZ0ZXIgdHlwaW5nIGFuZCBkZXRlcm1pbmUgd2hldGhlciB3
ZSBuZWVkIHRvIHNwZWxsY2hlY2suIApAQCAtNDY2LDkgKzQ1Myw5IEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRU
eXBlKQogICAgICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAg
ICAgaWYgKHJhbmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0
IHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21t
YW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29t
bWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90
ZWRDb250ZW50KSkKICAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWlu
VGV4dCgqcmFuZ2UpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgZnJhbWUuZWRpdG9y
KCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24o
KSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5n
U2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOwogICAgICAgICB9
IGVsc2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQpCi0gICAg
ICAgICAgICBmcmFtZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVy
KCk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oY29tbWFuZFR5cGUpOwogICAgICAgICAv
LyBJZiB0aGlzIGJ1ZyBnZXRzIGZpeGVkLCB0aGlzIFBMQVRGT1JNKElPU19GQU1JTFkpIGNvZGUg
Y291bGQgYmUgcmVtb3ZlZDoKQEAgLTQ4Myw3ICs0NzAsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkK
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQocHJldmlvdXMsIHN0YXJ0
V29yZFNpZGUpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFy
dCwgc3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikKLSAgICAgICAgICAgIGZy
YW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5n
U2VsZWN0aW9uKCksIGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFs
c2UpOwogI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIH0KIH0KQEAgLTQ5Nywy
NiArNDg0LDI2IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1h
bmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIFRleHRHCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgaWYgKCFyYW5nZSB8fCBpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpCi0g
ICAgICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAgICAgICAg
cmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogCi0gICAgcmV0dXJu
IGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5n
ZTo6Y3JlYXRlKCpyYW5nZSkgfSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2ls
bEFwcGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpyYW5nZSkgfSk7
CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEVUeXBp
bmdDb21tYW5kIGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgp
LmZyYW1lKCkpOwogCiAgICAgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoY29tbWFuZFR5cGVG
b3JBZGRlZFR5cGluZyk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBmcmFtZS5lZGl0b3Io
KS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVk
RWRpdGluZygqdGhpcyk7CiAgICAgLy8gU2luY2UgdGhlIHNwZWxsY2hlY2tpbmcgY29kZSBtYXkg
YWxzbyBwZXJmb3JtIGNvcnJlY3Rpb25zIGFuZCBvdGhlciByZXBsYWNlbWVudHMsIGl0IHNob3Vs
ZCBoYXBwZW4gYWZ0ZXIgdGhlIHR5cGluZyBjaGFuZ2VzLgogICAgIGlmICghbV9zaG91bGRQcmV2
ZW50U3BlbGxDaGVja2luZykKICAgICAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNv
bW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAvLyBUaGUgb2xkIHNwZWxsY2hl
Y2tpbmcgY29kZSByZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRvbmUgZmlyc3QsIHRvIHByZXZl
bnQgaXNzdWVzIGxpa2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8ZG9lc24ndD4gaXMgbWFya2Vk
IGFzIG1pc3NwZWxsZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRU
eXBlRm9yQWRkZWRUeXBpbmcpOwotICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0
aGlzKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICNl
bmRpZgogfQogCkBAIC01MzUsOSArNTIyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eShjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2UKIHsK
ICAgICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQgJXAgaW5zZXJ0VGV4dEFuZE5vdGlmeUFj
Y2Vzc2liaWxpdHkgKHRleHQgJXMsIHNlbGVjdEluc2VydGVkVGV4dCAlZCkiLCB0aGlzLCB0ZXh0
LnV0ZjgoKS5kYXRhKCksIHNlbGVjdEluc2VydGVkVGV4dCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5
UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRUZXh0KHRleHQsIHNlbGVjdElu
c2VydGVkVGV4dCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVU
eXBpbmcsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxh
Y2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCB0ZXh0LCBkb2N1bWVudCgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURl
bGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTU1
MCw5ICs1MzcsNiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3
bGluZXMoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAogICAgICAgICBtX2NvbXBvc2l0
aW9uVHlwZSA9PSBUZXh0Q29tcG9zaXRpb25Ob25lID8gSW5zZXJ0VGV4dENvbW1hbmQ6OlJlYmFs
YW5jZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzIDogSW5zZXJ0VGV4dENvbW1hbmQ6OlJl
YmFsYW5jZUFsbFdoaXRlc3BhY2VzLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNlcnRUZXh0KTsKIAog
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCksIGVuZGluZ1NlbGVj
dGlvbigpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNl
cnRUZXh0KTsKIH0KIApAQCAtNTY1LDE3ICs1NDksMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRMaW5lQnJlYWsoKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotCi0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydExpbmVCcmVhayk7
CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNz
aWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQo
ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxh
Y2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CiAgICAgaW5zZXJ0TGluZUJyZWFrKCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhU
ZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4i
LCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigp
LT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7
CiB9CiAKQEAgLTU4OCwxNyArNTY5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50
KCksIGZhbHNlLCBmYWxzZSwgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0UGFyYWdyYXBoKSk7Ci0K
LSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVj
dG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFj
ZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKLSAg
ICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgp
LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShy
ZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNjE1LDE3ICs1OTMsMTQgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRl
bnQoKQogICAgIH0KICAgICAgICAgCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtC
bG9ja3F1b3RlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZyYW1lJiBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAg
IHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3Rl
ZENvbnRlbnQpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vz
c2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRv
Y3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFncmFwaFNl
cGFyYXRvckluUXVvdGVkQ29udGVudCgpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFY
VGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxu
IiwgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24o
KS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkp
OwogfQogCkBAIC02NTIsMTAgKzYyNyw5IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFrZUVkaXRh
YmxlUm9vdEVtcHR5KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGRUb0tpbGxSaW5nKQogewot
ICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
b3IoZnJhbWUpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKGRvY3VtZW50KCkuZnJhbWUo
KSk7CiAKLSAgICBmcmFtZS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyhmYWxzZSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9y
V29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvblRvRGVsZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRv
OwpAQCAtNzQ4LDIwICs3MjIsMjAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIGJ1ZzoKICAg
ICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ2NTM3NTU+IFVJS2l0IHRleHQgd2lkZ2V0cyBzaG91
bGQgdXNlIFdlYktpdCBlZGl0aW5nIEFQSSB0byBtYW5pcHVsYXRlIHRleHQKLSAgICAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICAgICAg
Y2xvc2VUeXBpbmcoJmZyYW1lKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRvY3VtZW50
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBjbG9zZVR5cGluZyhkb2N1bWVu
dCgpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChzZWxl
Y3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRl
LmlzQ2FyZXQoKSB8fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rp
b24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKCF3
aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNl
bGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRv
S2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVk
aXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGRvY3Vt
ZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJl
cGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24g
YmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVs
ZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZv
ckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSwgYm9vbCBzaG91bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxs
UmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVu
dCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRl
TWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
bkFmdGVyVW5kbzsKQEAgLTg1NSwxMyArODI4LDEzIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNo
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhp
cyBidWc6CiAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdp
ZGdldHMgc2hvdWxkIHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0g
ICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
Ci0gICAgICAgIGNsb3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlv
bihkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBp
bmcoZG9jdW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5z
aG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rp
b25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVs
ZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxh
cml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQpAQCAtODcxLDcgKzg0
NCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91
bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJp
bmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6
S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0
KTsKICAgICAvLyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFy
dGluZ1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8q
IG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFu
ZEZvclNwZWNpYWxFbGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAppbmRleCA3NmU1Zjk5YmY5MjUzODU3NWNhYTM4NzZi
YjliNmI1NTRiOWZiNzVjLi44OTZiZjBiZDE1ZGJlM2Q0ODE4NDg5NWY2NDNmMWM4NjlkNThlYjc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaApAQCAtNjUsOSArNjUsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERvY3VtZW50JiwgT3B0
aW9ucyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50
JiwgT3B0aW9ucyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5R
dW90ZWRDb250ZW50KERvY3VtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRnJh
bWUqKTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhEb2N1bWVudCYpOwogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFz
Q3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3Vy
cmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7CiAjZW5kaWYKIAogICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcg
JnRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgaXNPcGVuRm9yTW9yZVR5cGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
bkZvck1vcmVUeXBpbmc7IH0KICAgICB2b2lkIGNsb3NlVHlwaW5nKCkgeyBtX29wZW5Gb3JNb3Jl
VHlwaW5nID0gZmFsc2U7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFz
dFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhGcmFtZSYpOworICAgIHN0YXRpYyBS
ZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
ZyhEb2N1bWVudCYpOwogCiAgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAgICAgYm9vbCBpc1R5
cGluZ0NvbW1hbmQoKSBjb25zdCBmaW5hbDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSBjb25zdCBm
aW5hbDsKICAgICBib29sIGlzQmVmb3JlSW5wdXRFdmVudENhbmNlbGFibGUoKSBjb25zdCBmaW5h
bDsKIAotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJl
bnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgdXBk
YXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5k
KiwgRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoRVR5
cGluZ0NvbW1hbmQpOwogICAgIGJvb2wgd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGlu
Z0NvbW1hbmQsIFRleHRHcmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiA9IGVtcHR5U3RyaW5nKCks
IFJlZlB0cjxSYW5nZT4mJiA9IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRWRpdG9yQ29jb2EubW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4NGRiNTYxMjkyZTc5NDI3N2Jm
Yjc2ZDU5ZS4uOTEwZGVlZjcwODRkMWZkYzhlMGY5YWUwNmU5MTNhMTFjNzYzZjE5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC04MCw4ICs4MCw4
IEBAIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVk
U3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqCiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvbklu
SFRNTEZvcm1hdCgpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBl
YXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNF
eGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0aW5n
cygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVD
b21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHJldHVy
biBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0Zv
clByaXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NT
aGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBT
ZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKIH0KIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VM
RU1FTlQpCkBAIC0xMDcsMTAgKzEwNywxMCBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5
cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgogCiB2
b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVi
b2FyZCkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVk
U3RyaW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
IAogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0gICAgY29udGVudC5jb250ZW50
T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2Fy
ZCgpOworICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRp
ZmllckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0g
Y2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3Jt
YXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblJU
RkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5S
VEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTEyNSwxMCArMTI1LDEw
IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBw
YXN0ZWJvYXJkKQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRl
ckRhdGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogCiAgICAgUGFzdGVib2FyZFdyaXRlckRhdGE6OldlYkNv
bnRlbnQgd2ViQ29udGVudDsKLSAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1l
LmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgd2ViQ29u
dGVudC5jb250ZW50T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVi
b2FyZCgpOwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENv
cHlPckRlbGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNl
bGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZv
cm1hdCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRG
b3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZv
aWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2Fy
ZFdyaXRlckRhdGEpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5X
ZWJBcmNoaXZlRm9ybWF0KCkKIHsKLSAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZl
OjpjcmVhdGVGcm9tU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICBhdXRvIGFyY2hpdmUgPSBMZWdh
Y3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAg
ICAgaWYgKCFhcmNoaXZlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkp
OwpAQCAtMTcxLDExICsxNzEsMTEgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nU2VsZWN0aW9uRm9y
UGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKQogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0
cmluZywgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0g
ICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMo
bV9mcmFtZSwgYXR0cmlidXRlZFN0cmluZykpIHsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIGlm
IChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgYXR0cmlidXRlZFN0cmluZykpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRJ
bnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFn
bWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3RlSGFuZGxp
bmcpOwogICAgICAgICB9CkBAIC0yMjEsNyArMjIxLDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
RWRpdG9yOjpkYXRhSW5SVEZGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCiAvLyBP
ciByZWZhY3RvciBzbyBpdCBkb2VzIG5vdCBkbyB0aGF0LgogUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWlu
VGV4dCkKIHsKLSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCBjb250ZXh0LCBh
bGxvd1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQu
ZnJhbWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQpOwogICAgIHBhc3RlYm9hcmQucmVhZChy
ZWFkZXIpOwogICAgIGNob3NlUGxhaW5UZXh0ID0gcmVhZGVyLm1hZGVGcmFnbWVudEZyb21QbGFp
blRleHQ7CiAgICAgcmV0dXJuIFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKQEAgLTIzNCw3ICsy
MzQsNyBAQCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZnJh
bWUuZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJh
bnNmZXIoKSk7CisgICAgYXV0byBzdHJpbmdGcm9tU2VsZWN0aW9uID0gbV9kb2N1bWVudC5mcmFt
ZSgpLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkVGV4dEZvckRhdGFU
cmFuc2ZlcigpKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7
CiAgICAgdHlwZXMuYXBwZW5kKFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCA3MDZlODI2NzNm
MDgxMzMzNzM1ZTU4NzEyNzhjOGQ0NTBkMGI2OWJjLi4xZGE4MWY3MThkOTIzNTgyM2IwMzgxZmUy
YmJkZTExOWQ4MjUwNmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9F
ZGl0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFz
dGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1
cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJv
YXJkLCBtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93
UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJk
LCAqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRp
b246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50
ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAg
cXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAgLTE0NywxNCArMTQ3LDE0IEBA
IHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkKQogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250ZW50OwogICAg
IHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JE
ZWxldGUoKTsKICAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0
YVRyYW5zZmVyKCk7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJl
c2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwg
UmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAg
ICBtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJs
ZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVl
OjpObyk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2Vydmlu
Z1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVz
b2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBt
X2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJs
ZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVl
OjpObyk7CiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQ
YXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4
dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJv
bVBhc3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsIG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5U
ZXh0LCBjaG9zZVBsYWluVGV4dCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmREYXRhKHBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksIGNvbnRleHQsIGFsbG93
UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBmMmEyZDUyYWM1YWJm
NGU0ZjEzMTEzY2EyNWQxYjIwYTE3MzhmYTY5Li4xYmZjYTU5MTNkNjQ2NDFjMDgyZmVmNzY1YWJh
MTllOTA5MGFkMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBA
IC04Myw3ICs4Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJh
c2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgLy8gSWYgdGhlIHRl
eHQgaGFzIGxlZnQgb3IgcmlnaHQgYWxpZ25tZW50LCBmbGlwIGxlZnQtPnJpZ2h0IGFuZCByaWdo
dC0+bGVmdC4gCiAgICAgLy8gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLgogCi0gICAgYXV0byBzZWxl
Y3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3R5bGUgPSBFZGl0
aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+
c3R5bGUoKSkKICAgICAgICAgIHJldHVybjsKIApAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCBF
ZGl0b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3Jp
dGluZ0RpcmVjdGlvbiBkaXIKICAgICBpZiAoIW5ld1ZhbHVlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNl
ZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9j
dXNlZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhUTUxUZXh0QXJl
YUVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1
c2VkRWxlbWVudCkKICAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1
c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKICAgICAg
ICAgaWYgKGRpcmVjdGlvbiA9PSBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50
KS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsaWduQXR0ciwgbmV3VmFsdWUp
OwotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAg
ICAgICAgbV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5jaGFuZ2Vh
YmxlU3R5bGVzKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgc3R5bGVzIHRoYXQg
dGhlIHVzZXIgY2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVpciBkZWZhdWx0IHZhbHVlcy4K
ICAgICAKLSAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG1fZnJh
bWUuZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgYXV0byBlZGl0aW5nU3R5bGUg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0KCkpOwogICAg
IGF1dG8gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHlsZSgpLT5tdXRhYmxlQ29weSgp
OwogICAgIAogICAgIC8vIFRleHQgd2lkZ2V0cyBpbXBsZW1lbnQgYmFja2dyb3VuZCBjb2xvciB2
aWEgdGhlIFVJVmlldyBwcm9wZXJ0eS4gVGhlaXIgYm9keSBlbGVtZW50IHdpbGwgbm90IGhhdmUg
b25lLgpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJk
KFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIHsKICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGJvb2wgYWxsb3dQbGFp
blRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCk7Ci0g
ICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4
dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJh
bmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zID0g
Y2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURl
bGVnYXRlKGkpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIAog
dm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewotICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZGljdGF0aW9uUGhyYXNlcy5pc0VtcHR5
KCkpCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNB
c0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQKICAgICAvLyBT
b21lIGRheSB3ZSBjb3VsZCBtYWtlIHRoZW0gVW5kb2FibGUsIGFuZCBsZXQgY2FsbGVycyBjbGVh
ciB0aGUgVW5kbyBzdGFjayBleHBsaWNpdGx5IGlmIHRoZXkgd2lzaC4KICAgICBjbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhcigpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGVsZW1lbnQucmVtb3ZlQ2hp
bGRyZW4oKTsKIApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGls
ZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAKICAgICAv
LyBBcyBhIHNpZGUgZWZmZWN0IHRoaXMgZnVuY3Rpb24gc2V0cyBhIGNhcmV0IHNlbGVjdGlvbiBh
ZnRlciB0aGUgaW5zZXJ0ZWQgY29udGVudC4gTXVjaCBvZiB3aGF0CiAgICAgLy8gZm9sbG93cyBp
cyBtb3JlIGV4cGVuc2l2ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgc28gY2xlYXIgaXQgc2lu
Y2UgaXQncyBnb2luZyB0byBjaGFuZ2UgYW55d2F5LgotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
Y2xlYXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICAvLyBj
bGVhciBvdXQgYWxsIGN1cnJlbnQgY2hpbGRyZW4gb2YgZWxlbWVudAogICAgIGVsZW1lbnQucmVt
b3ZlQ2hpbGRyZW4oKTsKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFz
Q2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogICAg
IHNlbGVjdGlvbi5zZXRCYXNlKHZpc2libGVQb3MpOwogICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQo
dmlzaWJsZVBvcyk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxl
Y3Rpb24pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlv
bik7CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CiB9CkBAIC0z
ODksNyArMzg5LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0
IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIC8vIGhhdmUgYSBzdGFsZSBzZWxlY3Rp
b24uCiB2b2lkIEVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlv
bklmT3BlbkZvck1vcmVUeXBpbmcoKQogewotICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RF
ZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCZtX2ZyYW1l
LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBUeXBpbmdDb21tYW5kOjpl
bnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGlu
ZyhtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3Bl
L0VkaXRvckxpYldQRS5jcHAKaW5kZXggNWQxNWE2NDYxYzU2OWI2M2FjYzYxNTc5NWUzNDQ3NzA4
YTRkNTU3Ny4uMTJmZDZhNDNlYTA1YTJhMGU3MmI3NGJhNzJkOTYyODY0NzA1YmFlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCkBAIC02Nyw4
ICs2Nyw4IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJv
YXJkJiBwYXN0ZWJvYXJkKQogewogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRD
b250ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRh
VHJhbnNmZXIoKTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVz
ZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBS
ZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAg
IG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxl
ZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6
Ok5vKTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5n
VmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNv
bHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisgICAgICAgIG1f
ZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxl
ZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6
Ok5vKTsKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsKIH0KIApAQCAt
ODQsNyArODQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJk
KiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAog
ICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsIG1f
ZnJhbWUsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRl
eHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2Rv
Y3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxs
b3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0
aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZy
YWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRp
dG9yTWFjLm1tCmluZGV4IDI5MTgyNDY1ZDhjZjI5MzljYjIxNjAyNDlmZWEyYWUxMWVhMTdjN2Mu
Ljk4NDFjOTRmYWEyMTNmZDA4MmU1ODEyMGUxYTJiNzRmYTM4Njk5M2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEVkaXRv
cjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8
UGFzdGVPcHRpb24+CiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3Rl
V2l0aFBhc3RlYm9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
IH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBh
c3RlYm9hcmQpOwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2Rl
RnJvbVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
IHsKICAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBpZiAoJm5vZGUtPmRvY3VtZW50KCkgIT0gbV9m
cmFtZS5kb2N1bWVudCgpKQorICAgIGlmIChub2RlLT5kb2N1bWVudCgpICE9IG1fZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwor
ICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIGF1dG8gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9u
OjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSwgUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBvc2l0
aW9uSXNBZnRlckFuY2hvcikpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRG
b2N1cyk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbihyYW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAog
ICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CiAKLSAgICBpZiAoIW1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkg
eworICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBA
QCBzdGF0aWMgdm9pZCBnZXRJbWFnZShFbGVtZW50JiBpbWFnZUVsZW1lbnQsIFJlZlB0cjxJbWFn
ZT4mIGltYWdlLCBDYWNoZWRJbWFnZSomCiAKIHZvaWQgRWRpdG9yOjpzZWxlY3Rpb25XaWxsQ2hh
bmdlKCkKIHsKLSAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hh
bmdlcygpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFoYXNDb21w
b3NpdGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYW5jZWxDb21wb3NpdGlv
bigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggMDk2NGNj
YjRmYmQ3YWMzNmIxOGYzNDE2ZjQyMGEyN2RiZTk2OTE3OC4uMmY3MmNiNGYwMDQ1MWNiYmU0NDJj
MGU5YTMxMjY3YzhiOGMyMGQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93
aW4vRWRpdG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JX
aW4uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJk
KFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAg
cmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KG1fZnJhbWUs
ICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBj
aG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
cGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2Us
IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFp
blRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRp
b246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdt
ZW50KTsKQEAgLTY5LDkgKzY5LDkgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoUGxhdGZvcm1EcmFnRGF0YSYKIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJv
YXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYsIGJvb2wgLyphbGxvd1BsYWluVGV4dCovLCBib29sJiAv
KmNob3NlUGxhaW5UZXh0Ki8pCiB7CiAgICAgaWYgKENPTVB0cjxJRGF0YU9iamVjdD4gcGxhdGZv
cm1EcmFnRGF0YSA9IHBhc3RlYm9hcmQuZGF0YU9iamVjdCgpKQotICAgICAgICByZXR1cm4gY3Jl
YXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURyYWdEYXRhLCBtX2ZyYW1lKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1E
cmFnRGF0YSwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21l
bnRGcm9tUGxhdGZvcm1EYXRhKHBhc3RlYm9hcmQuZHJhZ0RhdGFNYXAoKSwgbV9mcmFtZSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdE
YXRhTWFwKCksICptX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmluZGV4IGE4N2QzZTUwNDhl
NDZjNDNkZmFmYWYzOTIwNzMzZmI3MzhlMWExZTkuLmJmOTU2NmJhNzU5Mzg1YjBhYTQzYzYyMThj
MzFmMzhjY2YzMWQ3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVk
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCkBA
IC0yODYsNyArMjg2LDcgQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAgICAgbV9kb2N1
bWVudC0+cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAogICAgIG1fZG9jdW1lbnQtPnNldEJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZShEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAg
ICBtX2RvY3VtZW50LT5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICBtX2RvY3VtZW50LT53
aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAKICAgICBjbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYzcxNmQ3MjgwZjQ2MmNiNTY3Mzc1N2I0YmE0ZTNi
MjRhYmVlOGRlMC4uZmRiNGM4OWNiZjI2NzFjOTBkYjJjNzk2OTlmNTg2N2NlOTk1OTJiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC01NDEsMTEgKzU0MSwxNCBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpzdG9wKCkKIHZvaWQgRnJhbWVMb2FkZXI6OndpbGxUcmFuc2l0aW9u
VG9Db21taXR0ZWQoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBm
cmFtZSBpcyBzdGlsbCBmdWxseSBpbiBwbGFjZSAobm90IGNhY2hlZCwgbm90IGRldGFjaGVkKSwg
YnV0IHdpbGwgYmUgcmVwbGFjZWQuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX2ZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICBpZiAoZG9jdW1lbnQt
PmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gVGhlIHRleHQgd2FzIGFs
cmVhZHkgcHJlc2VudCBpbiBET00sIHNvIGl0J3MgYmV0dGVyIHRvIGNvbmZpcm0gdGhhbiB0byBj
YW5jZWwgdGhlIGNvbXBvc2l0aW9uLgotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLmNvbmZpcm1D
b21wb3NpdGlvbigpOwotICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQgPSBt
X2ZyYW1lLmVkaXRvcigpLmNsaWVudCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5lZGl0b3IoKS5j
b25maXJtQ29tcG9zaXRpb24oKTsKKyAgICAgICAgaWYgKEVkaXRvckNsaWVudCogZWRpdG9yQ2xp
ZW50ID0gZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKSB7CiAgICAgICAgICAgICBlZGl0b3JD
bGllbnQtPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOwogICAgICAgICAgICAg
ZWRpdG9yQ2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CiAgICAgICAgIH0K
QEAgLTU1Niw3ICs1NTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgpCiB7CiAgICAg
aGlzdG9yeSgpLnNhdmVEb2N1bWVudFN0YXRlKCk7CiAKLSAgICBEb2N1bWVudCogY3VycmVudERv
Y3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOworICAgIFJlZlB0cjxEb2N1bWVudD4gY3VycmVu
dERvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwogICAgIFVubG9hZEV2ZW50UG9saWN5IHVu
bG9hZEV2ZW50UG9saWN5OwogICAgIGlmIChtX2ZyYW1lLnBhZ2UoKSAmJiBtX2ZyYW1lLnBhZ2Uo
KS0+Y2hyb21lKCkuY2xpZW50KCkuaXNTVkdJbWFnZUNocm9tZUNsaWVudCgpKSB7CiAgICAgICAg
IC8vIElmIHRoaXMgaXMgdGhlIFNWR0RvY3VtZW50IG9mIGFuIFNWR0ltYWdlLCBubyBuZWVkIHRv
IGRpc3BhdGNoIGV2ZW50cyBvciByZWNhbGNTdHlsZS4KQEAgLTU2OCw3ICs1NzEsOCBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgpCiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBv
bGljeSk7CiAgICAgCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9u
cygpOworICAgIGlmIChjdXJyZW50RG9jdW1lbnQpCisgICAgICAgIGN1cnJlbnREb2N1bWVudC0+
ZWRpdG9yKCkuY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRl
cjo6ZGlkT3BlblVSTCgpCkBAIC01ODAsNyArNTg0LDYgQEAgYm9vbCBGcmFtZUxvYWRlcjo6ZGlk
T3BlblVSTCgpCiAgICAgfQogCiAgICAgbV9mcmFtZS5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuY2Fu
Y2VsKCk7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhckxhc3RFZGl0Q29tbWFuZCgpOwogCiAg
ICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9zZSA9IGZh
bHNlOwpAQCAtNjQzLDggKzY0Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRDbGVhcldp
bmRvd05hbWUoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBEb2N1bWVudCYgbmV3CiAKIHZvaWQg
RnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRv
d1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib29sIGNsZWFyRnJhbWVWaWV3
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVET01XaW5kb3dDcmVhdGlvbikKIHsKLSAg
ICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyKCk7Ci0KICAgICBib29sIG5lZWRlZENsZWFyID0gbV9u
ZWVkc0NsZWFyOwogICAgIG1fbmVlZHNDbGVhciA9IGZhbHNlOwogCkBAIC02NTIsNyArNjUzLDcg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNs
ZWFyV2luZG93UHJvcGVydGllcywgYm9vbAogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPmNh
bmNlbFBhcnNpbmcoKTsKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5zdG9wQWN0aXZlRE9N
T2JqZWN0cygpOwogICAgICAgICBib29sIGhhZExpdmluZ1JlbmRlclRyZWUgPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPmhhc0xpdmluZ1JlbmRlclRyZWUoKTsKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgICAgIGlmIChoYWRMaXZpbmdSZW5kZXJU
cmVlKQogICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5hZGp1c3RGb2N1c2VkTm9kZU9u
Tm9kZVJlbW92YWwoKm1fZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgfQpAQCAtNjczLDcgKzY3NCw2
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBj
bGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wKICAgICAgICAgICAgIG1fZnJhbWUudHJlZSgpLnNl
dE5hbWUobnVsbEF0b20oKSk7CiAgICAgfQogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5wcmVw
YXJlRm9yRGVzdHJ1Y3Rpb24oKTsKICAgICBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmNsZWFyKCk7
CiAKICAgICBpZiAoY2xlYXJGcmFtZVZpZXcgJiYgbV9mcmFtZS52aWV3KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCmluZGV4IDM4NWUzN2E2ZDBjOTBlNjMzYTNiN2I0Mjg3MmM2MTZlMzgwODY0MjYuLjVk
ZTY2NzVkMTQxYTg5MjU1NWU4MmNlMWNhOTE5MjZiYjY5MjhhZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCkBAIC0xNTYsOCArMTU2LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UmIHBhZ2UsIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBVbmlxdWVSZWY8RnJhbWVMb2EKICAgICAsIG1f
bmF2aWdhdGlvblNjaGVkdWxlcihtYWtlVW5pcXVlUmVmPE5hdmlnYXRpb25TY2hlZHVsZXI+KCp0
aGlzKSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVudCkKICAgICAsIG1fc2NyaXB0
KG1ha2VVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4oKnRoaXMpKQotICAgICwgbV9lZGl0b3Io
bWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKLSAgICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlx
dWVSZWY8RnJhbWVTZWxlY3Rpb24+KHRoaXMpKQogICAgICwgbV9hbmltYXRpb25Db250cm9sbGVy
KG1ha2VVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9w
YWdlWm9vbUZhY3RvcihwYXJlbnRQYWdlWm9vbUZhY3Rvcih0aGlzKSkKICAgICAsIG1fdGV4dFpv
b21GYWN0b3IocGFyZW50VGV4dFpvb21GYWN0b3IodGhpcykpCkBAIC0yMzQsNyArMjMyLDcgQEAg
dm9pZCBGcmFtZTo6c2V0VmlldyhSZWZQdHI8RnJhbWVWaWV3PiYmIHZpZXcpCiAgICAgLy8gbm90
aWZpZWQuIElmIHdlIHdhaXQgdW50aWwgdGhlIHZpZXcgaXMgZGVzdHJveWVkLCB0aGVuIHRoaW5n
cyB3b24ndCBiZSBob29rZWQgdXAgZW5vdWdoIGZvcgogICAgIC8vIHRoZXNlIGNhbGxzIHRvIHdv
cmsuCiAgICAgaWYgKCF2aWV3ICYmIG1fZG9jICYmIG1fZG9jLT5iYWNrRm9yd2FyZENhY2hlU3Rh
dGUoKSAhPSBEb2N1bWVudDo6SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICBtX2RvYy0+cHJl
cGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgICAgIG1fZG9jLT53aWxsQmVSZW1vdmVkRnJvbUZy
YW1lKCk7CiAgICAgCiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5sYXlvdXRDb250
ZXh0KCkudW5zY2hlZHVsZUxheW91dCgpOwpAQCAtMjc5LDcgKzI3Nyw3IEBAIHZvaWQgRnJhbWU6
OnNldERvY3VtZW50KFJlZlB0cjxEb2N1bWVudD4mJiBuZXdEb2N1bWVudCkKICNlbmRpZgogCiAg
ICAgaWYgKG1fZG9jICYmIG1fZG9jLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVu
dDo6SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICBtX2RvYy0+cHJlcGFyZUZvckRlc3RydWN0
aW9uKCk7CisgICAgICAgIG1fZG9jLT53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAKICAgICBt
X2RvYyA9IG5ld0RvY3VtZW50LmNvcHlSZWYoKTsKICAgICBBU1NFUlQoIW1fZG9jIHx8IG1fZG9j
LT5kb21XaW5kb3coKSk7CkBAIC01NTQsNyArNTUyLDcgQEAgYm9vbCBGcmFtZTo6cmVxdWVzdERP
TVBhc3RlQWNjZXNzKCkKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpEZW5pZWQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpOb3RS
ZXF1ZXN0ZWRZZXQ6IHsKLSAgICAgICAgYXV0byogY2xpZW50ID0gbV9lZGl0b3ItPmNsaWVudCgp
OworICAgICAgICBhdXRvKiBjbGllbnQgPSBlZGl0b3IoKS5jbGllbnQoKTsKICAgICAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkzNyw3ICs5MzUsNyBA
QCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFj
dG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZWRpdG9yLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7
CisgICAgZWRpdG9yKCkuZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAg
Ly8gUmVzcGVjdCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFs
b25lIFNWRyBkb2N1bWVudHMuCiAgICAgLy8gRklYTUU6IEhvdyB0byBoYW5kbGUgY29tcG91bmQg
ZG9jdW1lbnRzICsgem9vbUFuZFBhbj0iZGlzYWJsZWQiPyBOZWVkcyBTVkcgV0cgY2xhcmlmaWNh
dGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCAzZDQzYTk0YmVhOTU1NmM5OGRjNzQyM2FiN2VhZDlh
OTJhNTJjNmZlLi4wOTMyYTgzY2I2NzRmNmY4Yzk2MTFlZDlmNjk5OWQxN2I2MmQxNTNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdEZyYW1l
LmgiCiAjaW5jbHVkZSAiQWRqdXN0Vmlld1NpemVPck5vdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAjaW5jbHVkZSAiUGFnZUlkZW50aWZpZXIuaCIKQEAgLTE2MywxNCArMTY0LDE0IEBAIHB1Ymxp
YzoKICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKICAgICBGcmFtZVZpZXcqIHZpZXco
KSBjb25zdDsKIAotICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gbV9lZGl0b3I7IH0KLSAg
ICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAg
RWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQorICAgIGNv
bnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7
IH0KICAgICBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIHsgcmV0dXJuIG1fZXZlbnRIYW5k
bGVyOyB9CiAgICAgY29uc3QgRXZlbnRIYW5kbGVyJiBldmVudEhhbmRsZXIoKSBjb25zdCB7IHJl
dHVybiBtX2V2ZW50SGFuZGxlcjsgfQogICAgIEZyYW1lTG9hZGVyJiBsb2FkZXIoKSBjb25zdDsK
ICAgICBOYXZpZ2F0aW9uU2NoZWR1bGVyJiBuYXZpZ2F0aW9uU2NoZWR1bGVyKCkgY29uc3Q7Ci0g
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9Ci0g
ICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0aW9uOyB9CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIGRvY3Vt
ZW50KCktPnNlbGVjdGlvbigpOyB9CisgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CiAgICAgRnJhbWVU
cmVlJiB0cmVlKCkgY29uc3Q7CiAgICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9u
KCkgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CiAgICAgY29uc3QgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250
cm9sbGVyOyB9CkBAIC0zMzgsOCArMzM5LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RG9jdW1l
bnQ+IG1fZG9jOwogCiAgICAgVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+IG1fc2NyaXB0Owot
ICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwotICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVj
dGlvbj4gbV9zZWxlY3Rpb247CiAgICAgVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+
IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IGViMDJmOGVjNDRkOTNhZDdhNmNi
OTUxZjY5NzA2ZmM0ZDZmODBlMGUuLjNlZWU0MmZmMGNkMWU3M2NmMDFiMjk1ZTk4ZDI4NTRlOWJi
N2NmZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtNjgsMjEgKzY4
LDE2IEBAIFJlZjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4
dEluZGljYXRvckRhdGEmIGRhdGEpCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0
aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50
YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIEZyYW1lKiBmcmFtZSA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIFJlZjxEb2N1
bWVudD4gZG9jdW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCk7CiAKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKCpmcmFtZSk7Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGRvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25z
OwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9w
dGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB0ZW1w
b3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9y
ZVNlbGVjdGlvbkNoYW5nZXMpOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpOwogI2VuZGlm
Ci0gICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsg
U2ltcGxlUmFuZ2UgeyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOworICAg
IFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoZG9jdW1lbnQsIHsgU2lt
cGxlUmFuZ2UgeyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOwogCiAgICAg
VGV4dEluZGljYXRvckRhdGEgZGF0YTsKIApAQCAtOTEsNyArODYsNyBAQCBSZWZQdHI8VGV4dElu
ZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5n
ZSwgVGV4dEluZAogCiAgICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFu
Z2VzRXF1YWwoJnJhbmdlLCBvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7
CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFy
Z2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRp
Y2F0b3IoZGF0YSwgKmRvY3VtZW50LT5mcmFtZSgpLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXND
dXJyZW50U2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4g
VGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAyZjFjMzIzZjljMTFhYjVkMTli
NzhjYTAzYmY1MWE4Zjk4YWIwNjkuLmZhOTdlMGMzMmQyZjg0ZGFiNjFkODYzYjAzZGU1N2QyZGJh
Mzc1MjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNC0yMyAgSmFjayBMZWUgIDxzaGlo
Y2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYwMAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBj
cmFzaC4KKworICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRp
dC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9p
bnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbDogQWRkZWQu
CisKKyAgICAgICAgTW9kaWZ5IHRoZSB0ZXN0IHJlc3VsdC4gRnJhbWVTZWxlY3Rpb24gaXMgYmVp
bmcgZGVzdHJ1Y3RlZCBhbG9uZyB3aXRoCisgICAgICAgIGRvY3VtZW50IHNvIGFuIGFkZGl0aW9u
YWwgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb24gaXMgZXhwZWN0ZWQuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4
cGVjdGVkLnR4dDoKKwogMjAyMC0wNC0xMyAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5
QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3Rlc3RzL2luLWFwcC1icm93c2VyLXByaXZhY3kv
YXBwLWJvdW5kLWRvbWFpbi5odG1sIGlzIGEgY29uc3RhbnQgZmFpbHVyZSBvbiBpT1MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRp
dC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0
aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMDQwMzQyM2U1OTA5NTAyNjVmMDhhMzI5MjZlNjYxN2QwMThhN2Y3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhl
bi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGlu
c2VydGluZyBsaXN0IGZvbGxvd2VkIGJ5IGFuIGVkaXQgY29tbWFuZC4gVGhlIHRlc3QgcGFzc2Vz
IGlmIFdlYktpdCBkb2Vzbid0IGNyYXNoIG9yIGhpdCBhbiBhc3NlcnRpb24uCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29t
bWFuZC1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxp
c3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWYzODFkOWVmNWEz
ZmQ5NGViMjEwOTBjMmEyMmZiYzA3NTEyYWFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gu
aHRtbApAQCAtMCwwICsxLDE5IEBACis8Ym9keT48aW1hZ2U+PC9pbWFnZT48Zm9ybSBpZD1mb3Jt
IGNvbnRlbnRFZGl0YWJsZT10cnVlPjxvYmplY3QgZGF0YT0/IG9ubG9hZD1vYmplY3RPbkxvYWQo
KT48L29iamVjdD48L2Zvcm0+PGRpYWxvZyBvcGVuPSJ0cnVlIj5hPC9kaWFsb2c+Cis8c2NyaXB0
PgorICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmVtcHR5KCk7CisgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoInNlbGVjdEFsbCIsIGZhbHNlKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
IHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG9iamVjdE9uTG9hZCgpIHsK
KyAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFVub3JkZXJlZExpc3QiLCBmYWxz
ZSk7CisgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxzZSk7CisgICAg
ICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5ib2R5LmlubmVySFRNTCA9ICI8cD4gVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93ZWQg
YnkgYW4gZWRpdCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jh
c2ggb3IgaGl0IGFuIGFzc2VydGlvbi48L3A+IjsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgfSk7CisgICAgfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9w
LWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CmluZGV4IGQ2YmM3YjFlNmYwM2UzYjQ4YWYwNDE4YzY1
NTA0YTRkMjEzN2MxYWMuLmU1YmRkMmEwYmZkODk1MmQ5NzY2YTQzN2NhY2VhNDY2NDg5Nzc4NjYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQv
ZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQu
dHh0CkBAIC00LDYgKzQsNyBAQCBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpbwogRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gMCBvZiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJh
bmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDUg
b2YgI3RleHQgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZp
Y2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFu
Z2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogbGF5ZXIgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCiAgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBh
dCAoMCwwKSBzaXplIDgwMHg2MDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397526</attachid>
            <date>2020-04-24 16:07:25 -0700</date>
            <delta_ts>2020-04-27 13:49:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200424160724.patch</filename>
            <type>text/plain</type>
            <size>223566</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uNzQxYWZkNjAxMWVhNWZiMTE3NDg3YWU2ZTczMTE0
Nzc2NDA5ZmY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAyMC0wNC0yMyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFuYWdlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBw
bGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9NYXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVk
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eURpY3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5n
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0
eWxlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVy
Z2VQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5w
dXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdy
YXBoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVB
bmRBcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2Fu
REhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2hvdWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRo
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0
aFNtYXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVu
dFRhcmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBh
c3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpsZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRB
dENhcmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0
aW9uVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVj
dGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50
T2ZBdHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92
ZXJ3cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRp
bmdTdGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9j
dW1lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29w
ZTo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFu
ZDo6Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUg
Y29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5
TW91c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9y
UGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmN1cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6
aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRp
ZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVk
KToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNl
bGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlR5
cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5l
d2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVh
a0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1
b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdp
dGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0Rp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0
eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRT
ZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndwZS9F
ZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvd2lu
L0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAt
MDQtMTMgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJhY2tn
cm91bmQgaW1hZ2VzIHNob3VsZCBmaWd1cmUgaW50byB2aXN1YWxseSBub24gZW1wdHkgaGV1cmlz
dGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjYzhlOGEzMzAxMDgxOTcyNzIzZjkwNWNm
NGYxZDM3NGE2NmJkYjI5Li4yZGYzOWQwM2Y1MjgxN2Y1ZWRjM2NlYzE3ZWM5OGRmMDBhMDY5N2Rm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4Miw2ICs1ODIsOCBAQCBEb2N1bWVudDo6
RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQgZG9jdW1lbnRD
bGFzc2VzLCB1bnNpZwogICAgICwgbV9vcmllbnRhdGlvbk5vdGlmaWVyKGN1cnJlbnRPcmllbnRh
dGlvbihmcmFtZSkpCiAgICAgLCBtX2lkZW50aWZpZXIoRG9jdW1lbnRJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpKQogICAgICwgbV91bmRvTWFuYWdlcihVbmRvTWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkK
KyAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCisgICAgLCBtX3Nl
bGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKIHsKICAgICBhdXRv
IGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0y
NDk3LDcgKzI0OTksNyBAQCB2b2lkIERvY3VtZW50OjpkZXN0cm95UmVuZGVyVHJlZSgpCiAgICAg
ICAgIHZpZXcoKS0+ZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9t
RnJhbWUoKQogewogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAg
IHJldHVybjsKQEAgLTI1OTAsNiArMjU5Miw4IEBAIHZvaWQgRG9jdW1lbnQ6OnByZXBhcmVGb3JE
ZXN0cnVjdGlvbigpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoSFRNTE1l
ZGlhRWxlbWVudEludmFsaWRJRCk7CiAgICAgfQogCisgICAgZWRpdG9yKCkuY2xlYXIoKTsKKyAg
ICBzZWxlY3Rpb24oKS53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgZGV0YWNoRnJvbUZy
YW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
aW5kZXggMzRmZDAwZTE1Yjg4ZDcyMmU5NWE5OWI1Y2NiZjBiMDA1YjdmODI3ZS4uMmMzZmJiZGQ5
MDc0ZjhhOTk4MTllODliOTMxYmJiODFjYzY0ZjY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAg
LTExOSw2ICsxMTksNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7CiBjbGFzcyBE
b2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRpdGluZ0JlaGF2
aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZlbnRMb29wVGFz
a0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjcsNiArMTI4LDcgQEAg
Y2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3JtQ29udHJvbGxl
cjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBGcmFtZVZpZXc7
CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQ7CkBAIC02
MjUsNyArNjI3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWNvbWVDdXJyZW50RG9jdW1l
bnRJbkZyYW1lKCk7CiAgICAgdm9pZCBkZXN0cm95UmVuZGVyVHJlZSgpOwotICAgIHZvaWQgcHJl
cGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7
CiAKICAgICAvLyBPdmVycmlkZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG1ldGhvZHMgdG8gZG8g
YWRkaXRpb25hbCB3b3JrCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRCeXBhc3NNYWlu
V29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbDsKQEAgLTE1NzYsNiArMTU3
OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29u
dGVudCgpIHsgbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCA9IHRydWU7IH0KICAg
ICBib29sIGhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudDsgfQogCisgICAgRWRpdG9yJiBlZGl0
b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkg
eyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKwogcHJvdGVjdGVkOgogICAgIGVu
dW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vo
b2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2ln
bmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0g
MCk7CkBAIC0yMTE2LDYgKzIxMjMsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjsK
IAogICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lkZW50aWZpZWRF
bGVtZW50c01hcDsKKworICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOworICAgIFVuaXF1
ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCiBFbGVtZW50KiBldmVudFRh
cmdldEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggM2Y0ZmNiM2Fh
NjlmY2I1YWM4MTFiNGU4Yzc5MWE4MTQ3YjM0ZmQ2OS4uYTlhYzkzODk3MjU0ZTZmODQ5MjU3ZDAw
YmJmMTIwYzAzNzllZjA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0YXRpYyBib29s
IG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQorQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1bWVudCYgZG9j
dW1lbnQpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
dGltZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3VtZW50KGRvY3Vt
ZW50KQogewogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGluZyBh
dXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
cigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRT
ZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKGN1
cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTE0
OSw3ICsxNDksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdD
b3JyZWN0aW9uKCkgY29uc3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gIW1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtlcnMobWlzc3Bl
bGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAg
IHJldHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVsbGluZ1Jhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3By
aWF0ZSgpCiAgICAgaWYgKG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3NpdGlvbiBjYXJl
dFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwog
CiAgICAgaWYgKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQ
b3NpdGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQpKTsKQEAgLTIy
MCwxMiArMjIwLDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYgKEFsdGVybmF0
aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAg
IGNsaWVudC0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3Bv
bnNlOjpSZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKG1fZnJhbWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3Jy
ZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJh
bWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgp
KTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2RvY3VtZW50LmZyYW1lKCkpOworICAg
IG1fZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0
U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRy
aWdnZXJlZCk7CisgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKIAotICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1l
LmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5t
YXJrZXJzKCk7CiAgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1
bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcihy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJrZXJzLmFkZE1hcmtl
cihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwpAQCAtMjM2
LDEyICsyMzYsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVk
KCkKICAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gZmFsc2U7CiAgICAgc3dpdGNoIChtX3R5
cGUpIHsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOiB7Ci0gICAgICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVj
dGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBz
dGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdvcmRzLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
LCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0Nv
cnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29y
ZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCku
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5
cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5n
VHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCks
IGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2NCw3
ICsyNjQsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5U
ZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdy
YXBoUmFuZ2UoKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAg
ICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdy
YXBoVGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwor
ICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwg
cGFyYWdyYXBoVGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2Vz
dGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzAyLDcgKzMwMiw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJG
aXJlZCgpCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZl
VGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5nZVdp
dGhBbHRlcm5hdGl2ZSA9IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFy
YW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0aEFs
dGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2
ZSB8fCBtX2RvY3VtZW50ICE9IHJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgq
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUpOwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkK
IAogRmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0g
bV9mcmFtZS52aWV3KCk7CisgICAgYXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmll
dygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmll
dy0+Y29udGVudHNUb1Jvb3RWaWV3KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBGbG9hdFJlY3Qg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbgogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQog
ewotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24o
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1v
dmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdl
IHNob3cgdGhlIHBhbmVsCiAgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJl
Y3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8vIHVu
ZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0
aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdApAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0Fw
cGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChj
b21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRv
Y29ycmVjdGlvbkluZGljYXRvcigpKQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsK
KyAgICAgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtl
cjo6Q29ycmVjdGlvbkluZGljYXRvcik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZv
ckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdp
bmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAtMzk1
LDE1ICszOTUsMTUgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9V
bmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBpZiAoIWNvbW1h
bmQtPndhc0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGlu
Z1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkp
OwotICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAg
ICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBjb21tYW5kLT5zdGFydGlu
Z1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkp
OworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJz
LmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJr
ZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOwogfQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVkaXRv
ckNsaWVudCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFnZSgp
LT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFnZSgp
ID8gJm1fZG9jdW1lbnQucGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFRl
eHRDaGVja2VyQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigp
CkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJr
UHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBpZiAoZW5k
T2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpt
X2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVj
dGlvbik7CisgICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
bV9kb2N1bWVudCwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsK
ICAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlKTsK
ICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRlc3Bh
Y2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDc5
LDEyICs0NzksMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2Vk
aW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICAvLyBNYXJrIHRoaXMg
d2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24g
Zm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0
aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8g
d29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJr
ZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRv
Y29ycmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBt
X29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJvb2wg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFj
ZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdl
V2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKLSAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtl
ckNvbnRyb2xsZXIgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBpZiAobWFya2VyQ29udHJv
bGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQpKSB7CiAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
OjpDb3JyZWN0aW9uKQogICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JN
b2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNl
ZCwgcmVzdWx0LnJlcGxhY2VtZW50KTsKQEAgLTQ5OSw3ICs0OTksNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1
bHQoY29uc3QgVAogCiAgICAgUG9zaXRpb24gYmVnaW5uaW5nT2ZSYW5nZSA9IHJhbmdlV2l0aEFs
dGVybmF0aXZlLnN0YXJ0UG9zaXRpb24oKTsKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0
ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKLSAgICBhdXRvIHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBw
cmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CisgICAgYXV0byBw
cmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgcHJlY2Vk
aW5nQ2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmluZ09mUmFuZ2UpOwogCiAgICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJz
SW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRB
dXRvY29ycmVjdGlvbik7CiAgICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7
CkBAIC01MjAsNyArNTIwLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBpZiAoIXNo
b3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gZW5k
T2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQo
KSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUobV9kb2N1bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1h
cmtlci5lbmRPZmZzZXQoKSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdv
cmRSYW5nZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNTU4LDcgKzU1OCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAKIEFs
dGVybmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRp
dmVUZXh0Q2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyBtX2ZyYW1lLnBh
Z2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX2Rv
Y3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2RvY3VtZW50LnBhZ2UoKS0+
YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVU
ZXh0KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBS
YW5nZSYgcmFuZ2UsCiAKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQgdGhl
IERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4OTUy
NgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24gPSBy
ZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHRy
ZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7Ci0gICAgYXV0byB1cGRh
dGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludCht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF1dG8gdXBkYXRl
ZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKICAgICBpZiAoIXVwZGF0
ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogICAg
IGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IHVwZGF0ZWRQ
YXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRlZFBhcmFncmFwaEVuZENv
bnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJlY3Rpb25PZmZzZXRJblBh
cmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYxNywxMSArNjE3LDExIEBAIGJv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdFdmVudCkKICAgICAgICAg
dGFyZ2V0ID0gdHJpZ2dlcmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBlbHNlCi0gICAgICAgIHRh
cmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7
CisgICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KCZtX2RvY3Vt
ZW50KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0
byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2ZyYW1lLndpbmRvd1By
b3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgYXV0byBldmVudCA9IFRl
eHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZyYW1lKCktPndpbmRvd1By
b3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZXZlbnQtPnNldFVuZGVy
bHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKQEAgLTY1Myw3ICs2NTMsNyBAQCBWZWN0b3I8U3RyaW5nPiBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRAogdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZlKGNv
bnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCi0gICAgYXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKKyAgICBhdXRv
JiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8gc2VsZWN0aW9uID0gZWRp
dG9yLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3Vs
ZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmluZGV4IDk0Nzc0YTc2YjIw
N2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZjMzA4OGRjMjc3YjNmNzkx
Y2Y4MjMxYjkwNjMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFzcyBEb2N1bWVudDsKIGNs
YXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKIGNsYXNzIEVk
aXRvckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5nZTsKIGNs
YXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKQEAgLTYxLDcg
KzYxLDcgQEAgY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcihGcmFtZSYgZnJhbWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJhbWUoZnJhbWUpIHsgfSkK
KyAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVu
dCkgVU5MRVNTX0VOQUJMRUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7IH0pCiAgICAgfkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAgICB2b2lkIHN0
YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlKSBVTkxFU1NfRU5B
QkxFRCh7IH0pCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBBbHRlcm5hdGl2ZVRl
eHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlmCiAKLSAgICBGcmFtZSYg
bV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAKICN1bmRlZiBVTkxFU1Nf
RU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAppbmRleCAxNGUzYzc4NmM0ZmYxZGI3Yjg1NjAxNTE0ODczOTBkYzM3MzE5MTUwLi5hN2Qx
Yjk2NTI0NjQyMGQxMTgyNjZjNTNhNWZkNTFiZWM3OTQ2ODE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMjI4LDE3ICsyMjgsMTcg
QEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkKICAgICAvLyB1cCB0aGUg
Y29tcG9zaXRpb24gd2lsbCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNvbXBvc2l0aW9uLCBhcyBp
biA8cmRhcjovL3Byb2JsZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3RvcCBoYW5kbGVzIHRoaXMg
aW4gLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSwgYnV0IHRo
ZSBwaG9uZQogICAgIC8vIGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBmcmFtZS0+ZWRpdG9yKCku
Y2FuY2VsQ29tcG9zaXRpb24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5jYW5jZWxDb21w
b3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53aWxsVW5hcHBs
eUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCkud2lsbFVuYXBw
bHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IHNpemUgPSBt
X2NvbW1hbmRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZTsgaTsgLS1pKQogICAg
ICAgICBtX2NvbW1hbmRzW2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRpdG9y
KCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkudW5h
cHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbkZvclVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hl
KCkpOwpAQCAtMjU4LDEzICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpy
ZWFwcGx5KCkKICAgICAvLyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtlIGZvciB0aGUgY3JlYXRp
b24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53aWxs
UmVhcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCkud2ls
bFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRv
JiBjb21tYW5kIDogbV9jb21tYW5kcykKICAgICAgICAgY29tbWFuZC0+ZG9SZWFwcGx5KCk7CiAK
LSAgICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1
bWVudC0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQu
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHkobV9kb2N1bWVudC0+ZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBAIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQogCiBib29sIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53
aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAgICBy
ZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRS
YW5nZXNGb3JCaW5kaW5ncygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBw
bHkoKQpAQCAtMzc4LDEzICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBw
bHkoKQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQoKQogewot
ICAgIGZyYW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50
KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBWZWN0b3I8UmVmUHRyPFN0
YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpOwotICAgIGF1dG8g
Zmlyc3RSYW5nZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
OworICAgIGF1dG8gZmlyc3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92
ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAv
LyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAiV2Vi
Vmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVudCBoZXJl
LgogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCwg
RE9XTlNUUkVBTSkpOwotICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmNs
ZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgZGVs
ZXRlU2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAogICAgIEFTU0VSVChk
ZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aXNDb25uZWN0ZWQoKSk7
CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFy
YWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICBv
cHRpb25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSk7CiAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0gICAgZnJhbWUoKS5lZGl0
b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7Cisg
ICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRp
bmdTZWxlY3Rpb24oKSk7CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGluIGFuIGVtcHR5
IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVtcHR5IHBhcmFncmFwaCB0
byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVjdGlvbklzRW1wdHlQYXJh
Z3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNTdGFydE9mUGFyYWdyYXBo
KGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0VuZE9mUGFyYWdyYXBoKGVu
ZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1MDYxMmIwY2VlM2Mz
OTcxMTYzNWM4NWIxN2QyZGUzODhhYjIuLjExOTdmMTJmNjdjYmY5N2VlYjY0ZjM0MGVhZmFiODcy
YWNiODhiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2ZXIsIGlmIHR5cGluZyBz
dHlsZSB3YXMgcHJldmlvdXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQgbm9kZSBhdCB0aGUgcHJl
dmlvdXMKICAgICAvLyBwb3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBuZWVkIHRvIGNsZWFyIHRo
YXQgc3R5bGUgYXMgd2VsbC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCkgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgbV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBmcmFtZSgpLnNlbGVj
dGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTc0MCw3
ICs3NDAsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygp
CiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2VkID0gUmFuZ2U6OmNyZWF0
ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmNsaWVu
dCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVw
bGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGllbnQoKS0+c2hv
dWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2VkLnB0
cigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwg
aW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVp
cmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTgxNCw3ICs4MTQsNyBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKQog
ICAgIC8vIEluIHRoaXMgY2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRoZSBuZXcgY2hhcmFjdGVy
cyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBkZWxldGVkIG9uZXMsCiAg
ICAgLy8gYnV0LCBpZiB3ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29tZSBiYWNrIGFuZCBzdGFy
dCB0eXBpbmcgdGhhdCBzdHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28gc2VlIAogICAgIC8vIHBy
ZXNlcnZlVHlwaW5nU3R5bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLnNldFR5
cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBkb2N1bWVudCgpLnNlbGVj
dGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKIH0KIAogdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKQEAgLTg4NSw3
ICs4ODUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlm
ICghbV9yZXBsYWNlKSB7CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5n
VGV4dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAgICAgICAgIGlm
ICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQotICAgICAgICAgICAgZnJh
bWUoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9sKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxCZURlbGV0ZWRJblRleHRG
aWVsZCh0ZXh0Q29udHJvbCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0aGlzIHRvIGxhdGVyIG1h
a2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05NDAsNyArOTQwLDcgQEAgdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAKICAgICBib29sIHNob3VsZFJlYmFsYWNl
V2hpdGVTcGFjZSA9IHRydWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkpIHsKKyAgICBpZiAoIWRv
Y3VtZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0lu
U2VjdXJlRmllbGQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9lbmRpbmdQb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkpIHsKICAgICAgICAg
ICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwpAQCAtOTU0LDcgKzk1
NCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgY2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFvcmlnaW5hbFN0cmluZy5p
c0VtcHR5KCkpCi0gICAgICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9u
QXRQb3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CisgICAgICAgIGRv
Y3VtZW50KCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2VuZGlu
Z1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwgZW5kaW5nU2VsZWN0aW9u
KCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRTdGF0ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMzZjdkYTE3Yzc4OTRlMmNm
Nzg1NTU5YmM4NzZjODg0NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYwMDU2Yzc3Mzc3MDBlMmI4
ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAtMzIsNyArMzIs
NiBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVU
cmF2ZXJzYWwuaCIKQEAgLTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFu
ZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKICAgICA6IG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbikK
IHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0U3RhcnRpbmdTZWxlY3Rp
b24obV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHNl
dFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlvbik7CiB9CiAKIEVkaXRD
b21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdT
ZWxlY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewotICAgIEFTU0VSVChkb2N1
bWVudC5mcmFtZSgpKTsKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlv
bik7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbik7CiB9CiAKIEVkaXRD
b21tYW5kOjp+RWRpdENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1lJiBFZGl0Q29tbWFuZDo6
ZnJhbWUoKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVybiAq
ZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRpdENvbW1hbmQ6OmZyYW1l
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAgICByZXR1cm4g
KmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0Q29tbWFuZDo6ZWRpdGlu
Z0FjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0FjdGlvbjsKQEAgLTE2OCwx
MSArMTUzLDcgQEAgc3RhdGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21wb3Np
dGlvbklmUG9zc2libGUoRWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9vbCBFZGl0Q29tbWFuZDo6
aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0gICAgYXV0byogZnJhbWUg
PSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBjb250YWluZXIgPSBtX2Rv
Y3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsK
ICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMTcsNyAr
MTk4LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBpZiAoIUFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0VGV4
dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bih0eXBlLCB0ZXh0LCBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKaW5kZXgg
ZGViY2ZmMDI0NWVkZjBkZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4uMmY2N2NkNzMzNGMyYzhi
ZDU2OTBmMTEzNWMxMGQwMDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb21wb3Np
dGVFZGl0Q29tbWFuZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZy
YW1lOwogCiBTdHJpbmcgaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oRWRpdEFjdGlvbik7
CiAKQEAgLTY0LDggKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEVkaXRDb21tYW5k
KERvY3VtZW50JiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAgICBF
ZGl0Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUoKSBjb25zdDsKLSAgICBG
cmFtZSYgZnJhbWUoKTsKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RvY3VtZW50OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9k
b2N1bWVudDsgfQogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZmMyZWZh
OTUxZmY1MGE2ZmFkMzY5NDgzNTk5NmI4NTljZTU3OWZiMS4uOWI3Y2ZkMmE2ZTNiNWIzY2EyY2Nk
MDU5NTM1NTVhYTIyYjI2ZmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC04
NjksNyArODY5LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0IE5vZGUqIG5vZGUpCiAK
IFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQm
IGRvY3VtZW50KQogewotICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUoKS0+ZWRpdG9yKCkuZGVm
YXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChkb2N1bWVudC5lZGl0b3Io
KS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNlIEVkaXRvclBhcmFncmFw
aFNlcGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShk
b2N1bWVudCk7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc1A6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggMGVhODk5MDc3OWMyMzNlODE0NDg3
YzcxMGViMzBlZTU5MjBiZDU4ZC4uMmM3NmFhZjE5ZGMyNDZhYTRmZGRlMTY2MWJiZWQxMjU0MzE2
YTUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTY4Niw3
ICsxNjg2LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUs
IGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJvcGVydGllc05vdEluKCpz
dHlsZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpj
cmVhdGUoKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhtdXRhYmxl
U3R5bGUuZ2V0KCkpOwotICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmZy
YW1lKCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOworICAgIGJvb2wgc2hvdWxkU3R5
bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOwogICAg
IGlmICghc2hvdWxkU3R5bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0VGV4dFN0eWxlcygqZG9j
dW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNp
emUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRiZjYz
YzA3YTlhMDllMzc5YmYxOTM4ZGM1OGEyLi5kMzA1ZjZiMDVmZGM1NmIzNzQ5MzRkMmVhZDdiYWEx
MzkwMzIyYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzMsOCArMTczLDgg
QEAgc3RhdGljIFN0cmluZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbihF
ZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4dENvbW1hbmQgOiBwdWJs
aWMgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAgQ2xlYXJUZXh0Q29tbWFu
ZChEb2N1bWVudCYgZG9jdW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENyZWF0ZUFuZEFwcGx5KGNv
bnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRpYyB2b2lkIENyZWF0ZUFu
ZEFwcGx5KERvY3VtZW50Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODksMTcgQEAgRWRpdEFjdGlv
biBDbGVhclRleHRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gRWRp
dEFjdGlvbjo6RGVsZXRlOwogfQogCi12b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFw
cGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNy
ZWF0ZUFuZEFwcGx5KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoZnJhbWUtPnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJvdW5kIHN0YWxlIGNvbXBv
c2l0aW9uIHN0YXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigpOworICAgIGRvY3VtZW50
LmVkaXRvcigpLmNsZWFyKCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBvbGRT
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21tYW5kID0gYWRvcHRSZWYo
Km5ldyBDbGVhclRleHRDb21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkpOworICAgIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CisgICAgYXV0byBj
bGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoZG9jdW1lbnQpKTsK
ICAgICBjbGVhckNvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAg
ICAgY2xlYXJDb21tYW5kLT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsyMDcsMjQgQEAgdm9pZCBD
bGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZyYW1l
KQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNv
ZGU7CiAKLVRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KEZyYW1lJiBmcmFtZSwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0
aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zKQotICAgIDog
bV9mcmFtZShmcmFtZSkKK1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0
aW9uQ2hhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4g
dGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zKQorICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50KSkKICAgICAsIG1fb3B0
aW9ucyhvcHRpb25zKQotICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZnJhbWUu
ZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwgbV93YXNJZ25vcmluZ1Nl
bGVjdGlvbkNoYW5nZXMoZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygp
KQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2Vy
ZUVuYWJsZWQoZnJhbWUuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQor
ICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3VtZW50LnNlbGVjdGlvbigp
LmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVu
YWJsZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRVcGRh
dGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmIChvcHRp
b25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQot
ICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwor
ICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUp
OwogCiAgICAgaWYgKHRlbXBvcmFyeVNlbGVjdGlvbikgewotICAgICAgICBtX3NlbGVjdGlvblRv
UmVzdG9yZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBtX3NlbGVj
dGlvblRvUmVzdG9yZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAg
ICBzZXRTZWxlY3Rpb24odGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkpOwogICAgIH0KIH0KQEAg
LTIzNiwxMiArMjM2LDEyIEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6flRlbXBvcmFyeVNl
bGVjdGlvbkNoYW5nZSgpCiAKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAgIGF1dG8gcmV2ZWFsU2Vs
ZWN0aW9uID0gbV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpSZXZlYWxTZWxl
Y3Rpb24gPyBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRpdG9yOjpSZXZlYWxTZWxl
Y3Rpb246Ok5vOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1f
d2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24pOwogICAgIH0KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIG1fZnJhbWUt
PnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0
ZXNXZXJlRW5hYmxlZCk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFVwZGF0
ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CiAjZW5k
aWYKIH0KIApAQCAtMjUwLDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFu
Z2U6OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAgICAg
YXV0byBvcHRpb25zID0gRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25z
KCk7CiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9Ob3RT
ZXRGb2N1cykKICAgICAgICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9j
dXMpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIG9w
dGlvbnMpOworICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rp
b24sIG9wdGlvbnMpOwogfQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIgaGFzIG1vdmVkIHRo
ZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8gd2Ugc2hvdWxkIHVzZSB0
aGUgdGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRpdGluZyBvcGVyYXRpb24u
CiBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZl
bnQpCiB7Ci0gICAgYXV0byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOworICAgIGF1dG8gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uOwogICAgIC8v
IElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rp
b24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYsMTIgKzI3NiwxMiBAQCBW
aXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQp
CiAvLyBGdW5jdGlvbiBjb25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZpb3IgYSBmYWxsYmFjayB3
aGVuIFBhZ2Ugb3IgU2V0dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVkaXRpbmdCZWhhdmlvciBF
ZGl0b3I6OmJlaGF2aW9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ0JlaGF2aW9yKG1f
ZnJhbWUuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOworICAgIHJldHVybiBFZGl0
aW5nQmVoYXZpb3IobV9kb2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7
CiB9CiAKIEVkaXRvckNsaWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25zdAogewotICAgIGlmIChQ
YWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2RvY3Vt
ZW50LnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JDbGllbnQoKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJvb2wgRWRpdG9yOjpoYW5k
bGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0b3I6OmNhbkVkaXQoKSBj
b25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0
UmljaGx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIGVu
dW0gY2xhc3MgQ2xpcGJvYXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0NDIsNyBAQCBzdGF0aWMg
Ym9vbCBkaXNwYXRjaENsaXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50PiYmIHRhcmdldCwgQ2xp
cGJvYXJkRXZlbnRLaW5kCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1dCgpCiB7Ci0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAg
ICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJv
YXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtp
bmQ6OkJlZm9yZUN1dCk7CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRIVE1M
Q3V0KCkKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpCZWZvcmVD
b3B5KTsKIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9yOjpjYW5Db3B5KCkgY29u
c3QKIHsKICAgICBpZiAoaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQoKSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlzSW5QYXNz
d29yZEZpZWxkKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRG
cm9tRWRpdGluZygpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5OCw3ICs0OTgsNyBAQCBi
b29sIEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuRGVsZXRlKCkg
Y29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJu
IHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
IH0KIApAQCAtNTI0LDcgKzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRTbWFydERlbGV0ZSgp
CiB7CiAgICAgaWYgKGJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnREZWxldGUoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuZ3JhbnVsYXJp
dHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAKIGJvb2wgRWRpdG9yOjpz
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIGJvb2wgRWRpdG9y
OjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRH
cmFudWxhcml0eSBnCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmIChtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoaXNUeXBpbmdBY3Rp
b24pIHsKICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZG9jdW1l
bnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVsZXRl
IDogMCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0
aW5nT3BlcmF0aW9uKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBFZGl0b3I6OmRlbGV0ZVdp
dGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5
IGcKIAogdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShib29sIHNt
YXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBl
ZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEVkaXRvcjo6
ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRBY3Rp
b24gZWRpdGluZwogCiB2b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsKLSAgICBDbGVhclRleHRD
b21tYW5kOjpDcmVhdGVBbmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkobV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxh
aW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQpAQCAt
NjYxLDcgKzY2MSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVu
dEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAKIHZvaWQgRWRpdG9yOjpy
ZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBT
ZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0UmVw
bGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1h
aWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4OSwxOSArNjg5LDE5
IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJh
Z21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1hZ2VFbGVtZW50c1RvTG9h
ZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldmVhbFNlbGVj
dGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxp
dHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpQYXN0ZSkgewogICAg
ICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKSk7
Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRv
Y3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRl
eHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICByZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAg
IH0KIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVk
aXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAgICAgIFN0cmluZyB0ZXh0
ID0gY29tbWFuZC0+ZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwotICAgICAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4dCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFY
VGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlV
bmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KIApAQCAtNzI4LDcg
KzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9y
OjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5n
ZSogcmFuZ2UpIGNvbnN0CkBAIC03NDQsNyArNzQ0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZERl
bGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29w
eSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBh
c3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigp
LCBDbGlwYm9hcmRFdmVudEtpbmQ6OkNvcHkpOwpAQCAtNzUyLDcgKzc1Miw3IEBAIGJvb2wgRWRp
dG9yOjp0cnlESFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAg
IGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkp
CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3Jk
RmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0
Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2Fy
ZEV2ZW50S2luZDo6Q3V0KTsKQEAgLTc2MCw3ICs3NjAsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhU
TUxDdXQoKQogCiBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKIHsKLSAg
ICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1
dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpCisg
ICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3Vw
cHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UsIGFjdGlvbik7CkBAIC03
ODIsMTcgKzc4MiwxNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKIAogYm9vbCBFZGl0b3I6Omhh
c0JpZGlTZWxlY3Rpb24oKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBzdGFydE5vZGU7Ci0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUo
KTsKLSAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWRO
b2RlKCk7CisgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYg
KGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2soZW5kTm9kZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlCi0gICAgICAgIHN0YXJ0Tm9kZSA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC04MTIsMTIgKzgxMiwxMiBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlv
bigpIGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRl
KCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKLSAg
ICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigp
LmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCiAgICAgICAgICAg
ICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7
Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CisgICAgfSBlbHNlIGlmICht
X2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFydE5v
ZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCksIHVsVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2lu
Z0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCks
IHVsVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9
PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBAIC04
MjcsMTIgKzgyNywxMiBAQCBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RT
dGF0ZSgpIGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0g
ICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQogICAgICAgICAg
ICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcp
OwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOworICAgIH0gZWxzZSBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgYXV0byogc3RhcnRO
b2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLCBvbFRhZyk7CisgICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3Np
bmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgp
LCBvbFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5vZGUg
PT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7CiAgICAgfQpAQCAt
ODcyLDcgKzg3Miw3IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkK
IHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
aXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0cjxOb2Rl
PiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC04ODIsNyArODgyLDcgQEAgUmVmUHRy
PE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9k
ZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogewotICAgIGlm
ICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAg
aWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3Qg
PSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsT3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC04OTIsNyArODkyLDcgQEAgUmVmUHRyPE5v
ZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCkKIAogUmVmUHRy
PE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKQogewot
ICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5l
d0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsVW5vcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTkwMiw3ICs5MDIsNyBAQCBS
ZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgp
CiAKIHZvaWQgRWRpdG9yOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYg
KCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBp
ZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21t
YW5kOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC05MzIsNyAr
OTMyLDcgQEAgRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIAogRWxlbWVudCogRWRpdG9yOjpmaW5kRXZl
bnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmluZEV2ZW50VGFy
Z2V0RnJvbShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXR1cm4gZmlu
ZEV2ZW50VGFyZ2V0RnJvbShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0K
IAogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtOTQ2LDEzICs5NDYsMTMgQEAgdm9pZCBFZGl0b3I6OmFw
cGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uLAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2Vs
ZWN0aW9uVHlwZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlw
ZSgpOworICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZpc2li
bGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcg
aW5wdXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rp
b24pOwogICAgIFN0cmluZyBpbnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGlu
Z1N0eWxlQW5kQWN0aW9uKCpzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1l
bnQ+IGVsZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVt
ZW50ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUs
IGlucHV0RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NjksNyArOTY5LDggQEAg
dm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uLAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjbGll
bnQoKS0+ZGlkQXBwbHlTdHlsZSgpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50
KCktPmRpZEFwcGx5U3R5bGUoKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgZGlzcGF0Y2hJ
bnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CkBA
IC05ODQsMTMgKzk4NSwxMyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3RpbwogICAgIGlmICghc3R5
bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOworICAgIGF1dG8gc2VsZWN0
aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlw
ZSgpOwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0
aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaW5wdXRUeXBlTmFtZSA9IGlucHV0
VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pOwogICAgIFN0cmluZyBpbnB1
dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9uKHN0eWxl
LCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFJlZlB0
cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3Jl
SW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTEwMDUsNyArMTAwNiw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5z
aG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0Fj
dGlvbik7CiB9CkBAIC0xMDE2LDcgKzEwMTcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRv
U2VsZWN0aW9uKFJlZjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZwog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4dCBk
ZWNvcmF0aW9ucyBzaW5jZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNsaWVu
dCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2
ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxk
QXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIo
KSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0Fj
dGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEwMjgsMjUgQEAgdm9pZCBFZGl0
b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxl
LCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNh
bkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGllbnQoKSAm
JiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUsIGVk
aXRpbmdBY3Rpb24pOwogfQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0g
ICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9u
U3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcikpCisgICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRp
dGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpCiAg
ICAgICAgIHJldHVybiBlZGl0aW5nU3R5bGUtPmhhc1N0eWxlKHByb3BlcnR5SUQsIHZhbHVlKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uSGFzU3R5
bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAog
ewotICAgIHJldHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRy
aVN0YXRlT2ZTdHlsZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXR1
cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5
bGUobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIFN0cmluZyBFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpCiB7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLAorICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0
eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSwKICAgICAgICAgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTExMzYsNyArMTEzNyw3IEBAIHZvaWQgRWRpdG9y
OjphcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCYgY29tbWFuZCkKICAgICAgICAg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZygmY29t
bWFuZCk7CiAKICAgICAgICAgaWYgKCFjb21tYW5kLnByZXNlcnZlc1R5cGluZ1N0eWxlKCkpCi0g
ICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAg
ICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAg
ICAgIC8vIENvbW1hbmQgd2lsbCBiZSBlcXVhbCB0byBsYXN0IGVkaXQgY29tbWFuZCBvbmx5IGlu
IHRoZSBjYXNlIG9mIHR5cGluZwogICAgICAgICBpZiAobV9sYXN0RWRpdENvbW1hbmQuZ2V0KCkg
PT0gJmNvbW1hbmQpCkBAIC0xMjAwLDExICsxMjAxLDExIEBAIHZvaWQgRWRpdG9yOjpyZWFwcGxp
ZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24mIGNvbXBvc2l0aW9uKQogICAgIHJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCi1FZGl0b3I6OkVkaXRvcihG
cmFtZSYgZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorRWRpdG9yOjpFZGl0b3IoRG9jdW1l
bnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fa2lsbFJp
bmcobWFrZVVuaXF1ZTxQQUw6OktpbGxSaW5nPigpKQotICAgICwgbV9zcGVsbENoZWNrZXIobWFr
ZVVuaXF1ZTxTcGVsbENoZWNrZXI+KGZyYW1lKSkKLSAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGZyYW1lKSkKKyAg
ICAsIG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihkb2N1bWVudCkpCisg
ICAgLCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyPihkb2N1bWVudCkpCiAgICAgLCBtX2VkaXRvclVJVXBkYXRlVGltZXIoKnRo
aXMsICZFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoVEVMRVBI
T05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICwgbV90
ZWxlcGhvbmVOdW1iZXJEZXRlY3Rpb25VcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6c2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpCkBAIC0xMjIwLDcgKzEyMjEsNyBAQCB2b2lkIEVk
aXRvcjo6Y2xlYXIoKQogICAgIGlmIChtX2NvbXBvc2l0aW9uTm9kZSkgewogICAgICAgICBtX2Nv
bXBvc2l0aW9uTm9kZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGNsaWVu
dCA9IHRoaXMtPmNsaWVudCgpKQotICAgICAgICAgICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3Np
dGlvbigmbV9mcmFtZSk7CisgICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9u
KG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgfQogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRl
cmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIo
KTsKQEAgLTEyMjksNiArMTIzMCw3IEBAIHZvaWQgRWRpdG9yOjpjbGVhcigpCiAgICAgbV9tYXJr
ID0geyB9OwogICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSB7IH07CiAgICAg
bV9lZGl0b3JVSVVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXItPnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAKICNpZiBFTkFCTEUoVEVMRVBI
T05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIG1fdGVs
ZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIuc3RvcCgpOwpAQCAtMTIzOCwxMiArMTI0
MCwxMiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dChj
b25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQsIFRleHRFdmVudElucHV0
VHlwZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFu
ZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1dFR5cGUpOworICAg
IHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1
dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKIH0KIAogYm9vbCBFZGl0
b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQp
CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZl
bnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwg
MCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRE
aWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0
ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQp
CkBAIC0xMzAzLDEwICsxMzA1LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2Vu
ZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAg
ICAgIC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRpb25hbGl6ZSByZXZlYWxpbmcgc2Vs
ZWN0aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBiaXQKICAgICAg
ICAgICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3VzZWQgZnJhbWUuCiAgICAgICAgICAg
ICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25B
ZnRlckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVkaXRlZEZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBh
Z2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+
cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAg
ICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTEzMTksMTAgKzEzMTksMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydExp
bmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKGRvY3VtZW50KCks
IGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJl
Y3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTEzMzksMTAgKzEzMzksMTAgQEAgYm9vbCBFZGl0b3I6
Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAg
ICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgi
XG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZp
c2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdl
ID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wg
YXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFw
cGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5n
Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0
aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0
b3IgOiAwKTsKQEAgLTE0MDYsNyArMTQwNiw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JD
b3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAgIH0KIAotICAgIGlmIChlbmNsb3Np
bmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNv
cHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIo
KSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6
IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxwdHI7CkBAIC0xNDI1LDcgKzE0MjUs
NyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIg
YWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9h
cmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhN
RTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAg
ICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rp
b24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVkZUlt
YWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVh
dGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRD
b3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZv
ckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTE0MzQsMTAgKzE0
MzQsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lm
aWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFjdGlvbikgewogICAgICAgICBTdHJp
bmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVk
KCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlz
aWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
ICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0
aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGRl
bGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBFZGl0
QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JD
dXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICBw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApAQCAtMTQ1NCw3ICsxNDU0LDcgQEAg
dm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIHJldHVy
bjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAg
ICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29y
KGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7Ci0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3RlT3B0
aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRl
eHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0NzksNyArMTQ3OSw3IEBAIHZvaWQg
RWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVz
c29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIo
KSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBh
c3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJv
YXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0LCBQYXN0
ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5U
ZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAtMTYxNyw3ICsxNjE3LDcgQEAgdm9p
ZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikK
ICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1h
a2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5l
ck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CiAgICAg
aWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODUxLDggKzE4NTEs
OCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkKIHZvaWQgRWRpdG9yOjpzZXRCYXNl
V3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBiYXNlV3JpdGluZ0RpcmVjdGlvbkZv
clNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAgIGlmIChpblNhbWVQYXJhZ3JhcGgo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpCisgICAgICAgICYmIGJh
c2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCiAgICAg
ICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4ODIsNyArMTg4Miw3IEBAIFdyaXRp
bmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0
KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRpbmdEaXJlY3Rpb246OkxlZnRUb1Jp
Z2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHBvcyA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkxNyw3ICsxOTE3LDcgQEAgdm9p
ZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihyYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbmZp
cm1Db21wb3NpdGlvbigpCkBAIC0xOTUyLDI4ICsxOTUyLDI4IEBAIHZvaWQgRWRpdG9yOjpjb25m
aXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBjbGFzcyBTZXRDb21wb3NpdGlv
blNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlKEZyYW1lJiBmcmFtZSkK
LSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGlj
YXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlKERvY3VtZW50JiBkb2N1bWVudCkK
KyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQorICAgICAgICAsIG1fdHlw
aW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUoKSkKICAgICB7Ci0gICAgICAgIG1f
ZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAgICAg
IG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CiAg
ICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQogICAgIHsKLSAgICAgICAgbV9mcmFt
ZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Ci0gICAgICAgIGlm
IChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAg
ICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7
CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5j
bGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+ZGlkVXBkYXRlQ29tcG9zaXRpb24o
KTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7CisgICAgUmVmUHRyPERvY3VtZW50
PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yIG1fdHlwaW5nR2Vz
dHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtb2Rl
ID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKTsKLSAg
ICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9mcmFtZSk7CisgICAg
U2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9jdW1lbnQpOwogCiAg
ICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAgICAgICAgIEFTU0VSVCh0ZXh0ID09
IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4NCw3ICsxOTg0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAg
ICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNv
bXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
KCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGN1cnJlbnQgY29tcG9z
aXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVkIGNvbXBvc2l0aW9uIHRleHQgaWYg
d2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBAIC0yMDAwLDEzICsyMDAwLDEzIEBA
IHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBv
c2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pIHsK
ICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0aGF0IGRpc2FncmVlcyBhYm91dCBj
dXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMgd2l0aCB0eXBpbmcgbGF0ZXIgb24u
Ci0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKCZtX2ZyYW1lKTsKKyAgICAgICAg
VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVudCk7CiAgICAgfQogfQogCiB2b2lk
IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9zaXRp
b25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCwgdW5zaWdu
ZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRp
b25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVzIHN0eWxlcyBiZWZvcmUgc2V0dGlu
ZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZlbnQKICAgICAvLyBpbnNlcnRpbmcg
dGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0ZXh0IG5vZGVzIG9kZGx5LgpAQCAt
MjAxNSw3ICsyMDE1LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KIAogICAgIHNlbGVjdENv
bXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAg
ICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjAyMywxMCAr
MjAyMywxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIGlmIChpc1N0YXJ0aW5nVG9S
ZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8vIFdlIHBhc3MgVHlwaW5nQ29tbWFu
ZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSByZW1v
dmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4gZmluYWxpemVkLgogICAgICAgICBU
eXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1lbnQoKSwgMCwgVHlwaW5nQ29tbWFu
ZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9u
LmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVsZXRpb24gd2FzIHByZXZlbnRlZCwg
dGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBzbyB0aGF0
IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29tcG9zZWQuCi0gICAgICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCks
IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxl
Y3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwODIsOCArMjA4Miw4IEBA
IHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZl
Y3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwg
VHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRD
b21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMg
dGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKLSAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKKyAg
ICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
YmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKICAgICAgICAgTm9kZSogYmFzZU5v
ZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIHVuc2lnbmVkIGJhc2VPZmZzZXQg
PSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIE5vZGUqIGV4dGVudE5v
ZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIxMDksNyArMjEwOSw3IEBAIHZvaWQg
RWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxD
b21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWlu
KGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2Vs
ZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFydCwg
YmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIxMjMsNyArMjEyMyw3IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAg
aWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAg
ICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTM5LDcgKzIxMzksNyBAQCB2b2lkIEVkaXRv
cjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBPbiBNYWMgT1MgWCwg
d2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBwYW5lbCwg
d2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91bGQgcmVtb3ZlIG1pc3NwZWxsaW5n
IG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTM5
NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJh
bmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
IChzZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTUy
LDE0ICsyMTUyLDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKIAogdm9pZCBFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQog
ewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKLQorICAgIFJlZjxEb2N1bWVu
dD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgCiAgICAgLy8gVGhlIGJhc2lj
IGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2VzIC0gZnJvbSB0aGUgc2VsZWN0aW9u
IGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAgIC8vIHRoZW4gd2Ugd3JhcCBhbmQg
c2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94aW1hdGVseSkgd2hlcmUgd2Ugc3Rh
cnRlZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHNl
YXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcgYXQgdGhlIHNlbGVjdGlvbiBlbmQg
bWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsuCi0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdlID0g
cmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVj
dGlvbiA9IGZhbHNlOwpAQCAtMjMwOCw4ICsyMzA4LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICAg
ICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBw
dW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAgIGF1dG8gYmFkR3Jh
bW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIHsg
Z3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwucmFuZ2UubG9jYXRpb24sIGdyYW1t
YXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRf
QUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAg
ICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1t
YXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5h
ZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1h
ckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMyMCw4ICsyMzIwLDggQEAgdm9pZCBFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQog
ICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0ZXIuCiAg
ICAgICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVsbGluZ09mZnNldCwgbWlzc3BlbGxl
ZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOwotICAg
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxs
aW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5y
ZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CkBAIC0yMzM1LDcgKzIzMzUsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVs
bGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAogICAgIGlmICgh
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKQEAgLTIzODksNyArMjM4OSw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRT
ZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0
aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpyYW5nZSkuaXNVbmdy
YW1tYXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0MDQsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6
Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAKICAg
ICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4
dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5n
ZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MTIs
NyArMjQxMiw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRP
clVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vCiB7CiAgICAgaWYgKHVuaWZpZWRU
ZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0
KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2Vs
ZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9
IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7CiAgICAgICAgICAgICB3b3JkU2Vs
ZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKQEAgLTI0NzIs
NyArMjQ3Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3Jk
U3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29s
IGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOwor
ICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICBp
ZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjU5NCwxOSArMjU5NCwxOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgIC8vIElm
IGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQg
d29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlzRW1wdHko
KSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbigqbWlzc3BlbGxpbmdS
YW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVj
dGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBpZiAo
bmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0
KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxk
SW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBF
ZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0
cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9u
OjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0
UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAKICAgICAgICAgLy8gUmVzZXQgdGhl
IGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwotICAgICAg
ICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1v
dmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkp
CkBAIC0yNjc4LDcgKzI2NzgsNyBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5h
YmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdF
bmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9
CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjcy
Niw3ICsyNzI2LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAocGFyYWdyYXBo
VG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgYXN5bmNocm9u
b3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CisgICAgYm9vbCBhc3luY2hyb25vdXMg
PSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAogICAgIC8vIEluIGFzeW5jaHJvbm91
cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgog
ICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVN
YXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7CkBAIC0yNzQxLDcgKzI3NDEs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0KIAogICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVj
a2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMs
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9mUGFyYWdy
YXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRp
b25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBt
YXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdHMpOwogfQog
CkBAIC0yNzg3LDcgKzI3ODcsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1By
ZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYQogCiB2b2lkIEVk
aXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAgIFJlZjxG
cmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERv
Y3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVx
dWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBw
YXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJlcXVlc3QuYXV0b21hdGljUmVwbGFj
ZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKQEAgLTI4MTEsOSArMjgx
MSw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25G
b3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9ybVJl
cGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rp
b24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CisgICAgICAg
IGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9
PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gQXR0
ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRl
ciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICAgICAgUG9zaXRpb24gY2Fy
ZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAg
ICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3JhcGgub2Zmc2V0VG8oY2FyZXRQb3Np
dGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9u
QWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+IDAg
JiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdy
YXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAg
LTI4OTUsMTMgKzI4OTUsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0
IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UocmFu
Z2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVw
bGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rp
b25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1Jl
cGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykgewot
ICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlv
blRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25D
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFu
Z2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQpAQCAtMjkx
MCw3ICsyOTEwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxs
Q2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBj
b3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdy
YXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3Vs
dExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9
IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJv
b3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJv
b3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsKICAgICAgICAgICAg
ICAgICB9CiAKQEAgLTI5NDAsMTMgKzI5NDAsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBs
YWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUK
ICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKICAgICAg
ICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0g
ZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewogICAgICAgICAgICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zm
c2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9u
UmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05T
VFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5k
YXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFu
dWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnko
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlz
IGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0aW9u
IGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAg
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAg
ICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJk
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMDIzLDgg
KzMwMjMsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIE9mIGNvdXJzZSwgaWYg
Y3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3
byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMgb2YKICAgICAvLyBzZWxlY3Rpb24s
IGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAg
Ly8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZT
ZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGaXJzdCB3b3JkIGlz
IHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpA
QCAtMzA5NiwxMSArMzA5Niw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25B
dFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkK
IHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5k
b3dQb2ludCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZy
YW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmll
dykKQEAgLTMxMTcsNyArMzExMyw3IEBAIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRl
ckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lCiAgICAgICAg
IHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSA9IFNlbGVjdGlv
blJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlvbik7CisgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24ocmV2ZWFsTW9kZSwgYWxpZ25tZW50
LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0
aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0
aW5nU2VsZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI1LDcgQEAgdm9pZCBFZGl0b3I6OnNldElnbm9y
ZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZl
YWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3VwcHJl
c3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9uIGNo
YW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAogICAgIGlmICghaWdub3JlKQotICAg
ICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNlbmRpZgogICAgIGlmICghaWdub3Jl
ICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09IFJldmVhbFNlbGVjdGlvbjo6WWVz
KQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwpAQCAtMzE1Miw3ICsz
MTQ4LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsKICAgICBpZiAoIW1fY29tcG9zaXRp
b25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAg
aWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTMxNzUsNyArMzE3MSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bv
c2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0zMjAwLDEwICszMTk2LDEwIEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAg
IFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKIAogICAg
IC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgIGlmICghbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAo
bmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAg
ICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIH0KIAogICAgIC8vIElu
c2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAtMzI1NSw3ICszMjUxLDcgQEAgdm9p
ZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKQogCiB2b2lkIEVkaXRv
cjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5l
d1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+
IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJl
ZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBJZiB0
aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBkb24ndCB1cGRhdGUgdGhlIHNlbGVj
dGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCkuaXNPcnBoYW4oKSB8fCBuZXdTZWxl
Y3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjUsOSArMzI2MSw5IEBAIHZvaWQgRWRpdG9y
OjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3
U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyB3b3JrIHRoYXQgaXQgbXVzdCBk
byBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBjYW4gYmUgaW52
YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4gcHJvZHVjZSBz
b21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NzI5MzE1PiBT
b21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMgZm9yIHNlbGVj
dGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAgYm9vbCBzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9w
dGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdT
ZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAo
c2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKIAogICAg
IC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHZpc3VhbGx5
IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIERPTS4KICAgICAvLyBG
b3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4gdGhlIGZvbGxvd2luZyAodGhlIGNh
cmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODIsMTMgKzMyNzgsMTMgQEAgdm9pZCBFZGl0b3I6
OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdT
ZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgaWYgKHNlbGVjdGlvbkRp
ZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIFN0cmluZyBF
ZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
YmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3I7Ci0gICAgaWYgKG1fZnJhbWUu
c2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAg
IGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmll
c0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxh
dFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMjk2LDcg
KzMyOTIsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAogU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKICAgICBUZXh0SXRl
cmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvckVtaXRzSW1hZ2VBbHRUZXh0Owot
ICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmll
c0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9z
c1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAgIGJlaGF2aW9yIHw9IFRleHRJdGVy
YXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBzZWxlY3RlZFRleHQoYmVoYXZpb3Ip
OwogfQpAQCAtMzMwNCw3ICszMzAwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9y
RGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dChUZXh0SXRl
cmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAgICAvLyBXZSByZW1vdmUgJ1wwJyBj
aGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVz
ZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBhdXRvIGVuZCA9
IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBo
YW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCkBAIC0zMzE0LDcgKzMzMTAs
NyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVo
YXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omlu
c2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
aXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50
RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWY8RG9jdW1lbnQ+
IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAtMzMyMiw3ICszMzE4LDcgQEAgUmVm
UHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVy
KGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2YgcmVw
bGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERl
bGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTMzMzAsNyArMzMyNiw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVt
ZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAg
ICAgcmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVy
LnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0gICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlv
bjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAgIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rp
b246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAogICAgIHJl
dHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNTAsOCArMzM0Niw4IEBAIHZvaWQgRWRpdG9yOjpy
ZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vob2xkZXIp
CiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUgTGVnYWN5
IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB0byBi
ZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVs
ZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVm
b3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQtPmZvY3Vz
ZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2ZWRQb3Np
dGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFtZVNlbGVj
dGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogfQogCiBz
dGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3QpCkBAIC0z
NDAzLDcgKzMzOTksNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2Uq
IHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5l
d1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25z
dAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
Q2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpICYm
IG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xp
ZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBh
ZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwpAQCAtMzQxMiwxNyArMzQwOCwxNyBAQCBib29sIEVk
aXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgY29uc3QgVgogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShF
ZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYg
KHN0eWxlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0
eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1
cnJlbnQgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxl
OwotICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKICAgICAgICAgdHlwaW5nU3R5bGUgPSBl
eGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CiAgICAgZWxzZQogICAgICAgICB0eXBpbmdTdHls
ZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlw
aW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBp
bmdTdHlsZUF0KHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxl
cywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8
RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gdHlwaW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVC
bG9ja1Byb3BlcnRpZXMoKTsKQEAgLTM0MzAsNyArMzQyNiw3IEBAIHZvaWQgRWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0CiAgICAgICAgIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgYmxv
Y2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CiAKICAgICAvLyBTZXQgdGhl
IHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOworICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOwogfQog
CiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYg
cHJvcGVydGllcywgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ4OSwxOSArMzQ4NSwx
OSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3QK
IAogYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKLSAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZT
dHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKIAog
ICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdl
LCBET1dOU1RSRUFNKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKIAogICAgIGlmICgh
KG9wdGlvbnMuY29udGFpbnMoRG9Ob3RSZXZlYWxTZWxlY3Rpb24pKSkKLSAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU5
OCw3ICszNTk0LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICBpZiAocmFuZ2UpIHsK
ICAgICAgICAgaWYgKCZyYW5nZS0+b3duZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQogICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJ
blJhbmdlKG1fZnJhbWUsICpyYW5nZSkpCisgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5n
ZSgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIGlmICghc2VhcmNoUmFuZ2UpCkBAIC0zNjY4LDcgKzM2NjQsNyBAQCB2b2lkIEVk
aXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwg
T3B0aW9uU2V0PEZyYW1lUwogI2VuZGlmCiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNs
aWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xp
ZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKIAog
I2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgaWYgKHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSkKQEAgLTM2OTEs
OCArMzY4Nyw2IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9yOjpzaG91
bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVsZXBo
b25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNT
dXBwb3J0ZWQoKTsKIH0KIApAQCAtMzcwNSw5ICszNjk5LDkgQEAgdm9pZCBFZGl0b3I6OnNjYW5T
ZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiBtYXJrZWRSYW5nZXM7CiAKLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1Jhbmdl
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0No
YW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MjksNyArMzcyMyw3IEBAIHZv
aWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgUmVmUHRy
PFJhbmdlPiBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBpZiAoYXV0byogcGFn
ZSA9IG1fZnJhbWUucGFnZSgpKQorICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQu
cGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNl
bGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzc0Miw3ICszNzM2LDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJS
YW5nZXMuYXBwZW5kKHJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJh
bWUucGFnZSgpKQorICAgIGlmIChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAg
ICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQoKTsKIH0KIApAQCAtMzgwMSw5ICszNzk1LDkgQEAgdm9pZCBFZGl0
b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRX
b3JkczsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwotICAg
ICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gbmV3U3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKSk7CisgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQuc2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpIHsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAgICAgICAgIG5ld0FkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9u
KHN0YXJ0T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChu
ZXdTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAjZWxzZQpAQCAtMzg1Niw3ICszODUw
LDcgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKCFt
X2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbikKICAgICAgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNl
bGVjdGlvbik7CiAKLSAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJ
VXBkYXRlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVOQUJM
RShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgbm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRl
cygpOwpAQCAtMzg4Myw3ICszODc3LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxl
KE5vZGUqIG5vZGUpCiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0
aCkgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIE5v
ZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTM5NTAsMTAgKzM5NDQsMTAgQEAgT3B0aW9uU2V0PFRleHRD
aGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5v
ZGUmIHJvb3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxS
YW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQorc3RhdGljIFJl
ZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50
KQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29y
ZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVj
dGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkp
IDogZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogc3RhdGlj
IGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCkBAIC0zOTY3LDggKzM5NjEsOCBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3Vs
ZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5n
IEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBj
YW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihtX2ZyYW1lKTsKKyAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0
ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRs
eVR5cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKICAg
ICAgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAK
QEAgLTM5NzcsNyArMzk3MSw3IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJl
cXVlc3QoKSBjb25zdAogICAgIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZv
ckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkp
OwogfQogCkBAIC00MDQ0LDcgKzQwMzgsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRB
dHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMg
YXR0cmlidXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8q
IHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsK
KyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFt
ZSgpLCBub2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVU
b1JlbW92ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDg1LDcg
KzQwNzksNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rp
b25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMu
dGV4dExpc3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVz
LnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVy
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0
Y2ggKHN0eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6
CkBAIC00MTExLDcgKzQxMDUsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IGF1dG8gdHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5n
U3R5bGUoKSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5n
U3R5bGUtPnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHls
ZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsK
QEAgLTQxOTksMTIgKzQxOTMsOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2ht
ZW50VXBkYXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1l
bnRJZGVudGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRo
SWRlbnRpZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZv
ciAoYXV0byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0g
ICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50
aWZpZXIoaWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3Vt
ZW50LmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xp
ZW50KCktPmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRh
Y2htZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0
ciksIGF0dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQyMjcsNyArNDIxNyw3IEBAIHZvaWQg
RWRpdG9yOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9u
YWw8dWludDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRh
dGUgPSB0cnVlOwogCkBAIC00MjQ2LDcgKzQyMzYsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNj
ZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBi
b29sIEVkaXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJl
dHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUo
KSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9y
TWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjYyLDEzICs0MjUyLDcg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0
IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVN
b2RlRW5hYmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0
ZU1vZGVFbmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2Nr
Q3Vyc29yKG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpk
b2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAg
cmV0dXJuICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZXRTaG91bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJl
ZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQzMjEsOSAr
NDMwNSw5IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNN
dWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAot
ICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92
ZTsKLSAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1l
LCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1v
dmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBu
dWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMzUsMTEgKzQzMTksMTEgQEAgY29u
c3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMp
IGNvbnN0CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9u
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAg
Tm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRp
b24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQzNzEs
NyArNDM1NSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omluc2VydEVkaXRh
YmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFn
ZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0
aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4
IGFkOWVkYTI2MThjOWE4ODBiZWNiYjFjZTRkNjhiYjU5Yjg5YzIwYzAuLmZmYTc3ZDBlNTQ4ZTdj
ZTc3ZGNkNDdiYjBlNjFjMTBhODQ3N2YwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkVkaXRv
ckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRX
cml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTksMTMgKzEyMCwx
MyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4X3QgewogCiBj
bGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZpc2libGVTZWxl
Y3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9u
PiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERv
Y3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlv
blNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZyYW1lPiBtX2Zy
YW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRpb25TZXQ8VGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dhc0lnbm9yaW5n
U2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTM3LDcgKzEz
OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSB7CiBw
dWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUmIGZyYW1lKQot
ICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFy
eVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgOiBtX3Nl
bGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewogICAgIH0KIApA
QCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihGcmFtZSYpOwor
ICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsKIAogICAgIGVu
dW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIsNyBAQCBwdWJs
aWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21t
YW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29tbWFuZChjb25z
dCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBEb2N1bWVudCYp
OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBh
cmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikgY29u
c3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dlcmlu
Z0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQgeyBudWxscHRy
IH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAgICAgIFJlZlB0
cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwog
ICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1lbnVPcktleUJp
bmRpbmcuCkBAIC01NjcsNyArNTY5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQmKTsKIAogcHJp
dmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1bWVudCYgZG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29sIGNhbkRlbGV0
ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVi
b2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTgsNyArNjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1
bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1fbGFz
dEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICB1
bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAppbmRleCA5ZGJhNzA2OWFkMTQyOGNkYzNiOTBmYjZjMDQ3MWZhYTEwZmI4YzQ0
Li5iZDUxODBlYjQwMGVhNzkyMTUxYjZmNzk4YjYwZWNiOGNmZmRhZWFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTExMDksNiArMTEwOSw3IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0aE1hcmsoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7
CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50KCkpOwogICAg
IFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMTgzNiwx
MiArMTgzNywxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBpbnRlcm5h
bENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpDb21tYW5kIEVk
aXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAgIHJldHVybiBD
b21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9tTWVudU9yS2V5
QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNv
bW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3VtZW50KTsKIH0K
IAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4gQ29tbWFuZChp
bnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOworICAgIHJldHVy
biBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9kb2N1bWVu
dCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVudU9yS2V5Qmlu
ZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTg1MywxMiArMTg1NCwxMyBAQCBF
ZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1hbmQ6OkNvbW1h
bmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291
cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0
IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5kKQogICAgICwg
bV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1lIDogbnVsbHB0
cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxwdHIpCisgICAg
LCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikKIHsKLSAgICBB
U1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1fZG9j
dW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJpbmcm
IHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4NjgsOSArMTg3
MCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1l
dGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxsb3dFeGVjdXRp
b25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
YXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2ZyYW1lLT5kb2N1
bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkgIT0gbV9m
cmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29tbWFuZC0+ZXhl
Y3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1ldGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1MDcy
ZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OS4uNmVkODZjNGQ2ZWQwYmFlNDQyMDhhYmU4NDQ2
NjBkNjBkMDEyNTkxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKQEAgLTEzOSwxMyArMTM5LDE0IEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJvbGxlcjo6ZWRp
dGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJu
ICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVj
dGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4gIWRvY3VtZW50IHx8IGRvY3VtZW50LT5l
ZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgp
OwogfQogCi1GcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQotICAg
IDogbV9mcmFtZShmcmFtZSkKK0ZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1bWVu
dCogZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9mcmFtZShk
b2N1bWVudD8gZG9jdW1lbnQtPmZyYW1lKCkgOiBudWxscHRyKQogICAgICwgbV94UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSkK
ICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAjaWYgRU5BQkxFKFRF
WFRfQ0FSRVQpCkBAIC0xNTYsNyArMTU3LDcgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0
aW9uKEZyYW1lKiBmcmFtZSkKICAgICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQogICAg
ICwgbV9jYXJldFBhaW50KHRydWUpCiAgICAgLCBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZChm
YWxzZSkKLSAgICAsIG1fZm9jdXNlZChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGZyYW1lKQorICAgICwg
bV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gbV9mcmFtZSkKICAgICAsIG1fc2hv
dWxkU2hvd0Jsb2NrQ3Vyc29yKGZhbHNlKQogICAgICwgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRl
KGZhbHNlKQogICAgICwgbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbihmYWxzZSkKQEAgLTE2NSwxNCArMTY2LDI0IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFt
ZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2NhcmV0QmxpbmtzKHRydWUpCiAjZW5k
aWYKIHsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFt
ZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1l
bnQpKQogICAgICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOworICAgIAor
ICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOworICAgIGlm
IChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworI2lm
IFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3MgfCBkb2Vz
IG5vdCBibGluaykKKyAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9jdXNlZCk7CisjZWxz
ZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8gVmlzaWJsZSA6IEhp
ZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJs
ZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2VsZWN0
aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICByZXR1cm4g
c2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlv
bjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB1c2Vy
VHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduKQpAQCAtMjg0LDcgKzI5NSw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBwYXNzCiAgICAgRW5kUG9pbnRzQWRqdXN0bWVudE1vZGUgZW5k
cG9pbnRzQWRqdXN0bWVudE1vZGUpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rp
b24gPSBwYXNzZWROZXdTZWxlY3Rpb247Ci0gICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hvdWxk
QWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgbmV3U2VsZWN0aW9uLmlz
RGlyZWN0aW9uYWwoKTsKKyAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRBbHdheXNVc2VE
aXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBuZXdTZWxlY3Rpb24uaXNEaXJlY3Rp
b25hbCgpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJhc2UgPSBtX29yaWdpbmFsQmFzZS5pc05v
dE51bGwoKSA/IG1fb3JpZ2luYWxCYXNlIDogbmV3U2VsZWN0aW9uLnZpc2libGVCYXNlKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIG5ld0Jhc2UgPSBiYXNlOwpAQCAtMzIyLDcgKzMzMyw3IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2Uo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgYm9vbCBzaG91bGRDbGVhclR5cGluZ1N0eWxlID0g
b3B0aW9ucy5jb250YWlucyhDbGVhclR5cGluZ1N0eWxlKTsKIAogICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uUG9zc2libHlXaXRob3V0RGlyZWN0aW9uOwot
ICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAg
ICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkpCiAg
ICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogCiAgICAgaWYgKCFt
X2ZyYW1lKSB7CkBAIC0zMzQsNyArMzQ1LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAg
ICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBp
bmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3VtZW50KiBuZXdTZWxlY3Rpb25Eb2N1bWVudCA9IG5l
d1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoUmVmUHRyPEZyYW1l
PiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1NlbGVjdGlvbkRvY3VtZW50LT5mcmFtZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rp
b25Eb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAobmV3
U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2Rv
Y3VtZW50KSB7CiAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uRnJhbWUtPnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3Nz
aWJsZSB0aGF0IGR1cmluZyB0aGUgYWJvdmUgc2V0IHNlbGVjdGlvbiwgdGhpcyBGcmFtZVNlbGVj
dGlvbiBoYXMgYmVlbiBtb2RpZmllZCBieQogICAgICAgICAgICAgICAgIC8vIHNlbGVjdEZyYW1l
RWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkLCBidXQgdGhhdCB0aGUgc2VsZWN0aW9uIGlz
IG5vIGxvbmdlciB2YWxpZCBzaW5jZQpAQCAtMzQ5LDcgKzM2MCw3IEBAIGJvb2wgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvCiAgICAgbV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5OwogCiAgICAgaWYgKGNs
b3NlVHlwaW5nKQotICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhtX2ZyYW1lKTsK
KyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoKm1fZG9jdW1lbnQpOwogCiAgICAg
aWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsK
QEAgLTM1Nyw3ICszNjgsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRo
b3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIFZpc2libGVT
ZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBkaWRNdXRhdGVT
ZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlmIChkaWRNdXRh
dGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFu
Z2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5nZSgp
OwogCiAgICAgbV9zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247CiAKQEAgLTM3MSwzNSArMzgyLDMx
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVh
cmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUo
KTsKIAogICAgIGlmICghbmV3U2VsZWN0aW9uLmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERvTm90
U2V0Rm9jdXMpKSB7Ci0gICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICAgICAgYXV0byogb2xkRm9jdXNlZEVs
ZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgICAgICBzZXRGb2N1c2Vk
RWxlbWVudElmTmVlZGVkKCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGJlIG5lZWRl
ZC4KLSAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkgIT0g
b2xkRm9jdXNlZEVsZW1lbnQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVu
dCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC0+dXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogICAgIH0KIAogICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3Np
dGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgogICAgIC8vIEl0IHdpbGwg
YmUgcmVzdG9yZWQgYnkgdGhlIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNl
c3NhcnkuCiAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JW
ZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50
SWZGdWxseVNlbGVjdGVkKCk7Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPmVkaXRv
cigpLnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKICAg
ICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0aW9uLWFwaS8jc2VsZWN0aW9uY2hhbmdl
LWV2ZW50CiAgICAgLy8gRklYTUU6IFNwZWMgZG9lc24ndCBzcGVjaWZ5IHdoaWNoIHRhc2sgc291
cmNlIHRvIHVzZS4KLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5xdWV1ZVRhc2tUb0Rpc3BhdGNo
RXZlbnQoVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJ
c0NhbmNlbGFibGU6Ok5vKSk7CisgICAgbV9kb2N1bWVudC0+cXVldWVUYXNrVG9EaXNwYXRjaEV2
ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXND
YW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9w
dGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KQogewotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7
CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywg
YWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJh
bWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6
OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVj
dGlvbikKQEAgLTQxMSwyNyArNDE4LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAg
bV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9u
VXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxj
KCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYg
KGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmxheW91dENvbnRleHQoKS5pc0xheW91dFBlbmRpbmco
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGludGVu
dCk7CiAKICAgICBpZiAob3B0aW9ucyAmIElzVXNlclRyaWdnZXJlZCkgewotICAgICAgICBpZiAo
YXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIGlmIChh
dXRvKiBjbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAg
IGNsaWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9
CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZy
YW1lJiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRP
clN0eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAg
ICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
ICNlbHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAg
IGRvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyAr
NDQ4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2
ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBS
ZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJl
dmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2Vs
ZWN0aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVu
dC0+cmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlv
bigpOwogfQogCkBAIC00NTcsNyArNDY0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKICAg
ICBpZiAobV9zZWxlY3Rpb25SZXZlYWxNb2RlICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90
UmV2ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAgICAg
aWYgKG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2Vs
ZWN0aW9uSXNSZXZlYWxlZCgpKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCiAgICAg
ICAgICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFs
aW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyA6IFNjcm9s
bEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXMgOiBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CkBAIC00NzEsNyArNDc4LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50JiBpbnQKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JT
ZWxlY3Rpb24oKQogewogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2NhblNlbGVjdGlv
bkZvclRlbGVwaG9uZU51bWJlcnMoKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zY2FuU2Vs
ZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MTAs
NyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0o
Ym9vbCBpc0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0
byB0aGUgc2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0
byB3aGljaCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNh
biBiZSBjaGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAg
aWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNF
eHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudCAm
JiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVj
dGlvbkZyb21FeHRlbnRFbmRwb2ludCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNC
YXNlRmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpOwogCiAgICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MzAsNyBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bShjb25zdCBWaXNpYmxlUG9zaXRpbwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFm
dGVyQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0g
ICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lw
U3BhY2VXaGVuTW92aW5nUmlnaHQoKSkgeworICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1l
bnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkp
IHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQs
IHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVydGhlciBhbmQgdGhlbiBtb3ZlIG9u
ZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBzZW1hbnRpY3Mgb2YgcHJldmlvdXNX
b3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRoZQpAQCAtODU1LDcgKzg2Miw3IEBA
IFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnJpZ2h0KHRy
dWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51
bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJh
bWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92
aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9k
b2N1bWVudCAmJiBtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFj
ZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0
aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAg
ICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hl
bk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEwNzYsNyAr
MTA4Myw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVm
dChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3MgPSBWaXNp
YmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkp
LmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBX
b3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0
ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFj
ZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmln
aHQgPSBtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxk
U2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJy
ZW50UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkp
OwogICAgICAgICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNT
cGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0x
MzYyLDcgKzEzNjksNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24g
YWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBpZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNlclRy
aWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkgeworICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFu
Z2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVudCAmJiBB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlmeUFj
Y2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxl
Y3Rpb25Cb3VuZGFyeSwgdGV4dFNlbGVjdGlvbldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0eShk
aXJlY3Rpb24sIGdyYW51bGFyaXR5KSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMTM3NCw4ICsxMzgxLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0
aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgaWYg
KCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmln
aW5hbFN0YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
bV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBj
YWNoZS0+c2V0VGV4dFNlbGVjdGlvbkludGVudCh0ZXh0U2VsZWN0aW9uSW50ZW50KGFsdGVyLCBk
aXJlY3Rpb24sIGdyYW51bGFyaXR5KSk7CiAgICAgfQogCkBAIC0xMzg0LDcgKzEzOTEsNyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgIC8vIE5vdGU6IHRoZSBTVEFSVCBwb3NpdGlvbiB0
eXBlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQgd291bGQgYmUKICAgICAv
LyB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHR5cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24gc2V0LgogICAgIExheW91dFVuaXQgeCA9IGxpbmVEaXJlY3Rp
b25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9zZWxlY3Rp
b24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbiht
X2ZyYW1lKSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5z
ZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9j
dW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgc3dpdGNoIChhbHRl
cikgewogICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6CkBAIC0xMzk0LDcgKzE0MDEsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAgICAgIGlmICghbV9zZWxlY3Rpb24uaXNDYXJldCgp
CiAgICAgICAgICAgICAmJiAoZ3JhbnVsYXJpdHkgPT0gV29yZEdyYW51bGFyaXR5IHx8IGdyYW51
bGFyaXR5ID09IFBhcmFncmFwaEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IExpbmVHcmFu
dWxhcml0eSkKLSAgICAgICAgICAgICYmIG1fZnJhbWUgJiYgIW1fZnJhbWUtPmVkaXRvcigpLmJl
aGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkg
eworICAgICAgICAgICAgJiYgbV9kb2N1bWVudCAmJiAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7
CiAgICAgICAgICAgICAvLyBEb24ndCBsZXQgdGhlIHNlbGVjdGlvbiBnbyBhY3Jvc3MgdGhlIGJh
c2UgcG9zaXRpb24gZGlyZWN0bHkuIE5lZWRlZCB0byBtYXRjaCBtYWMKICAgICAgICAgICAgIC8v
IGJlaGF2aW9yIHdoZW4sIGZvciBpbnN0YW5jZSwgd29yZC1zZWxlY3RpbmcgYmFja3dhcmRzIHN0
YXJ0aW5nIHdpdGggdGhlIGNhcmV0IGluCiAgICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEg
d29yZCBhbmQgdGhlbiB3b3JkLXNlbGVjdGluZyBmb3J3YXJkLCBsZWF2aW5nIHRoZSBjYXJldCBp
biB0aGUKQEAgLTE0MDcsNyArMTQxNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShF
QWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAg
ICAgICAgLy8gU3RhbmRhcmQgTWFjIGJlaGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91bmRh
cnkgaXMgZ3JvdyB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCiAgICAgICAg
IC8vIGJhc2UgaW4gcGxhY2UgYW5kIG1vdmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4dFZp
ZXcuCi0gICAgICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3Io
KS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBt
X3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAgICAg
ICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxl
Y3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAgICAg
IHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3Np
bmdCbG9jaygpOwpAQCAtMTUxNyw3ICsxNTI0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0aWMK
ICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBtX2dyYW51
bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0Rp
cmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8
IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0
aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwg
YWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE1
NjcsNyArMTU3NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyKCkKICAgICBzZXRTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJl
cGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRG
cm9tRnJhbWUoKQogewogICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsK
IApAQCAtMTU3NSw3ICsxNTgyLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRl
c3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAg
IGlmIChhdXRvKiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKGF1
dG8qIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVj
dGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAKICAgICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKFZpc2libGVTZWxlY3Rpb24oKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKSwgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7
CkBAIC0xNjU1LDkgKzE2NjIsOSBAQCBzdGF0aWMgYm9vbCBpc05vbk9ycGhhbmVkQ2FyZXQoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBJbnRSZWN0IEZyYW1lU2VsZWN0aW9u
OjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKQogewotICAgIGlmICghbV9m
cmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0g
ICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAg
IHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKICAg
ICByZWNvbXB1dGVDYXJldFJlY3QoKTsKICAgICBpZiAoaW5zaWRlRml4ZWQpCiAgICAgICAgICpp
bnNpZGVGaXhlZCA9IG1fY2FyZXRJbnNpZGVQb3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwxMCArMTY4
MiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgIGlm
ICghc2hvdWxkVXBkYXRlQ2FyZXRSZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEZyYW1lVmlldyogdiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAg
ICBGcmFtZVZpZXcqIHYgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OTAsNyArMTY5Nyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rp
b246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgICAgICBjbGVhckNhcmV0UmVjdCgpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQg
PSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgICAgIGlmICh1cGRhdGVDYXJl
dFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwgdmlzaWJsZVN0YXJ0KSkgeworICAgICAgICAgICAg
aWYgKHVwZGF0ZUNhcmV0UmVjdChtX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAg
ICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVl
OwogICAgICAgICAgICAgfQpAQCAtMTcxNSw3ICsxNzIyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlv
bjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5B
QkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5yZW5kZXJWaWV3KCkpIHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9j
dW1lbnQtPnJlbmRlclZpZXcoKSkgewogICAgICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5v
ZGVJc0NvbnRlbnRFZGl0YWJsZSA9IG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwg
KG1fcHJldmlvdXNDYXJldE5vZGUgJiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRp
dGFibGUoKSk7CiAgICAgICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmlldywgcHJldmlvdXNP
ck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlKSkgewogICAgICAgICAgICAgaWYgKG1fcHJl
dmlvdXNDYXJldE5vZGUpCkBAIC0xODk0LDEyICsxOTAxLDExIEBAIGJvb2wgRnJhbWVTZWxlY3Rp
b246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKICAgICBpZiAoIWlz
UmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8qIGRvY3VtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9k
b2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEhpdFRlc3RSZXN1bHQg
cmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCBy
ZXN1bHQpOworICAgIG1fZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0
KTsKICAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYgKCFp
bm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTk2OCw5ICsxOTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVF
bGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RBbGwoKQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50
KCk7Ci0KLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxl
bWVudCgpOworICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNl
ZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50
KSkgewogICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0
PEhUTUxTZWxlY3RFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0
RWxlbWVudC5jYW5TZWxlY3RBbGwoKSkgewpAQCAtMjAwMCw4ICsyMDA0LDggQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICAgICAgaWYgKHJvb3QpCiAgICAgICAgICAgICBz
ZWxlY3RTdGFydFRhcmdldCA9IHJvb3QtPnNoYWRvd0hvc3QoKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAg
ICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKKyAgICAg
ICAgICAgIHJvb3QgPSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAg
IHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbV9kb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBpZiAoIXJvb3QpCkBAIC0yMDU4LDkgKzIwNjIsOCBAQCBib29sIEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5LCBTaG91bGRDbAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3Rh
dGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFjdGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRB
Y3RpdmUoKTsKLSAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KCptX2ZyYW1lLT5kb2N1bWVudCgp
KTsKIAotICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgbV9kb2N1bWVu
dC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCiAjaWYgVVNFKFVJS0lUX0VESVRJTkcpCiAgICAg
Ly8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQpAQCAtMjA3MSw3ICsy
MDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2Vk
KCkKICAgICAvLyBCZWNhdXNlIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgYW5kCiAgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
aGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBs
YWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3
ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1f
ZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWlu
dCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4
Miw3ICsyMDg1LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVD
aGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3Rv
cigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJh
bWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAgICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBz
dGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3NlLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0g
ZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKICAgICAgICAgZWxlbWVudC0+aW52YWxp
ZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVu
ZGVyZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQpAQCAtMjEwNywxMyArMjExMCwxMyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkKGJvb2wgZmxhZykKIAogYm9vbCBGcmFtZVNl
bGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb2N1
c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50LT5wYWdl
KCkgJiYgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwog
fQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1pbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3Rv
cEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKEZyYW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMg
Ym9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYg
ZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2lu
ZygpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYg
ZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlu
a2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIxMzIsMTIgKzIxMzUsMTIgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0g
bV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xv
Z2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0
UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wg
Y2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQo
KTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0
QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgYm9vbCBzaG91bGRCbGluayA9ICFwYWludEJsb2NrQ3Vy
c29yICYmIGNhcmV0SXNWaXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24uaXND
b250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKIAogICAgIC8vIElmIHRoZSBjYXJl
dCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGltZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCiAg
ICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhlIG5ldyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRSZWN0
Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVl
VG9UeXBpbmdDb21tYW5kKG1fZnJhbWUpKQorICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVh
cmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1h
bmQobV9kb2N1bWVudCkpCiAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAg
IC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVz
dGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsyMTU2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3
ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1f
ZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjIwMiw4ICsyMjA1LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNp
YmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVy
ZS4KLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xh
eW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIGlmIChtX2RvY3VtZW50KQorICAgICAgICB1cGRh
dGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAKICNpZiBF
TkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsy
MjUwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQo
KQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5n
cygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAg
ICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxl
Y3Rpb24uYmFzZSgpKSkgewotICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAg
IG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQo
YW5jaG9yLCAqbV9mcmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMjYyLDE2ICsyMjY1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRF
bGVtZW50SWZOZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1l
bnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlz
CiAgICAgICAgICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBz
YWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQtPmlzTW91c2VG
b2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAgICAgICAgICAg
IG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFy
Z2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0YXJnZXQgPSB0
YXJnZXQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKICAgICAgICAgfQotICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKKyAgICAgICAg
bV9kb2N1bWVudC0+c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CiAgICAgfQogCiAgICAgaWYg
KGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3Vt
ZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIs
ICptX2ZyYW1lKTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJl
dChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsMTYg
KzIzMDMsMTYgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2Vs
ZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAj
ZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0
ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0
aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNv
bnRlbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICgh
bV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAgIHVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKLSAgICBhdXRvKiByZW5k
ZXJWaWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgdXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZp
ZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCkBAIC0yMzI1LDE0ICsyMzI4LDE0IEBAIEZsb2F0
UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50
IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNp
YmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0
YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB2aXNp
YmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3Jv
bGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgYXV0byB2aXNp
YmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChT
Y3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChh
dXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRz
KCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9u
SGVpZ2h0KSkpIHsKICAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9u
KHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVj
dC5pc0VtcHR5KCkpCkBAIC0yMzY0LDcgKzIzNjcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50
KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxl
Y3Rpb246OmN1cnJlbnRGb3JtKCkgY29uc3QKIHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhl
ciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxl
Y3Rpb24gaXMuCi0gICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1
c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVs
ZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQogICAgICAgICBzdGFydCA9IG1fc2VsZWN0aW9uLnN0
YXJ0KCkuZWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCkBAIC0yNDA3LDggKzI0MTAsOCBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSBy
ZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogICAgICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0
VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxp
Z25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAgICAgICAg
ICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7
CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwotICAgICAgICAgICAgICAgIGlm
IChtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1l
KCptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQorICAg
ICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5v
dGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0yNDI2LDE3ICsyNDI5LDE2IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKICAgICAvLyBQdXQgYSBjYXJldCBp
bnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRo
ZQogICAgIC8vIGVudGlyZSBXZWJWaWV3IGlzIGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUgaXMgb24g
Zm9yIHRoaXMgZG9jdW1lbnQpLgogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAg
aWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRC
cm93c2luZykpCisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3Mo
KS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGlmICghaXNOb25lKCkgfHwgIShtX2RvY3Vt
ZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVy
bjsKICNlbHNlCi0gICAgaWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRv
Y3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5h
ZmZpbml0eSgpKSkpIHx8ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICgh
bV9kb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3Np
dGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFt
X2RvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgog
Ci0gICAgaWYgKGF1dG8qIGJvZHkgPSBkb2N1bWVudC0+Ym9keSgpKQorICAgIGlmIChhdXRvKiBi
b2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpKQogICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoYm9keSksIERPV05TVFJFQU0pKTsK
IH0KIApAQCAtMjQ0Niw3ICsyNDQ4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKICAgICBp
ZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuc2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5h
ZmZpbml0eSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24u
YWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjpkaXNwYXRjaFNl
bGVjdFN0YXJ0KCkKQEAgLTI0NjQsNyArMjQ2Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNl
dFNob3VsZFNob3dCbG9ja0N1cnNvcihib29sIHNob3VsZFNob3dCbG9ja0N1cnNvcikKIHsKICAg
ICBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciA9IHNob3VsZFNob3dCbG9ja0N1cnNvcjsKIAotICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCiAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ4NCwxMyBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxl
Q2hhbmdlKCkKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmly
ZWQoKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOworICAgIFJl
ZjxEb2N1bWVudD4gcHJvdGVjdG9yKCptX2RvY3VtZW50KTsKICAgICB1cGRhdGVBcHBlYXJhbmNl
QWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVw
ZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UoKQogewotICAgIGlmIChhdXRv
KiBjbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICBpZiAoYXV0byogY2xp
ZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+dXBk
YXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElmRWRpdGFiaWxpdHlDaGFuZ2VkKCk7CiAKICAgICBz
ZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwpAQCAtMjcyMyw3ICsyNzI1LDcgQEAgUmVmUHRyPFJh
bmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50
IGFtb3VudCkgY29uc3QKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1l
bnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
UmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9kb2N1bWVudC0+Y3Jl
YXRlUmFuZ2UoKTsKICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRpb24pOwog
ICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5ndGgpOwogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2Us
IFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKQEAgLTI5MDQsNyArMjkwNiw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MpCiAgICAgaWYgKG1fY2Fy
ZXRCbGlua3MgPT0gY2FyZXRCbGlua3MpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVEVY
VF9DQVJFVCkKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsgCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKG1fY2FyZXRQYWludCkgewogICAgICAgICBtX2Nh
cmV0UGFpbnQgPSBmYWxzZTsgCiAgICAgICAgIGludmFsaWRhdGVDYXJldFJlY3QoKTsgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1OWIzMGJm
YjU3ZWZkZmUzMmNhZWQxNjVhMDUwOC4uNGQ4MzM1ZGYwZDA1ZjE1YjcyZDdiMDI2ZmFhZTA5ZWVk
ZDY2Nzk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMTQw
LDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0gbnVsbHB0
cik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQq
ID0gbnVsbHB0cik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVF
bGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAgICAgCkBAIC0xNTgsNyArMTU4LDcg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5n
ZSosIEVBZmZpbml0eSwgU2hvdWxkQ2xvc2VUeXBpbmcsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNl
clRyaWdnZXJlZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yRGVzdHJ1Y3Rp
b24oKTsKKyAgICB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKIAogICAgIHZvaWQgdXBk
YXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0KCk7CiAgICAgdm9pZCBzY2hlZHVsZUFwcGVhcmFuY2VV
cGRhdGVBZnRlclN0eWxlQ2hhbmdlKCk7CkBAIC0zMzgsNiArMzM4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisgICAgRG9jdW1lbnQqIG1fZG9jdW1l
bnQ7CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBMYXlvdXRVbml0IG1feFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggNzMwNzZkZTFiNzliOWYwOWZmOWYzMTI3
YTgzZTViMDgzZDU3ODU5My4uNjYwMWRiOGZjYjRlMzdmNGFkYjIwYWYxNzgyZTIyMTI0Y2YxM2Jk
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQuY3BwCkBAIC01MCw3ICs1MCw3IEBAIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6
Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQKIAog
dm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBib29sIHBh
c3N3b3JkRWNob0VuYWJsZWQgPSBmcmFtZSgpLnNldHRpbmdzKCkucGFzc3dvcmRFY2hvRW5hYmxl
ZCgpOworICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGRvY3VtZW50KCkuc2V0dGluZ3Mo
KS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CiAgICAgaWYgKHBhc3N3b3JkRWNob0VuYWJsZWQpCiAg
ICAgICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQu
Y3BwCmluZGV4IDE3NmQ4ZjA4OWFmNTAyNjZkZDg5OGZhOTc3NGY5NzQxZGIzOTlkZmIuLjI3MzU1
ZTY2ZmI4OWQ1NTQyY2Q2YTliZWE4OGUyYzI2MmY1MDc4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcApAQCAtMTQyLDcgKzE0Miw3
IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAvLyBIYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCiAKLSAgICBSZWZQdHI8
RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5
bGUoKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCku
c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKIAogICAgIGlmICh0eXBpbmdTdHlsZSAmJiAhdHlw
aW5nU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBcHBseSB0aGUgdHlwaW5nIHN0eWxl
IHRvIHRoZSBpbnNlcnRlZCBsaW5lIGJyZWFrLCBzbyB0aGF0IGlmIHRoZSBzZWxlY3Rpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggZTkxMzFm
NmZiZjMyZDg2MzA1MGFhMWVmMjA4ZTViNGY0NDA0OWI2YS4uMWJiMGQwNTI4NzBjNDUxMzY5OTQ3
MTlkMGVjMDY1YjNlZDA5NmQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgLy8gYW55dGhpbmcgb3RoZXIgdGhhbiBOb1NlbGVjdGlvbi4g
VGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhIHJlYWwgZW5kaW5nU2VsZWN0aW9u
LCBzbyBiYWlsIG91dC4KICAgICAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZnJhbWUoKS5lZGl0b3IoKS5pc092
ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKKyAgICB9IGVsc2UgaWYgKGRvY3VtZW50KCkuZWRpdG9y
KCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChwZXJmb3JtT3Zlcndy
aXRlKG1fdGV4dCwgbV9zZWxlY3RJbnNlcnRlZFRleHQpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5
KCkKICAgICBzZXRFbmRpbmdTZWxlY3Rpb25XaXRob3V0VmFsaWRhdGlvbihzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbik7CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMg
YSB0eXBpbmcgc3R5bGUuCi0gICAgaWYgKFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxl
ID0gZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7CisgICAgaWYgKFJlZlB0cjxF
ZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdT
dHlsZSgpKSB7CiAgICAgICAgIHR5cGluZ1N0eWxlLT5wcmVwYXJlVG9BcHBseUF0KGVuZFBvc2l0
aW9uLCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CiAgICAgICAgIGlm
ICghdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIGFwcGx5U3R5bGUodHlwaW5n
U3R5bGUuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IDU0NjBiNzVjYWJkMjNkZDU1YWQ5MzlkMDE0
YjU4MjkyZWQ5ZDRlYTIuLjY4ZTA4MzUyYTRjMTBkODY4YmYxZTQ2OWJmNzVjOTU2ZDEzZjA1OTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBSZXBsYWNlUmFuZ2VXaXRoVGV4
dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9yYW5nZVRvQmVSZXBsYWNlZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb24pKQorICAgIGlmICghZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNlZCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDUyNzhkYjk1
YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcuLjQ5Njk5MTlkOTFhMTE0OTVjMjk4Yzky
YTc2NjcyNmI5MmUxNjk1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMTgxLDcgKzExODEsNyBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBGSVhNRTogQ2FuIHRo
aXMgd2FpdCB1bnRpbCBhZnRlciB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZD8gIFRo
ZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQogICAgIC8vIGFueSB3b3JrIHBlcmZvcm1lZCBhZnRlciB0
aGlzIHRoYXQgcXVlcmllcyBvciB1c2VzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgZnJhbWUoKS5z
ZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5jbGVhclR5cGluZ1N0eWxlKCk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBkZXN0aW5h
dGlvbiB0byBlbmQgdXAgaW5zaWRlIG5vZGVzIHRoYXQgd2VyZW4ndCBzZWxlY3RlZC4gIFRvIGF2
b2lkIHRoYXQsIHdlIG1vdmUgdGhlCiAgICAgLy8gcG9zaXRpb24gZm9yd2FyZCB3aXRob3V0IGNo
YW5naW5nIHRoZSB2aXNpYmxlIHBvc2l0aW9uIHNvIHdlJ3JlIHN0aWxsIGF0IHRoZSBzYW1lIHZp
c2libGUgbG9jYXRpb24sIGJ1dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
ZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0
aW9uQ29tbWFuZC5jcHAKaW5kZXggYzA2NWMwMmNhMTNmZDI1MTcwZDZiMjFiMWY4OThlOWJhNzli
ZTYzOC4uMGRkMjZhODFlOTBiNjc4NzRjMzM1Y2VmMTIxMDdlMjE0YmRmZDg2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00MCw3ICs0
MCw3IEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpCiAKIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCku
c2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCku
c2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbiht
X3NlbGVjdGlvblRvU2V0KSAmJiAhbV9zZWxlY3Rpb25Ub1NldC5pc05vbmVPck9ycGhhbmVkKCkp
IHsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvblRvU2V0LCBtX29w
dGlvbnMpOwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkoKQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgRnJh
bWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lKCkuc2VsZWN0aW9uKCk7CisgICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCk7CiAKICAgICBpZiAo
c2VsZWN0aW9uLnNob3VsZENoYW5nZVNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpKSAmJiAh
c3RhcnRpbmdTZWxlY3Rpb24oKS5pc05vbmVPck9ycGhhbmVkKCkpCiAgICAgICAgIHNlbGVjdGlv
bi5zZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9vcHRpb25zKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAxNzJkODVmZDQ2NmYyODM2NmI1NTgw
NmQwOWJmNjAxZmUxYzVmODE5Li41MGMxNzUzZjE2ZDk2OGZhOTZiYzJiYzZiNjExYjQ5OGZmMjQ5
NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC05OCw4ICs5
OCw4IEBAIHZvaWQgU3BlbGxDaGVja1JlcXVlc3Q6OnJlcXVlc3RlckRlc3Ryb3llZCgpCiAgICAg
bV9jaGVja2VyID0gbnVsbHB0cjsKIH0KIAotU3BlbGxDaGVja2VyOjpTcGVsbENoZWNrZXIoRnJh
bWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1NwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a2VyKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAg
LCBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgqdGhpcywgJlNwZWxsQ2hlY2tlcjo6dGlt
ZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QpCiB7CiB9CkBAIC0xMTQsNyArMTE0LDcgQEAg
U3BlbGxDaGVja2VyOjp+U3BlbGxDaGVja2VyKCkKIAogVGV4dENoZWNrZXJDbGllbnQqIFNwZWxs
Q2hlY2tlcjo6Y2xpZW50KCkgY29uc3QKIHsKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdl
KCk7CisgICAgUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHBhZ2UtPmVkaXRvckNsaWVudCgp
LnRleHRDaGVja2VyKCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OnRp
bWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KCkKIAogYm9vbCBTcGVsbENoZWNrZXI6Omlz
QXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2V0dGlu
Z3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHJldHVybiBtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0K
IAogYm9vbCBTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UmIHJhbmdl
KSBjb25zdApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjppbnZva2VSZXF1
ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogICAgIGlmICghY2xpZW50KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gV1RGTW92ZShyZXF1
ZXN0KTsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2lu
Z1JlcXVlc3QsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNsaWVudCgp
LT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgU3BlbGxDaGVja2VyOjplbnF1
ZXVlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKQEAgLTE5OSw3ICsx
OTksNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVzdElk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVjdAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQW5kUmVwbGFjZUZvcigqbV9wcm9jZXNzaW5nUmVx
dWVzdCwgcmVzdWx0cyk7CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQW5kUmVwbGFjZUZv
cigqbV9wcm9jZXNzaW5nUmVxdWVzdCwgcmVzdWx0cyk7CiAKICAgICBpZiAobV9sYXN0UHJvY2Vz
c2VkSWRlbnRpZmllci50b1VJbnQ2NCgpIDwgaWRlbnRpZmllci50b1VJbnQ2NCgpKQogICAgICAg
ICBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKQEAgLTIxOSw3ICsyMTks
NyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKFRleHRDaGVja2luZ1JlcXVl
c3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgogICAgICAgICBpZiAocmVxdWVzdERhdGEuY2hl
Y2tpbmdUeXBlcygpLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKQogICAgICAg
ICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAg
aWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50
KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5n
UmFuZ2UoKSwgbWFya2VyVHlwZXMpOworICAgICAgICAgICAgbV9kb2N1bWVudC5tYXJrZXJzKCku
cmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtl
clR5cGVzKTsKICAgICB9CiAgICAgZGlkQ2hlY2soaWRlbnRpZmllciwgcmVzdWx0cyk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAppbmRleCBjMzZhZTJjMzBmZTlmYjViZWY2
NzA3MzIyMmVjNDNlNDRhZDdmMmMwLi5kMTlmY2ZkZTM4NDE1YjAxMTVjZjhjZGFhNDhhODY2MDhh
ODExOTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKQEAgLTc2LDcgKzc2
LDcgQEAgY2xhc3MgU3BlbGxDaGVja2VyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgU3Bl
bGxDaGVja1JlcXVlc3Q7CiAKLSAgICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRnJhbWUmKTsKKyAg
ICBleHBsaWNpdCBTcGVsbENoZWNrZXIoRG9jdW1lbnQmKTsKICAgICB+U3BlbGxDaGVja2VyKCk7
CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0OwpAQCAtMTA2LDcgKzEw
Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDaGVja0NhbmNlbChUZXh0Q2hlY2tpbmdSZXF1
ZXN0SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRDaGVjayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRl
bnRpZmllciwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKIAotICAgIEZyYW1l
JiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogICAgIFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOwogICAgIFRleHRDaGVja2lu
Z1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmlu
ZGV4IDk5ZThmMTU4ODhlYWU5M2YzZDY4ZTA0ZDg5ZWZmNTc1NjQ2YmMzNzkuLjU5MjA4NDUzNTFl
YTQwM2I4Yzg3MzQzYWRhNzZiNzQzNjNkZjA1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApAQCAtNjUsNyArNjUsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAg
IGlmICghbV9oYXNCZWVuVW5kb25lKSB7Ci0gICAgICAgICAgICBmcmFtZSgpLmVkaXRvcigpLnVu
YXBwbGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudW5hcHBsaWVk
U3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fY29ycmVjdGVkLCBtX2NvcnJl
Y3Rpb24pOwogICAgICAgICAgICAgbV9oYXNCZWVuVW5kb25lID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24obV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNldFNlbGVjdGlv
bkNvbW1hbmQ6OmNyZWF0ZShtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9u
OjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29y
cmVjdGlvblRyaWdnZXJlZCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKaW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRmNTYxOGZiYWJiMjVhZS4uZjMxMjhk
N2VhNTdkNTY3NjM5MThhMzEzYWI3N2I2NjQ5ZTViNjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0xNjMsMTMgKzE2MywxMCBAQCBUeXBpbmdDb21tYW5k
OjpUeXBpbmdDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQgY29tbWFu
ZFR5cGUsIGNvbgogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVu
dCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3Np
dGlvblR5cGUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBB
U1NFUlQoZnJhbWUpOwotCi0gICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQor
ICAgIGlmICghZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFz
dFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShjb21wb3NpdGlvblR5
cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hl
Y2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTE4Myw4ICsxODAsOCBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQs
IE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbQogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQ
cmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51
bGFyaXR5KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0Nv
bW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5m
cmFtZSgpKSkgewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3Vy
cmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQuZnJhbWUoKSk7
CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgeworICAgICAg
ICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0
VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAgICAgICAgbGFzdFR5cGluZ0Nv
bW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwog
ICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29t
cG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRQ
cmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcpOwpAQCAt
MTk5LDEwICsxOTYsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcgogdm9pZCBUeXBpbmdDb21t
YW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMg
b3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIC8vIEZJWE1FOiBG
b3J3YXJkIGRlbGV0ZSBpbiBUZXh0RWRpdCBhcHBlYXJzIHRvIG9wZW4gYW5kIGNsb3NlIGEgbmV3
IHR5cGluZyBjb21tYW5kLgotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAg
ICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5KSB7Ci0gICAgICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNl
bGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQu
Z2V0KCksIGZyYW1lKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlw
aW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1l
bnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudCk7CiAgICAgICAgICAg
ICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRv
Y29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRp
b25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1h
bmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxD
aGVja2luZyk7CkBAIC0yMTQsMTAgKzIxMCw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2Fy
ZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsCiAg
ICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBGb3J3YXJkRGVsZXRlS2V5LCBlbXB0
eVN0cmluZygpLCBvcHRpb25zLCBncmFudWxhcml0eSktPmFwcGx5KCk7CiB9CiAKLXZvaWQgVHlw
aW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlv
bihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBGcmFtZSogZnJhbWUpCit2b2lkIFR5cGlu
Z0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAg
IEFTU0VSVChmcmFtZSk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3Vy
cmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlm
IChjdXJyZW50U2VsZWN0aW9uID09IHR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTIyNywzMSArMjIyLDI1IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdD
b21tYW5kCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25U
eXBlIGNvbXBvc2l0aW9uKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAg
IGZyYW1lLT5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhp
c1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKKyAgICAgICAgZG9jdW1lbnQuZWRpdG9yKCkudXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0
WzBdKSk7CiAgICAgCi0gICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3NpdGlvbik7CisgICAgaW5zZXJ0VGV4
dChkb2N1bWVudCwgdGV4dCwgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9wdGlv
bnMsIGNvbXBvc2l0aW9uKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZG4ndCBuZWVkIHRvIHRh
a2Ugc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLiBJdCBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIEZyYW1l
U2VsZWN0aW9uJ3MgY3VycmVudCBzZWxlY3Rpb24uCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2VydGlvbiwgT3B0aW9ucyBvcHRpb25zLCBUZXh0
Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBSZWZQdHI8RnJhbWU+IGZy
YW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAgICAgTE9HKEVk
aXRpbmcsICJUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0ICh0ZXh0ICVzKSIsIHRleHQudXRmOCgp
LmRhdGEoKSk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKICAgICBTdHJp
bmcgbmV3VGV4dCA9IGRpc3BhdGNoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQodGV4dCwgc2VsZWN0
aW9uRm9ySW5zZXJ0aW9uLCBjb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBvc2l0aW9uUGVuZGlu
Zyk7CiAgICAgCiAgICAgLy8gU2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHNlbGVjdGlvbiBh
cHByb3ByaWF0ZWx5IGlmIHdlIGFyZSB1c2luZyBhIHNlbGVjdGlvbgogICAgIC8vIHRoYXQgaXMg
ZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiAgSW4gdGhlIGZ1dHVyZSwgd2Ug
c2hvdWxkIGNoYW5nZSBFZGl0Q29tbWFuZAogICAgIC8vIHRvIGRlYWwgd2l0aCBjdXN0b20gc2Vs
ZWN0aW9ucyBpbiBhIGdlbmVyYWwgd2F5IHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsIG9mIHRoZSBj
b21tYW5kcy4KLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5k
ID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAg
aWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdD
b21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChsYXN0
VHlwaW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkgIT0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9u
KSB7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24o
c2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5z
ZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKQEAgLTI2NiwxMiArMjU1
LDEyIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzCiAgICAgfQogCiAgICAgYXV0byBjbWQgPSBU
eXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEluc2VydFRleHQsIG5ld1RleHQsIG9wdGlv
bnMsIGNvbXBvc2l0aW9uVHlwZSk7Ci0gICAgYXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZChmcmFt
ZS5nZXQoKSwgY21kLmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJlbnRTZWxlY3Rp
b24pOworICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQoZG9jdW1lbnQuZnJhbWUoKSwgY21k
LmdldCgpLCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGN1cnJlbnRTZWxlY3Rpb24pOwogfQogCiB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9jdW1lbnQsIE9w
dGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1l
bnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdD
b21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkp
IHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9u
cyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29t
cG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9ucyAmIFJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTI4NCw3ICsyNzMsNyBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMg
b3B0aW9ucykKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxP
cGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNB
dXRvY29tcGxldGlvbihmYWxzZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21w
b3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nl
c3NpYmlsaXR5KCk7CkBAIC0yOTYsNyArMjg1LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9jdW1lbnQmIGRvY3VtZW50KQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYg
ZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5
cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+
IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
Zyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBs
ZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBs
YXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Io
b3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTMwNyw5ICsyOTYs
OSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVu
dCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucwogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShk
b2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yLCBlbXB0eVN0cmluZygpLCBvcHRpb25z
KS0+YXBwbHkoKTsKIH0KIAotUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxh
c3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmIGZyYW1lKQorUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9w
ZW5Gb3JUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIFJlZlB0cjxDb21wb3NpdGVF
ZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0gZnJhbWUuZWRpdG9yKCkubGFzdEVkaXRDb21t
YW5kKCk7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENvbW1hbmQg
PSBkb2N1bWVudC5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAoIWxhc3RFZGl0
Q29tbWFuZCB8fCAhbGFzdEVkaXRDb21tYW5kLT5pc1R5cGluZ0NvbW1hbmQoKSB8fCAhc3RhdGlj
X2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmlzT3BlbkZvck1v
cmVUeXBpbmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMyMSwxNiArMzEwLDE2
IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6c2hvdWxkRGVmZXJXaWxsQXBwbHlDb21tYW5kVW50aWxB
ZGRpbmdUeXBpbmdDb21tYW5kKCkgY29uc3QKICAgICByZXR1cm4gIW1faXNIYW5kbGluZ0luaXRp
YWxUeXBpbmdDb21tYW5kIHx8IGVkaXRBY3Rpb25Jc0RlbGV0ZUJ5VHlwaW5nKGVkaXRpbmdBY3Rp
b24oKSk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRnJhbWUqIGZyYW1l
KQordm9pZCBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkKKyAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpCiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5j
bG9zZVR5cGluZygpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgVHlwaW5n
Q29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZv
ck1vcmVUeXBpbmcoRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24pCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQogewotICAgIGlmIChSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1
bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0RW5kaW5nU2VsZWN0
aW9uT25MYXN0SW5zZXJ0Q29tbWFuZChuZXdTZWxlY3Rpb24pOwogICAgIH0KQEAgLTQzNiwxOSAr
NDI1LDE3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGlkQXBwbHlDb21tYW5kKCkKIAogdm9pZCBU
eXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQg
Y29tbWFuZFR5cGUpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLQogI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGlj
UXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlz
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUuZWRpdG9y
KCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFt
ZS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKSkKKyAgICBpZiAo
IWRvY3VtZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQor
ICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGlj
TGlua0RldGVjdGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5p
c0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50
KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1lLmVkaXRvcigpLmlzSGFuZGxpbmdBY2NlcHRlZENh
bmRpZGF0ZSgpKQorICAgIGlmIChkb2N1bWVudCgpLmVkaXRvcigpLmlzSGFuZGxpbmdBY2NlcHRl
ZENhbmRpZGF0ZSgpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZnJhbWUuZWRp
dG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBpZiAoIWRvY3Vt
ZW50KCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCiAgICAgLy8gVGFrZSBhIGxvb2sgYXQgdGhlIHNlbGVjdGlvbiB0
aGF0IHJlc3VsdHMgYWZ0ZXIgdHlwaW5nIGFuZCBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRv
IHNwZWxsY2hlY2suIApAQCAtNDY2LDkgKzQ1Myw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAg
ICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAgICAgaWYgKHJh
bmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0IHx8IGNvbW1h
bmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21tYW5kVHlwZSA9
PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29tbWFuZFR5cGUg
PT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KSkKICAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dCgqcmFu
Z2UpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlw
cGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRv
cigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9u
KCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOwogICAgICAgICB9IGVsc2UgaWYg
KGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQpCi0gICAgICAgICAgICBm
cmFtZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKKyAgICAgICAgICAg
IGRvY3VtZW50KCkuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAjZWxz
ZQogICAgICAgICBVTlVTRURfUEFSQU0oY29tbWFuZFR5cGUpOwogICAgICAgICAvLyBJZiB0aGlz
IGJ1ZyBnZXRzIGZpeGVkLCB0aGlzIFBMQVRGT1JNKElPU19GQU1JTFkpIGNvZGUgY291bGQgYmUg
cmVtb3ZlZDoKQEAgLTQ4Myw3ICs0NzAsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQocHJldmlvdXMsIHN0YXJ0V29yZFNpZGUp
OwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBzdGFydE9mV29yZChzdGFydCwgc3RhcnRX
b3JkU2lkZSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikKLSAgICAgICAgICAgIGZyYW1lLmVkaXRv
cigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9u
KCksIGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2UpOwogI2Vu
ZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIH0KIH0KQEAgLTQ5NywyNiArNDg0LDI2
IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGlu
Z0NvbW1hbmQgY29tbWFuZFR5cGUsIFRleHRHCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
aWYgKCFyYW5nZSB8fCBpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpCi0gICAgICAgIHJl
dHVybiBmcmFtZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAgICAgICAgcmV0dXJuIGRv
Y3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogCi0gICAgcmV0dXJuIGZyYW1lKCku
ZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRl
KCpyYW5nZSkgfSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuZWRpdG9yKCkud2lsbEFwcGx5RWRp
dGluZygqdGhpcywgeyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpyYW5nZSkgfSk7CiB9CiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5k
IGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCiAgICAgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoY29tbWFuZFR5cGVGb3JBZGRlZFR5
cGluZyk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVk
RWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygq
dGhpcyk7CiAgICAgLy8gU2luY2UgdGhlIHNwZWxsY2hlY2tpbmcgY29kZSBtYXkgYWxzbyBwZXJm
b3JtIGNvcnJlY3Rpb25zIGFuZCBvdGhlciByZXBsYWNlbWVudHMsIGl0IHNob3VsZCBoYXBwZW4g
YWZ0ZXIgdGhlIHR5cGluZyBjaGFuZ2VzLgogICAgIGlmICghbV9zaG91bGRQcmV2ZW50U3BlbGxD
aGVja2luZykKICAgICAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRUeXBl
Rm9yQWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAvLyBUaGUgb2xkIHNwZWxsY2hlY2tpbmcgY29k
ZSByZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRvbmUgZmlyc3QsIHRvIHByZXZlbnQgaXNzdWVz
IGxpa2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8ZG9lc24ndD4gaXMgbWFya2VkIGFzIG1pc3Nw
ZWxsZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRk
ZWRUeXBpbmcpOwotICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAg
ICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICNlbmRpZgogfQog
CkBAIC01MzUsOSArNTIyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90
aWZ5QWNjZXNzaWJpbGl0eShjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2UKIHsKICAgICBMT0co
RWRpdGluZywgIlR5cGluZ0NvbW1hbmQgJXAgaW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2liaWxp
dHkgKHRleHQgJXMsIHNlbGVjdEluc2VydGVkVGV4dCAlZCkiLCB0aGlzLCB0ZXh0LnV0ZjgoKS5k
YXRhKCksIHNlbGVjdEluc2VydGVkVGV4dCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRU
ZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBB
Y2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRUZXh0KHRleHQsIHNlbGVjdEluc2VydGVkVGV4
dCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9j
dW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsIHRl
eHQsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5w
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVj
dENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCB0ZXh0LCBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVu
YXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTU1MCw5ICs1Mzcs
NiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoY29u
c3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdAogICAgICAgICBtX2NvbXBvc2l0aW9uVHlwZSA9
PSBUZXh0Q29tcG9zaXRpb25Ob25lID8gSW5zZXJ0VGV4dENvbW1hbmQ6OlJlYmFsYW5jZUxlYWRp
bmdBbmRUcmFpbGluZ1doaXRlc3BhY2VzIDogSW5zZXJ0VGV4dENvbW1hbmQ6OlJlYmFsYW5jZUFs
bFdoaXRlc3BhY2VzLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNlcnRUZXh0KTsKIAogICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCksIGVuZGluZ1NlbGVjdGlvbigpKTsK
LQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90
ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRUZXh0KTsK
IH0KIApAQCAtNTY1LDE3ICs1NDksMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5l
QnJlYWsoKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJ
bnNlcnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotCi0gICAgRnJhbWUm
IGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7
CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydExpbmVCcmVhayk7CiB9CiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgp
CiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCBy
ZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5z
ZXJ0TGluZUJyZWFrKCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5
cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJl
cGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5n
ZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAg
LTU4OCwxNyArNTY5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGZhbHNl
LCBmYWxzZSwgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0UGFyYWdyYXBoKSk7Ci0KLSAgICBGcmFt
ZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1l
KTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JBbmRO
b3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJl
cGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3Np
YmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKLSAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0
RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRl
eHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNjE1LDE3ICs1OTMsMTQgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoKQogICAg
IH0KICAgICAgICAgCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMt
PmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0Fk
ZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQp
OwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlS
ZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcklu
UXVvdGVkQ29udGVudCgpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRU
eXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBy
ZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFu
Z2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBA
IC02NTIsMTAgKzYyNyw5IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFrZUVkaXRhYmxlUm9vdEVt
cHR5KCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGRUb0tpbGxSaW5nKQogewotICAgIEZyYW1l
JiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUp
OworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKLSAg
ICBmcmFtZS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhm
YWxzZSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRv
RGVsZXRlOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwpAQCAtNzQ4
LDIwICs3MjIsMjAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIGJ1ZzoKICAgICAgICAgLy8g
PHJkYXI6Ly9wcm9ibGVtLzQ2NTM3NTU+IFVJS2l0IHRleHQgd2lkZ2V0cyBzaG91bGQgdXNlIFdl
YktpdCBlZGl0aW5nIEFQSSB0byBtYW5pcHVsYXRlIHRleHQKLSAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICAgICAgY2xvc2VUeXBp
bmcoJmZyYW1lKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBjbG9zZVR5cGluZyhkb2N1bWVudCgpKTsKICNl
bmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChzZWxlY3Rpb25Ub0Rl
bGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlv
bihzZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQo
KSB8fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0
aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKCF3aWxsQWRkVHlw
aW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRv
RGVsZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRB
ZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmco
KnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2ls
bFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRp
dG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQp
OwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFj
dHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0
aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBz
aG91bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsK
LSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVj
dG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1l
KCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRC
eUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zv
cldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5k
bzsKQEAgLTg1NSwxMyArODI4LDEzIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0
ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhpcyBidWc6CiAg
ICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0IHdpZGdldHMgc2hv
dWxkIHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0Ci0gICAgICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgICAg
IGNsb3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VUeXBpbmcoZG9jdW1l
bnQoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoc2Vs
ZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxl
dGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0
ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0
aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF3aWxs
QWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9
LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQpAQCAtODcxLDcgKzg0NCw3IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tp
bGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVj
dGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJ
bnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5h
ZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAv
LyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxl
dGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxv
Y2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNp
YWxFbGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1R5cGluZ0NvbW1hbmQuaAppbmRleCA3NmU1Zjk5YmY5MjUzODU3NWNhYTM4NzZiYjliNmI1NTRi
OWZiNzVjLi44OTZiZjBiZDE1ZGJlM2Q0ODE4NDg5NWY2NDNmMWM4NjlkNThlYjc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaApAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERvY3VtZW50JiwgT3B0aW9ucyk7CiAg
ICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiwgT3B0aW9u
cyk7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250
ZW50KERvY3VtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRnJhbWUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhEb2N1bWVudCYpOwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNl
bGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
Jik7CisgICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVj
dGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
Jik7CiAjZW5kaWYKIAogICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcgJnRleHQsIGJv
b2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgaXNPcGVuRm9yTW9yZVR5cGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkZvck1vcmVU
eXBpbmc7IH0KICAgICB2b2lkIGNsb3NlVHlwaW5nKCkgeyBtX29wZW5Gb3JNb3JlVHlwaW5nID0g
ZmFsc2U7IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0Nv
bW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhGcmFtZSYpOworICAgIHN0YXRpYyBSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVu
dCYpOwogCiAgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAgICAgYm9vbCBpc1R5cGluZ0NvbW1h
bmQoKSBjb25zdCBmaW5hbDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxEYXRhVHJhbnNmZXI+IGlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSBjb25zdCBmaW5hbDsKICAg
ICBib29sIGlzQmVmb3JlSW5wdXRFdmVudENhbmNlbGFibGUoKSBjb25zdCBmaW5hbDsKIAotICAg
IHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24oVHlwaW5nQ29tbWFuZCosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0
aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwgRG9jdW1l
bnQmKTsKIAogICAgIHZvaWQgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoRVR5cGluZ0NvbW1h
bmQpOwogICAgIGJvb2wgd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQs
IFRleHRHcmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiA9IGVtcHR5U3RyaW5nKCksIFJlZlB0cjxS
YW5nZT4mJiA9IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9y
Q29jb2EubW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4NGRiNTYxMjkyZTc5NDI3N2JmYjc2ZDU5ZS4u
OTEwZGVlZjcwODRkMWZkYzhlMGY5YWUwNmU5MTNhMTFjNzYzZjE5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC04MCw4ICs4MCw4IEBAIHN0YXRp
YyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKE5T
QXR0cmlidXRlZFN0cmluZyAqCiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1h
dCgpCiB7Ci0gICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdM
b2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0aW5ncygpLnNlbGVj
dGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRy
ZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHJldHVybiBzZXJpYWxp
emVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ks
CisgICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVD
b21wb3NlZFRyZWU6Ok5vKTsKIH0KIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBA
IC0xMDcsMTAgKzEwNywxMCBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0
YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgogCiB2b2lkIEVkaXRv
cjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsK
LSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3Ry
aW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJv
bVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIAogICAgIFBh
c3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0gICAgY29udGVudC5jb250ZW50T3JpZ2luID0g
bV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOworICAg
IGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBh
c3RlYm9hcmQoKTsKICAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRD
b3B5T3JEZWxldGUoKTsKICAgICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxl
Y3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblJURkRGb3JtYXQg
PSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0
KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQg
RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
KQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBh
c3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRl
ZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmlu
ZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogCiAgICAgUGFzdGVib2FyZFdyaXRlckRhdGE6OldlYkNvbnRlbnQgd2Vi
Q29udGVudDsKLSAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50
KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgd2ViQ29udGVudC5jb250
ZW50T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwog
ICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0
ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbklu
V2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IGF0
dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0
cmlidXRlZFN0cmluZykgOiBudWxscHRyOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgRWRpdG9y
Ojp3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRh
dGEpCiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZl
Rm9ybWF0KCkKIHsKLSAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVG
cm9tU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNo
aXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgaWYgKCFh
cmNoaXZlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkpOwpAQCAtMTcx
LDExICsxNzEsMTEgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2Fy
ZFdpdGhJbWFnZUFsdFRleHQoKQogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhB
dHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZywgTWFp
bEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlm
IChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMobV9mcmFtZSwg
YXR0cmlidXRlZFN0cmluZykpIHsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChhdXRvIGZy
YWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoKm1fZG9jdW1lbnQuZnJhbWUo
KSwgYXR0cmlidXRlZFN0cmluZykpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFn
bWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpQYXN0ZWQpKQogICAgICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxl
YXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpOwogICAg
ICAgICB9CkBAIC0yMjEsNyArMjIxLDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpk
YXRhSW5SVEZGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCiAvLyBPciByZWZhY3Rv
ciBzbyBpdCBkb2VzIG5vdCBkbyB0aGF0LgogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRv
cjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIFJhbmdl
JiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsK
LSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWlu
VGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJhbWUoKSwg
Y29udGV4dCwgYWxsb3dQbGFpblRleHQpOwogICAgIHBhc3RlYm9hcmQucmVhZChyZWFkZXIpOwog
ICAgIGNob3NlUGxhaW5UZXh0ID0gcmVhZGVyLm1hZGVGcmFnbWVudEZyb21QbGFpblRleHQ7CiAg
ICAgcmV0dXJuIFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2
b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZnJhbWUuZGlzcGxh
eVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSk7
CisgICAgYXV0byBzdHJpbmdGcm9tU2VsZWN0aW9uID0gbV9kb2N1bWVudC5mcmFtZSgpLT5kaXNw
bGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2Zlcigp
KTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgdHlw
ZXMuYXBwZW5kKFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCA3MDZlODI2NzNmMDgxMzMzNzM1
ZTU4NzEyNzhjOGQ0NTBkMGI2OWJjLi4xZGE4MWY3MThkOTIzNTgyM2IwMzgxZmUyYmJkZTExOWQ4
MjUwNmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKQEAgLTk0
LDcgKzk0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAg
ICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2Zy
YW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1
bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93
UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFn
bWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZvaWQgRWRp
dG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQog
ICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250ZW50OwogICAgIHBhc3RlYm9h
cmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsK
ICAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVy
KCk7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zp
c3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVS
THM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBtX2ZyYW1l
LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNl
cmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7Cisg
ICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFw
cGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6
Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2RvY3VtZW50
LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNl
cmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiAg
ICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJk
JiBwYXN0ZWJvYXJkLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYg
Y2hvc2VQbGFpblRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9h
cmREYXRhKHBhc3RlYm9hcmQsIG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0LCBjaG9z
ZVBsYWluVGV4dCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRh
KHBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0
LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBmMmEyZDUyYWM1YWJmNGU0ZjEzMTEz
Y2EyNWQxYjIwYTE3MzhmYTY5Li4xYmZjYTU5MTNkNjQ2NDFjMDgyZmVmNzY1YWJhMTllOTA5MGFk
MTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5n
RGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgLy8gSWYgdGhlIHRleHQgaGFzIGxl
ZnQgb3IgcmlnaHQgYWxpZ25tZW50LCBmbGlwIGxlZnQtPnJpZ2h0IGFuZCByaWdodC0+bGVmdC4g
CiAgICAgLy8gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLgogCi0gICAgYXV0byBzZWxlY3Rpb25TdHls
ZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkK
ICAgICAgICAgIHJldHVybjsKIApAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCBFZGl0b3I6OnNl
dFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVj
dGlvbiBkaXIKICAgICBpZiAoIW5ld1ZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBFbGVt
ZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQo
KTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1l
bnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+
KCpmb2N1c2VkRWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVu
dCkKICAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVu
dCkuaXNUZXh0RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkpIHsKICAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsaWduQXR0ciwgbmV3VmFsdWUpOwotICAgICAg
ICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgbV9k
b2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5jaGFuZ2VhYmxlU3R5bGVz
KCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgc3R5bGVzIHRoYXQgdGhlIHVzZXIg
Y2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KICAgICAKLSAg
ICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1l
bnQoKS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgYXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZShtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0KCkpOwogICAgIGF1dG8gZGVm
YXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHlsZSgpLT5tdXRhYmxlQ29weSgpOwogICAgIAog
ICAgIC8vIFRleHQgd2lkZ2V0cyBpbXBsZW1lbnQgYmFja2dyb3VuZCBjb2xvciB2aWEgdGhlIFVJ
VmlldyBwcm9wZXJ0eS4gVGhlaXIgYm9keSBlbGVtZW50IHdpbGwgbm90IGhhdmUgb25lLgpAQCAt
MjE5LDcgKzIxOSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIHsKICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGJvb2wgYWxsb3dQbGFpblRleHQgPSBv
cHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCk7Ci0gICAgV2ViQ29u
dGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CisgICAg
V2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBhbGxv
d1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zID0gY2xpZW50KCkt
PmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1i
ZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbURlbGVnYXRlKGkp
OwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KIAogdm9pZCBFZGl0
b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3Rh
dGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoZGljdGF0aW9uUGhyYXNlcy5pc0VtcHR5KCkpCkBAIC0y
NjEsNyArMjYxLDcgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZF
bGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQKICAgICAvLyBTb21lIGRheSB3
ZSBjb3VsZCBtYWtlIHRoZW0gVW5kb2FibGUsIGFuZCBsZXQgY2FsbGVycyBjbGVhciB0aGUgVW5k
byBzdGFjayBleHBsaWNpdGx5IGlmIHRoZXkgd2lzaC4KICAgICBjbGVhclVuZG9SZWRvT3BlcmF0
aW9ucygpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhcigpOworICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsK
IApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVu
dChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAKICAgICAvLyBBcyBhIHNp
ZGUgZWZmZWN0IHRoaXMgZnVuY3Rpb24gc2V0cyBhIGNhcmV0IHNlbGVjdGlvbiBhZnRlciB0aGUg
aW5zZXJ0ZWQgY29udGVudC4gTXVjaCBvZiB3aGF0CiAgICAgLy8gZm9sbG93cyBpcyBtb3JlIGV4
cGVuc2l2ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgc28gY2xlYXIgaXQgc2luY2UgaXQncyBn
b2luZyB0byBjaGFuZ2UgYW55d2F5LgotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsK
KyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICAvLyBjbGVhciBvdXQg
YWxsIGN1cnJlbnQgY2hpbGRyZW4gb2YgZWxlbWVudAogICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRy
ZW4oKTsKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVs
ZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogICAgIHNlbGVjdGlv
bi5zZXRCYXNlKHZpc2libGVQb3MpOwogICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQodmlzaWJsZVBv
cyk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwor
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CiAKICAg
ICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CiB9CkBAIC0zODksNyArMzg5
LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYg
dGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIC8vIGhhdmUgYSBzdGFsZSBzZWxlY3Rpb24uCiB2b2lk
IEVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZv
ck1vcmVUeXBpbmcoKQogewotICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFu
ZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCZtX2ZyYW1lLCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0
RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhtX2RvY3Vt
ZW50LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUv
RWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxp
YldQRS5jcHAKaW5kZXggNWQxNWE2NDYxYzU2OWI2M2FjYzYxNTc5NWUzNDQ3NzA4YTRkNTU3Ny4u
MTJmZDZhNDNlYTA1YTJhMGU3MmI3NGJhNzJkOTYyODY0NzA1YmFlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCkBAIC02Nyw4ICs2Nyw4IEBA
IHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkKQogewogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250ZW50Owog
ICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIo
KTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJM
czo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUu
c2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAg
ICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6
WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQu
c2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKICAg
ICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsKIH0KIApAQCAtODQsNyArODQs
NyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJv
YXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wg
Y2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsIG1fZnJhbWUsICpy
YW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9z
ZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZy
YW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRl
eHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250
YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9y
UGFzdGluZygqZnJhZ21lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CmluZGV4IDI5MTgyNDY1ZDhjZjI5MzljYjIxNjAyNDlmZWEyYWUxMWVhMTdjN2MuLjk4NDFjOTRm
YWEyMTNmZDA4MmU1ODEyMGUxYTJiNzRmYTM4Njk5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9FZGl0b3JNYWMubW0KQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRp
b24+CiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3Rl
Ym9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0IH0pOwogICAg
IGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQp
OwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3Rl
Ym9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBB
U1NFUlQobm9kZSk7CiAKLSAgICBpZiAoJm5vZGUtPmRvY3VtZW50KCkgIT0gbV9mcmFtZS5kb2N1
bWVudCgpKQorICAgIGlmIChub2RlLT5kb2N1bWVudCgpICE9IG1fZG9jdW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOworICAgIFJlZjxE
b2N1bWVudD4gcHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlv
bklzQmVmb3JlQW5jaG9yKSwgUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRl
ckFuY2hvcikpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7Cisg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihy
YW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAogICAgIFBhc3Rl
Ym9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgIGlm
ICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpKSB7CiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJv
YXJkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMg
dm9pZCBnZXRJbWFnZShFbGVtZW50JiBpbWFnZUVsZW1lbnQsIFJlZlB0cjxJbWFnZT4mIGltYWdl
LCBDYWNoZWRJbWFnZSomCiAKIHZvaWQgRWRpdG9yOjpzZWxlY3Rpb25XaWxsQ2hhbmdlKCkKIHsK
LSAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIHx8
IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFoYXNDb21wb3NpdGlvbigp
IHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYW5jZWxDb21wb3NpdGlvbigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggMDk2NGNjYjRmYmQ3YWMz
NmIxOGYzNDE2ZjQyMGEyN2RiZTk2OTE3OC4uMmY3MmNiNGYwMDQ1MWNiYmU0NDJjMGU5YTMxMjY3
YzhiOGMyMGQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9y
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCkBA
IC00Miw3ICs0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwog
CiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KG1fZnJhbWUsICpyYW5nZSwg
b3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWlu
VGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2Fy
ZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMu
Y29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwog
CiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVv
dGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAg
LTY5LDkgKzY5LDkgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QbGF0Zm9ybURhdGEoUGxhdGZvcm1EcmFnRGF0YSYKIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkLCBSYW5nZSYsIGJvb2wgLyphbGxvd1BsYWluVGV4dCovLCBib29sJiAvKmNob3NlUGxh
aW5UZXh0Ki8pCiB7CiAgICAgaWYgKENPTVB0cjxJRGF0YU9iamVjdD4gcGxhdGZvcm1EcmFnRGF0
YSA9IHBhc3RlYm9hcmQuZGF0YU9iamVjdCgpKQotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21l
bnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURyYWdEYXRhLCBtX2ZyYW1lKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EcmFnRGF0YSwg
Km1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxh
dGZvcm1EYXRhKHBhc3RlYm9hcmQuZHJhZ0RhdGFNYXAoKSwgbV9mcmFtZSk7CisgICAgcmV0dXJu
IGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRhTWFwKCks
ICptX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmluZGV4IGE4N2QzZTUwNDhlNDZjNDNkZmFm
YWYzOTIwNzMzZmI3MzhlMWExZTkuLmJmOTU2NmJhNzU5Mzg1YjBhYTQzYzYyMThjMzFmMzhjY2Yz
MWQ3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCkBAIC0yODYsNyAr
Mjg2LDcgQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAgICAgbV9kb2N1bWVudC0+cmVt
b3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAogICAgIG1fZG9jdW1lbnQtPnNldEJhY2tGb3J3YXJk
Q2FjaGVTdGF0ZShEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBtX2RvY3Vt
ZW50LT5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICBtX2RvY3VtZW50LT53aWxsQmVSZW1v
dmVkRnJvbUZyYW1lKCk7CiAKICAgICBjbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKaW5kZXggYzcxNmQ3MjgwZjQ2MmNiNTY3Mzc1N2I0YmE0ZTNiMjRhYmVlOGRl
MC4uZmRiNGM4OWNiZjI2NzFjOTBkYjJjNzk2OTlmNTg2N2NlOTk1OTJiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC01NDEsMTEgKzU0MSwxNCBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpzdG9wKCkKIHZvaWQgRnJhbWVMb2FkZXI6OndpbGxUcmFuc2l0aW9uVG9Db21taXR0
ZWQoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBmcmFtZSBpcyBz
dGlsbCBmdWxseSBpbiBwbGFjZSAobm90IGNhY2hlZCwgbm90IGRldGFjaGVkKSwgYnV0IHdpbGwg
YmUgcmVwbGFjZWQuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgp
OworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZyYW1l
LmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICBpZiAoZG9jdW1lbnQtPmVkaXRvcigp
Lmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gVGhlIHRleHQgd2FzIGFscmVhZHkgcHJl
c2VudCBpbiBET00sIHNvIGl0J3MgYmV0dGVyIHRvIGNvbmZpcm0gdGhhbiB0byBjYW5jZWwgdGhl
IGNvbXBvc2l0aW9uLgotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlv
bigpOwotICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLmVk
aXRvcigpLmNsaWVudCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5lZGl0b3IoKS5jb25maXJtQ29t
cG9zaXRpb24oKTsKKyAgICAgICAgaWYgKEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50ID0gZG9j
dW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKSB7CiAgICAgICAgICAgICBlZGl0b3JDbGllbnQtPnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOwogICAgICAgICAgICAgZWRpdG9yQ2xp
ZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CiAgICAgICAgIH0KQEAgLTU1Niw3
ICs1NTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgpCiB7CiAgICAgaGlzdG9yeSgp
LnNhdmVEb2N1bWVudFN0YXRlKCk7CiAKLSAgICBEb2N1bWVudCogY3VycmVudERvY3VtZW50ID0g
bV9mcmFtZS5kb2N1bWVudCgpOworICAgIFJlZlB0cjxEb2N1bWVudD4gY3VycmVudERvY3VtZW50
ID0gbV9mcmFtZS5kb2N1bWVudCgpOwogICAgIFVubG9hZEV2ZW50UG9saWN5IHVubG9hZEV2ZW50
UG9saWN5OwogICAgIGlmIChtX2ZyYW1lLnBhZ2UoKSAmJiBtX2ZyYW1lLnBhZ2UoKS0+Y2hyb21l
KCkuY2xpZW50KCkuaXNTVkdJbWFnZUNocm9tZUNsaWVudCgpKSB7CiAgICAgICAgIC8vIElmIHRo
aXMgaXMgdGhlIFNWR0RvY3VtZW50IG9mIGFuIFNWR0ltYWdlLCBubyBuZWVkIHRvIGRpc3BhdGNo
IGV2ZW50cyBvciByZWNhbGNTdHlsZS4KQEAgLTU2OCw3ICs1NzEsOCBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpjbG9zZVVSTCgpCiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGljeSk7CiAg
ICAgCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOworICAg
IGlmIChjdXJyZW50RG9jdW1lbnQpCisgICAgICAgIGN1cnJlbnREb2N1bWVudC0+ZWRpdG9yKCku
Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3Bl
blVSTCgpCkBAIC01ODAsNyArNTg0LDYgQEAgYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3BlblVSTCgp
CiAgICAgfQogCiAgICAgbV9mcmFtZS5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuY2FuY2VsKCk7Ci0g
ICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhckxhc3RFZGl0Q29tbWFuZCgpOwogCiAgICAgbV9pc0Nv
bXBsZXRlID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9zZSA9IGZhbHNlOwpAQCAt
NjQzLDggKzY0Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRDbGVhcldpbmRvd05hbWUo
Y29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBEb2N1bWVudCYgbmV3CiAKIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRp
ZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib29sIGNsZWFyRnJhbWVWaWV3LCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVET01XaW5kb3dDcmVhdGlvbikKIHsKLSAgICBtX2ZyYW1l
LmVkaXRvcigpLmNsZWFyKCk7Ci0KICAgICBib29sIG5lZWRlZENsZWFyID0gbV9uZWVkc0NsZWFy
OwogICAgIG1fbmVlZHNDbGVhciA9IGZhbHNlOwogCkBAIC02NTIsNyArNjUzLDcgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFyV2luZG93
UHJvcGVydGllcywgYm9vbAogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPmNhbmNlbFBhcnNp
bmcoKTsKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5zdG9wQWN0aXZlRE9NT2JqZWN0cygp
OwogICAgICAgICBib29sIGhhZExpdmluZ1JlbmRlclRyZWUgPSBtX2ZyYW1lLmRvY3VtZW50KCkt
Pmhhc0xpdmluZ1JlbmRlclRyZWUoKTsKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5wcmVw
YXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT53aWxsQmVS
ZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgICAgIGlmIChoYWRMaXZpbmdSZW5kZXJUcmVlKQogICAg
ICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5hZGp1c3RGb2N1c2VkTm9kZU9uTm9kZVJlbW92
YWwoKm1fZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgfQpAQCAtNjczLDcgKzY3NCw2IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRv
d1Byb3BlcnRpZXMsIGJvb2wKICAgICAgICAgICAgIG1fZnJhbWUudHJlZSgpLnNldE5hbWUobnVs
bEF0b20oKSk7CiAgICAgfQogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5wcmVwYXJlRm9yRGVz
dHJ1Y3Rpb24oKTsKICAgICBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmNsZWFyKCk7CiAKICAgICBp
ZiAoY2xlYXJGcmFtZVZpZXcgJiYgbV9mcmFtZS52aWV3KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmlu
ZGV4IDM4NWUzN2E2ZDBjOTBlNjMzYTNiN2I0Mjg3MmM2MTZlMzgwODY0MjYuLjVkZTY2NzVkMTQx
YTg5MjU1NWU4MmNlMWNhOTE5MjZiYjY5MjhhZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0x
NTYsOCArMTU2LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UmIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50LCBVbmlxdWVSZWY8RnJhbWVMb2EKICAgICAsIG1fbmF2aWdhdGlv
blNjaGVkdWxlcihtYWtlVW5pcXVlUmVmPE5hdmlnYXRpb25TY2hlZHVsZXI+KCp0aGlzKSkKICAg
ICAsIG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVudCkKICAgICAsIG1fc2NyaXB0KG1ha2VVbmlx
dWVSZWY8U2NyaXB0Q29udHJvbGxlcj4oKnRoaXMpKQotICAgICwgbV9lZGl0b3IobWFrZVVuaXF1
ZVJlZjxFZGl0b3I+KCp0aGlzKSkKLSAgICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJh
bWVTZWxlY3Rpb24+KHRoaXMpKQogICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKG1ha2VVbmlx
dWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9wYWdlWm9vbUZh
Y3RvcihwYXJlbnRQYWdlWm9vbUZhY3Rvcih0aGlzKSkKICAgICAsIG1fdGV4dFpvb21GYWN0b3Io
cGFyZW50VGV4dFpvb21GYWN0b3IodGhpcykpCkBAIC0yMzQsNyArMjMyLDcgQEAgdm9pZCBGcmFt
ZTo6c2V0VmlldyhSZWZQdHI8RnJhbWVWaWV3PiYmIHZpZXcpCiAgICAgLy8gbm90aWZpZWQuIElm
IHdlIHdhaXQgdW50aWwgdGhlIHZpZXcgaXMgZGVzdHJveWVkLCB0aGVuIHRoaW5ncyB3b24ndCBi
ZSBob29rZWQgdXAgZW5vdWdoIGZvcgogICAgIC8vIHRoZXNlIGNhbGxzIHRvIHdvcmsuCiAgICAg
aWYgKCF2aWV3ICYmIG1fZG9jICYmIG1fZG9jLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBE
b2N1bWVudDo6SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICBtX2RvYy0+cHJlcGFyZUZvckRl
c3RydWN0aW9uKCk7CisgICAgICAgIG1fZG9jLT53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAg
ICAgCiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5sYXlvdXRDb250ZXh0KCkudW5z
Y2hlZHVsZUxheW91dCgpOwpAQCAtMjc5LDcgKzI3Nyw3IEBAIHZvaWQgRnJhbWU6OnNldERvY3Vt
ZW50KFJlZlB0cjxEb2N1bWVudD4mJiBuZXdEb2N1bWVudCkKICNlbmRpZgogCiAgICAgaWYgKG1f
ZG9jICYmIG1fZG9jLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6SW5CYWNr
Rm9yd2FyZENhY2hlKQotICAgICAgICBtX2RvYy0+cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7Cisg
ICAgICAgIG1fZG9jLT53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAKICAgICBtX2RvYyA9IG5l
d0RvY3VtZW50LmNvcHlSZWYoKTsKICAgICBBU1NFUlQoIW1fZG9jIHx8IG1fZG9jLT5kb21XaW5k
b3coKSk7CkBAIC01NTQsNyArNTUyLDcgQEAgYm9vbCBGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNj
ZXNzKCkKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpEZW5pZWQ6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpOb3RSZXF1ZXN0ZWRZ
ZXQ6IHsKLSAgICAgICAgYXV0byogY2xpZW50ID0gbV9lZGl0b3ItPmNsaWVudCgpOworICAgICAg
ICBhdXRvKiBjbGllbnQgPSBlZGl0b3IoKS5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkzNyw3ICs5MzUsNyBAQCB2b2lkIEZy
YW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9h
dCB0ZXh0Wm9vbUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZWRpdG9yLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CisgICAgZWRp
dG9yKCkuZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAgLy8gUmVzcGVj
dCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25lIFNWRyBk
b2N1bWVudHMuCiAgICAgLy8gRklYTUU6IEhvdyB0byBoYW5kbGUgY29tcG91bmQgZG9jdW1lbnRz
ICsgem9vbUFuZFBhbj0iZGlzYWJsZWQiPyBOZWVkcyBTVkcgV0cgY2xhcmlmaWNhdGlvbi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaAppbmRleCAzZDQzYTk0YmVhOTU1NmM5OGRjNzQyM2FiN2VhZDlhOTJhNTJjNmZl
Li4wOTMyYTgzY2I2NzRmNmY4Yzk2MTFlZDlmNjk5OWQxN2I2MmQxNTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdEZyYW1lLmgiCiAjaW5j
bHVkZSAiQWRqdXN0Vmlld1NpemVPck5vdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVk
ZSAiUGFnZUlkZW50aWZpZXIuaCIKQEAgLTE2MywxNCArMTY0LDE0IEBAIHB1YmxpYzoKICAgICBE
b2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKICAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsK
IAotICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gbV9lZGl0b3I7IH0KLSAgICBjb25zdCBF
ZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgRWRpdG9yJiBl
ZGl0b3IoKSB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQorICAgIGNvbnN0IEVkaXRv
ciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0KICAgICBF
dmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAg
ICAgY29uc3QgRXZlbnRIYW5kbGVyJiBldmVudEhhbmRsZXIoKSBjb25zdCB7IHJldHVybiBtX2V2
ZW50SGFuZGxlcjsgfQogICAgIEZyYW1lTG9hZGVyJiBsb2FkZXIoKSBjb25zdDsKICAgICBOYXZp
Z2F0aW9uU2NoZWR1bGVyJiBuYXZpZ2F0aW9uU2NoZWR1bGVyKCkgY29uc3Q7Ci0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9Ci0gICAgY29uc3Qg
RnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9
CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50KCktPnNl
bGVjdGlvbigpOyB9CisgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CiAgICAgRnJhbWVUcmVlJiB0cmVl
KCkgY29uc3Q7CiAgICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkgeyByZXR1
cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CiAgICAgY29uc3QgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlciYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9
CkBAIC0zMzgsOCArMzM5LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9j
OwogCiAgICAgVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+IG1fc2NyaXB0OwotICAgIFVuaXF1
ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwotICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9z
ZWxlY3Rpb247CiAgICAgVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0
aW9uQ29udHJvbGxlcjsKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IGViMDJmOGVjNDRkOTNhZDdhNmNiOTUxZjY5NzA2
ZmM0ZDZmODBlMGUuLjNlZWU0MmZmMGNkMWU3M2NmMDFiMjk1ZTk4ZDI4NTRlOWJiN2NmZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtNjgsMjEgKzY4LDE2IEBAIFJl
ZjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGljYXRv
ckRhdGEmIGRhdGEpCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRp
b25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFu
c2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIFJlZjxEb2N1bWVudD4gZG9j
dW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCk7CiAKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KCpmcmFtZSk7Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlv
biA9IGRvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBPcHRpb25TZXQ8VGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zOwogICAgIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9O
b3RTZXRGb2N1cyk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB0ZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlv
bkNoYW5nZXMpOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpOwogI2VuZGlmCi0gICAgVGVt
cG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgU2ltcGxlUmFu
Z2UgeyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOworICAgIFRlbXBvcmFy
eVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoZG9jdW1lbnQsIHsgU2ltcGxlUmFuZ2Ug
eyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOwogCiAgICAgVGV4dEluZGlj
YXRvckRhdGEgZGF0YTsKIApAQCAtOTEsNyArODYsNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4g
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dElu
ZAogCiAgICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwo
JnJhbmdlLCBvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAKLSAgICBp
ZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRp
Y2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0
YSwgKmRvY3VtZW50LT5mcmFtZSgpLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2Vs
ZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAyZjFjMzIzZjljMTFhYjVkMTliNzhjYTAzYmY1
MWE4Zjk4YWIwNjkuLmZhOTdlMGMzMmQyZjg0ZGFiNjFkODYzYjAzZGU1N2QyZGJhMzc1MjkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNC0yMyAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVl
QGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpFZGl0
Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYwMAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBjcmFzaC4KKwor
ICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5k
LWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcv
aW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbDogQWRkZWQuCisKKyAgICAg
ICAgTW9kaWZ5IHRoZSB0ZXN0IHJlc3VsdC4gRnJhbWVTZWxlY3Rpb24gaXMgYmVpbmcgZGVzdHJ1
Y3RlZCBhbG9uZyB3aXRoCisgICAgICAgIGRvY3VtZW50IHNvIGFuIGFkZGl0aW9uYWwgc2VsZWN0
aW9uIGNoYW5nZSBub3RpZmljYXRpb24gaXMgZXhwZWN0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4
dDoKKwogMjAyMC0wNC0xMyAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNv
bT4KIAogICAgICAgICBodHRwL3Rlc3RzL2luLWFwcC1icm93c2VyLXByaXZhY3kvYXBwLWJvdW5k
LWRvbWFpbi5odG1sIGlzIGEgY29uc3RhbnQgZmFpbHVyZSBvbiBpT1MKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5k
LWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2Vy
dC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MDQwMzQyM2U1OTA5NTAyNjVmMDhhMzI5MjZlNjYxN2QwMThhN2Y3Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNv
bW1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGluc2VydGluZyBs
aXN0IGZvbGxvd2VkIGJ5IGFuIGVkaXQgY29tbWFuZC4gVGhlIHRlc3QgcGFzc2VzIGlmIFdlYktp
dCBkb2Vzbid0IGNyYXNoIG9yIGhpdCBhbiBhc3NlcnRpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFz
aC5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1l
ZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWYzODFkOWVmNWEzZmQ5NGViMjEw
OTBjMmEyMmZiYzA3NTEyYWFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApAQCAt
MCwwICsxLDE5IEBACis8Ym9keT48aW1hZ2U+PC9pbWFnZT48Zm9ybSBpZD1mb3JtIGNvbnRlbnRF
ZGl0YWJsZT10cnVlPjxvYmplY3QgZGF0YT0/IG9ubG9hZD1vYmplY3RPbkxvYWQoKT48L29iamVj
dD48L2Zvcm0+PGRpYWxvZyBvcGVuPSJ0cnVlIj5hPC9kaWFsb2c+Cis8c2NyaXB0PgorICAgIGRv
Y3VtZW50LmdldFNlbGVjdGlvbigpLmVtcHR5KCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
InNlbGVjdEFsbCIsIGZhbHNlKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAg
ICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG9iamVjdE9uTG9hZCgpIHsKKyAgICAgICAg
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFVub3JkZXJlZExpc3QiLCBmYWxzZSk7CisgICAg
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxzZSk7CisgICAgICAgIHJlcXVl
c3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5
LmlubmVySFRNTCA9ICI8cD4gVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93ZWQgYnkgYW4gZWRp
dCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0
IGFuIGFzc2VydGlvbi48L3A+IjsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRp
dGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJh
bWUtZXhwZWN0ZWQudHh0CmluZGV4IGQ2YmM3YjFlNmYwM2UzYjQ4YWYwNDE4YzY1NTA0YTRkMjEz
N2MxYWMuLmU1YmRkMmEwYmZkODk1MmQ5NzY2YTQzN2NhY2VhNDY2NDg5Nzc4NjYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9w
LWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC00
LDYgKzQsNyBAQCBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpbwogRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gMCBvZiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdl
IGZyb20gMCBvZiAjdGV4dCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDUgb2YgI3RleHQg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmlj
YXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCiAgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBz
aXplIDgwMHg2MDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397731</attachid>
            <date>2020-04-27 13:49:15 -0700</date>
            <delta_ts>2020-04-27 17:44:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200427134914.patch</filename>
            <type>text/plain</type>
            <size>234520</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ3ZjAxMTNkMDcwM2I0
Yzg0N2VlMzljNmRjNmRiMjZmMTIxN2VjNS4uODZhZGE3ZTMyYjQ0YzU0OWJmOTg0MjAzYTQ0OTNh
NGFjZTEyZTVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxOSBAQAorMjAyMC0wNC0yNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSBjb25zdCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpz
dG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9y
ZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtl
ckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5M
RVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6dW5hcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFn
cmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6ZnJhbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9F
ZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpi
ZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNsaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkVkaXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjYW5FZGl0UmljaGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDdXQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5ESFRNTENv
cHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5Db3B5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuUGFzdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjYW5EZWxldGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRT
bWFydERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnRE
ZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnRyeURIVE1MQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyeURIVE1MQ3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9y
ZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbFVub3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpwZXJmb3JtQ3V0T3JDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVuZGVyTGF5ZXJEaWRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTZXRDb21wb3NpdGlvblNjb3BlOjpTZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldENvbXBvc2l0aW9uU2NvcGU6On5TZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmxlYXJu
U3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRP
clJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTZWxlY3Rpb25Vbmdy
YW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRXb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGVkVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92
ZVRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbXB1dGVBbmRT
ZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3Rh
cnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFj
aG1lbnRVcGRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRl
TW9kZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkb2N1bWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6Oklnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlOjpJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRv
Y3VtZW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN3YXBXaXRoTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZSBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlm
RGlmZmVyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rp
b25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRD
bGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRP
clN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RS
YW5nZU9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcv
SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExp
bmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1Vu
YXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWxsQ2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tl
cjo6aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmRpZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9u
SWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBp
bmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91
dE5ld2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVha0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGlu
Z0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJs
ZVN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndw
ZS9FZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGVk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRp
b25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgICogcGFn
ZS9GcmFtZS5oOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UpOgorCiAyMDIwLTA0LTEzICBO
b2FtIFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBCYWNrZ3JvdW5kIGlt
YWdlcyBzaG91bGQgZmlndXJlIGludG8gdmlzdWFsbHkgbm9uIGVtcHR5IGhldXJpc3RpYwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDk4N2Q1NTYzMGVmYWQ0NWZjNDdmZWY3NWUyNWQx
NDAxNmE1ZWQ4N2EuLmVhM2I0NjcwYTI5OTk3YzY1OGUxZjA2YzYzZTc1YTc4ZDRlMzhiMzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wNC0yNyAg
SmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNy
YXNoIGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlbW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlv
biBhbmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9j
dW1lbnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywg
dGhlIG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAg
ICAgICAgKiBET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tOgorICAgICAgICAoLVtET01SYW5nZSBt
b3ZlOmluRGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtET01SYW5nZSBleHRlbmQ6aW5EaXJlY3Rp
b246XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJh
bWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246ZGlyZWN0aW9uOmdyYW51bGFyaXR5
Ol0pOgorCiAyMDIwLTA0LTEzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTk4NDMpOiAiTWlzc2luZyBQbHVnLUluIiB3aGVu
IGRyYWdnaW5nIGFuIGltYWdlIGludG8gTWFpbCBDb21wb3NlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApp
bmRleCAzNWE2NmJlNTU1YTYzYjQwOGU2ZDhiNWJmYjJjOWQ3MjlhMjRhNDJiLi42OTU4ODVlNDI3
OWI3ZjlmODAzZmMxZDEwMmFkNzZhZjgyM2IwODc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAg
LTE5OTYsNyArMTk5Niw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpCiAgICAgLy8gTk9URTog
aWdub3JlcyByZXN1bHRzIG9mIHNlbC5tb2RpZnkgYmVjYXVzZSBpdCByZXR1cm5zIGZhbHNlIHdo
ZW4KICAgICAvLyBzdGFydGluZyBhdCBhbiBlbXB0eSBsaW5lLiAgVGhlIHJlc3VsdGluZyBzZWxl
Y3Rpb24gaW4gdGhhdCBjYXNlCiAgICAgLy8gd2lsbCBiZSBhIGNhcmV0IGF0IHZpc2libGVQb3Mu
Ci0gICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVj
dGlvbigqZG9jdW1lbnQoKSk7CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHZpc2libGVQb3MpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5KTsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGNjOGU4YTMzMDEwODE5NzI3MjNmOTA1Y2Y0ZjFk
Mzc0YTY2YmRiMjkuLjdkNjU5NjIxMzFlMDhmN2M3MzhmYWI0Yjk5ZjIyZWNhY2NhYjRkNjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTgyLDYgKzU4Miw4IEBAIERvY3VtZW50OjpEb2N1
bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCB1bnNpZ25lZCBkb2N1bWVudENsYXNz
ZXMsIHVuc2lnCiAgICAgLCBtX29yaWVudGF0aW9uTm90aWZpZXIoY3VycmVudE9yaWVudGF0aW9u
KGZyYW1lKSkKICAgICAsIG1faWRlbnRpZmllcihEb2N1bWVudElkZW50aWZpZXI6OmdlbmVyYXRl
KCkpCiAgICAgLCBtX3VuZG9NYW5hZ2VyKFVuZG9NYW5hZ2VyOjpjcmVhdGUoKnRoaXMpKQorICAg
ICwgbV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKKyAgICAsIG1fc2VsZWN0
aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KCp0aGlzKSkKIHsKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0yNDk3
LDcgKzI0OTksNyBAQCB2b2lkIERvY3VtZW50OjpkZXN0cm95UmVuZGVyVHJlZSgpCiAgICAgICAg
IHZpZXcoKS0+ZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cHJl
cGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJh
bWUoKQogewogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJl
dHVybjsKQEAgLTI1OTAsNiArMjU5Miw4IEBAIHZvaWQgRG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0
cnVjdGlvbigpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoSFRNTE1lZGlh
RWxlbWVudEludmFsaWRJRCk7CiAgICAgfQogCisgICAgZWRpdG9yKCkuY2xlYXIoKTsKKyAgICBz
ZWxlY3Rpb24oKS53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgZGV0YWNoRnJvbUZyYW1l
KCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggMzRmZDAwZTE1Yjg4ZDcyMmU5NWE5OWI1Y2NiZjBiMDA1YjdmODI3ZS4uMmMzZmJiZGQ5MDc0
ZjhhOTk4MTllODliOTMxYmJiODFjYzY0ZjY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEx
OSw2ICsxMTksNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7CiBjbGFzcyBEb2N1
bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRpdGluZ0JlaGF2aW9y
OworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZlbnRMb29wVGFza0dy
b3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjcsNiArMTI4LDcgQEAgY2xh
c3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3JtQ29udHJvbGxlcjsK
IGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBGcmFtZVZpZXc7CiBj
bGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQ7CkBAIC02MjUs
NyArNjI3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWNvbWVDdXJyZW50RG9jdW1lbnRJ
bkZyYW1lKCk7CiAgICAgdm9pZCBkZXN0cm95UmVuZGVyVHJlZSgpOwotICAgIHZvaWQgcHJlcGFy
ZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAK
ICAgICAvLyBPdmVycmlkZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG1ldGhvZHMgdG8gZG8gYWRk
aXRpb25hbCB3b3JrCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRCeXBhc3NNYWluV29y
bGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbDsKQEAgLTE1NzYsNiArMTU3OCwx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVu
dCgpIHsgbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCA9IHRydWU7IH0KICAgICBi
b29sIGhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudDsgfQogCisgICAgRWRpdG9yJiBlZGl0b3Io
KSB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyBy
ZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKwogcHJvdGVjdGVkOgogICAgIGVudW0g
Q29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xk
ZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVk
ID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7
CkBAIC0yMTE2LDYgKzIxMjMsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjsKIAog
ICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lkZW50aWZpZWRFbGVt
ZW50c01hcDsKKworICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOworICAgIFVuaXF1ZVJl
ZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCiBFbGVtZW50KiBldmVudFRhcmdl
dEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggM2Y0ZmNiM2FhNjlm
Y2I1YWM4MTFiNGU4Yzc5MWE4MTQ3YjM0ZmQ2OS4uYTlhYzkzODk3MjU0ZTZmODQ5MjU3ZDAwYmJm
MTIwYzAzNzllZjA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0YXRpYyBib29sIG1h
cmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQorQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1bWVudCYgZG9jdW1l
bnQpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGlt
ZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50
KQogewogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGluZyBhdXRv
Y29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcigp
IGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxl
Y3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKGN1cnJl
bnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTE0OSw3
ICsxNDksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3Jy
ZWN0aW9uKCkgY29uc3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxs
aW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gIW1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtlcnMobWlzc3BlbGxp
bmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIHJl
dHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0
ZSgpCiAgICAgaWYgKG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3NpdGlvbiBjYXJldFBv
c2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwogCiAg
ICAgaWYgKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3Np
dGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChkaXNtaXNzU29v
bihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQpKTsKQEAgLTIyMCwx
MiArMjIwLDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5h
cHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYgKEFsdGVybmF0aXZl
VGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNs
aWVudC0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNl
OjpSZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFtZT4gcHJv
dGVjdG9yKG1fZnJhbWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7
Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVT
ZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsK
KyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2RvY3VtZW50LmZyYW1lKCkpOworICAgIG1f
ZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0
U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdn
ZXJlZCk7CisgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmVuZCgpKTsKIAotICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJr
ZXJzKCk7CiAgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcihy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwpAQCAtMjM2LDEy
ICsyMzYsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkK
ICAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gZmFsc2U7CiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOiB7Ci0gICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlv
bi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlv
biBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFy
dCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdvcmRzLnRvTm9y
bWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBU
ZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJl
Y3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJh
bmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlw
ZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFk
amFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2NCw3ICsy
NjQsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0
KFRleHRDaGVja2luZ1BhcmFncmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBo
UmFuZ2UoKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0
ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBo
VGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFy
YWdyYXBoVGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlv
bnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBt
X3JhbmdlV2l0aEFsdGVybmF0aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzAyLDcgKzMwMiw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJl
ZCgpCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4
dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5nZVdpdGhB
bHRlcm5hdGl2ZSA9IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFyYW5n
ZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0aEFsdGVy
bmF0aXZlLT5vd25lckRvY3VtZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8
fCBtX2RvY3VtZW50ICE9IHJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUpOwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIAog
RmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0gbV9m
cmFtZS52aWV3KCk7CisgICAgYXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygp
OwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmlldy0+
Y29udGVudHNUb1Jvb3RWaWV3KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBGbG9hdFJlY3QgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbgogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewot
ICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1vdmVz
IGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNo
b3cgdGhlIHBhbmVsCiAgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rp
b24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8vIHVuZGVz
aXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1l
ciBvbmNlIHdlIGNvbmZpcm0gdGhhdApAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxp
ZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChjb21t
YW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29y
cmVjdGlvbkluZGljYXRvcigpKQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMo
KS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6
Q29ycmVjdGlvbkluZGljYXRvcik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRl
bGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdpbmFs
U3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAtMzk1LDE1
ICszOTUsMTUgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBpZiAoIWNvbW1hbmQt
Pndhc0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBjb21tYW5kLT5zdGFydGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwor
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLmFk
ZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJrZXJz
LmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OwogfQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVkaXRvckNs
aWVudCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFnZSgpLT5l
ZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFnZSgpID8g
Jm1fZG9jdW1lbnQucGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFRleHRD
aGVja2VyQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCkBA
IC00NzEsNyArNDcxLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJl
Y2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBpZiAoZW5kT2ZT
ZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2Zy
YW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlv
bik7CisgICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9k
b2N1bWVudCwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKICAg
ICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlKTsKICAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRlc3BhY2Uo
c3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDc5LDEy
ICs0NzksMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5n
V2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICAvLyBNYXJrIHRoaXMgd2hp
dGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9s
bG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUg
c2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29u
J3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJz
KCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVs
ZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29y
cmVjdGlvbik7CisgICAgbV9kb2N1bWVudC5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0No
YXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29y
aWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0
aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKLSAgICBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLmRvY3Vt
ZW50KCktPm1hcmtlcnMoKTsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNv
bnRyb2xsZXIgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBpZiAobWFya2VyQ29udHJvbGxl
ci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpKSB7CiAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpD
b3JyZWN0aW9uKQogICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2Rp
ZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwg
cmVzdWx0LnJlcGxhY2VtZW50KTsKQEAgLTQ5OSw3ICs0OTksNyBAQCBib29sIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQo
Y29uc3QgVAogCiAgICAgUG9zaXRpb24gYmVnaW5uaW5nT2ZSYW5nZSA9IHJhbmdlV2l0aEFsdGVy
bmF0aXZlLnN0YXJ0UG9zaXRpb24oKTsKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQ
b3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKLSAgICBhdXRvIHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CisgICAgYXV0byBwcmVj
ZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgcHJlY2VkaW5n
Q2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmluZ09mUmFuZ2UpOwogCiAgICAgVmVjdG9yPFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5S
YW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRv
Y29ycmVjdGlvbik7CiAgICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CkBA
IC01MjAsNyArNTIwLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBpZiAoIXNob3Vs
ZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gZW5kT2ZX
b3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwg
bm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpj
cmVhdGUobV9kb2N1bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtl
ci5lbmRPZmZzZXQoKSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRS
YW5nZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNTU4LDcgKzU1OCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAKIEFsdGVy
bmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVU
ZXh0Q2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyBtX2ZyYW1lLnBhZ2Uo
KS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOworICAgIHJldHVybiBtX2RvY3Vt
ZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2RvY3VtZW50LnBhZ2UoKS0+YWx0
ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0
KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5n
ZSYgcmFuZ2UsCiAKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQgdGhlIERP
TSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4OTUyNgog
ICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24gPSByZXNv
bHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHRyZWVT
Y29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7Ci0gICAgYXV0byB1cGRhdGVk
UGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQb2ludChtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGF1dG8gdXBkYXRlZFBh
cmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKICAgICBpZiAoIXVwZGF0ZWRQ
YXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogICAgIGF1
dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IHVwZGF0ZWRQYXJh
Z3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRlZFBhcmFncmFwaEVuZENvbnRh
aW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJlY3Rpb25PZmZzZXRJblBhcmFn
cmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYxNywxMSArNjE3LDExIEBAIGJvb2wg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdFdmVudCkKICAgICAgICAgdGFy
Z2V0ID0gdHJpZ2dlcmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBlbHNlCi0gICAgICAgIHRhcmdl
dCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Cisg
ICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KCZtX2RvY3VtZW50
KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBl
dmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2ZyYW1lLndpbmRvd1Byb3h5
KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgYXV0byBldmVudCA9IFRleHRF
dmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZyYW1lKCktPndpbmRvd1Byb3h5
KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZXZlbnQtPnNldFVuZGVybHlp
bmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKQEAgLTY1Myw3ICs2NTMsNyBAQCBWZWN0b3I8U3RyaW5nPiBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlvbkFsdGVybmF0aXZlKGNvbnN0
IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5B
VElWRVMpCi0gICAgYXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKKyAgICBhdXRvJiBl
ZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8gc2VsZWN0aW9uID0gZWRpdG9y
LnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8fCAhZWRpdG9yLnNob3VsZElu
c2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmluZGV4IDk0Nzc0YTc2YjIwN2Vl
ODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZjMzA4OGRjMjc3YjNmNzkxY2Y4
MjMxYjkwNjMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNz
IEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKIGNsYXNzIEVkaXRv
ckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5nZTsKIGNsYXNz
IFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKQEAgLTYxLDcgKzYx
LDcgQEAgY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cihGcmFtZSYgZnJhbWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJhbWUoZnJhbWUpIHsgfSkKKyAg
ICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCkg
VU5MRVNTX0VOQUJMRUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7IH0pCiAgICAgfkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAgICB2b2lkIHN0YXJ0
QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlKSBVTkxFU1NfRU5BQkxF
RCh7IH0pCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBBbHRlcm5hdGl2ZVRleHRD
bGllbnQqIGFsdGVybmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlmCiAKLSAgICBGcmFtZSYgbV9m
cmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAKICN1bmRlZiBVTkxFU1NfRU5B
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAppbmRleCAxNGUzYzc4NmM0ZmYxZGI3Yjg1NjAxNTE0ODczOTBkYzM3MzE5MTUwLi5hN2QxYjk2
NTI0NjQyMGQxMTgyNjZjNTNhNWZkNTFiZWM3OTQ2ODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMjI4LDE3ICsyMjgsMTcgQEAg
dm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkKICAgICAvLyB1cCB0aGUgY29t
cG9zaXRpb24gd2lsbCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNvbXBvc2l0aW9uLCBhcyBpbiA8
cmRhcjovL3Byb2JsZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3RvcCBoYW5kbGVzIHRoaXMgaW4g
LVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSwgYnV0IHRoZSBw
aG9uZQogICAgIC8vIGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBmcmFtZS0+ZWRpdG9yKCkuY2Fu
Y2VsQ29tcG9zaXRpb24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5jYW5jZWxDb21wb3Np
dGlvbigpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53aWxsVW5hcHBseUVk
aXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCkud2lsbFVuYXBwbHlF
ZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IHNpemUgPSBtX2Nv
bW1hbmRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZTsgaTsgLS1pKQogICAgICAg
ICBtX2NvbW1hbmRzW2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRpdG9yKCku
dW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkudW5hcHBs
aWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbkZvclVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkp
OwpAQCAtMjU4LDEzICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFw
cGx5KCkKICAgICAvLyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtlIGZvciB0aGUgY3JlYXRpb24g
b2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS53aWxsUmVh
cHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRpdG9yKCkud2lsbFJl
YXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvJiBj
b21tYW5kIDogbV9jb21tYW5kcykKICAgICAgICAgY29tbWFuZC0+ZG9SZWFwcGx5KCk7CiAKLSAg
ICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVu
dC0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHkobV9kb2N1bWVudC0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBAIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQogCiBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5k
Ojp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxs
QXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5n
ZXNGb3JCaW5kaW5ncygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHko
KQpAQCAtMzc4LDEzICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHko
KQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQoKQogewotICAg
IGZyYW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCku
ZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBWZWN0b3I8UmVmUHRyPFN0YXRp
Y1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkpOwotICAgIGF1dG8gZmly
c3RSYW5nZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwor
ICAgIGF1dG8gZmlyc3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
Zmlyc3RSYW5nZSgpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBh
cmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAvLyBG
SVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAiV2ViVmll
d0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVudCBoZXJlLgog
CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCwgRE9X
TlNUUkVBTSkpOwotICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmNsZWFy
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgZGVsZXRl
U2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAogICAgIEFTU0VSVChkZXN0
aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aXNDb25uZWN0ZWQoKSk7CkBA
IC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICBvcHRp
b25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSk7CiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVu
dCgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0gICAgZnJhbWUoKS5lZGl0b3Io
KS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CisgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdT
ZWxlY3Rpb24oKSk7CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGluIGFuIGVtcHR5IHBh
cmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVtcHR5IHBhcmFncmFwaCB0byB0
aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVjdGlvbklzRW1wdHlQYXJhZ3Jh
cGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNTdGFydE9mUGFyYWdyYXBoKGVu
ZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0VuZE9mUGFyYWdyYXBoKGVuZGlu
Z1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1MDYxMmIwY2VlM2MzOTcx
MTYzNWM4NWIxN2QyZGUzODhhYjIuLjExOTdmMTJmNjdjYmY5N2VlYjY0ZjM0MGVhZmFiODcyYWNi
ODhiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2ZXIsIGlmIHR5cGluZyBzdHls
ZSB3YXMgcHJldmlvdXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQgbm9kZSBhdCB0aGUgcHJldmlv
dXMKICAgICAvLyBwb3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQg
c3R5bGUgYXMgd2VsbC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkg
PT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgbV91cHN0cmVhbVN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBmcmFtZSgpLnNlbGVjdGlv
bigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5j
bGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTc0MCw3ICs3
NDAsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAg
ICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
LCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2VkID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmNsaWVudCgp
LT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0JlUmVwbGFj
ZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdlVG9CZVJlcGxhY2VkLnB0cigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwgaW5z
ZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVpcmUg
dGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTgxNCw3ICs4MTQsNyBAQCB2b2lkIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKQogICAg
IC8vIEluIHRoaXMgY2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRoZSBuZXcgY2hhcmFjdGVycyBz
aG91bGQgaGF2ZSB0aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBkZWxldGVkIG9uZXMsCiAgICAg
Ly8gYnV0LCBpZiB3ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29tZSBiYWNrIGFuZCBzdGFydCB0
eXBpbmcgdGhhdCBzdHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28gc2VlIAogICAgIC8vIHByZXNl
cnZlVHlwaW5nU3R5bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLnNldFR5cGlu
Z1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBkb2N1bWVudCgpLnNlbGVjdGlv
bigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKIH0KIAogdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKQEAgLTg4NSw3ICs4
ODUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICgh
bV9yZXBsYWNlKSB7CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4
dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAgICAgICAgIGlmICh0
ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQotICAgICAgICAgICAgZnJhbWUo
KS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9sKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVs
ZCh0ZXh0Q29udHJvbCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0aGlzIHRvIGxhdGVyIG1ha2Ug
dGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05NDAsNyArOTQwLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAKICAgICBib29sIHNob3VsZFJlYmFsYWNlV2hp
dGVTcGFjZSA9IHRydWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkpIHsKKyAgICBpZiAoIWRvY3Vt
ZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2Vj
dXJlRmllbGQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9lbmRpbmdQb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4obm9kZSkpIHsKICAgICAgICAgICAg
IFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOwpAQCAtOTU0LDcgKzk1NCw3
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgY2FsY3VsYXRl
VHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFvcmlnaW5hbFN0cmluZy5pc0Vt
cHR5KCkpCi0gICAgICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CisgICAgICAgIGRvY3Vt
ZW50KCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2VuZGluZ1Bv
c2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwgZW5kaW5nU2VsZWN0aW9uKCku
aXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRTdGF0ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMzZjdkYTE3Yzc4OTRlMmNmNzg1
NTU5YmM4NzZjODg0NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYwMDU2Yzc3Mzc3MDBlMmI4ZjQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJF
bGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2
ZXJzYWwuaCIKQEAgLTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChE
b2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKICAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbikKIHsK
LSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24o
bV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHNldFN0
YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAg
ICBzZXRFbmRpbmdTZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlvbik7CiB9CiAKIEVkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxl
Y3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewotICAgIEFTU0VSVChkb2N1bWVu
dC5mcmFtZSgpKTsKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbik7
CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbik7CiB9CiAKIEVkaXRDb21t
YW5kOjp+RWRpdENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1lJiBFZGl0Q29tbWFuZDo6ZnJh
bWUoKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgIHJldHVybiAqZG9j
dW1lbnQoKS5mcmFtZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRpdENvbW1hbmQ6OmZyYW1lKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAgICByZXR1cm4gKmRv
Y3VtZW50KCkuZnJhbWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0Q29tbWFuZDo6ZWRpdGluZ0Fj
dGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0FjdGlvbjsKQEAgLTE2OCwxMSAr
MTUzLDcgQEAgc3RhdGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21wb3NpdGlv
bklmUG9zc2libGUoRWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9vbCBFZGl0Q29tbWFuZDo6aXNF
ZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0gICAgYXV0byogZnJhbWUgPSBt
X2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBjb250YWluZXIgPSBtX2RvY3Vt
ZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKICAg
ICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMTcsNyArMTk4
LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihB
WFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbih0
eXBlLCB0ZXh0LCBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsK
IH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihB
WFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRD
b21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKaW5kZXggZGVi
Y2ZmMDI0NWVkZjBkZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4uMmY2N2NkNzMzNGMyYzhiZDU2
OTBmMTEzNWMxMGQwMDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQu
aApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb21wb3NpdGVF
ZGl0Q29tbWFuZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1l
OwogCiBTdHJpbmcgaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rpb24oRWRpdEFjdGlvbik7CiAK
QEAgLTY0LDggKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEVkaXRDb21tYW5kKERv
Y3VtZW50JiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAgICBFZGl0
Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUoKSBjb25zdDsKLSAgICBGcmFt
ZSYgZnJhbWUoKTsKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2RvY3VtZW50OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1
bWVudDsgfQogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJlbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZmMyZWZhOTUx
ZmY1MGE2ZmFkMzY5NDgzNTk5NmI4NTljZTU3OWZiMS4uOWI3Y2ZkMmE2ZTNiNWIzY2EyY2NkMDU5
NTM1NTVhYTIyYjI2ZmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC04Njks
NyArODY5LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0IE5vZGUqIG5vZGUpCiAKIFJl
ZjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQmIGRv
Y3VtZW50KQogewotICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUoKS0+ZWRpdG9yKCkuZGVmYXVs
dFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChkb2N1bWVudC5lZGl0b3IoKS5k
ZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNl
cGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1
bWVudCk7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc1A6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggMGVhODk5MDc3OWMyMzNlODE0NDg3Yzcx
MGViMzBlZTU5MjBiZDU4ZC4uMmM3NmFhZjE5ZGMyNDZhYTRmZGRlMTY2MWJiZWQxMjU0MzE2YTUy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTY4Niw3ICsx
Njg2LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJvcGVydGllc05vdEluKCpzdHls
ZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVh
dGUoKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhtdXRhYmxlU3R5
bGUuZ2V0KCkpOwotICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmZyYW1l
KCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOworICAgIGJvb2wgc2hvdWxkU3R5bGVX
aXRoQ1NTID0gZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOwogICAgIGlm
ICghc2hvdWxkU3R5bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0VGV4dFN0eWxlcygqZG9jdW1l
bnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNpemUo
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRiZjYzYzA3
YTlhMDllMzc5YmYxOTM4ZGM1OGEyLi5iYjM0NDNmNzk2MmM3MzFkYTA5MDE3OWU0MjNlZWE0NzQw
MWVlYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzMsOCArMTczLDggQEAg
c3RhdGljIFN0cmluZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbihFZGl0
aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4dENvbW1hbmQgOiBwdWJsaWMg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAgQ2xlYXJUZXh0Q29tbWFuZChE
b2N1bWVudCYgZG9jdW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENyZWF0ZUFuZEFwcGx5KGNvbnN0
IFJlZlB0cjxGcmFtZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRpYyB2b2lkIENyZWF0ZUFuZEFw
cGx5KERvY3VtZW50Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODksMTcgQEAgRWRpdEFjdGlvbiBD
bGVhclRleHRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gRWRpdEFj
dGlvbjo6RGVsZXRlOwogfQogCi12b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5
KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0
ZUFuZEFwcGx5KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoZnJhbWUtPnNlbGVjdGlv
bigpLmlzTm9uZSgpKQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJvdW5kIHN0YWxlIGNvbXBvc2l0
aW9uIHN0YXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigpOworICAgIGRvY3VtZW50LmVk
aXRvcigpLmNsZWFyKCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxl
Y3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21tYW5kID0gYWRvcHRSZWYoKm5l
dyBDbGVhclRleHRDb21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkpOworICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CisgICAgYXV0byBjbGVh
ckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoZG9jdW1lbnQpKTsKICAg
ICBjbGVhckNvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAgICAg
Y2xlYXJDb21tYW5kLT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsyMDcsMjQgQEAgdm9pZCBDbGVh
clRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQdHI8RnJhbWU+IGZyYW1lKQog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7
CiAKLVRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKEZy
YW1lJiBmcmFtZSwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9u
LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBvcHRpb25zKQotICAgIDogbV9m
cmFtZShmcmFtZSkKK1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gdGVt
cG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBvcHRp
b25zKQorICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50KSkKICAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQotICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZnJhbWUuZWRp
dG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwgbV93YXNJZ25vcmluZ1NlbGVj
dGlvbkNoYW5nZXMoZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVu
YWJsZWQoZnJhbWUuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQorICAg
ICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3VtZW50LnNlbGVjdGlvbigpLmlz
VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJs
ZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRVcGRhdGVB
cHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0
VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmIChvcHRpb25z
ICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQotICAg
ICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOworICAg
ICAgICBkb2N1bWVudC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwog
CiAgICAgaWYgKHRlbXBvcmFyeVNlbGVjdGlvbikgewotICAgICAgICBtX3NlbGVjdGlvblRvUmVz
dG9yZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBtX3NlbGVjdGlv
blRvUmVzdG9yZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBz
ZXRTZWxlY3Rpb24odGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkpOwogICAgIH0KIH0KQEAgLTIz
NiwxMiArMjM2LDEyIEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6flRlbXBvcmFyeVNlbGVj
dGlvbkNoYW5nZSgpCiAKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAgIGF1dG8gcmV2ZWFsU2VsZWN0
aW9uID0gbV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpSZXZlYWxTZWxlY3Rp
b24gPyBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRpdG9yOjpSZXZlYWxTZWxlY3Rp
b246Ok5vOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFu
Z2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24pOworICAg
ICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1fd2Fz
SWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rpb24pOwogICAgIH0KIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVj
dGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIG1fZnJhbWUtPnNl
bGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNX
ZXJlRW5hYmxlZCk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFVwZGF0ZUFw
cGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CiAjZW5kaWYK
IH0KIApAQCAtMjUwLDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6
OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAgICAgYXV0
byBvcHRpb25zID0gRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCk7
CiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9Ob3RTZXRG
b2N1cykKICAgICAgICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMp
OwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIG9wdGlv
bnMpOworICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24s
IG9wdGlvbnMpOwogfQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRsZXIgaGFzIG1vdmVkIHRoZSBz
ZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8gd2Ugc2hvdWxkIHVzZSB0aGUg
dGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRpdGluZyBvcGVyYXRpb24uCiBW
aXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQp
CiB7Ci0gICAgYXV0byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGF1dG8gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uOwogICAgIC8vIElm
IHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24g
aXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYsMTIgKzI3NiwxMiBAQCBWaXNp
YmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCogZXZlbnQpCiAv
LyBGdW5jdGlvbiBjb25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZpb3IgYSBmYWxsYmFjayB3aGVu
IFBhZ2Ugb3IgU2V0dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVkaXRpbmdCZWhhdmlvciBFZGl0
b3I6OmJlaGF2aW9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ0JlaGF2aW9yKG1fZnJh
bWUuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOworICAgIHJldHVybiBFZGl0aW5n
QmVoYXZpb3IobV9kb2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CiB9
CiAKIEVkaXRvckNsaWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25zdAogewotICAgIGlmIChQYWdl
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50
LnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JDbGllbnQoKTsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJvb2wgRWRpdG9yOjpoYW5kbGVU
ZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0b3I6OmNhbkVkaXQoKSBjb25z
dAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0Umlj
aGx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIGVudW0g
Y2xhc3MgQ2xpcGJvYXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0NDIsNyBAQCBzdGF0aWMgYm9v
bCBkaXNwYXRjaENsaXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50PiYmIHRhcmdldCwgQ2xpcGJv
YXJkRXZlbnRLaW5kCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1dCgpCiB7Ci0gICAgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJk
RXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6
OkJlZm9yZUN1dCk7CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0
KCkKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpCZWZvcmVDb3B5
KTsKIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9yOjpjYW5Db3B5KCkgY29uc3QK
IHsKICAgICBpZiAoaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQoKSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlzSW5QYXNzd29y
ZEZpZWxkKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9t
RWRpdGluZygpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxvYWRl
cigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5OCw3ICs0OTgsNyBAQCBib29s
IEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuRGVsZXRlKCkgY29u
c3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNl
bGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0K
IApAQCAtNTI0LDcgKzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRTbWFydERlbGV0ZSgpCiB7
CiAgICAgaWYgKGJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnREZWxldGUoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHko
KSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
Z3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIGJvb2wgRWRpdG9yOjpk
ZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFu
dWxhcml0eSBnCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgIGlmIChtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoaXNUeXBpbmdBY3Rpb24p
IHsKICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZG9jdW1lbnQo
KSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVsZXRlIDog
MCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5n
T3BlcmF0aW9uKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBFZGl0b3I6OmRlbGV0ZVdpdGhE
aXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGcK
IAogdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShib29sIHNtYXJ0
RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25l
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBlZGl0
aW5nQWN0aW9uKS0+YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIEVkaXRvcjo6ZGVs
ZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRBY3Rpb24g
ZWRpdGluZwogCiB2b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsKLSAgICBDbGVhclRleHRDb21t
YW5kOjpDcmVhdGVBbmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xlYXJUZXh0Q29tbWFuZDo6Q3Jl
YXRlQW5kQXBwbHkobV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5U
ZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQpAQCAtNjYx
LDcgKzY2MSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAKIHZvaWQgRWRpdG9yOjpyZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxl
Y3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRSZXBsYWNlIHNtYXJ0UmVwbGFj
ZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxC
bG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4OSwxOSArNjg5LDE5IEBA
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1hZ2VFbGVtZW50c1RvTG9hZEJl
Zm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldmVhbFNlbGVjdGlv
bkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpQYXN0ZSkgewogICAgICAg
ICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKSk7Ci0g
ICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQs
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICByZXBsYWNlZFRleHQu
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFu
Z2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0K
IAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGVkaXRp
bmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0g
Y29tbWFuZC0+ZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwotICAgICAgICByZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4dCwgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFw
cGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAgIH0KIApAQCAtNzI4LDcgKzcy
OCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpz
ZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSog
cmFuZ2UpIGNvbnN0CkBAIC03NDQsNyArNzQ0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZERlbGV0
ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgp
CiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3
b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
IWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBD
bGlwYm9hcmRFdmVudEtpbmQ6OkNvcHkpOwpAQCAtNzUyLDcgKzc1Miw3IEBAIGJvb2wgRWRpdG9y
Ojp0cnlESFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAgIGlm
IChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisg
ICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmll
bGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0Y2hD
bGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBib2FyZEV2
ZW50S2luZDo6Q3V0KTsKQEAgLTc2MCw3ICs3NjAsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxD
dXQoKQogCiBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikgY29uc3QKIHsKLSAgICBp
ZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZy
b21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpCisgICAg
aWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJl
c3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2xpZW50KCkgJiYg
Y2xpZW50KCktPnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UsIGFjdGlvbik7CkBAIC03ODIs
MTcgKzc4MiwxNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKIAogYm9vbCBFZGl0b3I6Omhhc0Jp
ZGlTZWxlY3Rpb24oKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBzdGFydE5vZGU7Ci0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsK
LSAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgIGlmIChtX2RvY3VtZW50LnNl
bGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2Rl
KCk7CisgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYgKGVu
Y2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2soZW5kTm9kZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlCi0gICAgICAgIHN0YXJ0Tm9kZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKTsKIAogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC04MTIsMTIgKzgxMiwxMiBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigp
IGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKLSAgICAg
ICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSwgdWxUYWcpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Q2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykpCiAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5p
c1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdp
dGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7Ci0g
ICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CisgICAgfSBlbHNlIGlmIChtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBhdXRvKiBzdGFydE5vZGUg
PSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCksIHVsVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0Vs
ZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHVs
VGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYmIHN0YXJ0Tm9kZSA9PSBl
bmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKICAgICB9CkBAIC04Mjcs
MTIgKzgyNywxMiBAQCBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0
ZSgpIGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7Ci0gICAg
ICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnN0YXJ0KCksIG9sVGFnKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpKQogICAgICAgICAgICAg
cmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOwot
ICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOworICAgIH0gZWxzZSBpZiAobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgYXV0byogc3RhcnROb2Rl
ID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLCBvbFRhZyk7CisgICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBv
bFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAmJiBzdGFydE5vZGUgPT0g
ZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7CiAgICAgfQpAQCAtODcy
LDcgKzg3Miw3IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgp
CiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkKIHsK
LSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgp
KQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0cjxOb2RlPiBu
ZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC04ODIsNyArODgyLDcgQEAgUmVmUHRyPE5v
ZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4g
RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKQogewotICAgIGlmICgh
Y2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYg
KCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3QgPSBJ
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsT3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC04OTIsNyArODkyLDcgQEAgUmVmUHRyPE5vZGU+
IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCkKIAogUmVmUHRyPE5v
ZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKQogewotICAg
IGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisg
ICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG5ld0xp
c3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsVW5vcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTkwMiw3ICs5MDIsNyBAQCBSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpCiAK
IHZvaWQgRWRpdG9yOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFj
YW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAo
IWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
OjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC05MzIsNyArOTMy
LDcgQEAgRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIAogRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRU
YXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmluZEV2ZW50VGFyZ2V0
RnJvbShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXR1cm4gZmluZEV2
ZW50VGFyZ2V0RnJvbShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAog
dm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uKQpAQCAtOTQ2LDEzICs5NDYsMTMgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uLAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2VsZWN0
aW9uVHlwZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgp
OworICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uVHlwZSgpOwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZpc2libGVT
ZWxlY3Rpb246Ok5vU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaW5w
dXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24p
OwogICAgIFN0cmluZyBpbnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0
eWxlQW5kQWN0aW9uKCpzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+
IGVsZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50
ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlu
cHV0RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NjksNyArOTY5LDggQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uLAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjbGllbnQo
KS0+ZGlkQXBwbHlTdHlsZSgpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCkt
PmRpZEFwcGx5U3R5bGUoKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgZGlzcGF0Y2hJbnB1
dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSk7CiB9CkBAIC05
ODQsMTMgKzk4NSwxMyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3RpbwogICAgIGlmICghc3R5bGUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOworICAgIGF1dG8gc2VsZWN0aW9u
VHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgp
OwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9u
KQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaW5wdXRUeXBlTmFtZSA9IGlucHV0VHlw
ZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pOwogICAgIFN0cmluZyBpbnB1dEV2
ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9uKHN0eWxlLCBl
ZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxF
bGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgIWRpc3BhdGNoQmVmb3JlSW5w
dXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVudERhdGEpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTEwMDUsNyArMTAwNiw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxl
VG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0
eWxlKHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlv
bik7CiB9CkBAIC0xMDE2LDcgKzEwMTcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uKFJlZjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZwogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4dCBkZWNv
cmF0aW9ucyBzaW5jZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNsaWVudCgp
IHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRU
ZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBw
bHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlv
biwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEwMjgsMjUgQEAgdm9pZCBFZGl0b3I6
OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBF
ZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVk
aXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGllbnQoKSAmJiBj
bGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUsIGVkaXRp
bmdBY3Rpb24pOwogfQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAg
aWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3Rh
cnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcikpCisgICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGlu
Z1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpCiAgICAg
ICAgIHJldHVybiBlZGl0aW5nU3R5bGUtPmhhc1N0eWxlKHByb3BlcnR5SUQsIHZhbHVlKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uSGFzU3R5bGUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewot
ICAgIHJldHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0
YXRlT2ZTdHlsZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXR1cm4g
RWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUo
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
CiB7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5
bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LAorICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxl
OjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSwKICAgICAgICAgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAg
ICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTExMzYsNyArMTEzNyw3IEBAIHZvaWQgRWRpdG9yOjph
cHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCYgY29tbWFuZCkKICAgICAgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZygmY29tbWFu
ZCk7CiAKICAgICAgICAgaWYgKCFjb21tYW5kLnByZXNlcnZlc1R5cGluZ1N0eWxlKCkpCi0gICAg
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgICAg
IC8vIENvbW1hbmQgd2lsbCBiZSBlcXVhbCB0byBsYXN0IGVkaXQgY29tbWFuZCBvbmx5IGluIHRo
ZSBjYXNlIG9mIHR5cGluZwogICAgICAgICBpZiAobV9sYXN0RWRpdENvbW1hbmQuZ2V0KCkgPT0g
JmNvbW1hbmQpCkBAIC0xMjAwLDExICsxMjAxLDExIEBAIHZvaWQgRWRpdG9yOjpyZWFwcGxpZWRF
ZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24mIGNvbXBvc2l0aW9uKQogICAgIHJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCi1FZGl0b3I6OkVkaXRvcihGcmFt
ZSYgZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorRWRpdG9yOjpFZGl0b3IoRG9jdW1lbnQm
IGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fa2lsbFJpbmco
bWFrZVVuaXF1ZTxQQUw6OktpbGxSaW5nPigpKQotICAgICwgbV9zcGVsbENoZWNrZXIobWFrZVVu
aXF1ZTxTcGVsbENoZWNrZXI+KGZyYW1lKSkKLSAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KGZyYW1lKSkKKyAgICAs
IG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihkb2N1bWVudCkpCisgICAg
LCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyPihkb2N1bWVudCkpCiAgICAgLCBtX2VkaXRvclVJVXBkYXRlVGltZXIoKnRoaXMs
ICZFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICwgbV90ZWxl
cGhvbmVOdW1iZXJEZXRlY3Rpb25VcGRhdGVUaW1lcigqdGhpcywgJkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpCkBAIC0xMjIwLDcgKzEyMjEsNyBAQCB2b2lkIEVkaXRv
cjo6Y2xlYXIoKQogICAgIGlmIChtX2NvbXBvc2l0aW9uTm9kZSkgewogICAgICAgICBtX2NvbXBv
c2l0aW9uTm9kZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGNsaWVudCA9
IHRoaXMtPmNsaWVudCgpKQotICAgICAgICAgICAgY2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlv
bigmbV9mcmFtZSk7CisgICAgICAgICAgICBjbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKG1f
ZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgfQogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxp
bmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsK
QEAgLTEyMjksNiArMTIzMCw3IEBAIHZvaWQgRWRpdG9yOjpjbGVhcigpCiAgICAgbV9tYXJrID0g
eyB9OwogICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSB7IH07CiAgICAgbV9l
ZGl0b3JVSVVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXItPnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAKICNpZiBFTkFCTEUoVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIG1fdGVsZXBo
b25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIuc3RvcCgpOwpAQCAtMTIzOCwxMiArMTI0MCwx
MiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQsIFRleHRFdmVudElucHV0VHlw
ZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxl
VGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBpbnB1dFR5cGUpOworICAgIHJl
dHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2
ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsKIH0KIAogYm9vbCBFZGl0b3I6
Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiB7
Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQo
dGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CisgICAgcmV0dXJuIG1fZG9jdW1l
bnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwg
VGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnREaWN0
YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8RGljdGF0aW9uQWx0ZXJu
YXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkBA
IC0xMzAzLDEwICsxMzA1LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGlu
Z1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAg
IC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRpb25hbGl6ZSByZXZlYWxpbmcgc2VsZWN0
aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSBiaXQKICAgICAgICAg
ICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3VzZWQgZnJhbWUuCiAgICAgICAgICAgICBp
ZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRl
ckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVkaXRlZEZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2Ug
PSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+cmV2
ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAg
IHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTEzMTksMTAgKzEzMTksMTAgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVC
cmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICgh
c2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAg
ICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQo
Y2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJp
YXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKGRvY3VtZW50KCksIGF1
dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rp
b25JbmRpY2F0b3IgOiAwKTsKQEAgLTEzMzksMTAgKzEzMzksMTAgQEAgYm9vbCBFZGl0b3I6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAgICAg
ICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4i
LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2li
bGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICBib29sIGFsaWduVG9FZGdlID0g
aXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY2FyZXQpOwogICAgIGJvb2wgYXV0
b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5
QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9u
SXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Ig
OiAwKTsKQEAgLTE0MDYsNyArMTQwNiw3IEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5
KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAgIH0KIAotICAgIGlmIChlbmNsb3NpbmdU
ZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkK
KyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwg
Y2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBh
c3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxwdHI7CkBAIC0xNDI1LDcgKzE0MjUsNyBA
QCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0
aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6
OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTog
RGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVkZUltYWdl
QWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5
T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRh
dGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTE0MzQsMTAgKzE0MzQs
MTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNvcHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVy
IGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFjdGlvbikgewogICAgICAgICBTdHJpbmcg
dGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkp
Ci0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAg
ICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9u
UmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0
aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQo
dGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICBwb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApAQCAtMTQ1NCw3ICsxNDU0LDcgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgICAgIHJldHVybjsK
ICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAg
UmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRv
Y3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
KQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRX
aXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0NzksNyArMTQ3OSw3IEBAIHZvaWQgRWRp
dG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3Rl
KCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJk
KHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9w
dGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0
V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAtMTYxNyw3ICsxNjE3LDcgQEAgdm9pZCBF
ZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAg
ICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VS
ZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5v
ZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYg
KCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODUxLDggKzE4NTEsOCBA
QCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkKIHZvaWQgRWRpdG9yOjpzZXRCYXNlV3Jp
dGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNl
bGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAgIGlmIChpblNhbWVQYXJhZ3JhcGgobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpCisgICAgICAgICYmIGJhc2VX
cml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSA9PSBkaXJlY3Rpb24pCiAgICAgICAg
IHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4ODIsNyArMTg4Miw3IEBAIFdyaXRpbmdE
aXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkg
Y29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRpbmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0
OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxl
bnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFu
b2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkxNyw3ICsxOTE3LDcgQEAgdm9pZCBF
ZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihyYW5nZS0+c3RhcnRQb3Np
dGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbmZpcm1D
b21wb3NpdGlvbigpCkBAIC0xOTUyLDI4ICsxOTUyLDI4IEBAIHZvaWQgRWRpdG9yOjpjb25maXJt
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQogCiBjbGFzcyBTZXRDb21wb3NpdGlvblNj
b3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlKEZyYW1lJiBmcmFtZSkKLSAg
ICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRv
cihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlKERvY3VtZW50JiBkb2N1bWVudCkKKyAg
ICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQorICAgICAgICAsIG1fdHlwaW5n
R2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUoKSkKICAgICB7Ci0gICAgICAgIG1fZnJh
bWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAgICAgIG1f
ZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CiAgICAg
fQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQogICAgIHsKLSAgICAgICAgbV9mcmFtZS0+
ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Ci0gICAgICAgIGlmIChh
dXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAg
bV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Cisg
ICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGll
bnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsK
ICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7CisgICAgUmVmUHRyPERvY3VtZW50PiBt
X2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVy
ZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJp
bmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtb2RlID09
IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENhbmNlbENvbXBvc2l0aW9uKTsKLSAgICBT
ZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9mcmFtZSk7CisgICAgU2V0
Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9jdW1lbnQpOwogCiAgICAg
aWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAgICAgICAgIEFTU0VSVCh0ZXh0ID09IGVt
cHR5U3RyaW5nKCkpOwpAQCAtMTk4NCw3ICsxOTg0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAg
bV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xlYXIoKTsKICAgICBtX2N1c3RvbUNvbXBv
c2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGN1cnJlbnQgY29tcG9zaXRp
b24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVkIGNvbXBvc2l0aW9uIHRleHQgaWYgd2Un
cmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBAIC0yMDAwLDEzICsyMDAwLDEzIEBAIHZv
aWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0
aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pIHsKICAg
ICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0aGF0IGRpc2FncmVlcyBhYm91dCBjdXJy
ZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMgd2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0g
ICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKCZtX2ZyYW1lKTsKKyAgICAgICAgVHlw
aW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVudCk7CiAgICAgfQogfQogCiB2b2lkIEVk
aXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29t
cG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25I
aWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQg
c2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25T
Y29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2Nv
cGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVzIHN0eWxlcyBiZWZvcmUgc2V0dGluZyBz
ZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZlbnQKICAgICAvLyBpbnNlcnRpbmcgdGhl
IHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAx
NSw3ICsyMDE1LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KIAogICAgIHNlbGVjdENvbXBv
c2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjAyMywxMCArMjAy
MywxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNv
bXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8vIFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6
VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSByZW1vdmlu
ZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4gZmluYWxpemVkLgogICAgICAgICBUeXBp
bmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1lbnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6
VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBj
dXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmlz
UmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVsZXRpb24gd2FzIHByZXZlbnRlZCwgdGhl
biB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBzbyB0aGF0IHRo
ZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29tcG9zZWQuCi0gICAgICAgICAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwODIsOCArMjA4Miw4IEBAIHZv
aWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3Rv
cjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQo
ZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlw
aW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21w
b3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhl
IGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKLSAgICAgICAgUG9zaXRpb24g
ZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKKyAgICAg
ICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFz
ZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsKICAgICAgICAgTm9kZSogYmFzZU5vZGUg
PSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBi
YXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIE5vZGUqIGV4dGVudE5vZGUg
PSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIxMDksNyArMjEwOSw3IEBAIHZvaWQgRWRp
dG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21w
b3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWluKGJh
c2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0
aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFydCwgYmFz
ZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTIxMjMsNyArMjEyMyw3IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgaWYg
KCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQogICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTM5LDcgKzIxMzksNyBAQCB2b2lkIEVkaXRvcjo6
bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBPbiBNYWMgT1MgWCwgd2hl
biB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBwYW5lbCwgd2Ug
ZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91bGQgcmVtb3ZlIG1pc3NwZWxsaW5nIG1h
cmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3
Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChz
ZWxlY3RlZFJhbmdlKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCkBAIC0yMTUyLDE0
ICsyMTUyLDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKIAogdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKLQorICAgIFJlZjxEb2N1bWVudD4g
cHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CisgICAgCiAgICAgLy8gVGhlIGJhc2ljIGFw
cHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2VzIC0gZnJvbSB0aGUgc2VsZWN0aW9uIGVu
ZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAgIC8vIHRoZW4gd2Ugd3JhcCBhbmQgc2Vh
cmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94aW1hdGVseSkgd2hlcmUgd2Ugc3RhcnRl
ZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHNlYXJj
aCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcgYXQgdGhlIHNlbGVjdGlvbiBlbmQgbWFr
ZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsuCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdlID0gcmFu
Z2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlv
biA9IGZhbHNlOwpAQCAtMjMwOCw4ICsyMzA4LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICAgICAg
ICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5j
dHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAgIGF1dG8gYmFkR3JhbW1h
clJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIHsgZ3Jh
bW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwucmFuZ2UubG9jYXRpb24sIGdyYW1tYXJE
ZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZG
SU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsK
KyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAg
ICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQ
aHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRN
YXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRl
dGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMyMCw4ICsyMzIwLDggQEAgdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAg
ICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0ZXIuCiAgICAg
ICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVsbGluZ09mZnNldCwgbWlzc3BlbGxlZFdv
cmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSkpOwotICAgICAg
ICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOworICAgICAgICBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5n
UmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZl
YWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpT
cGVsbGluZyk7CkBAIC0yMzM1LDcgKzIzMzUsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVk
V29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAogICAgIGlmICghaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVu
dEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKQEAgLTIzODksNyArMjM4OSw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxl
Y3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNh
bCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpyYW5nZSkuaXNVbmdyYW1t
YXRpY2FsKCk7CkBAIC0yNDA0LDcgKzI0MDQsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAKICAgICBW
ZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4dENo
ZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MTIsNyAr
MjQxMiw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVu
Z3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vCiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkg
JiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0
aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZp
c2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0
aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKQEAgLTI0NzIsNyAr
MjQ3Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3Rh
cnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRv
UmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICBpZiAo
cGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjU5NCwxOSArMjU5NCwxOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgIC8vIElmIGF1
dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29y
ZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkg
ewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbigqbWlzc3BlbGxpbmdSYW5n
ZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlv
bigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBpZiAobmV3
U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAg
ICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICAgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1
dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9m
cmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmlu
ZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJ
bnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVw
bGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIGNo
YXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
bW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUs
IERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2Vs
ZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBA
IC0yNjc4LDcgKzI2NzgsNyBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZv
cihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVk
Tm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAK
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjcyNiw3
ICsyNzI2LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBpZiAocGFyYWdyYXBoVG9D
aGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgYXN5bmNocm9ub3Vz
ID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkg
JiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CisgICAgYm9vbCBhc3luY2hyb25vdXMgPSBt
X2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAm
JiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsKIAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBt
b2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAg
IGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNr
KGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0aW9ucyk7CkBAIC0yNzQxLDcgKzI3NDEsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhP
cHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAgIH0KIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2Vy
KCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25z
LCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBtYXJr
QW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdHMpOwogfQogCkBA
IC0yNzg3LDcgKzI3ODcsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNl
cnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYQogCiB2b2lkIEVkaXRv
cjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3Vt
ZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVz
dC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJh
Z3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCksIHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1l
bnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKQEAgLTI4MTEsOSArMjgxMSw5
IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQ
YXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxh
Y2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24p
IHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBW
aXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gQXR0ZW1w
dCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBp
ZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQ
b3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAg
ICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJhZ3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlv
bikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0
ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYg
KHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBo
LnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4
OTUsMTMgKzI4OTUsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNw
ZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VU
b1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFj
ZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25U
b1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxh
Y2UpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykgewotICAg
ICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRv
UmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2Ug
PSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoY2FuRWRpdFJpY2hseSgpKQpAQCAtMjkxMCw3
ICsyOTEwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hl
Y2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBjb3Jy
ZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBo
LCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExl
bmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRv
Y3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3Qg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3Qs
IEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rpb25PY2N1cmVkKTsKICAgICAgICAgICAgICAg
ICB9CiAKQEAgLTI5NDAsMTMgKzI5NDAsMTMgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNl
Rm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAg
ICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAg
aWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0
ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkgewogICAgICAgICAgICAgYXV0byBzZWxlY3Rp
b25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0
IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFu
Z2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJF
QU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJp
ZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxl
Y3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxh
cml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZh
aWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJl
eW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAg
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5t
b2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBD
aGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMDIzLDggKzMw
MjMsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3Vy
cmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2UgcG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3
b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJpZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFu
ZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8K
LSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rp
b24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOworICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxl
Y3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRo
ZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAt
MzA5NiwxMSArMzA5Niw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBv
c2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5n
ZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQ
b2ludCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1l
PiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykK
QEAgLTMxMTcsNyArMzExMyw3IEBAIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVk
aXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJl
dmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlv
bihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlvbik7CisgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24ocmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBy
ZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0aW9u
Q2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5n
U2VsZWN0aW9uKQpAQCAtMzEyOSw3ICszMTI1LDcgQEAgdm9pZCBFZGl0b3I6OnNldElnbm9yZVNl
bGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVhbFNlbGVjdGlvbiBzaG91bGRSZXZlYWwK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mg
c2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5n
ZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAogICAgIGlmICghaWdub3JlKQotICAgICAg
ICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNlbmRpZgogICAgIGlmICghaWdub3JlICYm
IHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09IFJldmVhbFNlbGVjdGlvbjo6WWVzKQog
ICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25t
ZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxFeHRlbnQpOwpAQCAtMzE1Miw3ICszMTQ4
LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxl
Y3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsKICAgICBpZiAoIW1fY29tcG9zaXRpb25O
b2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYg
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTMxNzUsNyArMzE3MSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2Uo
KQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0zMjAwLDEwICszMTk2LDEwIEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0
cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKIAogICAgIC8v
IFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAgICAgIGlmICghbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3
U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAg
ICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgIH0KIAogICAgIC8vIEluc2Vy
dCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAtMzI1NSw3ICszMjUxLDcgQEAgdm9pZCBF
ZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6
Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1Nl
bGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb24+IG9w
dGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxE
b2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBJZiB0aGUg
bmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBkb24ndCB1cGRhdGUgdGhlIHNlbGVjdGlv
bi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCkuaXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rp
b24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjUsOSArMzI2MSw5IEBAIHZvaWQgRWRpdG9yOjpj
aGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2Vs
ZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBp
biB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xkIHNlbGVjdGlvbiBjYW4gYmUgaW52YWxp
ZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBjYW4gcHJvZHVjZSBzb21l
IHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NzI5MzE1PiBTb21l
IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29udGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlv
bnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAgYm9vbCBzZWxlY3Rpb25EaWROb3RDaGFu
Z2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiB8fCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQotICAg
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlv
bnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gPSBuZXdTZWxl
Y3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2Vs
ZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
aG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKIAogICAgIC8v
IFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdp
dGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIERPTS4KICAgICAvLyBGb3Ig
ZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4gdGhlIGZvbGxvd2luZyAodGhlIGNhcmV0
IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODIsMTMgKzMyNzgsMTMgQEAgdm9pZCBFZGl0b3I6OmNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgaWYgKHNlbGVjdGlvbkRpZE5v
dENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0
b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0
dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAgIGlm
IChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0Vu
YWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRy
ZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMjk2LDcgKzMy
OTIsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAogU3RyaW5nIEVkaXRv
cjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIHsKICAgICBUZXh0SXRlcmF0
b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvckVtaXRzSW1hZ2VBbHRUZXh0OwotICAg
IGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0Vu
YWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1No
YWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAgIGJlaGF2aW9yIHw9IFRleHRJdGVyYXRv
clRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBzZWxlY3RlZFRleHQoYmVoYXZpb3IpOwog
fQpAQCAtMzMwNCw3ICszMzAwLDcgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0
YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0
b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAgICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFy
YWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2libHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIu
Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBhdXRvIGVuZCA9IHNl
bGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4o
KSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCkBAIC0zMzE0LDcgKzMzMTAsNyBA
QCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZp
b3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2Vy
dFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNO
b25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRv
Y3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAtMzMyMiw3ICszMzE4LDcgQEAgUmVmUHRy
PFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNv
bnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2YgcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0
ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTMzMzAsNyArMzMyNiw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50
PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAg
cmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAgIFZpc2libGVT
ZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0
cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6
ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246
OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAogICAgIHJldHVy
biBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNTAsOCArMzM0Niw4IEBAIHZvaWQgRWRpdG9yOjpyZW1v
dmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vob2xkZXIpCiAg
ICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUgTGVnYWN5IFdl
YktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB0byBiZSBi
ZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAobV9mcmFtZS5z
ZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1l
bnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVmb3Jl
UGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYgKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQtPmZvY3VzZWRF
bGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2ZWRQb3NpdGlv
bkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFtZVNlbGVjdGlv
bjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwogfQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3QpCkBAIC0zNDAz
LDcgKzMzOTksNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJh
bmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1Nl
bGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAog
ewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hh
bmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpICYmIG1f
ZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50
KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZmZp
bml0eSwgc3RpbGxTZWxlY3RpbmcpOwpAQCAtMzQxMiwxNyArMzQwOCwxNyBAQCBib29sIEVkaXRv
cjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgY29uc3QgVgogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0
aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYgKHN0
eWxlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5n
U3R5bGUoKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxl
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1cnJl
bnQgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlOwot
ICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnR5
cGluZ1N0eWxlKCkpCisgICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKICAgICAgICAgdHlwaW5nU3R5bGUgPSBleGlz
dGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CiAgICAgZWxzZQogICAgICAgICB0eXBpbmdTdHlsZSA9
IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5n
U3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBpbmdT
dHlsZUF0KHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxlcywg
c3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiBibG9ja1N0eWxlID0gdHlwaW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVCbG9j
a1Byb3BlcnRpZXMoKTsKQEAgLTM0MzAsNyArMzQyNiw3IEBAIHZvaWQgRWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0CiAgICAgICAgIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgYmxvY2tT
dHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CiAKICAgICAvLyBTZXQgdGhlIHJl
bWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOworICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOwogfQogCiB2
b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYgcHJv
cGVydGllcywgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ4OSwxOSArMzQ4NSwxOSBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3QKIAog
Ym9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25z
IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJl
ZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJp
bmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKIAogICAg
IGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBE
T1dOU1RSRUFNKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKIAogICAgIGlmICghKG9w
dGlvbnMuY29udGFpbnMoRG9Ob3RSZXZlYWxTZWxlY3Rpb24pKSkKLSAgICAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU5OCw3
ICszNTk0LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICBpZiAocmFuZ2UpIHsKICAg
ICAgICAgaWYgKCZyYW5nZS0+b3duZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgpKQogICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgZWxzZSBpZiAoIWlzRnJhbWVJblJh
bmdlKG1fZnJhbWUsICpyYW5nZSkpCisgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZSgq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGlmICghc2VhcmNoUmFuZ2UpCkBAIC0zNjY4LDcgKzM2NjQsNyBAQCB2b2lkIEVkaXRv
cjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0
aW9uU2V0PEZyYW1lUwogI2VuZGlmCiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVu
dCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xpZW50
KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKIAogI2lm
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgaWYgKHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSkKQEAgLTM2OTEsOCAr
MzY4Nyw2IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9yOjpzaG91bGRE
ZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVsZXBob25l
TnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBw
b3J0ZWQoKTsKIH0KIApAQCAtMzcwNSw5ICszNjk5LDkgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxl
Y3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBt
YXJrZWRSYW5nZXM7CiAKLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgaWYg
KGF1dG8qIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5n
ZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MjMsMTMgKzM3MTcsMTMgQEAgdm9p
ZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgZW5k
ID0gZW5kLm5leHQoQ2hhcmFjdGVyKTsKICAgICB9CiAKLSAgICBGcmFtZVNlbGVjdGlvbiBleHRl
bmRlZFNlbGVjdGlvbjsKKyAgICBGcmFtZVNlbGVjdGlvbiBleHRlbmRlZFNlbGVjdGlvbihtX2Rv
Y3VtZW50KTsKICAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRTdGFydChzdGFydCk7CiAgICAgZXh0
ZW5kZWRTZWxlY3Rpb24uc2V0RW5kKGVuZCk7CiAgICAgUmVmUHRyPFJhbmdlPiBleHRlbmRlZFJh
bmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAogICAgIGlmICgh
ZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgp
KQorICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAg
ICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVt
YmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzc0Miw3ICsz
NzM2LDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkK
ICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdl
KTsKICAgICB9CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgIGlm
IChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgIHBhZ2UtPnNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQo
KTsKIH0KIApAQCAtMzgwMSw5ICszNzk1LDkgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRl
VGltZXJGaXJlZCgpCiAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7
CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRXb3JkczsKICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwotICAgICAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICAg
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUo
KSB8fCBjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3Rh
cnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CisgICAg
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKKyAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAg
ICAgIG5ld0FkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG5ld1N0
YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSk7CiAjZWxzZQpAQCAtMzg1Niw3ICszODUwLDcgQEAgdm9pZCBFZGl0b3I6
OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2VkaXRvclVJVXBkYXRlVGlt
ZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbikKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAKLSAgICBt
X29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCiAgICAgbm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygpOwpAQCAtMzg4Myw3ICsz
ODc3LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZGUpCiAKIGJv
b2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSBtYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKIHsKLSAgICBO
b2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIE5vZGUqIG5vZGUgPSBmaW5kRmly
c3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTM5NTAsMTAgKzM5NDQsMTAgQEAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IEVkaXRv
cjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3QKICAgICByZXR1
cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFu
Z2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQorc3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlk
YXRlUmFuZ2VGb3JTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9u
KHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3
b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZG9jdW1lbnQuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogc3RhdGljIGJvb2wgY2FuZGlkYXRlV291
bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCkBAIC0zOTY3
LDggKzM5NjEsOCBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRhdGVSYW5nZUZvclNl
bGVjdGlvbihtX2ZyYW1lKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9u
KG1fZG9jdW1lbnQpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nICYmIGNh
bmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIHBsYWlu
VGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAKQEAgLTM5NzcsNyArMzk3MSw3
IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogICAg
IAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3Qo
KSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1
cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwg
ZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogfQogCkBAIC00MDQ0LDcg
KzQwMzgsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rp
b25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKICAgICBO
b2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JT
ZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUp
OwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkKICAgICAgICAg
ICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDg1LDcgKzQwNzksNyBAQCBGb250QXR0
cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4dExpc3RzID0gZWRpdGFi
bGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRMaXN0cyA9IGVkaXRh
YmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0QWxp
Z24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBAIC00MTExLDcgKzQxMDUs
NyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8gdHlwaW5nU3R5bGUg
PSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSk7CisgICAgYXV0
byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS50eXBpbmdT
dHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsK
ICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwogICAgICAg
ICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTQxOTksMTIgKzQxOTMs
OCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygpCiAgICAg
Zm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJZGVudGlmaWVycykKICAg
ICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlm
aWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwotICAgIGlm
ICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAoYXV0byYgaWRlbnRpZmll
ciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAgICAgIGlmIChhdXRvIGF0
dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZpZXIoaWRlbnRpZmllcikp
CisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50LmF0dGFjaG1lbnRGb3JJ
ZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50KCktPmRpZEluc2VydEF0
dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2htZW50LT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciksIGF0dGFjaG1lbnQtPmhh
c0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTQyMjcsNyArNDIxNyw3IEBAIHZvaWQgRWRpdG9yOjppbnNlcnRBdHRh
Y2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8dWludDY0X3Q+JiYgZmls
CiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1
bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0cnVlOwogCkBAIC00
MjQ2LDcgKzQyMzYsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4
dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29sIEVkaXRvcjo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZp
ZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVybiBXZWJDb3JlOjp1bmlm
aWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIFZlY3RvcjxT
dHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjYyLDEzICs0MjUyLDcgQEAgdm9pZCBFZGl0b3I6OmFw
cGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRp
dmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpCiB7CiAg
ICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1vZGVFbmFibGVkOwotICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1fb3ZlcndyaXRl
TW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVudCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuICptX2ZyYW1lLmRv
Y3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTaG91bGRTaG93QmxvY2tD
dXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9y
OjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQzMjEsOSArNDMwNSw5IEBAIGNvbnN0IEZv
bnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25z
dAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAgIGlmICghbV9mcmFtZS5z
ZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
aXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgYXV0byog
c3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAv
LyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0
aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVU
b1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwogICAgICAgICBp
ZiAoc3R5bGUpIHsKQEAgLTQzMzUsMTEgKzQzMTksMTEgQEAgY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiAgICAgICAgIHJl
dHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFk
anVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0g
YWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQzNzEsNyArNDM1NSw3IEBAIFJlZlB0
cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omluc2VydEVkaXRhYmxlSW1hZ2UoKQogCiBib29s
IEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMoKSBjb25zdAogewotICAg
IGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
YXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZp
ZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGFkOWVkYTI2MThjOWE4ODBi
ZWNiYjFjZTRkNjhiYjU5Yjg5YzIwYzAuLmZmYTc3ZDBlNTQ4ZTdjZTc3ZGNkNDdiYjBlNjFjMTBh
ODQ3N2YwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgog
I2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5j
bHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTksMTMgKzEyMCwxMyBAQCBlbnVtIGNsYXNzIFRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4X3QgewogCiBjbGFzcyBUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVj
dGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZpc2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxs
b3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiA9IHsgfSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3VtZW50JiwgT3B0aW9uYWw8
VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxvcHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB+VGVtcG9yYXJ5U2VsZWN0
aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZyYW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxE
b2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlczsK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTM3LDcgKzEzOCw3IEBAIHByaXZhdGU6CiBj
bGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSB7CiBwdWJsaWM6CiAgICAgSWdub3Jl
U2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUmIGZyYW1lKQotICAgICAgICA6IG1fc2VsZWN0
aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQsIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAgICAgOiBtX3NlbGVjdGlvbkNoYW5nZSgqZnJh
bWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Okln
bm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewogICAgIH0KIApAQCAtMTUwLDcgKzE1MSw3IEBA
IHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihGcmFtZSYpOworICAgIGV4cGxpY2l0IEVkaXRv
cihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsKIAogICAgIGVudW0gY2xhc3MgUGFzdGVPcHRp
b24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQ29t
bWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBXRUJDT1JFX0VYUE9SVCBDb21tYW5kKCk7Ci0g
ICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29tbWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENv
bW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBEb2N1bWVudCYpOwogCiAgICAgICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciA9IFN0cmluZygp
LCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVsbHB0cikgY29uc3Q7CiAgICAgICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjb25zdDsKQEAg
LTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgRWRp
dG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQgeyBudWxscHRyIH07CiAgICAgICAgIEVkaXRv
ckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1
bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwogICAgIH07CiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpOyAvLyBD
b21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcuCkBAIC01NjcsNyAr
NTY5LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVGV4dFBsYWNl
aG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQmKTsKIAogcHJpdmF0ZToKLSAgICBEb2N1bWVu
dCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29sIGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29u
c3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7
CkBAIC02MTgsNyArNjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsK
ICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1fbGFzdEVkaXRDb21tYW5kOwogICAg
IFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0
aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA5
ZGJhNzA2OWFkMTQyOGNkYzNiOTBmYjZjMDQ3MWZhYTEwZmI4YzQ0Li5iZDUxODBlYjQwMGVhNzky
MTUxYjZmNzk4YjYwZWNiOGNmZmRhZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHAKQEAgLTExMDksNiArMTEwOSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTdXBl
cnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2Us
CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0aE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CisgICAgUmVmUHRyPERvY3Vt
ZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50KCkpOwogICAgIFJlZjxGcmFtZT4gcHJvdGVj
dG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrID0gZnJhbWUuZWRp
dG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMTgzNiwxMiArMTgzNywxMiBAQCBzdGF0
aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBpbnRlcm5hbENvbW1hbmQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29t
bWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZywgbV9mcmFtZSk7
CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFu
ZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3VtZW50KTsKIH0KIAogRWRpdG9yOjpDb21tYW5k
IEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5k
U291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4gQ29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29t
bWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOworICAgIHJldHVybiBDb21tYW5kKGludGVybmFs
Q29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwgbV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRp
dG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVudU9yS2V5QmluZGluZyhjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lKQpAQCAtMTg1MywxMiArMTg1NCwxMyBAQCBFZGl0b3I6OkNvbW1hbmQ6OkNv
bW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50
ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRnJhbWUm
IGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29t
bWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIERvY3VtZW50JiBkb2N1
bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5kKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQot
ICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1lIDogbnVsbHB0cikKKyAgICAsIG1fZG9jdW1l
bnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxwdHIpCisgICAgLCBtX2ZyYW1lKGNvbW1hbmQg
PyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikKIHsKLSAgICBBU1NFUlQoY29tbWFuZCB8fCAh
bV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQgfHwgIW1fZG9jdW1lbnQpOwogfQogCiBib29s
IEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQq
IHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4NjgsOSArMTg3MCw5IEBAIGJvb2wgRWRpdG9y
OjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dl
cmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBkb2N1bWVudCA9IG1f
ZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICE9IGRvY3VtZW50
KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkgIT0gbV9mcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29tbWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJp
Z2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1ldGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1MDcyZmY1MWMzYzkwMWI3ODUyNDUz
ZmJmYTk3YjM1OS4uMDc5YmJjZGQ1NzBjM2ZkNTQ1ZDJhNmMwNTA2ODlkM2VhY2ZhZmY3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5
LDEzIEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJvbGxlcjo6ZWRpdGFibGVFbGVtZW50UmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKEZyYW1lKiBm
cmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVj
dGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuICFmcmFtZSB8fCBmcmFtZS0+
ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwo
KTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRl
clNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKIH0KIAotRnJhbWVTZWxlY3Rpb246OkZyYW1lU2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitGcmFtZVNlbGVjdGlv
bjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChk
b2N1bWVudCkKICAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3Rl
ckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhUX0NBUkVUKQpAQCAtMTU2LDcgKzE1Niw3IEBA
IEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2Fi
c0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAsIG1fY2FyZXRQYWludCh0cnVlKQogICAgICwg
bV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2ZvY3VzZWQoZnJhbWUg
JiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1fZm9jdXNlZChkb2N1bWVudC5mcmFtZSgpICYm
IGRvY3VtZW50LnBhZ2UoKSAmJiBkb2N1bWVudC5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRGcmFtZSgpID09IGRvY3VtZW50LmZyYW1lKCkpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9j
a0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAg
ICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFs
c2UpCkBAIC0xNjUsMTQgKzE2NSwyNCBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24o
RnJhbWUqIGZyYW1lKQogICAgICwgbV9jYXJldEJsaW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAg
aWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlm
IChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKKyAgICAKKyAgICBib29sIGFj
dGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsKKyAgICBpZiAoYWN0aXZlQW5k
Rm9jdXNlZCkKKyAgICAgICAgc2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKKyNpZiBVU0UoVUlLSVRf
RURJVElORykKKyAgICAvLyBDYXJldCBibGlua2luZyAoYmxpbmtzIHwgZG9lcyBub3QgYmxpbmsp
CisgICAgc2V0Q2FyZXRWaXNpYmxlKGFjdGl2ZUFuZEZvY3VzZWQpOworI2Vsc2UKKyAgICBzZXRD
YXJldFZpc2liaWxpdHkoYWN0aXZlQW5kRm9jdXNlZCA/IFZpc2libGUgOiBIaWRkZW4pOworI2Vu
ZGlmCiB9CiAKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JE
b2N1bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBt
X3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvblJv
b3QgPyBzZWxlY3Rpb25Sb290IDogbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCk7CisgICAgcmV0dXJuIHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogbV9kb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkLCBD
dXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduKQpAQCAtMjg0LDcgKzI5NCw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBwYXNzCiAgICAgRW5kUG9pbnRzQWRqdXN0bWVudE1vZGUgZW5kcG9pbnRzQWRqdXN0
bWVudE1vZGUpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBwYXNzZWRO
ZXdTZWxlY3Rpb247Ci0gICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGly
ZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwo
KTsKKyAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNl
bGVjdGlvbihtX2RvY3VtZW50KSB8fCBuZXdTZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOwogCiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGJhc2UgPSBtX29yaWdpbmFsQmFzZS5pc05vdE51bGwoKSA/IG1f
b3JpZ2luYWxCYXNlIDogbmV3U2VsZWN0aW9uLnZpc2libGVCYXNlKCk7CiAgICAgVmlzaWJsZVBv
c2l0aW9uIG5ld0Jhc2UgPSBiYXNlOwpAQCAtMzIyLDEwICszMzIsMTAgQEAgYm9vbCBGcmFtZVNl
bGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNp
YmxlU2VsZWN0aW8KICAgICBib29sIHNob3VsZENsZWFyVHlwaW5nU3R5bGUgPSBvcHRpb25zLmNv
bnRhaW5zKENsZWFyVHlwaW5nU3R5bGUpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3Rpb24gPSBuZXdTZWxlY3Rpb25Qb3NzaWJseVdpdGhvdXREaXJlY3Rpb247Ci0gICAgaWYgKHNo
b3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91
bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbmV3
U2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUpIHsK
KyAgICBpZiAoIW1fZG9jdW1lbnQuZnJhbWUoKSkgewogICAgICAgICBtX3NlbGVjdGlvbiA9IG5l
d1NlbGVjdGlvbjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTMzNCw3ICszNDQs
NyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBl
YXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIC8vIGlmIGRvY3VtZW50LT5mcmFtZSgp
ID09IG1fZnJhbWUgd2UgY2FuIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AKICAgICBpZiAoRG9j
dW1lbnQqIG5ld1NlbGVjdGlvbkRvY3VtZW50ID0gbmV3U2VsZWN0aW9uLmJhc2UoKS5kb2N1bWVu
dCgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8RnJhbWU+IG5ld1NlbGVjdGlvbkZyYW1lID0gbmV3
U2VsZWN0aW9uRG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rp
b25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9IG1fZnJhbWUtPmRv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25GcmFtZSAhPSBtX2RvY3Vt
ZW50LmZyYW1lKCkgJiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gJm1fZG9jdW1lbnQpIHsKICAg
ICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25GcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KG5ld1NlbGVjdGlvbiwgb3B0aW9ucywgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSwgYWxpZ24s
IGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZHVy
aW5nIHRoZSBhYm92ZSBzZXQgc2VsZWN0aW9uLCB0aGlzIEZyYW1lU2VsZWN0aW9uIGhhcyBiZWVu
IG1vZGlmaWVkIGJ5CiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJl
bnRJZkZ1bGx5U2VsZWN0ZWQsIGJ1dCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgbm8gbG9uZ2VyIHZh
bGlkIHNpbmNlCkBAIC0zNDksNyArMzU5LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAg
ICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CiAKICAgICBpZiAoY2xvc2VUeXBpbmcpCi0g
ICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZnJhbWUpOworICAgICAgICBUeXBp
bmdDb21tYW5kOjpjbG9zZVR5cGluZyhtX2RvY3VtZW50KTsKIAogICAgIGlmIChzaG91bGRDbGVh
clR5cGluZ1N0eWxlKQogICAgICAgICBjbGVhclR5cGluZ1N0eWxlKCk7CkBAIC0zNTcsNyArMzY3
LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBw
ZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNl
bGVjdGlvbiA9IG1fc2VsZWN0aW9uOwogICAgIGJvb2wgZGlkTXV0YXRlU2VsZWN0aW9uID0gb2xk
U2VsZWN0aW9uICE9IG5ld1NlbGVjdGlvbjsKICAgICBpZiAoZGlkTXV0YXRlU2VsZWN0aW9uKQot
ICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CisgICAgICAg
IG1fZG9jdW1lbnQuZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5nZSgpOwogCiAgICAgbV9zZWxl
Y3Rpb24gPSBuZXdTZWxlY3Rpb247CiAKQEAgLTM3MSwzNSArMzgxLDMxIEBAIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlz
aWJsZVNlbGVjdGlvCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKIAogICAgIGlmICgh
bmV3U2VsZWN0aW9uLmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERvTm90U2V0Rm9jdXMpKSB7Ci0g
ICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9j
dXNlZEVsZW1lbnQoKTsKKyAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2RvY3Vt
ZW50LmZvY3VzZWRFbGVtZW50KCk7CiAgICAgICAgIHNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQo
KTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbmVlZGVkLgotICAgICAgICBpZiAo
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBvbGRGb2N1c2VkRWxlbWVu
dCkKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQo
KTsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKSAhPSBvbGRGb2N1c2Vk
RWxlbWVudCkKKyAgICAgICAgICAgIG1fZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwog
ICAgIH0KIAogICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0
aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgogICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkgdGhl
IHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCiAgICAgbV94UG9z
Rm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdh
dGlvbigpOwogICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7
Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxl
Y3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMpOwogICAgIC8vIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi9zZWxlY3Rpb24tYXBpLyNzZWxlY3Rpb25jaGFuZ2UtZXZlbnQKICAgICAvLyBGSVhN
RTogU3BlYyBkb2Vzbid0IHNwZWNpZnkgd2hpY2ggdGFzayBzb3VyY2UgdG8gdXNlLgotICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChUYXNrU291cmNlOjpV
c2VySW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5n
ZUV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsK
KyAgICBtX2RvY3VtZW50LnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChUYXNrU291cmNlOjpVc2Vy
SW50ZXJhY3Rpb24sIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2
ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8U2V0U2VsZWN0aW9u
T3B0aW9uPiBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCBpbnRlbnQsIEN1cnNvckFs
aWduT25TY3JvbGwgYWxpZ24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKLSAgICBS
ZWZQdHI8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4g
cHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIGlmICghc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShzZWxlY3Rpb24sIG9wdGlvbnMsIGFsaWduLCBncmFudWxhcml0eSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG9w
dGlvbnMgJiBSZXZlYWxTZWxlY3Rpb25VcFRvTWFpbkZyYW1lKQogICAgICAgICBtX3NlbGVjdGlv
blJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lOwog
ICAgIGVsc2UgaWYgKG9wdGlvbnMgJiBSZXZlYWxTZWxlY3Rpb24pCkBAIC00MTEsMjcgKzQxNywy
NyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8UwogICAgIG1fc2VsZWN0aW9uUmV2ZWFsSW50ZW50
ID0gaW50ZW50OwogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7CiAKLSAgICBp
ZiAoZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQorICAgIGlmIChtX2RvY3VtZW50
Lmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBtX2RvY3VtZW50LnZpZXcoKTsKICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+
bGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0UGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICB1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oaW50ZW50KTsKIAogICAgIGlmIChvcHRpb25zICYg
SXNVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2ZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKSkKKyAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQu
ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgICAgICBjbGllbnQtPmRpZEVuZFVzZXJUcmlnZ2Vy
ZWRTZWxlY3Rpb25DaGFuZ2VzKCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVTZWxl
Y3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZShGcmFtZSYgZnJhbWUpCitzdGF0aWMgdm9pZCB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQp
CiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAjZWxzZQotICAgIGZyYW1lLmRvY3VtZW50
KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBkb2N1bWVudC51cGRhdGVTdHlsZUlmTmVl
ZGVkKCk7CiAjZW5kaWYKIH0KIApAQCAtNDQxLDcgKzQ0Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlIHJl
dmVhbE1vCiAgICAgaWYgKHJldmVhbE1vZGUgPT0gUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGU6
OkZvcmNlZCkKICAgICAgICAgbV9zZWxlY3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFs
TW9kZTo6UmV2ZWFsOwogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7Ci0gICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBp
ZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpKQogICAgICAgICB2
aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogfQogCkBAIC00NTcsNyArNDYzLDcg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFY
VGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKICAgICBpZiAobV9zZWxlY3Rpb25SZXZlYWxNb2Rl
ICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90UmV2ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFs
aWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2
aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQorICAgICAg
ICBpZiAobV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZENlbnRlckFsaWduV2hl
blNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKICAgICAgICAgICAgIGFsaWdubWVudCA9IG1fYWx3YXlz
QWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24gPyBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVl
ZGVkOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWdu
Q3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvcEFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKQEAg
LTQ3MSw3ICs0NzcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxl
Y3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlRGF0YURldGVjdG9yc0ZvclNlbGVjdGlvbigpCiB7CiAjaWYgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBt
X2ZyYW1lLT5lZGl0b3IoKS5zY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOworICAg
IG1fZG9jdW1lbnQuZWRpdG9yKCkuc2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKTsK
ICNlbmRpZgogfQogCkBAIC03MDMsNyArNzA5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2Vs
ZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3QKICAgICAv
LyBiYXNlL2V4dGVudCBhbHdheXMgcG9pbnQgdG8gdGhlIHNhbWUgbm9kZXMgYXMgc3RhcnQvZW5k
LCBidXQgd2hpY2ggcG9pbnRzCiAgICAgLy8gdG8gd2hpY2ggZGVwZW5kcyBvbiB0aGUgdmFsdWUg
b2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhpcyBjYW4gYmUgY2hhbmdlZAogICAgIC8vIHRvIGp1c3Qg
cmV0dXJuIG1fc2VsLmV4dGVudCgpLgotICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBv
aW50KCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdh
eXNFeHRlbmRTZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIG1f
c2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkgOiBtX3Nl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKIAogICAgIHJldHVybiBpc0dldFN0YXJ0ID8gbV9zZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCk7CkBAIC03MjMs
NyArNzI5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0
aW9uRm9yUGxhdGZvcm0oY29uc3QgVmlzaWJsZVBvc2l0aW8KIHsKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBv
c2l0aW9uKTsKIAotICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKKyAgICBpZiAobV9kb2N1bWVu
dC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpKSB7
CiAgICAgICAgIC8vIEluIG9yZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3
ZSBhZHZhbmNlIG9uZQogICAgICAgICAvLyB3b3JkIGZ1cnRoZXIgYW5kIHRoZW4gbW92ZSBvbmUg
d29yZCBiYWNrLiBHaXZlbiB0aGUKICAgICAgICAgLy8gc2VtYW50aWNzIG9mIHByZXZpb3VzV29y
ZFBvc2l0aW9uKCkgdGhpcyB3aWxsIHB1dCB1cyBhdCB0aGUKQEAgLTg1NSw3ICs4NjEsNyBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYgogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5yaWdodCh0cnVl
LCByZWFjaGVkQm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxh
cml0eTogewotICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2ZyYW1l
ICYmIG1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmlu
Z1JpZ2h0KCk7CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9j
dW1lbnQuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVjdGlvbi5l
eHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IHJpZ2h0V29y
ZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAg
ICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMDc2LDcgKzEwODIsNyBAQCBWaXNpYmxl
UG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBibwogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2Vs
ZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5sZWZ0KHRydWUsIHJlYWNo
ZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7
Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9m
cmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudC5l
ZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgp
LCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAgICAgICBp
ZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTMxNyw3ICsxMzIzLDcgQEAgc3RhdGljIEFYVGV4dFNl
bGVjdGlvbiB0ZXh0U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KFNlbGVjdGlv
bkRpcmVjdGkKIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGlmICh1c2VyVHJpZ2dlcmVk
ID09IFVzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNl
bGVjdGlvbjsKKyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbihtX2Rv
Y3VtZW50KTsKICAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxl
Y3Rpb24pOwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0aW9uLm1vZGlmeShhbHRlciwgZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgTm90VXNlclRyaWdnZXJlZCk7CiAKQEAgLTEzNjIsNyArMTM2OCw3
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVz
ZXJUcmlnZ2VyZWQgJiYgbV9mcmFtZSAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpKSB7CisgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVzZXJU
cmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFu
Z2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Cb3VuZGFyeSwgdGV4dFNlbGVjdGlv
bldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0eShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSB9KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTM3MCwxMiArMTM3NiwxMyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIFRleAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKG1fZnJh
bWUpKQorICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChtX2RvY3VtZW50LmZyYW1l
KCkpKSB7CiAgICAgICAgIGlmICghd2FzUmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUg
JiYgcG9zaXRpb24gPT0gb3JpZ2luYWxTdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIAotICAgIGlmIChtX2ZyYW1lICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgaWYgKEFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAg
ICAgICAgICAgIGNhY2hlLT5zZXRUZXh0U2VsZWN0aW9uSW50ZW50KHRleHRTZWxlY3Rpb25JbnRl
bnQoYWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKTsKICAgICB9CiAKQEAgLTEzODQsNyAr
MTM5MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgLy8gTm90ZTogdGhlIFNUQVJU
IHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3Vs
ZCBiZQogICAgIC8vIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gdHlwZSBpZiB0aGVyZSB3ZXJlIG5v
IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiBzZXQuCiAgICAgTGF5b3V0VW5pdCB4ID0g
bGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFNUQVJUKTsKLSAg
ICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1f
c2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxl
Y3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICBz
d2l0Y2ggKGFsdGVyKSB7CiAgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKQEAgLTEzOTQsNyArMTQw
MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAgICAgICAgaWYgKCFtX3NlbGVjdGlv
bi5pc0NhcmV0KCkKICAgICAgICAgICAgICYmIChncmFudWxhcml0eSA9PSBXb3JkR3JhbnVsYXJp
dHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoR3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkg
PT0gTGluZUdyYW51bGFyaXR5KQotICAgICAgICAgICAgJiYgbV9mcmFtZSAmJiAhbV9mcmFtZS0+
ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jv
c3NDYXJldCgpKSB7CisgICAgICAgICAgICAmJiAhbV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlv
cigpLnNob3VsZEV4dGVuZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKICAg
ICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgc2VsZWN0aW9uIGdvIGFjcm9zcyB0aGUgYmFzZSBw
b3NpdGlvbiBkaXJlY3RseS4gTmVlZGVkIHRvIG1hdGNoIG1hYwogICAgICAgICAgICAgLy8gYmVo
YXZpb3Igd2hlbiwgZm9yIGluc3RhbmNlLCB3b3JkLXNlbGVjdGluZyBiYWNrd2FyZHMgc3RhcnRp
bmcgd2l0aCB0aGUgY2FyZXQgaW4KICAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgYSB3b3Jk
IGFuZCB0aGVuIHdvcmQtc2VsZWN0aW5nIGZvcndhcmQsIGxlYXZpbmcgdGhlIGNhcmV0IGluIHRo
ZQpAQCAtMTQwNyw3ICsxNDE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRl
cmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAogICAgICAg
ICAvLyBTdGFuZGFyZCBNYWMgYmVoYXZpb3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3VuZGFyeSBp
cyBncm93IHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gbGVhdmluZyB0aGUKICAgICAgICAgLy8g
YmFzZSBpbiBwbGFjZSBhbmQgbW92aW5nIHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0Vmlldy4K
LSAgICAgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNo
b3VsZEFsd2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2Vs
ZWN0aW9uLmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCisgICAgICAgIGlm
ICghbV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dTZWxlY3Rp
b25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCAh
aXNCb3VuZGFyeShncmFudWxhcml0eSkpCiAgICAgICAgICAgICBzZXRFeHRlbnQocG9zaXRpb24s
IHVzZXJUcmlnZ2VyZWQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFRleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKQEAgLTE0NDYs
NyArMTQ1Myw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRl
ciwgdW5zaWduZWQgdmVydGljYWxEaXN0YW5jZSwgVmVydGljCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAg
RnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbjsKKyAgICAgICAgRnJhbWVTZWxlY3Rp
b24gdHJpYWxGcmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICAgICAgdHJpYWxGcmFtZVNl
bGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOwogICAgICAgICB0cmlhbEZyYW1lU2Vs
ZWN0aW9uLm1vZGlmeShhbHRlciwgdmVydGljYWxEaXN0YW5jZSwgZGlyZWN0aW9uLCBOb3RVc2Vy
VHJpZ2dlcmVkKTsKIApAQCAtMTUxNyw3ICsxNTI0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0
aWMKICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBtX2dy
YW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVjdGlvbi5zZXRJ
c0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUp
IHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGly
ZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkg
fHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTE1NjcsNyArMTU3NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyKCkKICAgICBzZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6
cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92
ZWRGcm9tRnJhbWUoKQogewogICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0
eTsKIApAQCAtMTU3NSw3ICsxNTgyLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZv
ckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAjZW5kaWYKIAot
ICAgIGlmIChhdXRvKiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYg
KGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKIAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRh
dGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJhY3RlckdyYW51bGFyaXR5
KTsKQEAgLTE2NTUsOSArMTY2Miw3IEBAIHN0YXRpYyBib29sIGlzTm9uT3JwaGFuZWRDYXJldChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIEludFJlY3QgRnJhbWVTZWxlY3Rp
b246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4ZWQpCiB7Ci0gICAgaWYgKCFt
X2ZyYW1lKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHVwZGF0ZVNlbGVjdGlvbkJ5
VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKKyAgICB1cGRhdGVTZWxlY3Rpb25CeVVw
ZGF0aW5nTGF5b3V0T3JTdHlsZShtX2RvY3VtZW50KTsKICAgICByZWNvbXB1dGVDYXJldFJlY3Qo
KTsKICAgICBpZiAoaW5zaWRlRml4ZWQpCiAgICAgICAgICppbnNpZGVGaXhlZCA9IG1fY2FyZXRJ
bnNpZGVQb3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwxMCArMTY4MCw3IEBAIGJvb2wgRnJhbWVTZWxl
Y3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgaWYgKCFzaG91bGRVcGRhdGVDYXJldFJl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiB2ID0gbV9kb2N1bWVudC52aWV3KCk7CiAgICAgaWYg
KCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OTAsNyArMTY5Miw3IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgICAgICBjbGVhckNh
cmV0UmVjdCgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlU3RhcnQgPSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgICAgIGlm
ICh1cGRhdGVDYXJldFJlY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSwgdmlzaWJsZVN0YXJ0KSkgewor
ICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdCgmbV9kb2N1bWVudCwgdmlzaWJsZVN0YXJ0
KSkgewogICAgICAgICAgICAgICAgIGNhcmV0Tm9kZSA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgICAgICAgICAgbV9hYnNDYXJldEJvdW5k
c0RpcnR5ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE3MTUsNyArMTcxNyw3IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKSB7CisgICAgaWYgKFJlbmRlclZpZXcq
IHZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKSkgewogICAgICAgICBib29sIHByZXZpb3Vz
T3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSA9IG1fc2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUgJiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+
aXNDb250ZW50RWRpdGFibGUoKSk7CiAgICAgICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmll
dywgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlKSkgewogICAgICAgICAg
ICAgaWYgKG1fcHJldmlvdXNDYXJldE5vZGUpCkBAIC0xODkzLDEzICsxODk1LDkgQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAog
ICAgIC8vIFRyZWF0IGEgY29sbGFwc2VkIHNlbGVjdGlvbiBsaWtlIG5vIHNlbGVjdGlvbi4KICAg
ICBpZiAoIWlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGF1dG8q
IGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2lu
dCk7Ci0gICAgZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKKyAg
ICBtX2RvY3VtZW50LmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKICAgICBOb2Rl
KiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYgKCFpbm5lck5vZGUgfHwg
IWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkyNiwx
MCArMTkyNCwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnQpIGNvbnN0CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1l
bnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiB7CiAgICAgLy8gRmluZCB0aGUgcGFyZW50IGZy
YW1lOyBpZiB0aGVyZSBpcyBub25lLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBG
cmFtZSogcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLnBhcmVudCgpOworICAgIEZyYW1lKiBwYXJl
bnQgPSBtX2RvY3VtZW50LmZyYW1lKCktPnRyZWUoKS5wYXJlbnQoKTsKICAgICBpZiAoIXBhcmVu
dCkKICAgICAgICAgcmV0dXJuOwotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Cisg
ICAgUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQucGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xOTQyLDcgKzE5NDAsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEdldCB0byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAob3IgZXZlbiA8b2Jq
ZWN0PikgZWxlbWVudCBpbiB0aGUgcGFyZW50IGZyYW1lLgotICAgIEVsZW1lbnQqIG93bmVyRWxl
bWVudCA9IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgIEVsZW1lbnQqIG93bmVyRWxlbWVu
dCA9IG1fZG9jdW1lbnQub3duZXJFbGVtZW50KCk7CiAgICAgaWYgKCFvd25lckVsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICBDb250YWluZXJOb2RlKiBvd25lckVsZW1lbnRQYXJlbnQgPSBv
d25lckVsZW1lbnQtPnBhcmVudE5vZGUoKTsKQEAgLTE5NjgsOSArMTk2Niw3IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkK
IAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKIHsKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAgRWxlbWVudCogZm9jdXNlZEVsZW1l
bnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxl
bWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoaXM8SFRNTFNlbGVj
dEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCYg
c2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqZm9jdXNlZEVsZW1l
bnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxlY3RBbGwoKSkgewpAQCAtMjAw
MCw4ICsxOTk2LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICAgICAg
aWYgKHJvb3QpCiAgICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHJvb3QtPnNoYWRvd0hv
c3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByb290ID0gZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBkb2N1bWVudC0+
Ym9keU9yRnJhbWVzZXQoKTsKKyAgICAgICAgICAgIHJvb3QgPSBtX2RvY3VtZW50LmRvY3VtZW50
RWxlbWVudCgpOworICAgICAgICAgICAgc2VsZWN0U3RhcnRUYXJnZXQgPSBtX2RvY3VtZW50LmJv
ZHlPckZyYW1lc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFyb290KQpAQCAtMjA0
MSw4ICsyMDM3LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5n
ZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgU2hvdWxkQ2wKICAgICAgICAgc2VsZWN0aW9u
T3B0aW9ucy5hZGQoQ2xvc2VUeXBpbmcpOwogCiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNl
clRyaWdnZXJlZCkgewotICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9u
OwotCisgICAgICAgIEZyYW1lU2VsZWN0aW9uIHRyaWFsRnJhbWVTZWxlY3Rpb24obV9kb2N1bWVu
dCk7CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
biwgc2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICAgICAgaWYgKCFzaG91bGRDaGFuZ2VTZWxlY3Rp
b24odHJpYWxGcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKSkpCkBAIC0yMDU4LDkgKzIwNTMsOCBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFm
ZmluaXR5IGFmZmluaXR5LCBTaG91bGRDbAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9y
QWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFjdGl2ZUFuZEZvY3VzZWQgPSBpc0Zv
Y3VzZWRBbmRBY3RpdmUoKTsKLSAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50KCptX2ZyYW1lLT5k
b2N1bWVudCgpKTsKIAotICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAg
bV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICNpZiBVU0UoVUlLSVRfRURJVElO
RykKICAgICAvLyBDYXJldCBibGlua2luZyAoYmxpbmtzIHwgZG9lcyBub3QgYmxpbmspCkBAIC0y
MDcxLDcgKzIwNjUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0
ZUNoYW5nZWQoKQogICAgIC8vIEJlY2F1c2UgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBhbmQKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcigpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1
cGRhdGUgcGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCi0gICAgaWYgKFJlbmRlclZp
ZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2
aWV3ID0gbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigp
LnJlcGFpbnQoKTsKIAogICAgIC8vIENhcmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4K
QEAgLTIwODIsNyArMjA3Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2
ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBTdHlsZTo6UmVzb2x2ZXI6OmNoZWNrT25l
U2VsZWN0b3IoKSBhbmQKICAgICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkgY2hlY2sgaWYg
dGhlIGZyYW1lIGlzIGFjdGl2ZSwgd2UgaGF2ZSB0bwogICAgIC8vIHVwZGF0ZSBzdHlsZSBhbmQg
dGhlbWUgc3RhdGUgdGhhdCBkZXBlbmRlZCBvbiB0aG9zZS4KLSAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpKSB7CisgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSBtX2RvY3VtZW50LmZvY3VzZWRFbGVtZW50KCkpIHsKICAgICAgICAgZWxlbWVudC0+
aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQpAQCAtMjEwNywxMyArMjEwMSwx
MyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkKGJvb2wgZmxhZykKIAogYm9vbCBG
cmFtZVNlbGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9mb2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50
LnBhZ2UoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUo
KTsKIH0KIAogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotaW5saW5lIHN0YXRpYyBib29sIHNob3Vs
ZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZChGcmFtZSogZnJhbWUpCitpbmxpbmUgc3Rh
dGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKERvY3VtZW50KiBk
b2N1bWVudCkKIHsKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgp
ICYmIGZyYW1lLT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0Qmxp
bmtpbmcoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgp
ICYmIGRvY3VtZW50LT5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0
QmxpbmtpbmcoKTsKIH0KICNlbmRpZgogCkBAIC0yMTMyLDEyICsyMTI2LDEyIEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIGJvb2wgcGFpbnRCbG9ja0N1cnNv
ciA9IG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yICYmIG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiAh
aXNMb2dpY2FsRW5kT2ZMaW5lKG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgYm9vbCBj
YXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkID0gcmVjb21wdXRlQ2FyZXRSZWN0KCk7CiAKLSAgICBi
b29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFi
bGVkKCk7CisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0aW5ncygpLmNh
cmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgYm9vbCBzaG91bGRCbGluayA9ICFwYWludEJsb2Nr
Q3Vyc29yICYmIGNhcmV0SXNWaXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKIAogICAgIC8vIElmIHRoZSBj
YXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGltZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBh
CiAgICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhlIG5ldyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRS
ZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hvdWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5n
RHVlVG9UeXBpbmdDb21tYW5kKG1fZnJhbWUpKQorICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JD
bGVhcmVkIHx8ICFzaG91bGRCbGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0Nv
bW1hbmQoJm1fZG9jdW1lbnQpKQogICAgICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAK
ICAgICAvLyBTdGFydCBibGlua2luZyB3aXRoIGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRv
IHJlc3RhcnQgaWYgd2UncmUKQEAgLTIxNTMsNyArMjE0Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIH0KICNlbmRpZgogCi0gICAgUmVuZGVyVmlldyog
dmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgIFJlbmRlclZpZXcqIHZpZXcg
PSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjIwMiw4ICsyMTk2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRW
aXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQg
aGVyZS4KLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGlu
Z0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKG1fZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCiAgICAg
aWYgKG1fY2FyZXRQYWludCkgewpAQCAtMjI0NywxMCArMjI0MCwxMCBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBpZiAoaXNOb25lKCkgfHwg
IWlzRm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGNhcmV0QnJvd3Npbmcg
PSBtX2ZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgYm9vbCBj
YXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVk
KCk7CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hv
ciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAg
ICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVu
dChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQucGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2RvY3VtZW50LmZyYW1l
KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2MiwxNiAr
MjI1NSwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVk
KCkKICAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUu
IFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwogICAgICAgICAgICAg
Ly8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0
aGlzIHRpbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkgJiYg
IWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLT5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJhbWUp
OworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQucGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2RvY3VtZW50LmZyYW1lKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdl
dC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwogICAgICAgICB9Ci0gICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOworICAgICAgICBtX2Rv
Y3VtZW50LnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogICAgIH0KIAogICAgIGlmIChjYXJl
dEJyb3dzaW5nKQotICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNl
dEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKKyAgICAgICAgbV9kb2N1bWVudC5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2Rv
Y3VtZW50LmZyYW1lKCkpOwogfQogCiB2b2lkIERyYWdDYXJldENvbnRyb2xsZXI6OnBhaW50RHJh
Z0NhcmV0KEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KSBjb25zdApAQCAtMjI5
NywxOSArMjI5MCwxNiBAQCBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gRnJhbWVTZWxl
Y3Rpb246OmNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0CiBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91
bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25z
dAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlv
bkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+
c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERl
bGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1
cm4gbV9kb2N1bWVudC5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxl
Q29udGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7Ci0KLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5
b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKG1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LnJlbmRl
clZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKQEAgLTIzMjUsMTQgKzIzMTUsMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnQKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0UmVjdEhl
aWdodCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAg
IGlmICghbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFt
ZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0Rv
Y3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9kb2N1
bWVudC52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9T
RG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hl
cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQg
PT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAgYXV0
byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVj
dCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0LDcg
KzIzNTQsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBz
dGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkgY29u
c3QKIHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCBy
ZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVudCog
c3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1l
bnQqIHN0YXJ0ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQp
CiAgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYg
KCFzdGFydCkKQEAgLTI0MDcsOCArMjM5Nyw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVh
bFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAg
ICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4
ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NP
cmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVB
cHBlYXJhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlS
ZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAgICAg
ICAgIGlmIChtX2RvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVu
dC5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3Jv
bGxpbmdGcmFtZSgqbV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogI2Vsc2UKQEAgLTI0MjYsMjcgKzI0MTYsMjYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uRnJvbU5vbmUoKQogICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBp
ZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50aXJl
IFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVu
dCkuCiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUt
PnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgpIHx8
ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAgICBi
b29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0Vu
YWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC5oYXNFZGl0YWJsZVN0
eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAgaWYg
KCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3Np
dGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFk
b2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghKGlzTm9uZSgpIHx8IGlzU3Rh
cnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVj
dGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50Lmhhc0VkaXRhYmxlU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50LT5i
b2R5KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LmJvZHkoKSkKICAgICAgICAg
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0
CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9u
Q2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgpLT5z
ZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZh
bHNlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZh
bHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgpCkBA
IC0yNDY0LDcgKzI0NTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93Qmxv
Y2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRTaG93
QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5kb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBtX2Rv
Y3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgdXBk
YXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ3MSwxMyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCkKIAogdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogewotICAgIFJl
ZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJv
dGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5
bGVDaGFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFm
dGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZnJh
bWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3VtZW50
LmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRvclN0YXRlQWZ0
ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNV
cGRhdGUoKTsKQEAgLTI3MjMsNyArMjcxMiw3IEBAIFJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rp
b246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiAK
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
ZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7CisgICAgUmVm
UHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICBy
ZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRpb24pOwogICAgIHJlc3VsdFJhbmdlLT5z
ZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5ndGgpOwogICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklO
SVRZKTsKQEAgLTI3MzcsNyArMjcyNiw3IEBAIFZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxlY3Rp
b246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzCiAgICAg
ICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKCk7CiAKICAgICBBU1NFUlQoc2VsZWN0aW9uLmlz
Q2FyZXRPclJhbmdlKCkpOwotICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOworICAg
IEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgIGZyYW1lU2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogCiAgICAgUG9zaXRpb24gc3RhcnRQb3NC
ZWZvcmVFeHBhbnNpb24oc2VsZWN0aW9uLnN0YXJ0KCkpOwpAQCAtMjg4Niw3ICsyODc1LDcgQEAg
UmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVj
dGlvbihFQWx0ZXJhdGlvbiBhbHRlcmEKICAgICBpZiAoIWFtb3VudCkKICAgICAgICAgcmV0dXJu
IHRvTm9ybWFsaXplZFJhbmdlKCk7CiAKLSAgICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlv
bjsKKyAgICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICBm
cmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOwogICAgIFNlbGVjdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gRGlyZWN0aW9uRm9yd2FyZCA6IERpcmVj
dGlvbkJhY2t3YXJkOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGFtb3VudCk7IGkrKykK
QEAgLTI5MDQsNyArMjg5Myw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldENhcmV0Qmxpbmtz
KGJvb2wgY2FyZXRCbGlua3MpCiAgICAgaWYgKG1fY2FyZXRCbGlua3MgPT0gY2FyZXRCbGlua3Mp
CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsgCisgICAg
bV9kb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICBp
ZiAobV9jYXJldFBhaW50KSB7CiAgICAgICAgIG1fY2FyZXRQYWludCA9IGZhbHNlOyAKICAgICAg
ICAgaW52YWxpZGF0ZUNhcmV0UmVjdCgpOyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uaAppbmRleCBlNmE3MDhiMDU0ZjU5YjMwYmZiNTdlZmRmZTMyY2FlZDE2NWEwNTA4Li45
Y2Q5YzQ1MmY3YjM1ZGQ0OGZkNTQ4NDM2MjgzODE4OWRkNjdiZGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gb3B0aW9uczsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNp
dCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBl
eHBsaWNpdCBGcmFtZVNlbGVjdGlvbihEb2N1bWVudCYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
RWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAg
ICAgIApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBF
VXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2VsZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwotICAgIHZv
aWQgcHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbUZy
YW1lKCk7CiAKICAgICB2b2lkIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dCgpOwogICAgIHZv
aWQgc2NoZWR1bGVBcHBlYXJhbmNlVXBkYXRlQWZ0ZXJTdHlsZUNoYW5nZSgpOwpAQCAtMzM4LDgg
KzMzOCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAot
ICAgIEZyYW1lKiBtX2ZyYW1lOwotCisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CisgICAgCiAg
ICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKIAogICAgIFZp
c2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA3MzA3NmRlMWI3OWI5ZjA5
ZmY5ZjMxMjdhODNlNWIwODNkNTc4NTkzLi42NjAxZGI4ZmNiNGUzN2Y0YWRiMjBhZjE3ODJlMjIx
MjRjZjEzYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50
b1RleHROb2RlQ29tbWFuZC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChSZWY8VGV4dD4mJiBub2RlLCB1bnNp
Z25lZAogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAg
IGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGZyYW1lKCkuc2V0dGluZ3MoKS5wYXNzd29yZEVj
aG9FbmFibGVkKCk7CisgICAgYm9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0gZG9jdW1lbnQoKS5z
ZXR0aW5ncygpLnBhc3N3b3JkRWNob0VuYWJsZWQoKTsKICAgICBpZiAocGFzc3dvcmRFY2hvRW5h
YmxlZCkKICAgICAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5l
QnJlYWtDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZC5jcHAKaW5kZXggMTc2ZDhmMDg5YWY1MDI2NmRkODk4ZmE5Nzc0Zjk3NDFkYjM5OWRm
Yi4uMjczNTVlNjZmYjg5ZDU1NDJjZDZhOWJlYTg4ZTJjMjYyZjUwNzgzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCkBAIC0xNDIs
NyArMTQyLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKIAogICAg
IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KIAotICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS50
eXBpbmdTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9j
dW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOwogCiAgICAgaWYgKHR5cGluZ1N0eWxl
ICYmICF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEFwcGx5IHRoZSB0eXBp
bmcgc3R5bGUgdG8gdGhlIGluc2VydGVkIGxpbmUgYnJlYWssIHNvIHRoYXQgaWYgdGhlIHNlbGVj
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAppbmRl
eCBlOTEzMWY2ZmJmMzJkODYzMDUwYWExZWYyMDhlNWI0ZjQ0MDQ5YjZhLi4xYmIwZDA1Mjg3MGM0
NTEzNjk5NDcxOWQwZWMwNjViM2VkMDk2ZDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgSW5zZXJ0VGV4
dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBhbnl0aGluZyBvdGhlciB0aGFuIE5vU2Vs
ZWN0aW9uLiBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGEgcmVhbCBlbmRpbmdT
ZWxlY3Rpb24sIHNvIGJhaWwgb3V0LgogICAgICAgICBpZiAoZW5kaW5nU2VsZWN0aW9uKCkuaXNO
b25lKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChmcmFtZSgpLmVkaXRv
cigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgeworICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQo
KS5lZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKHBlcmZv
cm1PdmVyd3JpdGUobV90ZXh0LCBtX3NlbGVjdEluc2VydGVkVGV4dCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6
OmRvQXBwbHkoKQogICAgIHNldEVuZGluZ1NlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uKHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KLSAgICBpZiAoUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlw
aW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpIHsKKyAgICBpZiAo
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpIHsKICAgICAgICAgdHlwaW5nU3R5bGUtPnByZXBhcmVUb0FwcGx5QXQo
ZW5kUG9zaXRpb24sIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVXcml0aW5nRGlyZWN0aW9uKTsKICAg
ICAgICAgaWYgKCF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgYXBwbHlTdHls
ZSh0eXBpbmdTdHlsZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5kZXggNTQ2MGI3NWNhYmQyM2RkNTVh
ZDkzOWQwMTRiNTgyOTJlZDlkNGVhMi4uNjhlMDgzNTJhNGMxMGQ4NjhiZjFlNDY5YmY3NWM5NTZk
MTNmMDU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VX
aXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJh
bmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFJlcGxhY2VSYW5n
ZVdpdGhUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX3JhbmdlVG9CZVJlcGxhY2Vk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCisgICAgaWYgKCFkb2N1bWVudCgpLnNlbGVjdGlv
bigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoIWNoYXJhY3RlckNvdW50KCptX3JhbmdlVG9CZVJlcGxhY2VkKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXgg
NTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRhMjFjOTkxNzAyZjY1ZTc4Ny4uNDk2OTkxOWQ5MWExMTQ5
NWMyOThjOTJhNzY2NzI2YjkyZTE2OTUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTExODEsNyArMTE4MSw3IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAogICAgIC8vIEZJWE1F
OiBDYW4gdGhpcyB3YWl0IHVudGlsIGFmdGVyIHRoZSBvcGVyYXRpb24gaGFzIGJlZW4gcGVyZm9y
bWVkPyAgVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCiAgICAgLy8gYW55IHdvcmsgcGVyZm9ybWVk
IGFmdGVyIHRoaXMgdGhhdCBxdWVyaWVzIG9yIHVzZXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBm
cmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICBkb2N1bWVudCgpLnNl
bGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdGhl
IGRlc3RpbmF0aW9uIHRvIGVuZCB1cCBpbnNpZGUgbm9kZXMgdGhhdCB3ZXJlbid0IHNlbGVjdGVk
LiAgVG8gYXZvaWQgdGhhdCwgd2UgbW92ZSB0aGUKICAgICAvLyBwb3NpdGlvbiBmb3J3YXJkIHdp
dGhvdXQgY2hhbmdpbmcgdGhlIHZpc2libGUgcG9zaXRpb24gc28gd2UncmUgc3RpbGwgYXQgdGhl
IHNhbWUgdmlzaWJsZSBsb2NhdGlvbiwgYnV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
ZXRTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBjMDY1YzAyY2ExM2ZkMjUxNzBkNmIyMWIxZjg5
OGU5YmE3OWJlNjM4Li4wZGQyNmE4MWU5MGI2Nzg3NGMzMzVjZWYxMjEwN2UyMTRiZGZkODZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAg
LTQwLDcgKzQwLDcgQEAgU2V0U2VsZWN0aW9uQ29tbWFuZDo6U2V0U2VsZWN0aW9uQ29tbWFuZChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGkKIAogdm9pZCBTZXRTZWxlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0g
ZnJhbWUoKS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9j
dW1lbnQoKS5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rpb24uc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQpICYmICFtX3NlbGVjdGlvblRvU2V0LmlzTm9uZU9yT3Jw
aGFuZWQoKSkgewogICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9T
ZXQsIG1fb3B0aW9ucyk7CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSgpCiAKIHZvaWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUoKS5zZWxlY3Rpb24oKTsKKyAg
ICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKTsKIAog
ICAgIGlmIChzZWxlY3Rpb24uc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9u
KCkpICYmICFzdGFydGluZ1NlbGVjdGlvbigpLmlzTm9uZU9yT3JwaGFuZWQoKSkKICAgICAgICAg
c2VsZWN0aW9uLnNldFNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX29wdGlvbnMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCmluZGV4IDE3MmQ4NWZkNDY2ZjI4
MzY2YjU1ODA2ZDA5YmY2MDFmZTFjNWY4MTkuLjUwYzE3NTNmMTZkOTY4ZmE5NmJjMmJjNmI2MTFi
NDk4ZmYyNDk0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKQEAg
LTk4LDggKzk4LDggQEAgdm9pZCBTcGVsbENoZWNrUmVxdWVzdDo6cmVxdWVzdGVyRGVzdHJveWVk
KCkKICAgICBtX2NoZWNrZXIgPSBudWxscHRyOwogfQogCi1TcGVsbENoZWNrZXI6OlNwZWxsQ2hl
Y2tlcihGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorU3BlbGxDaGVja2VyOjpT
cGVsbENoZWNrZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKICAgICAsIG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KCp0aGlzLCAmU3BlbGxDaGVj
a2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCkKIHsKIH0KQEAgLTExNCw3ICsx
MTQsNyBAQCBTcGVsbENoZWNrZXI6On5TcGVsbENoZWNrZXIoKQogCiBUZXh0Q2hlY2tlckNsaWVu
dCogU3BlbGxDaGVja2VyOjpjbGllbnQoKSBjb25zdAogewotICAgIFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7CiAgICAgaWYg
KCFwYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcGFnZS0+ZWRpdG9y
Q2xpZW50KCkudGV4dENoZWNrZXIoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFNwZWxsQ2hl
Y2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKQogCiBib29sIFNwZWxsQ2hl
Y2tlcjo6aXNBc3luY2hyb25vdXNFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFt
ZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgcmV0
dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpOwogfQogCiBib29sIFNwZWxsQ2hlY2tlcjo6Y2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5n
ZSYgcmFuZ2UpIGNvbnN0CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omlu
dm9rZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCiAgICAgaWYgKCFj
bGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSBXVEZN
b3ZlKHJlcXVlc3QpOwotICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygqbV9w
cm9jZXNzaW5nUmVxdWVzdCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAg
Y2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogdm9pZCBTcGVsbENoZWNr
ZXI6OmVucXVldWVSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQpAQCAt
MTk5LDcgKzE5OSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVjayhUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBWZWN0CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbmRSZXBsYWNlRm9yKCptX3Byb2Nl
c3NpbmdSZXF1ZXN0LCByZXN1bHRzKTsKKyAgICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbmRS
ZXBsYWNlRm9yKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCByZXN1bHRzKTsKIAogICAgIGlmIChtX2xh
c3RQcm9jZXNzZWRJZGVudGlmaWVyLnRvVUludDY0KCkgPCBpZGVudGlmaWVyLnRvVUludDY0KCkp
CiAgICAgICAgIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXIgPSBpZGVudGlmaWVyOwpAQCAtMjE5
LDcgKzIxOSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1Y2NlZWQoVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uCiAgICAgICAgIGlmIChyZXF1ZXN0
RGF0YS5jaGVja2luZ1R5cGVzKCkuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikp
CiAgICAgICAgICAgICBtYXJrZXJUeXBlcy5hZGQoRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwog
ICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+
Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CisgICAgICAgICAgICBtX2RvY3VtZW50Lm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2Uo
KSwgbWFya2VyVHlwZXMpOwogICAgIH0KICAgICBkaWRDaGVjayhpZGVudGlmaWVyLCByZXN1bHRz
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCmluZGV4IGMzNmFlMmMzMGZl
OWZiNWJlZjY3MDczMjIyZWM0M2U0NGFkN2YyYzAuLmQxOWZjZmRlMzg0MTViMDExNWNmOGNkYWE0
OGE4NjYwOGE4MTE5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxD
aGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaApAQCAt
NzYsNyArNzYsNyBAQCBjbGFzcyBTcGVsbENoZWNrZXIgewogcHVibGljOgogICAgIGZyaWVuZCBj
bGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKIAotICAgIGV4cGxpY2l0IFNwZWxsQ2hlY2tlcihGcmFt
ZSYpOworICAgIGV4cGxpY2l0IFNwZWxsQ2hlY2tlcihEb2N1bWVudCYpOwogICAgIH5TcGVsbENo
ZWNrZXIoKTsKIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXNFbmFibGVkKCkgY29uc3Q7CkBAIC0x
MDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENoZWNrQ2FuY2VsKFRleHRDaGVj
a2luZ1JlcXVlc3RJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZENoZWNrKFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwogCi0g
ICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAgICAgVGV4dENo
ZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0UmVxdWVzdElkZW50aWZpZXI7CiAgICAgVGV4
dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllcjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5jcHAKaW5kZXggOTllOGYxNTg4OGVhZTkzZjNkNjhlMDRkODllZmY1NzU2NDZiYzM3OS4uNTky
MDg0NTM1MWVhNDAzYjhjODczNDNhZGE3NmI3NDM2M2RmMDVkNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCkBAIC02NSw3
ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkb1VuYXBwbHkoKSBvdmVycmlkZQogICAgIHsK
ICAgICAgICAgaWYgKCFtX2hhc0JlZW5VbmRvbmUpIHsKLSAgICAgICAgICAgIGZyYW1lKCkuZWRp
dG9yKCkudW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fY29y
cmVjdGVkLCBtX2NvcnJlY3Rpb24pOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS51
bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3JyZWN0ZWQs
IG1fY29ycmVjdGlvbik7CiAgICAgICAgICAgICBtX2hhc0JlZW5VbmRvbmUgPSB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX2NvcnJlY3RlZC5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5n
ZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQpKQorICAgIGlmICghZG9jdW1lbnQo
KS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub0JlQ29ycmVj
dGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU2V0
U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCwgRnJhbWVT
ZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6
U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcAppbmRleCA1YTZjNTNjMDM4MzcwY2ZiMGEzOGFiMGRhNGY1NjE4ZmJhYmIyNWFl
Li43MmFjNmJhMTVhNDIxNDBmNTM1MDE3MjQyM2JjYWI1M2M1Njc4ZmFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTE2MywxMyArMTYzLDEwIEBAIFR5cGlu
Z0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBFVHlwaW5nQ29tbWFu
ZCBjb21tYW5kVHlwZSwgY29uCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9u
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBl
IGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgp
OwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkpCisgICAgaWYgKCFkb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1h
bmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAg
ICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGlu
Z0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRp
b24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKGNvbXBv
c2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50
U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcpOwpAQCAtMTgzLDgg
KzE4MCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50JiBk
b2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRl
bGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRv
Y3VtZW50LmZyYW1lKCkpKSB7Ci0gICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVu
dEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudC5m
cmFtZSgpKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29t
bWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7
CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0
aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVudCk7CiAgICAgICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxl
dGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBl
KFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2lu
Zyk7CkBAIC0xOTksMTAgKzE5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJl
c3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyCiB2b2lkIFR5
cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwg
T3B0aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgLy8g
RklYTUU6IEZvcndhcmQgZGVsZXRlIGluIFRleHRFZGl0IGFwcGVhcnMgdG8gb3BlbiBhbmQgY2xv
c2UgYSBuZXcgdHlwaW5nIGNvbW1hbmQuCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJh
bWUoKTsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpIHsKLSAg
ICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgewotICAgICAgICAgICAg
dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5n
Q29tbWFuZC5nZXQoKSwgZnJhbWUpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+
IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
Zyhkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAg
ICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMg
JiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRD
b21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlw
aW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZl
bnRTcGVsbENoZWNraW5nKTsKQEAgLTIxNCwxMCArMjEwLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0
aW9ucywKICAgICBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEZvcndhcmREZWxldGVL
ZXksIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMsIGdyYW51bGFyaXR5KS0+YXBwbHkoKTsKIH0KIAot
dm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIEZyYW1lKiBmcmFtZSkKK3Zv
aWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNl
bGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5kLCBEb2N1bWVudCYgZG9jdW1lbnQp
CiB7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxl
Y3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CiAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gdHlwaW5nQ29tbWFuZC0+ZW5kaW5nU2VsZWN0
aW9uKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI3LDMxICsyMjIsMjUgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9u
KFR5cGluZ0NvbW1hbmQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21w
b3NpdGlvblR5cGUgY29tcG9zaXRpb24pCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQu
ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkK
LSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOworICAgICAgICBkb2N1bWVudC5lZGl0
b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXds
aW5lKHRleHRbMF0pKTsKICAgICAKLSAgICBpbnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9wdGlvbnMsIGNvbXBvc2l0aW9uKTsKKyAgICBp
bnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IG5l
ZWQgdG8gdGFrZSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uIEl0IHNob3VsZCBiZSBpZGVudGljYWwg
dG8gRnJhbWVTZWxlY3Rpb24ncyBjdXJyZW50IHNlbGVjdGlvbi4KIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBPcHRpb25zIG9wdGlv
bnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQogewotICAgIFJlZlB0cjxG
cmFtZT4gZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAg
ICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQgKHRleHQgJXMpIiwgdGV4
dC51dGY4KCkuZGF0YSgpKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAog
ICAgIFN0cmluZyBuZXdUZXh0ID0gZGlzcGF0Y2hCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCh0ZXh0
LCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGNvbXBvc2l0aW9uVHlwZSA9PSBUZXh0Q29tcG9zaXRp
b25QZW5kaW5nKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgc2Vs
ZWN0aW9uIGFwcHJvcHJpYXRlbHkgaWYgd2UgYXJlIHVzaW5nIGEgc2VsZWN0aW9uCiAgICAgLy8g
dGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzZWxlY3Rpb24uICBJbiB0aGUgZnV0
dXJlLCB3ZSBzaG91bGQgY2hhbmdlIEVkaXRDb21tYW5kCiAgICAgLy8gdG8gZGVhbCB3aXRoIGN1
c3RvbSBzZWxlY3Rpb25zIGluIGEgZ2VuZXJhbCB3YXkgdGhhdCBjYW4gYmUgdXNlZCBieSBhbGwg
b2YgdGhlIGNvbW1hbmRzLgotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGlu
Z0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkp
IHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFz
dFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAg
aWYgKGxhc3RUeXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKSAhPSBzZWxlY3Rpb25Gb3JJ
bnNlcnRpb24pIHsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTdGFydGluZ1Nl
bGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNlcnRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0Nv
bW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNlcnRpb24pOwpAQCAtMjY2
LDEyICsyNTUsMTIgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMKICAgICB9CiAKICAgICBhdXRv
IGNtZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgSW5zZXJ0VGV4dCwgbmV3VGV4
dCwgb3B0aW9ucywgY29tcG9zaXRpb25UeXBlKTsKLSAgICBhcHBseVRleHRJbnNlcnRpb25Db21t
YW5kKGZyYW1lLmdldCgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvckluc2VydGlvbiwgY3VycmVu
dFNlbGVjdGlvbik7CisgICAgYXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZChkb2N1bWVudC5mcmFt
ZSgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvckluc2VydGlvbiwgY3VycmVudFNlbGVjdGlvbik7
CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKERvY3VtZW50JiBkb2N1
bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
bGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFz
dFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRv
Y3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlv
bihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRp
b25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAtMjg0LDcgKzI3Myw3IEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKERvY3VtZW50JiBkb2N1bWVudCwg
T3B0aW9ucyBvcHRpb25zKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNl
cGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgaWYgKFJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0
cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZT
dGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5zZXRJc0F1dG9jb21wbGV0aW9uKGZhbHNlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQt
PnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPmluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudEFuZE5v
dGlmeUFjY2Vzc2liaWxpdHkoKTsKQEAgLTI5Niw3ICsyODUsNyBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYgZG9j
dW1lbnQpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERv
Y3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAgIGlmIChSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxP
cGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNB
dXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7CiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAtMzA3
LDkgKzI5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zCiAgICAgVHlwaW5nQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IsIGVtcHR5U3RyaW5nKCks
IG9wdGlvbnMpLT5hcHBseSgpOwogfQogCi1SZWZQdHI8VHlwaW5nQ29tbWFuZD4gVHlwaW5nQ29t
bWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhGcmFtZSYgZnJhbWUp
CitSZWZQdHI8VHlwaW5nQ29tbWFuZD4gVHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgUmVmUHRyPENv
bXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS5lZGl0b3IoKS5sYXN0
RWRpdENvbW1hbmQoKTsKKyAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0
Q29tbWFuZCA9IGRvY3VtZW50LmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGlmICgh
bGFzdEVkaXRDb21tYW5kIHx8ICFsYXN0RWRpdENvbW1hbmQtPmlzVHlwaW5nQ29tbWFuZCgpIHx8
ICFzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kLmdldCgpKS0+aXNP
cGVuRm9yTW9yZVR5cGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzIxLDE2
ICszMTAsMTYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjpzaG91bGREZWZlcldpbGxBcHBseUNvbW1h
bmRVbnRpbEFkZGluZ1R5cGluZ0NvbW1hbmQoKSBjb25zdAogICAgIHJldHVybiAhbV9pc0hhbmRs
aW5nSW5pdGlhbFR5cGluZ0NvbW1hbmQgfHwgZWRpdEFjdGlvbklzRGVsZXRlQnlUeXBpbmcoZWRp
dGluZ0FjdGlvbigpKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhGcmFt
ZSogZnJhbWUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKERvY3VtZW50JiBkb2N1
bWVudCkKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5k
ID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKQorICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkKICAgICAgICAgbGFzdFR5cGluZ0Nv
bW1hbmQtPmNsb3NlVHlwaW5nKCk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9p
ZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9u
SWZPcGVuRm9yTW9yZVR5cGluZyhGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG5ld1NlbGVjdGlvbikKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pCiB7Ci0gICAgaWYgKFJlZlB0
cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZT
dGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFu
ZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlw
aW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0RW5kaW5nU2Vs
ZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRp
bmdTZWxlY3Rpb25Pbkxhc3RJbnNlcnRDb21tYW5kKG5ld1NlbGVjdGlvbik7CiAgICAgfQpAQCAt
NDM2LDE5ICs0MjUsMTcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQoKQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5n
Q29tbWFuZCBjb21tYW5kVHlwZSkKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgp
OwotCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNB
dXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUuZWRp
dG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFt
ZS5lZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAg
JiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQor
ICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljUXVvdGVT
dWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNB
dXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVk
aXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAh
ZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZnJhbWUuZWRpdG9yKCkuaXNIYW5kbGluZ0Fj
Y2VwdGVkQ2FuZGlkYXRlKCkpCisgICAgaWYgKGRvY3VtZW50KCkuZWRpdG9yKCkuaXNIYW5kbGlu
Z0FjY2VwdGVkQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFm
cmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgIGlm
ICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAvLyBUYWtlIGEgbG9vayBhdCB0aGUgc2Vs
ZWN0aW9uIHRoYXQgcmVzdWx0cyBhZnRlciB0eXBpbmcgYW5kIGRldGVybWluZSB3aGV0aGVyIHdl
IG5lZWQgdG8gc3BlbGxjaGVjay4gCkBAIC00NjYsOSArNDUzLDkgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5
cGUpCiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2aW91c1dvcmQ7CiAgICAgICAgICAg
ICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQg
fHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0TGluZUJyZWFrIHx8IGNvbW1h
bmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvciB8fCBjb21t
YW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3Rl
ZENvbnRlbnQpKQogICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJldmlvdXNXb3JkID0gcGxhaW5U
ZXh0KCpyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBmcmFtZS5lZGl0b3Io
KS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigp
LCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGRvY3VtZW50
KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdT
ZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCkKLSAgICAg
ICAgICAgIGZyYW1lLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOworICAg
ICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIo
KTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShjb21tYW5kVHlwZSk7CiAgICAgICAgIC8v
IElmIHRoaXMgYnVnIGdldHMgZml4ZWQsIHRoaXMgUExBVEZPUk0oSU9TX0ZBTUlMWSkgY29kZSBj
b3VsZCBiZSByZW1vdmVkOgpAQCAtNDgzLDcgKzQ3MCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDEgPSBzdGFydE9mV29yZChwcmV2aW91cywgc3RhcnRX
b3JkU2lkZSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMiA9IHN0YXJ0T2ZXb3JkKHN0YXJ0
LCBzdGFydFdvcmRTaWRlKTsKICAgICAgICAgaWYgKHAxICE9IHAyKQotICAgICAgICAgICAgZnJh
bWUuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdT
ZWxlY3Rpb24oKSwgZmFsc2UpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigpLCBmYWxz
ZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgfQogfQpAQCAtNDk3LDI2
ICs0ODQsMjYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFu
ZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEcKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICBpZiAoIXJhbmdlIHx8IGlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSkKLSAg
ICAgICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFwcGx5RWRpdGluZygqdGhpcywgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOworICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CiAKLSAgICByZXR1cm4g
ZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB7IDEsIFN0YXRpY1Jhbmdl
OjpjcmVhdGUoKnJhbmdlKSB9KTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxs
QXBwbHlFZGl0aW5nKCp0aGlzLCB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoKnJhbmdlKSB9KTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRVR5cGlu
Z0NvbW1hbmQgY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOworICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKGRvY3VtZW50KCku
ZnJhbWUoKSk7CiAKICAgICB1cGRhdGVQcmVzZXJ2ZXNUeXBpbmdTdHlsZShjb21tYW5kVHlwZUZv
ckFkZGVkVHlwaW5nKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGZyYW1lLmVkaXRvcigp
LmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFwcGxpZWRF
ZGl0aW5nKCp0aGlzKTsKICAgICAvLyBTaW5jZSB0aGUgc3BlbGxjaGVja2luZyBjb2RlIG1heSBh
bHNvIHBlcmZvcm0gY29ycmVjdGlvbnMgYW5kIG90aGVyIHJlcGxhY2VtZW50cywgaXQgc2hvdWxk
IGhhcHBlbiBhZnRlciB0aGUgdHlwaW5nIGNoYW5nZXMuCiAgICAgaWYgKCFtX3Nob3VsZFByZXZl
bnRTcGVsbENoZWNraW5nKQogICAgICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29t
bWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAjZWxzZQogICAgIC8vIFRoZSBvbGQgc3BlbGxjaGVj
a2luZyBjb2RlIHJlcXVpcmVzIHRoYXQgY2hlY2tpbmcgYmUgZG9uZSBmaXJzdCwgdG8gcHJldmVu
dCBpc3N1ZXMgbGlrZSB0aGF0IGluIDY4NjQwNzIsIHdoZXJlIDxkb2Vzbid0PiBpcyBtYXJrZWQg
YXMgbWlzc3BlbGxlZC4KICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5
cGVGb3JBZGRlZFR5cGluZyk7Ci0gICAgZnJhbWUuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRo
aXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogI2Vu
ZGlmCiB9CiAKQEAgLTUzNSw5ICs1MjIsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZQogewog
ICAgIExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZCAlcCBpbnNlcnRUZXh0QW5kTm90aWZ5QWNj
ZXNzaWJpbGl0eSAodGV4dCAlcywgc2VsZWN0SW5zZXJ0ZWRUZXh0ICVkKSIsIHRoaXMsIHRleHQu
dXRmOCgpLmRhdGEoKSwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKIAotICAgIEFjY2Vzc2liaWxpdHlS
ZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFRleHQodGV4dCwgc2VsZWN0SW5z
ZXJ0ZWRUZXh0KTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5
cGluZywgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFj
ZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGlu
Z0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsIHRleHQsIGRvY3VtZW50KCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVs
ZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNTUw
LDkgKzUzNyw2IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXds
aW5lcyhjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0CiAgICAgICAgIG1fY29tcG9zaXRp
b25UeXBlID09IFRleHRDb21wb3NpdGlvbk5vbmUgPyBJbnNlcnRUZXh0Q29tbWFuZDo6UmViYWxh
bmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMgOiBJbnNlcnRUZXh0Q29tbWFuZDo6UmVi
YWxhbmNlQWxsV2hpdGVzcGFjZXMsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFRleHQpOwogCiAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RGTW92ZShjb21tYW5kKSwgZW5kaW5nU2VsZWN0
aW9uKCkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJh
bWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2Vy
dFRleHQpOwogfQogCkBAIC01NjUsMTcgKzU0OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0TGluZUJyZWFrKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWtBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChm
cmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFj
ZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
ICAgICBpbnNlcnRMaW5lQnJlYWsoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRl
eHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIs
IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCkt
PnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsK
IH0KIApAQCAtNTg4LDE3ICs1NjksMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IoKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQo
KSwgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uOjpUeXBpbmdJbnNlcnRQYXJhZ3JhcGgpKTsKLQot
ICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvckFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNl
ZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
IEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOwotICAg
IHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCku
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFt
ZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRleHQucG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
LCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJl
cGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC02MTUsMTcgKzU5MywxNCBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVu
dCgpCiAgICAgfQogICAgICAgICAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShCcmVha0Js
b2NrcXVvdGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotCi0gICAgRnJhbWUmIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAg
dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNz
aWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9j
dW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhU
ZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4i
LCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21wb3NpdGlvbigp
LT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7
CiB9CiAKQEAgLTY1MiwxMCArNjI3LDkgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjptYWtlRWRpdGFi
bGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZFRvS2lsbFJpbmcpCiB7Ci0g
ICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFtZSgp
KTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87
CkBAIC02NzQsNyArNjQ4LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKIAogICAgICAgICBt
X3NtYXJ0RGVsZXRlID0gZmFsc2U7CiAKLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9u
OworICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb24oZG9jdW1lbnQoKSk7CiAgICAgICAg
IHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgICAgICBzZWxl
Y3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25C
YWNrd2FyZCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZyAm
JiBzZWxlY3Rpb24uaXNDYXJldCgpICYmIGdyYW51bGFyaXR5ICE9IENoYXJhY3RlckdyYW51bGFy
aXR5KQpAQCAtNzQ4LDIwICs3MjIsMjAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQ
cmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIGJ1ZzoK
ICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ2NTM3NTU+IFVJS2l0IHRleHQgd2lkZ2V0cyBz
aG91bGQgdXNlIFdlYktpdCBlZGl0aW5nIEFQSSB0byBtYW5pcHVsYXRlIHRleHQKLSAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICAg
ICAgY2xvc2VUeXBpbmcoJmZyYW1lKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBjbG9zZVR5cGluZyhkb2N1
bWVudCgpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChz
ZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERl
bGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCisgICAgaWYgKHNlbGVjdGlvblRvRGVs
ZXRlLmlzQ2FyZXQoKSB8fCAhZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxl
Y3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYg
KCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0s
IHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5n
ZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCks
IEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGRv
Y3VtZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
UHJlcGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRp
b24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRv
RGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSwgYm9vbCBzaG91bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRl
S2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9L
aWxsUmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1
bWVudCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbkFmdGVyVW5kbzsKQEAgLTc5OCw3ICs3NzEsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBz
aAogICAgICAgICAvLyBIYW5kbGUgZGVsZXRlIGF0IGJlZ2lubmluZy1vZi1ibG9jayBjYXNlLgog
ICAgICAgICAvLyBEbyBub3RoaW5nIGluIHRoZSBjYXNlIHRoYXQgdGhlIGNhcmV0IGlzIGF0IHRo
ZSBzdGFydCBvZiBhCiAgICAgICAgIC8vIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvciBhdCB0aGUg
c3RhcnQgb2YgYSBkb2N1bWVudC4KLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwor
ICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb24oZG9jdW1lbnQoKSk7CiAgICAgICAgIHNl
bGVjdGlvbi5zZXRTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgICAgICBzZWxlY3Rp
b24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3
YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nICYmIHNl
bGVjdGlvbi5pc0NhcmV0KCkgJiYgZ3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
CkBAIC04NTUsMTMgKzgyOCwxMyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVL
ZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3Vs
ZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBj
bG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQo
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50
KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVj
dGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRl
U2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUu
aXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlv
bihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghd2lsbEFk
ZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwg
c2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKQEAgLTg3MSw3ICs4NDQsNyBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm9vbCBzaAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25G
b3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxs
UmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rp
b25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5z
ZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRk
UmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8g
bWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rp
b24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRl
U2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nr
c0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRGb3JTcGVjaWFs
RWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5YjZiNTU0Yjlm
Yjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlvbnMpOwogICAg
IHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYsIE9wdGlvbnMp
OwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVu
dChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1lKik7CisgICAg
c3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxl
Y3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
OworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rp
b25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
OwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29s
IHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5Gb3JNb3JlVHlw
aW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5cGluZyA9IGZh
bHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQm
KTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBpbmdDb21tYW5k
KCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmluYWw7CiAgICAg
Ym9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7CiAKLSAgICBz
dGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9u
KFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlv
bklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCosIERvY3VtZW50
Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBpbmdDb21tYW5k
KTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kLCBU
ZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBSZWZQdHI8UmFu
Z2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNv
Y29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRkYjU2MTI5MmU3OTQyNzdiZmI3NmQ1OWUuLjkx
MGRlZWY3MDg0ZDFmZGM4ZTBmOWFlMDZlOTEzYTExYzc2M2YxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtODAsOCArODAsOCBAQCBzdGF0aWMg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0
dHJpYnV0ZWRTdHJpbmcgKgogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQo
KQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9j
YWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVl
OjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICByZXR1cm4gc2VyaWFsaXpl
UHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAor
ICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRh
cmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpObyk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpAQCAt
MTA3LDEwICsxMDcsMTAgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFG
b3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogdm9pZCBFZGl0b3I6
OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7Ci0g
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmlu
Z0Zyb21TZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21T
ZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAKICAgICBQYXN0
ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKKyAgICBj
b250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2RvY3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0
ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29w
eU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0g
YXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRGREZvcm1hdChh
dHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7CkBAIC0xMjUsMTAgKzEyNSwxMCBAQCB2b2lkIEVk
aXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkK
IAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJEYXRhJiBwYXN0
ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcg
PSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKIAogICAgIFBhc3RlYm9hcmRXcml0ZXJEYXRhOjpXZWJDb250ZW50IHdlYkNv
bnRlbnQ7Ci0gICAgd2ViQ29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgp
LT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOworICAgIHdlYkNvbnRlbnQuY29udGVu
dE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAg
ICB3ZWJDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUo
KTsKICAgICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25Jbldl
YkFyY2hpdmVGb3JtYXQoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRy
aWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJp
YnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEVkaXRvcjo6
d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRh
KQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZv
cm1hdCgpCiB7Ci0gICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJv
bVNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIGlmICghYXJj
aGl2ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpKTsKQEAgLTE3MSwx
MSArMTcxLDExIEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRX
aXRoSW1hZ2VBbHRUZXh0KCkKIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0
cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcsIE1haWxC
bG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKLSAgICBpZiAobV9m
cmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAgICAgICBpZiAo
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1fZnJhbWUsIGF0
dHJpYnV0ZWRTdHJpbmcpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBpZiAoYXV0byBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCptX2RvY3VtZW50LmZyYW1lKCks
IGF0dHJpYnV0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21l
bnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFz
ZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKICAgICAg
ICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0
YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQogLy8gT3IgcmVmYWN0b3Ig
c28gaXQgZG9lcyBub3QgZG8gdGhhdC4KIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6
OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYg
Y29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0g
ICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgY29udGV4dCwgYWxsb3dQbGFpblRl
eHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksIGNv
bnRleHQsIGFsbG93UGxhaW5UZXh0KTsKICAgICBwYXN0ZWJvYXJkLnJlYWQocmVhZGVyKTsKICAg
ICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0OwogICAg
IHJldHVybiBXVEZNb3ZlKHJlYWRlci5mcmFnbWVudCk7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9p
ZCBFZGl0b3I6OnRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbigpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIHN0cmluZ0Zyb21TZWxlY3Rpb24gPSBtX2ZyYW1lLmRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkpOwor
ICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+ZGlzcGxh
eVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSk7
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIHR5cGVz
LmFwcGVuZChTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKaW5kZXggNzA2ZTgyNjczZjA4MTMzMzczNWU1
ODcxMjc4YzhkNDUwZDBiNjliYy4uMWRhODFmNzE4ZDkyMzU4MjNiMDM4MWZlMmJiZGUxMTlkODI1
MDZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC05NCw3
ICs5NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBh
c3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ym9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgbV9mcmFt
ZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCks
IGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1Bs
YWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21l
bnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIEVkaXRv
cjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAg
ICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAgICBwYXN0ZWJvYXJk
Q29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAg
ICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2Zlcigp
OwotICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1
YWxBcHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxz
OjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5z
ZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJp
YWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAg
IHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBl
YXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZ
ZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5z
ZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJp
YWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogICAg
IHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQogCiBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYg
cGFzdGVib2FyZCwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNo
b3NlUGxhaW5UZXh0KQogewotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJk
RGF0YShwYXN0ZWJvYXJkLCBtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQ
bGFpblRleHQpOworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShw
YXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwg
Y2hvc2VQbGFpblRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggZjJhMmQ1MmFjNWFiZjRlNGYxMzExM2Nh
MjVkMWIyMGExNzM4ZmE2OS4uMWJmY2E1OTEzZDY0NjQxYzA4MmZlZjc2NWFiYTE5ZTkwOTBhZDE3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtODMsNyArODMs
NyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0Rp
cmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAgIC8vIElmIHRoZSB0ZXh0IGhhcyBsZWZ0
IG9yIHJpZ2h0IGFsaWdubWVudCwgZmxpcCBsZWZ0LT5yaWdodCBhbmQgcmlnaHQtPmxlZnQuIAog
ICAgIC8vIE90aGVyd2lzZSwgZG8gbm90aGluZy4KIAotICAgIGF1dG8gc2VsZWN0aW9uU3R5bGUg
PSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpz
dHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CiAgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCiAg
ICAgICAgICByZXR1cm47CiAKQEAgLTEyNywxNCArMTI3LDE0IEBAIHZvaWQgRWRpdG9yOjpzZXRU
ZXh0QWxpZ25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rp
b24gZGlyCiAgICAgaWYgKCFuZXdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRWxlbWVu
dCogZm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7
CisgICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LmZvY3VzZWRFbGVtZW50
KCk7CiAgICAgaWYgKGZvY3VzZWRFbGVtZW50ICYmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50Pigq
Zm9jdXNlZEVsZW1lbnQpIHx8IChpczxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQp
CiAgICAgICAgICYmIChkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQp
LmlzVGV4dEZpZWxkKCkKICAgICAgICAgICAgIHx8IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpmb2N1c2VkRWxlbWVudCkuaXNTZWFyY2hGaWVsZCgpKSkpKSB7CiAgICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gV3JpdGluZ0RpcmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuc2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKLSAgICAgICAg
bV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIG1fZG9j
dW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0eWxlcygp
CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZW1vdmVzIHN0eWxlcyB0aGF0IHRoZSB1c2VyIGNh
bm5vdCBtb2RpZnkgYnkgYXBwbHlpbmcgdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCiAgICAgCi0gICAg
YXV0byBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50
KCktPmJvZHlPckZyYW1lc2V0KCkpOworICAgIGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0
eWxlOjpjcmVhdGUobV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpKTsKICAgICBhdXRvIGRlZmF1
bHRTdHlsZSA9IGVkaXRpbmdTdHlsZS0+c3R5bGUoKS0+bXV0YWJsZUNvcHkoKTsKICAgICAKICAg
ICAvLyBUZXh0IHdpZGdldHMgaW1wbGVtZW50IGJhY2tncm91bmQgY29sb3IgdmlhIHRoZSBVSVZp
ZXcgcHJvcGVydHkuIFRoZWlyIGJvZHkgZWxlbWVudCB3aWxsIG5vdCBoYXZlIG9uZS4KQEAgLTIx
OSw3ICsyMTksNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJk
KiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiB7CiAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5UZXh0ID0gb3B0
aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwotICAgIFdlYkNvbnRl
bnRSZWFkZXIgcmVhZGVyKG1fZnJhbWUsICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOworICAgIFdl
YkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgYWxsb3dQ
bGFpblRleHQpOwogICAgIGludCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNsaWVudCgpLT5n
ZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVy
T2ZQYXN0ZWJvYXJkSXRlbXM7ICsraSkgewogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpKTsK
QEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0
ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAKIHZvaWQgRWRpdG9y
OjppbnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRp
b25QaHJhc2VzLCBpZCBtZXRhZGF0YSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKGRpY3RhdGlvblBocmFzZXMuaXNFbXB0eSgpKQpAQCAtMjYx
LDcgKzI2MSw3IEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxl
bWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgLy8gU29tZSBkYXkgd2Ug
Y291bGQgbWFrZSB0aGVtIFVuZG9hYmxlLCBhbmQgbGV0IGNhbGxlcnMgY2xlYXIgdGhlIFVuZG8g
c3RhY2sgZXhwbGljaXRseSBpZiB0aGV5IHdpc2guCiAgICAgY2xlYXJVbmRvUmVkb09wZXJhdGlv
bnMoKTsKIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICBlbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAK
QEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogCiAgICAgLy8gQXMgYSBzaWRl
IGVmZmVjdCB0aGlzIGZ1bmN0aW9uIHNldHMgYSBjYXJldCBzZWxlY3Rpb24gYWZ0ZXIgdGhlIGlu
c2VydGVkIGNvbnRlbnQuIE11Y2ggb2Ygd2hhdAogICAgIC8vIGZvbGxvd3MgaXMgbW9yZSBleHBl
bnNpdmUgaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24sIHNvIGNsZWFyIGl0IHNpbmNlIGl0J3MgZ29p
bmcgdG8gY2hhbmdlIGFueXdheS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyKCk7Cisg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgLy8gY2xlYXIgb3V0IGFs
bCBjdXJyZW50IGNoaWxkcmVuIG9mIGVsZW1lbnQKICAgICBlbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7CkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVt
ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKICAgICBzZWxlY3Rpb24u
c2V0QmFzZSh2aXNpYmxlUG9zKTsKICAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KHZpc2libGVQb3Mp
OwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogCiAgICAg
Y2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpAQCAtMzg5LDcgKzM4OSw3
IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRl
eHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAvLyBoYXZlIGEgc3RhbGUgc2VsZWN0aW9uLgogdm9pZCBF
ZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JN
b3JlVHlwaW5nKCkKIHsKLSAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRI
YXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZygmbV9mcmFtZSwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVk
aXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcobV9kb2N1bWVu
dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0Vk
aXRvckxpYldQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJX
UEUuY3BwCmluZGV4IDVkMTVhNjQ2MWM1NjliNjNhY2M2MTU3OTVlMzQ0NzcwOGE0ZDU1NzcuLjEy
ZmQ2YTQzZWEwNWEyYTBlNzJiNzRiYTcyZDk2Mjg2NDcwNWJhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcApAQCAtNjcsOCArNjcsOCBAQCB2
b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVi
b2FyZCkKIHsKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAg
ICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCk7
Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3Vh
bEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6
Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBtX2ZyYW1lLnNl
dHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlh
bGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CisgICAg
cGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVh
cmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olll
c0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNl
dHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlh
bGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiAgICAg
cGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKQEAgLTg0LDcgKzg0LDcg
QEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2Fy
ZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNo
b3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2ZyYW1lLCAqcmFu
Z2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQ
bGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFt
ZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0
KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFp
bnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBh
c3RpbmcoKmZyYWdtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpp
bmRleCAyOTE4MjQ2NWQ4Y2YyOTM5Y2IyMTYwMjQ5ZmVhMmFlMTFlYTE3YzdjLi45ODQxYzk0ZmFh
MjEzZmQwODJlNTgxMjBlMWEyYjc0ZmEzODY5OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9u
Pgogdm9pZCBFZGl0b3I6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKQogewogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJv
YXJkKCZwYXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBl
bHNlCiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsK
QEAgLTEzNywxNiArMTM3LDE2IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJv
YXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgQVNT
RVJUKG5vZGUpOwogCi0gICAgaWYgKCZub2RlLT5kb2N1bWVudCgpICE9IG1fZnJhbWUuZG9jdW1l
bnQoKSkKKyAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKSAhPSBtX2RvY3VtZW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKyAgICBSZWY8RG9j
dW1lbnQ+IHByb3RlY3RvcihtX2RvY3VtZW50KTsKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShub2RlLT5kb2N1bWVudCgpLCBQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25J
c0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJB
bmNob3IpKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHJhbmdlLmdldCgpKSwgRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFu
Z2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAKICAgICBQYXN0ZWJv
YXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwogCi0gICAgaWYgKCFtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICBpZiAo
IW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFi
bGUoKSkgewogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVib2Fy
ZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZv
aWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVtZW50LCBSZWZQdHI8SW1hZ2U+JiBpbWFnZSwg
Q2FjaGVkSW1hZ2UqJgogCiB2b2lkIEVkaXRvcjo6c2VsZWN0aW9uV2lsbENoYW5nZSgpCiB7Ci0g
ICAgaWYgKCFoYXNDb21wb3NpdGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBt
X2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghaGFzQ29tcG9zaXRpb24oKSB8
fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FuY2VsQ29tcG9zaXRpb24oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KaW5kZXggODM0
Y2MzNmJhOGE2N2EyYmU4YTdiN2I0OGNlYTNlMWY5NWM3MWNiNy4uODIzOTNkOTc4NDE1MTIxOWI0
N2MyYTFlODMzOTMyNTM4ZmUwNWUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KQEAgLTM0LDEwICszNCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQogewotICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KICAgICBpZiAobV9z
ZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5pc05vdE51
bGwoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudC0+ZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9
IG1fZG9jdW1lbnQuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBpbnRl
bnQsIG1fc2VsZWN0aW9uKTsKICAgICB9CiAKQEAgLTQ2LDEwICs0NCwxMCBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFY
VGV4dFN0YXRlQ2hhbgogICAgIGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFtX3NlbGVjdGlvbi5p
c0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcg
PSBkb2N1bWVudC0+cmVuZGVyVmlldygpOworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBt
X2RvY3VtZW50LnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJl
dHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmICghZnJhbWVW
aWV3KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvd2luL0VkaXRvcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JX
aW4uY3BwCmluZGV4IDA5NjRjY2I0ZmJkN2FjMzZiMThmMzQxNmY0MjBhMjdkYmU5NjkxNzguLjJm
NzJjYjRmMDA0NTFjYmJlNDQyYzBlOWEzMTI2N2M4YjhjMjBkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcApAQCAtNDIsNyArNDIsNyBAQCB2b2lkIEVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFz
dGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0g
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1l
bnRGcmFnbWVudChtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1Bs
YWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21l
bnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC02OSw5ICs2OSw5IEBAIHN0YXRpYyBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKFBsYXRmb3Jt
RHJhZ0RhdGEmCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmLCBib29sIC8qYWxsb3dQ
bGFpblRleHQqLywgYm9vbCYgLypjaG9zZVBsYWluVGV4dCovKQogewogICAgIGlmIChDT01QdHI8
SURhdGFPYmplY3Q+IHBsYXRmb3JtRHJhZ0RhdGEgPSBwYXN0ZWJvYXJkLmRhdGFPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1E
cmFnRGF0YSwgbV9mcmFtZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0
Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEsICptX2RvY3VtZW50LmZyYW1lKCkpOwogCi0gICAg
cmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRh
TWFwKCksIG1fZnJhbWUpOworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURh
dGEocGFzdGVib2FyZC5kcmFnRGF0YU1hcCgpLCAqbV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNw
cAppbmRleCBhODdkM2U1MDQ4ZTQ2YzQzZGZhZmFmMzkyMDczM2ZiNzM4ZTFhMWU5Li5iZjk1NjZi
YTc1OTM4NWIwYWE0M2M2MjE4YzMxZjM4Y2NmMzFkN2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0NhY2hlZEZyYW1lLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgQ2FjaGVkRnJhbWU6OmRl
c3Ryb3koKQogICAgIG1fZG9jdW1lbnQtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiAKICAg
ICBtX2RvY3VtZW50LT5zZXRCYWNrRm9yd2FyZENhY2hlU3RhdGUoRG9jdW1lbnQ6Ok5vdEluQmFj
a0ZvcndhcmRDYWNoZSk7Ci0gICAgbV9kb2N1bWVudC0+cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7
CisgICAgbV9kb2N1bWVudC0+d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogCiAgICAgY2xlYXIo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGM3MTZkNzI4MGY0
NjJjYjU2NzM3NTdiNGJhNGUzYjI0YWJlZThkZTAuLmZkYjRjODljYmYyNjcxYzkwZGIyYzc5Njk5
ZjU4NjdjZTk5NTkyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAt
NTQxLDExICs1NDEsMTQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcCgpCiB2b2lkIEZyYW1lTG9h
ZGVyOjp3aWxsVHJhbnNpdGlvblRvQ29tbWl0dGVkKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aGVuIGEgZnJhbWUgaXMgc3RpbGwgZnVsbHkgaW4gcGxhY2UgKG5vdCBjYWNo
ZWQsIG5vdCBkZXRhY2hlZCksIGJ1dCB3aWxsIGJlIHJlcGxhY2VkLgorICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7
CisgICAgaWYgKGRvY3VtZW50LT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAg
IC8vIFRoZSB0ZXh0IHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gRE9NLCBzbyBpdCdzIGJldHRlciB0
byBjb25maXJtIHRoYW4gdG8gY2FuY2VsIHRoZSBjb21wb3NpdGlvbi4KLSAgICAgICAgbV9mcmFt
ZS5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKLSAgICAgICAgaWYgKEVkaXRvckNsaWVu
dCogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS5lZGl0b3IoKS5jbGllbnQoKSkgeworICAgICAgICBk
b2N1bWVudC0+ZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgICAgIGlmIChFZGl0
b3JDbGllbnQqIGVkaXRvckNsaWVudCA9IGRvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkgewog
ICAgICAgICAgICAgZWRpdG9yQ2xpZW50LT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2Zy
YW1lKTsKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1f
ZnJhbWUpOwogICAgICAgICB9CkBAIC01NTYsNyArNTU5LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Y2xvc2VVUkwoKQogewogICAgIGhpc3RvcnkoKS5zYXZlRG9jdW1lbnRTdGF0ZSgpOwogCi0gICAg
RG9jdW1lbnQqIGN1cnJlbnREb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnQ+IGN1cnJlbnREb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKICAgICBV
bmxvYWRFdmVudFBvbGljeSB1bmxvYWRFdmVudFBvbGljeTsKICAgICBpZiAobV9mcmFtZS5wYWdl
KCkgJiYgbV9mcmFtZS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmlzU1ZHSW1hZ2VDaHJvbWVD
bGllbnQoKSkgewogICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBTVkdEb2N1bWVudCBvZiBhbiBT
VkdJbWFnZSwgbm8gbmVlZCB0byBkaXNwYXRjaCBldmVudHMgb3IgcmVjYWxjU3R5bGUuCkBAIC01
NjgsNyArNTcxLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogCiAgICAgc3RvcExv
YWRpbmcodW5sb2FkRXZlbnRQb2xpY3kpOwogICAgIAotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xl
YXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKKyAgICBpZiAoY3VycmVudERvY3VtZW50KQorICAgICAg
ICBjdXJyZW50RG9jdW1lbnQtPmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CiB9
CiAKIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQpAQCAtNTgwLDcgKzU4NCw2IEBAIGJv
b2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQogICAgIH0KIAogICAgIG1fZnJhbWUubmF2aWdh
dGlvblNjaGVkdWxlcigpLmNhbmNlbCgpOwotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXJMYXN0
RWRpdENvbW1hbmQoKTsKIAogICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgIG1fZGlkQ2Fs
bEltcGxpY2l0Q2xvc2UgPSBmYWxzZTsKQEAgLTY0Myw4ICs2NDYsNiBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2hvdWxkQ2xlYXJXaW5kb3dOYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRG9j
dW1lbnQmIG5ldwogCiB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1l
bnQsIGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cywg
Ym9vbCBjbGVhckZyYW1lVmlldywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlRE9NV2lu
ZG93Q3JlYXRpb24pCiB7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhcigpOwotCiAgICAgYm9v
bCBuZWVkZWRDbGVhciA9IG1fbmVlZHNDbGVhcjsKICAgICBtX25lZWRzQ2xlYXIgPSBmYWxzZTsK
IApAQCAtNjUyLDcgKzY1Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBu
ZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wKICAgICAgICAgbV9m
cmFtZS5kb2N1bWVudCgpLT5jYW5jZWxQYXJzaW5nKCk7CiAgICAgICAgIG1fZnJhbWUuZG9jdW1l
bnQoKS0+c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICAgICAgYm9vbCBoYWRMaXZpbmdSZW5k
ZXJUcmVlID0gbV9mcmFtZS5kb2N1bWVudCgpLT5oYXNMaXZpbmdSZW5kZXJUcmVlKCk7Ci0gICAg
ICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgICAg
IG1fZnJhbWUuZG9jdW1lbnQoKS0+d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogICAgICAgICBp
ZiAoaGFkTGl2aW5nUmVuZGVyVHJlZSkKICAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+
YWRqdXN0Rm9jdXNlZE5vZGVPbk5vZGVSZW1vdmFsKCptX2ZyYW1lLmRvY3VtZW50KCkpOwogICAg
IH0KQEAgLTY3Myw3ICs2NzQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCog
bmV3RG9jdW1lbnQsIGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sCiAgICAgICAgICAg
ICBtX2ZyYW1lLnRyZWUoKS5zZXROYW1lKG51bGxBdG9tKCkpOwogICAgIH0KIAotICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkucHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CiAgICAgbV9mcmFtZS5ldmVu
dEhhbmRsZXIoKS5jbGVhcigpOwogCiAgICAgaWYgKGNsZWFyRnJhbWVWaWV3ICYmIG1fZnJhbWUu
dmlldygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzODVlMzdhNmQwYzkwZTYzM2EzYjdiNDI4
NzJjNjE2ZTM4MDg2NDI2Li41ZGU2Njc1ZDE0MWE4OTI1NTVlODJjZTFjYTkxOTI2YmI2OTI4YWQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMTU2LDggKzE1Niw2IEBAIEZyYW1lOjpGcmFtZShQ
YWdlJiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVm
PEZyYW1lTG9hCiAgICAgLCBtX25hdmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZp
Z2F0aW9uU2NoZWR1bGVyPigqdGhpcykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1l
bnQpCiAgICAgLCBtX3NjcmlwdChtYWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlz
KSkKLSAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCi0gICAgLCBt
X3NlbGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKICAgICAsIG1f
YW5pbWF0aW9uQ29udHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+
KCp0aGlzKSkKICAgICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhp
cykpCiAgICAgLCBtX3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQpA
QCAtMjM0LDcgKzIzMiw3IEBAIHZvaWQgRnJhbWU6OnNldFZpZXcoUmVmUHRyPEZyYW1lVmlldz4m
JiB2aWV3KQogICAgIC8vIG5vdGlmaWVkLiBJZiB3ZSB3YWl0IHVudGlsIHRoZSB2aWV3IGlzIGRl
c3Ryb3llZCwgdGhlbiB0aGluZ3Mgd29uJ3QgYmUgaG9va2VkIHVwIGVub3VnaCBmb3IKICAgICAv
LyB0aGVzZSBjYWxscyB0byB3b3JrLgogICAgIGlmICghdmlldyAmJiBtX2RvYyAmJiBtX2RvYy0+
YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6OkluQmFja0ZvcndhcmRDYWNoZSkK
LSAgICAgICAgbV9kb2MtPnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOworICAgICAgICBtX2RvYy0+
d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogICAgIAogICAgIGlmIChtX3ZpZXcpCiAgICAgICAg
IG1fdmlldy0+bGF5b3V0Q29udGV4dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKQEAgLTI3OSw3ICsy
NzcsNyBAQCB2b2lkIEZyYW1lOjpzZXREb2N1bWVudChSZWZQdHI8RG9jdW1lbnQ+JiYgbmV3RG9j
dW1lbnQpCiAjZW5kaWYKIAogICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+YmFja0ZvcndhcmRDYWNo
ZVN0YXRlKCkgIT0gRG9jdW1lbnQ6OkluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgbV9kb2Mt
PnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOworICAgICAgICBtX2RvYy0+d2lsbEJlUmVtb3ZlZEZy
b21GcmFtZSgpOwogCiAgICAgbV9kb2MgPSBuZXdEb2N1bWVudC5jb3B5UmVmKCk7CiAgICAgQVNT
RVJUKCFtX2RvYyB8fCBtX2RvYy0+ZG9tV2luZG93KCkpOwpAQCAtNTU0LDcgKzU1Miw3IEBAIGJv
b2wgRnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2VzcygpCiAgICAgY2FzZSBET01QYXN0ZUFjY2Vz
c1BvbGljeTo6RGVuaWVkOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBET01QYXN0
ZUFjY2Vzc1BvbGljeTo6Tm90UmVxdWVzdGVkWWV0OiB7Ci0gICAgICAgIGF1dG8qIGNsaWVudCA9
IG1fZWRpdG9yLT5jbGllbnQoKTsKKyAgICAgICAgYXV0byogY2xpZW50ID0gZWRpdG9yKCkuY2xp
ZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC05MzcsNyArOTM1LDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9y
cyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICBpZiAoIWRv
Y3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2VkaXRvci0+ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbEFzSWdub3JlZCgpOworICAgIGVkaXRvcigpLmRpc21pc3NDb3JyZWN0aW9uUGFuZWxB
c0lnbm9yZWQoKTsKIAogICAgIC8vIFJlc3BlY3QgU1ZHcyB6b29tQW5kUGFuPSJkaXNhYmxlZCIg
cHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1lbnRzLgogICAgIC8vIEZJWE1FOiBIb3cg
dG8gaGFuZGxlIGNvbXBvdW5kIGRvY3VtZW50cyArIHpvb21BbmRQYW49ImRpc2FibGVkIj8gTmVl
ZHMgU1ZHIFdHIGNsYXJpZmljYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggM2Q0M2E5NGJlYTk1
NTZjOThkYzc0MjNhYjdlYWQ5YTkyYTUyYzZmZS4uMDkzMmE4M2NiNjc0ZjZmOGM5NjExZWQ5ZjY5
OTlkMTdiNjJkMTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiQWJzdHJhY3RGcmFtZS5oIgogI2luY2x1ZGUgIkFkanVzdFZpZXdTaXplT3JOb3QuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIlBhZ2VJZGVudGlmaWVyLmgiCkBAIC0xNjMs
MTQgKzE2NCwxNCBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CiAg
ICAgRnJhbWVWaWV3KiB2aWV3KCkgY29uc3Q7CiAKLSAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0
dXJuIG1fZWRpdG9yOyB9Ci0gICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVy
biBtX2VkaXRvcjsgfQorICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+
ZWRpdG9yKCk7IH0KKyAgICBjb25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIGRv
Y3VtZW50KCktPmVkaXRvcigpOyB9CiAgICAgRXZlbnRIYW5kbGVyJiBldmVudEhhbmRsZXIoKSB7
IHJldHVybiBtX2V2ZW50SGFuZGxlcjsgfQogICAgIGNvbnN0IEV2ZW50SGFuZGxlciYgZXZlbnRI
YW5kbGVyKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBGcmFtZUxvYWRl
ciYgbG9hZGVyKCkgY29uc3Q7CiAgICAgTmF2aWdhdGlvblNjaGVkdWxlciYgbmF2aWdhdGlvblNj
aGVkdWxlcigpIGNvbnN0OwotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVy
biBtX3NlbGVjdGlvbjsgfQotICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rp
b24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQorICAgIGNvbnN0IEZyYW1l
U2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rp
b24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwogICAgIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXImIGFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQog
ICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQpAQCAtMzM4LDggKzMzOSw2IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKIAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250
cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlxdWVSZWY8RWRpdG9yPiBtX2VkaXRvcjsKLSAgICBV
bmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwogICAgIFVuaXF1ZVJlZjxDU1NB
bmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiAKICNpZiBFTkFCTEUo
REFUQV9ERVRFQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRp
Y2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCBl
YjAyZjhlYzQ0ZDkzYWQ3YTZjYjk1MWY2OTcwNmZjNGQ2ZjgwZTBlLi4zZWVlNDJmZjBjZDFlNzNj
ZjAxYjI5NWU5OGQyODU0ZTliYjdjZmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRv
ci5jcHAKQEAgLTY4LDIxICs2OCwxNiBAQCBSZWY8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRv
cjo6Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQogCiBSZWZQdHI8VGV4dElu
ZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5n
ZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikKIHsK
LSAgICBGcmFtZSogZnJhbWUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkuZnJh
bWUoKTsKKyAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpOwogCi0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwotCi0gICAgVmlzaWJsZVNlbGVj
dGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAgICAgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gdGVtcG9y
YXJ5U2VsZWN0aW9uT3B0aW9uczsKICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkRvTm90U2V0Rm9jdXMpOwogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKTsKICAgICB0ZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFu
Y2VVcGRhdGVzKTsKICNlbmRpZgotICAgIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rp
b25DaGFuZ2UoKmZyYW1lLCB7IFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSB9LCB0ZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb25zKTsKKyAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hh
bmdlKGRvY3VtZW50LCB7IFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSB9LCB0ZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb25zKTsKIAogICAgIFRleHRJbmRpY2F0b3JEYXRhIGRhdGE7CiAKQEAgLTkxLDcgKzg2
LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5n
ZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQKIAogICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVu
dFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgb2xkU2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpOwogCi0gICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEs
ICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbikpCisgICAg
aWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsICpkb2N1bWVudC0+ZnJhbWUoKSwgcmFuZ2Us
IG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkYXRhKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmluZGV4IDNi
MDlmM2M2MjU2YjAwZDc2MzBlY2E2ZWExNmQzY2M2MjRkN2Y4YzIuLjllMTM3YjNhMDkzMmYzYjIy
YTkyMDEwMWFlYWYxOWQxMzAyN2YxOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtNzksNyArNzksNyBAQCBAaW1wbGVtZW50
YXRpb24gRE9NUmFuZ2UgKFVJS2l0RXh0ZW5zaW9ucykKIC0gKHZvaWQpbW92ZTooVUludDMyKWFt
b3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7
CiAgICAgUmFuZ2UgKnJhbmdlID0gY29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbiBmcmFtZVNlbGVjdGlvbjsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNl
bGVjdGlvbihbc2VsZiBvd25lckRvY3VtZW50XSk7CiAgICAgZnJhbWVTZWxlY3Rpb24ubW92ZVRv
KHJhbmdlKTsKICAgICAKICAgICBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkg
PSBXZWJDb3JlOjpDaGFyYWN0ZXJHcmFudWxhcml0eTsKQEAgLTEwNyw3ICsxMDcsNyBAQCAtICh2
b2lkKW1vdmU6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGly
ZWN0aW9uKWRpcmVjdGlvbgogLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rp
b246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogewogICAgIFJhbmdlICpy
YW5nZSA9IGNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxl
Y3Rpb247CisgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb24oW3NlbGYg
b3duZXJEb2N1bWVudF0pOwogICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7CiAgICAg
CiAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGE4MWMzMGI3YTk5ODYzODM5YjA1
MWM0NTlhZmUwNWUwMjc4ZWQ0ZGEuLmRiMWM4ZDZmYjgwYzUzMzRkZTBjMDE3Y2ZlNzVmMjU2NThl
YmMyMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpA
QCAtNzkwLDExICs3OTAsMTUgQEAgLSAoQk9PTClfbmVlZHNMYXlvdXQKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIC0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rp
b246KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVj
dGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eToo
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CiB7Ci0gICAgaWYgKF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGF1dG8qIGRvY3VtZW50ID0g
X3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKGRvY3VtZW50LT5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIHNl
bGVjdGlvbjsKLSAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBz
ZWxlY3Rpb24oKmRvY3VtZW50KTsKKyAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKGRvY3VtZW50
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0
aW9uLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKICAgICByZXR1cm4ga2l0KHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwMmYxYzMyM2Y5YzExYWI1ZDE5
Yjc4Y2EwM2JmNTFhOGY5OGFiMDY5Li5lZWU3OTFkNmE0YjhkMDczNjgwODQxZWY5MjRhYzI4NTVj
ODZhMzY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDQtMjcgIEphY2sgTGVlICA8c2hp
aGNoaWVoX2xlZUBhcHBsZS5jb20+CisKKyAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29t
bWFuZDo6RWRpdENvbW1hbmQgdmlhIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc2MDAKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTY5NDUwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGUg
Y3Jhc2guCisKKyAgICAgICAgKiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVk
aXQtY29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcv
aW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWw6IEFkZGVk
LgorCisgICAgICAgIE1vZGlmeSB0aGUgdGVzdCByZXN1bHQuIEZyYW1lU2VsZWN0aW9uIGlzIGJl
aW5nIGRlc3RydWN0ZWQgYWxvbmcgd2l0aAorICAgICAgICBkb2N1bWVudCBzbyBhbiBhZGRpdGlv
bmFsIHNlbGVjdGlvbiBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlzIGV4cGVjdGVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1l
eHBlY3RlZC50eHQ6CisKIDIwMjAtMDQtMTMgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5l
eUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0cy9pbi1hcHAtYnJvd3Nlci1wcml2YWN5
L2FwcC1ib3VuZC1kb21haW4uaHRtbCBpcyBhIGNvbnN0YW50IGZhaWx1cmUgb24gaU9TCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVk
aXQtY29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2Vy
dGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzA0MDM0MjNlNTkwOTUwMjY1ZjA4YTMyOTI2ZTY2MTdkMDE4YTdmNwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRo
ZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitUZXN0cyBp
bnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3Nl
cyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNv
bW1hbmQtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1s
aXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FmMzgxZDllZjVh
M2ZkOTRlYjIxMDkwYzJhMjJmYmMwNzUxMmFhZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNo
Lmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPGJvZHk+PGltYWdlPjwvaW1hZ2U+PGZvcm0gaWQ9Zm9y
bSBjb250ZW50RWRpdGFibGU9dHJ1ZT48b2JqZWN0IGRhdGE9PyBvbmxvYWQ9b2JqZWN0T25Mb2Fk
KCk+PC9vYmplY3Q+PC9mb3JtPjxkaWFsb2cgb3Blbj0idHJ1ZSI+YTwvZGlhbG9nPgorPHNjcmlw
dD4KKyAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5lbXB0eSgpOworICAgIGRvY3VtZW50LmV4
ZWNDb21tYW5kKCJzZWxlY3RBbGwiLCBmYWxzZSk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvYmplY3RPbkxvYWQoKSB7
CisgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRVbm9yZGVyZWRMaXN0IiwgZmFs
c2UpOworICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiaXRhbGljIiwgZmFsc2UpOworICAg
ICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZG9j
dW1lbnQuYm9keS5pbm5lckhUTUwgPSAiPHA+IFRlc3RzIGluc2VydGluZyBsaXN0IGZvbGxvd2Vk
IGJ5IGFuIGVkaXQgY29tbWFuZC4gVGhlIHRlc3QgcGFzc2VzIGlmIFdlYktpdCBkb2Vzbid0IGNy
YXNoIG9yIGhpdCBhbiBhc3NlcnRpb24uPC9wPiI7CisgICAgICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
ICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJv
cC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dAppbmRleCBkNmJjN2IxZTZmMDNlM2I0OGFmMDQxOGM2
NTUwNGE0ZDIxMzdjMWFjLi5lNWJkZDJhMGJmZDg5NTJkOTc2NmE0MzdjYWNlYTQ2NjQ4OTc3ODY2
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJk
L2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVk
LnR4dApAQCAtNCw2ICs0LDcgQEAgRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW8KIEVESVRJTkcgREVM
RUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1
IG9mICN0ZXh0ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hh
bmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIGxheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397773</attachid>
            <date>2020-04-27 17:44:43 -0700</date>
            <delta_ts>2020-04-27 18:39:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200427174442.patch</filename>
            <type>text/plain</type>
            <size>232253</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGZiZTIyY2Y2NGNjODg5
NGQxYmRkOGQzMTNkODYzMWZkY2NkNzA2OC4uNDRhNTNiMDBjYWY4NmM2Zjg2MDE3M2FhMTVhMDk3
ZmM3MTgyOWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxOSBAQAorMjAyMC0wNC0yNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSBjb25zdCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpz
dG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9y
ZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtl
ckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5M
RVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6dW5hcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFn
cmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6ZnJhbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9F
ZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpi
ZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNsaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkVkaXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjYW5FZGl0UmljaGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDdXQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5ESFRNTENv
cHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5Db3B5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuUGFzdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjYW5EZWxldGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRT
bWFydERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnRE
ZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnRyeURIVE1MQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyeURIVE1MQ3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9y
ZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbFVub3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpwZXJmb3JtQ3V0T3JDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVuZGVyTGF5ZXJEaWRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTZXRDb21wb3NpdGlvblNjb3BlOjpTZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldENvbXBvc2l0aW9uU2NvcGU6On5TZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmxlYXJu
U3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRP
clJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTZWxlY3Rpb25Vbmdy
YW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRXb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGVkVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92
ZVRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbXB1dGVBbmRT
ZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3Rh
cnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFj
aG1lbnRVcGRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRl
TW9kZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkb2N1bWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6Oklnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlOjpJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRv
Y3VtZW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN3YXBXaXRoTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZSBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlm
RGlmZmVyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rp
b25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRD
bGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRP
clN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RS
YW5nZU9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcv
SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExp
bmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1Vu
YXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWxsQ2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tl
cjo6aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmRpZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9u
SWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBp
bmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91
dE5ld2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVha0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGlu
Z0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJs
ZVN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndw
ZS9FZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGVk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRp
b25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgICogcGFn
ZS9GcmFtZS5oOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UpOgorCiAyMDIwLTA0LTI3ICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggOWJkNGRjMzk3NTBmMmYxNWIzY2UyZTg5ZGRiNjk3OGFkNDg0NjZlYi4uM2QzZTJm
YmExOTI4YzZjZTgyYTZkMzE0M2M0NWNjOWZmN2Q5NzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA0LTI3ICBKYWNrIExlZSAgPHNoaWhjaGll
aF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6
OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NjAwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEZyYW1lU2VsZWN0aW9uIGFuZCBFZGl0b3Igb2JqZWN0
cyBmcm9tIEZyYW1lIHRvIERvY3VtZW50IHNvIHdoZW4gYSBkb2N1bWVudCBpcyBkZXRhY2hlZAor
ICAgICAgICBpbiBuZXN0ZWQgY29tbWFuZCBleGVjdXRpb25zLCB0aGUgbmV4dCBFZGl0Q29tbWFu
ZCB3b3VsZCBub3QgZmFpbCBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIERPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdlIG1vdmU6aW5EaXJlY3Rpb246XSk6
CisgICAgICAgICgtW0RPTVJhbmdlIGV4dGVuZDppbkRpcmVjdGlvbjpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbjpkaXJlY3Rpb246Z3JhbnVsYXJpdHk6XSk6CisKIDIwMjAtMDQtMjcg
IEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBz
b21lIHVzZWxlc3MgaW5jbHVkZXMgb2YgQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAppbmRleCAwMmM3NTcwMGE4NWIzYzcyNTY2OTc3YmEyZGJjMWUzYWY4MjkxNGI1
Li5kNDhmYmI5ZWZkMjAwYWQ0MDIxZjQzYmY2OGU2NzNhNTVkOWRmZmRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpCiAg
ICAgLy8gTk9URTogaWdub3JlcyByZXN1bHRzIG9mIHNlbC5tb2RpZnkgYmVjYXVzZSBpdCByZXR1
cm5zIGZhbHNlIHdoZW4KICAgICAvLyBzdGFydGluZyBhdCBhbiBlbXB0eSBsaW5lLiAgVGhlIHJl
c3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAgLy8gd2lsbCBiZSBhIGNhcmV0IGF0
IHZpc2libGVQb3MuCi0gICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgIEZyYW1lU2Vs
ZWN0aW9uIHNlbGVjdGlvbigqZG9jdW1lbnQoKSk7CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVQb3MpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5k
YXJ5KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDMwNjU4NGRiNWRjNzBmMmZi
NmVlY2IyZGU3YmU5NTE0ZWMzNWRiMDQuLjBiOWI1ZjVmYzlkOWU0MWMwY2QzZGE4NDY2MmQxYjVi
NTZhYTg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTgzLDYgKzU4Myw4IEBAIERv
Y3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCB1bnNpZ25lZCBk
b2N1bWVudENsYXNzZXMsIHVuc2lnCiAgICAgLCBtX29yaWVudGF0aW9uTm90aWZpZXIoY3VycmVu
dE9yaWVudGF0aW9uKGZyYW1lKSkKICAgICAsIG1faWRlbnRpZmllcihEb2N1bWVudElkZW50aWZp
ZXI6OmdlbmVyYXRlKCkpCiAgICAgLCBtX3VuZG9NYW5hZ2VyKFVuZG9NYW5hZ2VyOjpjcmVhdGUo
KnRoaXMpKQorICAgICwgbV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKKyAg
ICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KCp0aGlzKSkKIHsK
ICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIs
IHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CkBAIC0yNTAwLDcgKzI1MDIsNyBAQCB2b2lkIERvY3VtZW50OjpkZXN0cm95UmVuZGVyVHJl
ZSgpCiAgICAgICAgIHZpZXcoKS0+ZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRG9jdW1lbnQ6OndpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKQogewogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24p
CiAgICAgICAgIHJldHVybjsKQEAgLTI1OTMsNiArMjU5NSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVk
aWEoSFRNTE1lZGlhRWxlbWVudEludmFsaWRJRCk7CiAgICAgfQogCisgICAgZWRpdG9yKCkuY2xl
YXIoKTsKKyAgICBzZWxlY3Rpb24oKS53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgZGV0
YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggMjgxNGI2M2U1YmE3MjkzN2NhYjI0Zjk2ZjEyNTA1OGQ0ZDZlNDZiZC4u
Y2I4YWFjYjE4MzU1Mzg0MjQ2YjAyYTYzOTYzZTE3NmNkYzk1Zjc3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7
CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRp
dGluZ0JlaGF2aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZl
bnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjgsNiAr
MTI5LDcgQEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3Jt
Q29udHJvbGxlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBG
cmFtZVZpZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRl
eHQ7CkBAIC02MjYsNyArNjI4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWNvbWVDdXJy
ZW50RG9jdW1lbnRJbkZyYW1lKCk7CiAgICAgdm9pZCBkZXN0cm95UmVuZGVyVHJlZSgpOwotICAg
IHZvaWQgcHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJv
bUZyYW1lKCk7CiAKICAgICAvLyBPdmVycmlkZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG1ldGhv
ZHMgdG8gZG8gYWRkaXRpb25hbCB3b3JrCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbDsKQEAgLTE1
NzgsNiArMTU4MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNWaXN1YWxseU5vbkVtcHR5
Q3VzdG9tQ29udGVudCgpIHsgbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCA9IHRy
dWU7IH0KICAgICBib29sIGhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudDsgfQogCisgICAgRWRp
dG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRp
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKwogcHJvdGVjdGVk
OgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRl
cmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVS
TCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlv
bkZsYWdzID0gMCk7CkBAIC0yMTE4LDYgKzIxMjUsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjsKIAogICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lk
ZW50aWZpZWRFbGVtZW50c01hcDsKKworICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwor
ICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCiBFbGVtZW50
KiBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXgg
M2JkNjU4ZGY2NDQwMWQyMmIwNjFkNmNjNDMwZmVlY2I0MWZlYjAwNi4uYWVmNGJjNWE3ZDhmNmQ2
ZDVhZDY2ZTY2MGI3ZjRlOGVlZTE4OGExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0
YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQor
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1
bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3Vt
ZW50KGRvY3VtZW50KQogewogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8g
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gIW1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtl
cnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOworICAgIHJldHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVs
bGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5n
SWZBcHByb3ByaWF0ZSgpCiAgICAgaWYgKG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29y
cmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3Np
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3Np
dGlvbiBjYXJldFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpOwogCiAgICAgaWYgKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkg
PT0gY2FyZXRQb3NpdGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQp
KTsKQEAgLTIyMCwxNCArMjIwLDE0IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYg
KGF1dG8gY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZl
cnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KG1fZnJhbWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAg
UmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9kb2N1bWVudC5mcmFtZSgpKTsKKyAgICBtX2RvY3Vt
ZW50LnVwZGF0ZUxheW91dCgpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7
Ci0gICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlv
bk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMo
KSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8g
cmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgbWFya2VycyA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3Vt
ZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMoKnJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1h
cmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5h
ZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7
CkBAIC0yMzgsMTIgKzIzOCwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRp
bWVyRmlyZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsK
LSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHAsIHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50
V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBl
OjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5n
ZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIG51bGxwdHIpOworICAgICAg
ICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVw
bGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29y
ZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVy
bmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFn
cmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAo
c3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0
cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8
fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3Vt
ZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2RvY3VtZW50ICE9IHJh
bmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
OwpAQCAtMzQyLDcgKzM0Miw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIAogRmxvYXRSZWN0IEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAg
YXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOwogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5n
ZSkpKTsKQEAgLTM1MCw3ICszNTAsNyBAQCBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbgogCiB2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewotICAgIFZpc2libGVTZWxlY3Rp
b24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQg
b2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCiAgICAg
Ly8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVz
ZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlv
bi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0g
dGhhdApAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0
ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29t
bWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigp
KQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbV9kb2N1bWVudC5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRv
cik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlv
bkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0
ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kQ29tcG9zaXRpb24KICAgICBhdXRvIHJhbmdlID0gY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgbWFya2Vycy5hZGRNYXJr
ZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRk
TWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwog
fQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVkaXRvckNsaWVu
dCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFnZSgpLT5lZGl0
b3JDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFnZSgpID8gJm1f
ZG9jdW1lbnQucGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFRleHRDaGVj
a2VyQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCkBAIC00
ODMsMTIgKzQ4MywxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgaWYgKG1hcmtlcnMuaGFz
TWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KSkgewogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikKICAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRD
b3JyZWN0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3Vs
dC5yZXBsYWNlbWVudCk7CkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtl
ciYKICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlv
bi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBO
b2RlKiBub2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8g
d29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdv
cmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zm
c2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3Jk
ID0gcGxhaW5UZXh0KHdvcmRSYW5nZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTYyLDcgKzU2Miw3IEBAIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1l
bnRNYXJrZXImCiAKIEFsdGVybmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdl
KCkgPyBtX2ZyYW1lLnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwor
ICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2Rv
Y3VtZW50LnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBT
dHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBs
aWVkQWx0ZXJuYXRpdmVUZXh0KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlw
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU5OSw3ICs1OTks
NyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0
VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1
IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmlu
Z0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7
Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtl
Qm91bmRhcnlQb2ludChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwor
ICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJv
dW5kYXJ5UG9pbnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsK
ICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAg
ICAgcmV0dXJuOwogICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRl
ZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJl
Y3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYyMSwx
MSArNjIxLDExIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0
ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdF
dmVudCkKICAgICAgICAgdGFyZ2V0ID0gdHJpZ2dlcmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBl
bHNlCi0gICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJh
bWUuZG9jdW1lbnQoKSk7CisgICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRv
Y3VtZW50KCZtX2RvY3VtZW50KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZt
X2ZyYW1lLndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAg
YXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZy
YW1lKCktPndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAg
ZXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCBWZWN0b3I8U3RyaW5n
PiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJr
ZXIoY29uc3QgRAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlv
bkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgYXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0
b3IoKTsKKyAgICBhdXRvJiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8g
c2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8
fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmlu
ZGV4IDk0Nzc0YTc2YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZj
MzA4OGRjMjc3YjNmNzkxY2Y4MjMxYjkwNjMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3Np
dGlvbjsKIGNsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBj
bGFzcyBSYW5nZTsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJh
bWUoZnJhbWUpIHsgfSkKKyAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERv
Y3VtZW50JiBkb2N1bWVudCkgVU5MRVNTX0VOQUJMRUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7
IH0pCiAgICAgfkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0p
CiAKICAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRU
eXBlKSBVTkxFU1NfRU5BQkxFRCh7IH0pCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAg
ICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlm
CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAK
ICN1bmRlZiBVTkxFU1NfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAzNTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3
MjI3ZmUxNzRiLi44MDdlZTdiODhiM2IxMWViZWFmOGFjM2UxNzY0NDJkNDY4Mzk5MGE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAt
MjI4LDE3ICsyMjgsMTcgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkK
ICAgICAvLyB1cCB0aGUgY29tcG9zaXRpb24gd2lsbCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNv
bXBvc2l0aW9uLCBhcyBpbiA8cmRhcjovL3Byb2JsZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3Rv
cCBoYW5kbGVzIHRoaXMgaW4gLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRN
YW5hZ2VyXSwgYnV0IHRoZSBwaG9uZQogICAgIC8vIGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBm
cmFtZS0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0
b3IoKS5jYW5jZWxDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0
b3IoKS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRp
dG9yKCkud2lsbFVuYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
c2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6
ZTsgaTsgLS1pKQogICAgICAgICBtX2NvbW1hbmRzW2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAg
ICBmcmFtZS0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVu
dC0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMjU4LDEzICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOjpyZWFwcGx5KCkKICAgICAvLyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtl
IGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1l
LT5lZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVu
dC0+ZWRpdG9yKCkud2lsbFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChhdXRvJiBjb21tYW5kIDogbV9jb21tYW5kcykKICAgICAgICAgY29tbWFuZC0+
ZG9SZWFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAg
bV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHko
bV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBA
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQogCiBib29sIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJh
bWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5k
aW5ncygpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5n
KCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQpAQCAtMzc4LDEzICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBs
eUNvbW1hbmQoKQogewotICAgIGZyYW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMp
OworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBW
ZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJh
bmdlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0
KCkpOwotICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gZmlyc3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9m
UGFyYWdyYXAKICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5z
ZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNl
cnRGcmFnbWVudCBoZXJlLgogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwotICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rp
b24oKSk7CiAgICAgZGVsZXRlU2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsK
IAogICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+
aXNDb25uZWN0ZWQoKSk7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJh
Z3JhcAogICAgICAgICBvcHRpb25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0g
ICAgZnJhbWUoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdT
ZWxlY3Rpb24oKSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9u
IGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVt
cHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVj
dGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0Vu
ZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGNh
NTZmMzAxMWEwMDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2NGYuLmUyMGE4ZDhkYTZlNDhiMzk2
YmE2NDhlOWFjMjQwODFjMTczMTc5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2
ZXIsIGlmIHR5cGluZyBzdHlsZSB3YXMgcHJldmlvdXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQg
bm9kZSBhdCB0aGUgcHJldmlvdXMKICAgICAvLyBwb3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBu
ZWVkIHRvIGNsZWFyIHRoYXQgc3R5bGUgYXMgd2VsbC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYg
bV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTc0NCw3ICs3NDQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2Vk
ID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgp
LmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIo
KSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdl
VG9CZVJlcGxhY2VkLnB0cigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQ
YXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0
aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTgxOCw3ICs4
MTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUoKQogICAgIC8vIEluIHRoaXMgY2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRo
ZSBuZXcgY2hhcmFjdGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBk
ZWxldGVkIG9uZXMsCiAgICAgLy8gYnV0LCBpZiB3ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29t
ZSBiYWNrIGFuZCBzdGFydCB0eXBpbmcgdGhhdCBzdHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28g
c2VlIAogICAgIC8vIHByZXNlcnZlVHlwaW5nU3R5bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNl
bGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJl
ZigpKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0
YXRlKCkKQEAgLTg4OSw3ICs4ODksNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIGlmICghbV9yZXBsYWNlKSB7CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250
cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KSk7CiAgICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQot
ICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KHRleHRDb250cm9sKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxC
ZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0
aGlzIHRvIGxhdGVyIG1ha2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05NDQsNyArOTQ0LDcgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAKICAgICBib29s
IHNob3VsZFJlYmFsYWNlV2hpdGVTcGFjZSA9IHRydWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkp
IHsKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFu
Y2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9l
bmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4obm9k
ZSkpIHsKICAgICAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OwpAQCAtOTU4LDcgKzk1OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFv
cmlnaW5hbFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRl
ZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmlu
Zyk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwg
ZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRT
dGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMz
ZjdkYTE3Yzc4OTRlMmNmNzg1NTU5YmM4NzZjODg0NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYw
MDU2Yzc3Mzc3MDBlMmI4ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24o
ZWRpdGluZ0FjdGlvbikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0
U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewot
ICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihz
dGFydGluZ1NlbGVjdGlvbik7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjp+RWRpdENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1l
JiBFZGl0Q29tbWFuZDo6ZnJhbWUoKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkp
OwotICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRp
dENvbW1hbmQ6OmZyYW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgp
KTsKLSAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0
Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0Fj
dGlvbjsKQEAgLTE2OCwxMSArMTUzLDcgQEAgc3RhdGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKiBjb21wb3NpdGlvbklmUG9zc2libGUoRWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9v
bCBFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0g
ICAgYXV0byogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBj
b250YWluZXIgPSBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKTsKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0yMTcsNyArMTk4LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBp
ZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbih0eXBlLCB0ZXh0LCBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRD
b21tYW5kLmgKaW5kZXggZGViY2ZmMDI0NWVkZjBkZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4u
MmY2N2NkNzMzNGMyYzhiZDU2OTBmMTEzNWMxMGQwMDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxl
bWVudDsKLWNsYXNzIEZyYW1lOwogCiBTdHJpbmcgaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rp
b24oRWRpdEFjdGlvbik7CiAKQEAgLTY0LDggKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IEVkaXRDb21tYW5kKERvY3VtZW50JiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3Bl
Y2lmaWVkKTsKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUo
KSBjb25zdDsKLSAgICBGcmFtZSYgZnJhbWUoKTsKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50
KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJl
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKaW5kZXggYzExM2MwMTNkMDA0OGVmYTk1MjMzYWJkNjRmMDRlNGE5NTU1YzcyZC4uNGJiNDQ2
Njg4NDJlNGJlYTJlZDgzNDQ3ZDNiYTYyZDkwNzNmZWQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCkBAIC04OTgsNyArODk4LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0
IE5vZGUqIG5vZGUpCiAKIFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUo
KS0+ZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChk
b2N1bWVudC5lZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNl
IEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0
b3JJc1A6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggZDU0MjRh
YzdkMjE5MjhkNTI2NzM0NTk1ZjVmZjY2ZWU3NzMzMGFhZC4uMmY2MzU0YTVkMmYzMGEzNmI5MDNm
MTBiOTM3M2ZmYTIzYTBjODZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcApAQCAtMTY4Niw3ICsxNjg2LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRp
bmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJv
cGVydGllc05vdEluKCpzdHlsZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJv
cGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NT
ID0gZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOworICAg
IGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxl
V2l0aENTUygpOwogICAgIGlmICghc2hvdWxkU3R5bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0
VGV4dFN0eWxlcygqZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4
ZWRGb250RGVmYXVsdFNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAy
YjEwNjA2ODk5MGI3MjI4MjRjZDg2ZDE3ZmRjYzJlNWYxY2MzOGQ1Li5jNDZmOTNjYjUxMTFlY2Iy
MmU2YjExZjY1MWE3NWE4ZTQ4MDQzOTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBA
IC0xNzMsOCArMTczLDggQEAgc3RhdGljIFN0cmluZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdT
dHlsZUFuZEFjdGlvbihFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4
dENvbW1hbmQgOiBwdWJsaWMgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAg
Q2xlYXJUZXh0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENy
ZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRp
YyB2b2lkIENyZWF0ZUFuZEFwcGx5KERvY3VtZW50Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODks
MTcgQEAgRWRpdEFjdGlvbiBDbGVhclRleHRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QK
ICAgICByZXR1cm4gRWRpdEFjdGlvbjo6RGVsZXRlOwogfQogCi12b2lkIENsZWFyVGV4dENvbW1h
bmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFy
VGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJv
dW5kIHN0YWxlIGNvbXBvc2l0aW9uIHN0YXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigp
OworICAgIGRvY3VtZW50LmVkaXRvcigpLmNsZWFyKCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21t
YW5kID0gYWRvcHRSZWYoKm5ldyBDbGVhclRleHRDb21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxs
KCk7CisgICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1h
bmQoZG9jdW1lbnQpKTsKICAgICBjbGVhckNvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9s
ZFNlbGVjdGlvbik7CiAgICAgY2xlYXJDb21tYW5kLT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsy
MDcsMjQgQEAgdm9pZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQ
dHI8RnJhbWU+IGZyYW1lKQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY6OlVuaWNvZGU7CiAKLVRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiBmcmFtZSwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4g
dGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8Vmlz
aWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9uPiBvcHRpb25zKQorICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50
KSkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlv
bkNoYW5nZXMoZnJhbWUuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwg
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcygpKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVh
cmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZnJhbWUuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCgpKQorICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYK
IAogICAgIGlmIChvcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKHRydWUpOworICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKHRydWUpOwogCiAgICAgaWYgKHRlbXBvcmFyeVNlbGVjdGlvbikgewotICAgICAg
ICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgICAgICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgICAgICBzZXRTZWxlY3Rpb24odGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkp
OwogICAgIH0KIH0KQEAgLTIzNiwxMiArMjM2LDEyIEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5n
ZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgpCiAKICAgICBpZiAobV9vcHRpb25zICYgVGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAg
IGF1dG8gcmV2ZWFsU2VsZWN0aW9uID0gbV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpSZXZlYWxTZWxlY3Rpb24gPyBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRp
dG9yOjpSZXZlYWxTZWxlY3Rpb246Ok5vOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJ
Z25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZl
YWxTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rp
b24pOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9u
cyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0g
ICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1f
YXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVj
dGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJl
RW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAtMjUwLDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiAgICAgYXV0byBvcHRpb25zID0gRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCk7CiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbjo6RG9Ob3RTZXRGb2N1cykKICAgICAgICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rp
b246OkRvTm90U2V0Rm9jdXMpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihzZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMpOwogfQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRs
ZXIgaGFzIG1vdmVkIHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8g
d2Ugc2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRp
dGluZyBvcGVyYXRpb24uCiBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29t
bWFuZChFdmVudCogZXZlbnQpCiB7Ci0gICAgYXV0byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uOwogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUg
Y3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYs
MTIgKzI3NiwxMiBAQCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFu
ZChFdmVudCogZXZlbnQpCiAvLyBGdW5jdGlvbiBjb25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZp
b3IgYSBmYWxsYmFjayB3aGVuIFBhZ2Ugb3IgU2V0dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVk
aXRpbmdCZWhhdmlvciBFZGl0b3I6OmJlaGF2aW9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRp
dGluZ0JlaGF2aW9yKG1fZnJhbWUuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOwor
ICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3IobV9kb2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdC
ZWhhdmlvclR5cGUoKSk7CiB9CiAKIEVkaXRvckNsaWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25z
dAogewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JD
bGllbnQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJv
b2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0
b3I6OmNhbkVkaXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wg
RWRpdG9yOjpjYW5FZGl0UmljaGx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVy
biBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCk7CiB9CiAKIGVudW0gY2xhc3MgQ2xpcGJvYXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0
NDIsNyBAQCBzdGF0aWMgYm9vbCBkaXNwYXRjaENsaXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50
PiYmIHRhcmdldCwgQ2xpcGJvYXJkRXZlbnRLaW5kCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1
dCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3
b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
IWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBD
bGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9yZUN1dCk7CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBF
ZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENs
aXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZl
bnRLaW5kOjpCZWZvcmVDb3B5KTsKIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9y
OjpjYW5Db3B5KCkgY29uc3QKIHsKICAgICBpZiAoaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1l
bnQoZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2Vs
ZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3Vw
cHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkt
Pm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmco
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5
OCw3ICs0OTgsNyBAQCBib29sIEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRv
cjo6Y2FuRGVsZXRlKCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTI0LDcgKzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91
bGRTbWFydERlbGV0ZSgpCiB7CiAgICAgaWYgKGJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnRE
ZWxldGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0
aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAK
IGJvb2wgRWRpdG9yOjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3
IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
eworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBp
ZiAoaXNUeXBpbmdBY3Rpb24pIHsKICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1h
bmQ6OlNtYXJ0RGVsZXRlIDogMCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKIAogdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFy
dERlbGV0ZShib29sIHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2Us
IGZhbHNlLCB0cnVlLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBA
QCB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnRE
ZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZwogCiB2b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsK
LSAgICBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xl
YXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkobV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRp
dG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21h
cnRSZXBsYWNlKQpAQCAtNjYxLDcgKzY2MSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRG
cmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAK
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRS
ZXBsYWNlIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVk
aXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZykKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkg
fHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTY4OSwxOSArNjg5LDE5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1h
Z2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJ
blBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9u
OjpQYXN0ZSkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0
cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJ
bnNlcnRlZFRleHQoKSk7Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlUGFzdGUsIHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
ICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29t
cG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNl
ZFJhbmdlKCkpOwogICAgIH0KIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gY29tbWFuZC0+ZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwot
ICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4
dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAg
IH0KIApAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0
cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtNzQ0LDcgKzc0NCw3IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIGJvb2wgRWRp
dG9yOjp0cnlESFRNTENvcHkoKQogeyAgIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDb3B5KTsKQEAgLTc1Miw3ICs3
NTIsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIAogYm9vbCBFZGl0b3I6OnRyeURI
VE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVj
dGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkN1dCk7CkBAIC03NjAsNyArNzYwLDcgQEAgYm9v
bCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rp
b24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxk
U3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0g
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdl
LCBhY3Rpb24pOwpAQCAtNzgyLDE3ICs3ODIsMTcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAK
IGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogc3RhcnROb2RlOwot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBzdGFydE5v
ZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAg
ICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJl
YW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xvc2luZ0Js
b2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQotICAg
ICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODEyLDEyICs4MTIsMTIgQEAgYm9vbCBFZGl0b3I6
Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVu
b3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNDYXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKKyAgICBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxU
YWcpKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9
IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOwor
ICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAg
ICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7CisgICAgICAgIGF1dG8qIGVu
ZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9k
ZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3Rh
dGU7CiAgICAgfQpAQCAtODI3LDEyICs4MjcsMTIgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rp
b25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlv
bk9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9s
VGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUg
PSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCksIG9sVGFnKTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9sVGFnKTsK
KyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAg
ICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOworICAgICAgICBhdXRvKiBl
bmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5v
ZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0
YXRlOwogICAgIH0KQEAgLTg3Miw3ICs4NzIsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVjcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
ICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29t
bWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAtODgyLDcg
Kzg4Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRl
cmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0
cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtODkyLDcgKzg5
Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3Jk
ZXJlZCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
VW5vcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
OjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC05
MDIsNyArOTAyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxVbm9yZGVyZWQoKQogCiB2b2lkIEVkaXRvcjo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50
KCkpOwpAQCAtOTMyLDcgKzkzMiw3IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAKIEVsZW1lbnQq
IEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJvcGVydGll
cyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTk0NiwxMyArOTQ2LDEzIEBA
IHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0
aW9uVHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0Fj
dGlvbihlZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2
ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbigqc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwot
ICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCplbGVtZW50
LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
OTY5LDcgKzk2OSw4IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5
bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgY2xpZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CiAgICAgaWYgKGVsZW1lbnQpCiAg
ICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRF
dmVudERhdGEpOwogfQpAQCAtOTg0LDEzICs5ODUsMTMgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW8KICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlv
blR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsK
KyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0
VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsK
ICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHls
ZUFuZEFjdGlvbihzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50ICYm
ICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0
RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA1LDcgKzEwMDYsNyBAQCB2b2lk
IEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8
fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNsaWVudCgp
IHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
KQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxl
KHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRp
dG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5
LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBjcmVhdGVMaXZlUmFu
Z2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxp
dmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3Zl
KHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEw
MjgsMjUgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxl
LT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBw
bHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICBhcHBseVBhcmFn
cmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlKSBjb25zdAogewotICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQorICAgIGlmIChhdXRv
IGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpKQogICAgICAgICByZXR1cm4gZWRpdGluZ1N0eWxlLT5oYXNTdHlsZShw
cm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBUcmlTdGF0ZSBFZGl0
b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJv
cGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZh
bHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVj
dGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rp
b25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCiAgICAgICAgIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlv
blN0eWxlLT5zdHlsZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMTM2LDcgKzEx
MzcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQm
IGNvbW1hbmQpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoJmNvbW1hbmQpOwogCiAgICAgICAgIGlmICghY29tbWFuZC5wcmVzZXJ2
ZXNUeXBpbmdTdHlsZSgpKQotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5
cGluZ1N0eWxlKCk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKIAogICAgICAgICAvLyBDb21tYW5kIHdpbGwgYmUgZXF1YWwgdG8gbGFzdCBl
ZGl0IGNvbW1hbmQgb25seSBpbiB0aGUgY2FzZSBvZiB0eXBpbmcKICAgICAgICAgaWYgKG1fbGFz
dEVkaXRDb21tYW5kLmdldCgpID09ICZjb21tYW5kKQpAQCAtMTIwMCwxMSArMTIwMSwxMSBAQCB2
b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uJiBjb21w
b3NpdGlvbikKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMobmV3U2VsZWN0aW9uKTsKIH0K
IAotRWRpdG9yOjpFZGl0b3IoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK0Vk
aXRvcjo6RWRpdG9yKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiAgICAgLCBtX2tpbGxSaW5nKG1ha2VVbmlxdWU8UEFMOjpLaWxsUmluZz4oKSkKLSAgICAs
IG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihmcmFtZSkpCi0gICAgLCBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyPihmcmFtZSkpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hl
Y2tlcj4oZG9jdW1lbnQpKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VV
bmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZG9jdW1lbnQpKQogICAgICwgbV9lZGl0
b3JVSVVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQp
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAsIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIoKnRo
aXMsICZFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKQpAQCAtMTIyMCw3
ICsxMjIxLDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKICAgICBpZiAobV9jb21wb3NpdGlvbk5v
ZGUpIHsKICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBudWxscHRyOwogICAgICAgICBpZiAo
RWRpdG9yQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVu
dC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOworICAgICAgICAgICAgY2xpZW50LT5k
aXNjYXJkZWRDb21wb3NpdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIH0KICAgICBtX2N1
c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRp
b25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0xMjI5LDYgKzEyMzAsNyBAQCB2b2lkIEVkaXRvcjo6
Y2xlYXIoKQogICAgIG1fbWFyayA9IHsgfTsKICAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJ
VXBkYXRlID0geyB9OwogICAgIG1fZWRpdG9yVUlVcGRhdGVUaW1lci5zdG9wKCk7CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwog
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0b3Ao
KTsKQEAgLTEyMzgsMTIgKzEyNDAsMTIgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9vbCBF
ZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2
ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQogewotICAgIHJldHVybiBtX2ZyYW1l
LmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVu
dCwgaW5wdXRUeXBlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlw
ZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigp
LmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24p
OworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRl
eHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOwogfQogCiBi
b29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVu
dCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAtMTMwMiwxMCArMTMwNCw4IEBAIGJvb2wgRWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29s
IHNlbGVjdEluCiAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgY29kZSBzaG91bGQgY29uZGl0aW9u
YWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlvbiBvbiB3aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKCkgYml0CiAgICAgICAgICAgICAvLyBpcyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1c2Vk
IGZyYW1lLgogICAgICAgICAgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRSZXZl
YWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBwYWdlID0gZWRpdGVkRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgp
KQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5yZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzE4LDEwICsxMzE4LDEwIEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxk
SW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpOwogICAgIGJvb2wgYWxpZ25Ub0VkZ2UgPSBpc0VuZE9mRWRpdGFi
bGVPck5vbkVkaXRhYmxlQ29udGVudChjYXJldCk7CiAgICAgYm9vbCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRM
aW5lQnJlYWsoZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21t
YW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwpAQCAtMTMzOCwxMCArMTMz
OCwxMCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAo
IWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDUsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI0LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzMsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1Myw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzgsNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNiw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUwLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODEsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNiw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUxLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4Myw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0xOTk5LDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNCw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMiwxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODEsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDgsNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjIsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFu
Z2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVk
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNl
bGVjdGVkVGV4dCgpOwpAQCAtMjEzNyw3ICsyMTM3LDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3Bl
bGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJs
ZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNh
bGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFy
b3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0g
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRl
eHQoKTsKQEAgLTIxNDksMTQgKzIxNDksMTQgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmco
KQogCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBU
aGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFzZXMgLSBmcm9tIHRoZSBz
ZWxlY3Rpb24gZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCiAgICAgLy8gdGhlbiB3ZSB3
cmFwIGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHByb3hpbWF0ZWx5KSB3aGVy
ZSB3ZSBzdGFydGVkLgotICAgIAorCiAgICAgLy8gU3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vs
ZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5nIGF0IHRoZSBzZWxl
Y3Rpb24gZW5kIG1ha2VzCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5k
cyB3b3JrLgotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIFJlZjxSYW5nZT4gc3BlbGxpbmdTZWFy
Y2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKIAogICAgIGJvb2wgc3RhcnRl
ZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTIzMDUsOCArMjMwNSw4IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRo
IGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAogICAgICAgICBh
dXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZ3JhbW1hclNlYXJj
aFJhbmdlLCB7IGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLnJhbmdlLmxvY2F0
aW9uLCBncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0aCB9KTsKLSAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFs
U2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAg
ICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIzMTcsOCArMjMxNyw4IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgcmVkIHNxdWlnZ2xl
IGxhdGVyLgogICAgICAgICAKICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3BlbGxpbmdPZmZzZXQs
IG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJF
QU0pKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihtaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CiAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjMzMiw3ICsyMzMyLDcgQEAgU3RyaW5nIEVkaXRv
cjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QK
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgfHwgIWNsaWNrZWRO
b2RlIHx8ICFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGNsaWNrZWROb2RlKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg2LDcgKzIzODYsNyBAQCBTdHJpbmcgRWRpdG9yOjpt
aXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlv
blVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIGF1dG8g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgp
LCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQwMSw3ICsyNDAxLDcgQEAgVmVjdG9y
PFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3
b3JkKSBjb25zdAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50
KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmlu
ZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAg
dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2Vz
OwogfQogCkBAIC0yNDA5LDcgKzI0MDksNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNz
ZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvbwogewog
ICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxs
aW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2Uo
KSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29y
ZEdyYW51bGFyaXR5KTsKQEAgLTI0NjksNyArMjQ2OSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxl
Y3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1l
bnQobV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5MSwxOSArMjU5MSwxOSBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHks
IHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRv
Y29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5l
d1NlbGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChu
ZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1f
ZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBt
aXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFy
dFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVk
aXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxl
Y3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7
CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0g
ICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc1LDcgKzI2NzUsNyBAQCBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAg
IHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKQpAQCAtMjcyMyw3ICsyNzIzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7
CisgICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsK
IAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBh
cmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0g
cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0
aW9ucyk7CkBAIC0yNzM4LDcgKzI3MzgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAg
IH0KIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCBy
ZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0No
ZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VO
b25OdWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBS
ZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0
ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAg
IFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCks
IHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhS
YW5nZSgpKTsKQEAgLTI4MDgsOSArMjgwOCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFj
ZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAg
ICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAK
ICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8
fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNh
cmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBz
byB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwor
ICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJh
Z3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAg
ICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAg
aWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50
ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9
PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTIsMTMgKzI4OTIsMTMgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAg
ICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNl
bGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5n
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBy
ZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAo
Y2FuRWRpdFJpY2hseSgpKQpAQCAtMjkwNyw3ICsyOTA3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0
b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQs
IHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rp
b25PY2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5MzcsMTMgKzI5MzcsMTMgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5k
UmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5n
ZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkg
ewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1
YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0p
OworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFu
Z2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNl
bGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rp
b25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBE
aXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJh
Y2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92
ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0zMDIwLDggKzMwMjAsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9u
QQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2Ug
cG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJp
ZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2Vs
ZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0
aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5MywxMSArMzA5Myw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
biwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwor
ICAgIGF1dG8gZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMxMTYsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOCw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1MSw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzQsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTk5LDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NCw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjQsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODEsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk1LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwMyw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzEzLDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMSw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTMzMjksNyArMzMyNSw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNl
aG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVT
ZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAog
ICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNDksOCArMzM0NSw4IEBAIHZvaWQgRWRp
dG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vo
b2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUg
TGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2lu
dCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9j
dXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0
aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0
aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQt
PmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2
ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFt
ZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3Qp
CkBAIC0zNDAyLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2Uo
UmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFt
ZSgpICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9s
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5l
d1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2Vs
ZWN0aW5nKTsKQEAgLTM0MTEsMTcgKzM0MDcsMTcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHls
ZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZTsKLSAgICBpZiAoYXV0byBl
eGlzdGluZ1R5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQor
ICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHR5cGluZ1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHls
ZS0+Y29weSgpOwogICAgIGVsc2UKICAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZSgpOwotICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUs
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKSk7CisgICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0
aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxv
Y2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
CkBAIC0zNDI5LDcgKzM0MjUsNyBAQCB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgICAgICBB
cHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVk
aXRpbmdBY3Rpb24pLT5hcHBseSgpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUg
YXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0
eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNv
bXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0ODgsMTggKzM0ODQsMTggQEAgdm9pZCBFZGl0b3I6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHBy
b3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAog
ICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKICAgICBpZiAoIXJl
c3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVB
TSkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oKnJlc3VsdFJhbmdlLCBET1dOU1RSRUFNKSk7CiAKICAgICBpZiAoIShvcHRpb25zLmNv
bnRhaW5zKERvTm90UmV2ZWFsU2VsZWN0aW9uKSkpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1OTYsNyArMzU5Miw3
IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRh
cmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGlm
ICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKICAgICAgICAgICAgIHNl
YXJjaFJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZShtX2Zy
YW1lLCAqcmFuZ2UpKQorICAgICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBp
ZiAoIXNlYXJjaFJhbmdlKQpAQCAtMzY2Niw3ICszNjYyLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxG
cmFtZVMKICNlbmRpZgogCiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKICNpZiBFTkFCTEUo
VEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmIChzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkpCkBAIC0zNjg5LDcgKzM2ODUsNyBA
QCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogCiBib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVs
ZXBob25lTnVtYmVycygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhv
bmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5p
c1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0
b3I6OmlzU3VwcG9ydGVkKCk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8U2ltcGxlUmFuZ2U+IHNjYW5G
b3JUZWxlcGhvbmVOdW1iZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKQEAgLTM3MzIsNyAr
MzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygp
CiAKICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CiAKLSAgICBh
dXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcg
Y2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVj
dGVkIHBob25lIG51bWJlcnMuCkBAIC0zNzQ5LDcgKzM3NDUsNyBAQCB2b2lkIEVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1f
ZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTM3NzQs
OSArMzc3MCw5IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAg
IGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld0FkamFjZW50V29yZHM7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0ZWRTZW50ZW5jZTsKLSAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5z
ZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOworICAgICAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAg
ICAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
bmV3U3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBuZXdBZGphY2VudFdv
cmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwog
I2Vsc2UKQEAgLTM4MjksNyArMzgyNSw3IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRp
bWVyRmlyZWQoKQogICAgIGlmICghbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlE
aWN0YXRpb24pCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogCi0gICAgbV9vbGRTZWxlY3Rpb25Gb3JF
ZGl0b3JVSVVwZGF0ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9v
bGRTZWxlY3Rpb25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIG5vdGlmeUNs
aWVudE9mQXR0YWNobWVudFVwZGF0ZXMoKTsKQEAgLTM4NTYsNyArMzg1Miw3IEBAIHN0YXRpYyBO
b2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBub2RlKQogCiBib29sIEVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRG
aXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTM0LDcgKzM5MzAs
NyBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgp
CiAgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQogICAg
ICAgICA6IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CkBA
IC0zOTQ3LDcgKzM5NDMsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogfQog
CkBAIC00MDE0LDcgKzQwMTAsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0cmli
dXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAgICBh
dXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1JlbW92
ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDU1LDcgKzQwNTEs
NyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4dExp
c3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRM
aXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2ggKHN0
eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBAIC00
MDgxLDcgKzQwNzcsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8g
dHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUo
KSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUt
PnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTQx
NjksMTIgKzQxNjUsOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBk
YXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJZGVu
dGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRlbnRp
ZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAoYXV0
byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAgICAg
IGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZpZXIo
aWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50LmF0
dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50KCkt
PmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2htZW50
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciksIGF0
dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQxOTcsNyArNDE4OSw3IEBAIHZvaWQgRWRpdG9y
OjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8dWlu
dDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0
Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0
cnVlOwogCkBAIC00MjE2LDcgKzQyMDgsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29sIEVk
aXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVybiBX
ZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2Vy
KGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjMyLDEzICs0MjI0LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0cmlu
ZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5h
YmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1vZGVF
bmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29y
KG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVu
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJu
ICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTaG91
bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQyOTEsOSArNDI3Nyw5
IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBs
ZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAgIGlm
ICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAg
ICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2Rl
VG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAv
LyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRy
OwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMDUsMTIgKzQyOTEsMTIgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8v
IEZJWE1FOiBBZGp1c3RpbmcgdGhlIHN0YXJ0IG1heSBtb3ZlIGl0IHBhc3QgdGhlIGVuZC4gSW4g
dGhhdCBjYXNlIHRoZSBpdGVyYXRvciBiZWxvdyB3aWxsIGdvIG9uIHRvIHRoZSBlbmQgb2YgdGhl
IGRvY3VtZW50LgotICAgIGF1dG8gYWRqdXN0ZWRTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGFk
anVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpKTsKKyAgICBhdXRvIGFkanVzdGVkU3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CiAgICAgaWYgKCFhZGp1c3RlZFN0YXJ0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByYW5nZS0+c3RhcnQgPSAqYWRqdXN0ZWRTdGFydDsK
QEAgLTQzMzksNyArNDMyNSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omlu
c2VydEVkaXRhYmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAm
JiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCmluZGV4IDIzZjVkZTEzMDQwNDk4ZTU4MGNlMWQxZDQxY2U0NzBkN2RhZTQ5YTMuLjU2ZjVl
ZTNjYWY5ZGUzMGI3NjEyMTIzNDk4YzYwOGRhNjA4ZTdhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1
ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTks
MTMgKzEyMCwxMyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4
X3QgewogCiBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZp
c2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uPiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlKERvY3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxv
cHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJD
T1JFX0VYUE9SVCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZy
YW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dh
c0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
MTM3LDcgKzEzOCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JT
Y29wZSB7CiBwdWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUm
IGZyYW1lKQotICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQs
IFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAg
ICAgOiBtX3NlbGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewog
ICAgIH0KIApAQCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihG
cmFtZSYpOworICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsK
IAogICAgIGVudW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIs
NyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBX
RUJDT1JFX0VYUE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50
ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29t
bWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBE
b2N1bWVudCYpOwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBT
dHJpbmcmIHBhcmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVs
bHB0cikgY29uc3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQg
eyBudWxscHRyIH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAg
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBt
X2ZyYW1lOwogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1l
bnVPcktleUJpbmRpbmcuCkBAIC01NjgsNyArNTcwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQm
KTsKIAogcHJpdmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29s
IGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTksNyArNjIxLDcgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBT
dHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1h
bmQ+IG1fbGFzdEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9k
ZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCAxM2YyYmVkNDllNDZiYmExYTlkNjA1ODY2YWQxMzFh
NTU4MDExZDA5Li5lMWZiM2NkMDc5MDNmZWMzYzc4ZTI1OGI3NzI1MTY4ZjQxMTlhMjEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTExMDcsNiArMTEwNyw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0
aE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50
KCkpOwogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpA
QCAtMTgzNCwxMiArMTgzNSwxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5k
KiBpbnRlcm5hbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpD
b21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAg
IHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9t
TWVudU9yS2V5QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxD
b21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3Vt
ZW50KTsKIH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4g
Q29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOwor
ICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwg
bV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVu
dU9yS2V5QmluZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTg1MSwxMiArMTg1
MiwxMyBAQCBFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1h
bmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNv
dXJjZSBzb3VyY2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5k
KQogICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1l
IDogbnVsbHB0cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxw
dHIpCisgICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikK
IHsKLSAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQg
fHwgIW1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25z
dCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4
NjYsOSArMTg2OCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxs
b3dFeGVjdXRpb25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1l
bnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1l
KCkgIT0gbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29t
bWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1l
dGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggYTBj
MDkwOWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJjNDMzMy4uNjRmYWEzNzk3ZWE5ZjA3ZDc5
NDU1NmIwYjE5OTY0MWI0NjdhMGFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5LDEzIEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJv
bGxlcjo6ZWRpdGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgcmV0dXJuICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25z
aWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKIH0K
IAotRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1f
ZnJhbWUoZnJhbWUpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1feFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAg
ICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhU
X0NBUkVUKQpAQCAtMTU2LDcgKzE1Niw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlv
bihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAs
IG1fY2FyZXRQYWludCh0cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFs
c2UpCi0gICAgLCBtX2ZvY3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1f
Zm9jdXNlZChkb2N1bWVudC5mcmFtZSgpICYmIGRvY3VtZW50LnBhZ2UoKSAmJiBkb2N1bWVudC5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LmZyYW1l
KCkpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVuZGlu
Z1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9s
bFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0xNjUsMTQgKzE2NSwyNCBAQCBGcmFt
ZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9jYXJldEJs
aW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNl
bGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25h
bCh0cnVlKTsKKworICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2
ZSgpOworICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9t
Tm9uZSgpOworI2lmIFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChi
bGlua3MgfCBkb2VzIG5vdCBibGluaykKKyAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9j
dXNlZCk7CisjZWxzZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8g
VmlzaWJsZSA6IEhpZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxl
bWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
LSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNl
bGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJp
Z2dlcmVkIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQs
NyArMjk0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlm
ZmVyZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3Rt
ZW50TW9kZSBlbmRwb2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbiA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9u
YWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdT
ZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3Vs
ZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlv
bi5pc0RpcmVjdGlvbmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2lu
YWxCYXNlLmlzTm90TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJs
ZUJhc2UoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsMTAg
KzMzMiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGJvb2wgc2hvdWxkQ2xlYXJU
eXBpbmdTdHlsZSA9IG9wdGlvbnMuY29udGFpbnMoQ2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvblBvc3NpYmx5V2l0aG91
dERpcmVjdGlvbjsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24o
bV9mcmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1f
ZG9jdW1lbnQpKQogICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsK
IAotICAgIGlmICghbV9mcmFtZSkgeworICAgIGlmICghbV9kb2N1bWVudC5mcmFtZSgpKSB7CiAg
ICAgICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMzM0LDcgKzM0NCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
Ly8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5m
aW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdT
ZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4g
bmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAg
ICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9u
RG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKG5ld1Nl
bGVjdGlvbkZyYW1lICE9IG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVu
dCAhPSAmbV9kb2N1bWVudCkgewogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8v
IEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMg
RnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNl
bGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKQEAgLTM0OSw3ICszNTksNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNv
bnN0IFZpc2libGVTZWxlY3RpbwogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKIAog
ICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmco
bV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQp
OwogCiAgICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5n
U3R5bGUoKTsKQEAgLTM1Nyw3ICszNjcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBk
aWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlm
IChkaWRNdXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlv
bldpbGxDaGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zZWxlY3Rpb25XaWxs
Q2hhbmdlKCk7CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDM1
ICszODEsMzEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVk
c1VwZGF0ZSgpOwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25z
ICYgRG9Ob3RTZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRG
b2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICAgICAgc2V0
Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBi
ZSBuZWVkZWQuCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVu
dCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5mb2N1c2Vk
RWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC51
cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4
IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQg
d2lsbCBiZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlm
IG5lY2Vzc2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC5l
ZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7
CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlvbi1hcGkvI3NlbGVjdGlvbmNo
YW5nZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNr
IHNvdXJjZSB0byB1c2UuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cXVldWVUYXNrVG9EaXNw
YXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVu
dDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9jdW1lbnQucXVldWVUYXNrVG9EaXNwYXRj
aEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQogewotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFt
ZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywg
YWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJh
bWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6
OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVj
dGlvbikKQEAgLTQxMSwyNyArNDE3LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAg
bV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9u
VXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxj
KCkpCisgICAgaWYgKG1fZG9jdW1lbnQuaGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmIChm
cmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQp
OwogCiAgICAgaWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0
byogY2xpZW50ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNs
aWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZyYW1l
JiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBm
cmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICNl
bHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRv
Y3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyArNDQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBSZXZl
YWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJldmVh
bE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0
aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC5y
ZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7
CiB9CiAKQEAgLTQ1Nyw3ICs0NjMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAgIGlm
IChtX3NlbGVjdGlvblJldmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZl
YWwpIHsKICAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBpZiAo
bV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rp
b25Jc1JldmVhbGVkKCkpCisgICAgICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQogICAgICAgICAg
ICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFs
aWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rp
b24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvRWRnZUlmTmVlZGVkOwpAQCAtNDcxLDcgKzQ3Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dCYgaW50CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0
aW9uKCkKIHsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIG1fZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCk7CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zY2FuU2VsZWN0aW9u
Rm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MDksNyBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBp
c0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUg
c2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0byB3aGlj
aCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBj
aGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAgaWYgKG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRT
ZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2lu
dCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0
aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogCiAgICAgcmV0
dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2VsZWN0aW9u
LnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MjksNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVT
ZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRp
bwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0
V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0gICAgaWYgKG1fZnJhbWUgJiYgbV9m
cmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KSkgeworICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNw
YWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFj
ZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVy
dGhlciBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBz
ZW1hbnRpY3Mgb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRo
ZQpAQCAtODU1LDcgKzg2MSw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAg
ICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpLnJpZ2h0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdo
ZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5z
aG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNl
V2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVu
dFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsK
ICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1Nw
YWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEw
NzYsNyArMTA4Miw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92
aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpLmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmlu
Z1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92
aW5nUmlnaHQgPSBtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNl
V2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAg
ICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5N
b3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMzE3LDcgKzEz
MjMsNyBAQCBzdGF0aWMgQVhUZXh0U2VsZWN0aW9uIHRleHRTZWxlY3Rpb25XaXRoRGlyZWN0aW9u
QW5kR3JhbnVsYXJpdHkoU2VsZWN0aW9uRGlyZWN0aQogYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7
CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCkgewotICAgICAgICBGcmFt
ZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uOworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0
cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0
aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rp
b24ubW9kaWZ5KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBOb3RVc2VyVHJpZ2dlcmVk
KTsKIApAQCAtMTM2Miw3ICsxMzY4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVB
bHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgp
ICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2ZyYW1lICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICBpZiAocmVhY2hlZEJvdW5kYXJ5
ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNjZXNz
aWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlv
bkJvdW5kYXJ5LCB0ZXh0U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0x
MzcwLDEyICsxMzc2LDEzIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlv
biBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNTcGF0aWFs
TmF2aWdhdGlvbkVuYWJsZWQobV9mcmFtZSkpCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSkpIHsKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBh
bHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRp
b24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgaWYgKG1fZnJhbWUg
JiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAo
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2Jq
ZWN0Q2FjaGUoKSkKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldFRleHRTZWxlY3Rpb25J
bnRlbnQodGV4dFNlbGVjdGlvbkludGVudChhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSkp
OwogICAgIH0KIApAQCAtMTM4NCw3ICsxMzkxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgK
ICAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkgYmVjYXVz
ZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBwb3NpdGlv
biB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uIHNl
dC4KICAgICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0
ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRl
cmF0aW9uRXh0ZW5kKTsKIAogICAgIHN3aXRjaCAoYWx0ZXIpIHsKICAgICBjYXNlIEFsdGVyYXRp
b25Nb3ZlOgpAQCAtMTM5NCw3ICsxNDAxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAog
ICAgICAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKQogICAgICAgICAgICAgJiYgKGdyYW51
bGFyaXR5ID09IFdvcmRHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFu
dWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBMaW5lR3JhbnVsYXJpdHkpCi0gICAgICAgICAgICAm
JiBtX2ZyYW1lICYmICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVuZFNl
bGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKKyAgICAgICAgICAgICYmICFtX2Rv
Y3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JM
aW5lQWNyb3NzQ2FyZXQoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IHRoZSBzZWxlY3Rp
b24gZ28gYWNyb3NzIHRoZSBiYXNlIHBvc2l0aW9uIGRpcmVjdGx5LiBOZWVkZWQgdG8gbWF0Y2gg
bWFjCiAgICAgICAgICAgICAvLyBiZWhhdmlvciB3aGVuLCBmb3IgaW5zdGFuY2UsIHdvcmQtc2Vs
ZWN0aW5nIGJhY2t3YXJkcyBzdGFydGluZyB3aXRoIHRoZSBjYXJldCBpbgogICAgICAgICAgICAg
Ly8gdGhlIG1pZGRsZSBvZiBhIHdvcmQgYW5kIHRoZW4gd29yZC1zZWxlY3RpbmcgZm9yd2FyZCwg
bGVhdmluZyB0aGUgY2FyZXQgaW4gdGhlCkBAIC0xNDA3LDcgKzE0MTQsNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleAogCiAgICAgICAgIC8vIFN0YW5kYXJkIE1hYyBiZWhhdmlvciB3aGVuIGV4
dGVuZGluZyB0byBhIGJvdW5kYXJ5IGlzIGdyb3cgdGhlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBs
ZWF2aW5nIHRoZQogICAgICAgICAvLyBiYXNlIGluIHBsYWNlIGFuZCBtb3ZpbmcgdGhlIGV4dGVu
dC4gTWF0Y2hlcyBOU1RleHRWaWV3LgotICAgICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUt
PmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRp
bmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdy
YW51bGFyaXR5KSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAg
ICAgIHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jaygpOwpAQCAtMTQ0Niw3ICsxNDUzLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0
aWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNl
clRyaWdnZXJlZCkgewotICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9u
OworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQp
OwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7
CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyLCB2ZXJ0aWNhbERpc3Rh
bmNlLCBkaXJlY3Rpb24sIE5vdFVzZXJUcmlnZ2VyZWQpOwogCkBAIC0xNTE3LDcgKzE1MjQsNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIHVuc2lnbmVk
IHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJU
cmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsK
IAotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7Cisg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25h
bFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU2Nyw3ICsxNTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Y2xlYXIoKQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCkpOwogfQog
Ci12b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQordm9pZCBGcmFt
ZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiB7CiAgICAgbV9ncmFudWxhcml0
eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwogCkBAIC0xNTc1LDcgKzE1ODIsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgIG1fY2FyZXRCbGlua1Rp
bWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmll
dygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAg
c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCks
IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY1NSw5ICsxNjYyLDcgQEAgc3RhdGljIGJv
b2wgaXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikK
IAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNp
ZGVGaXhlZCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwor
ICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKG1fZG9jdW1lbnQpOwog
ICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAgICAg
Kmluc2lkZUZpeGVkID0gbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjc1LDEwICsx
NjgwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICBp
ZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lVmlldyog
diA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2Rv
Y3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTY5MCw3ICsxNjkyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2ZyYW1lLT5kb2N1bWVu
dCgpLCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KCZt
X2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0g
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
MTcxNSw3ICsxNzE3LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkp
IHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpKSB7
CiAgICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0g
bV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAm
JiBtX3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYg
KHNob3VsZFJlcGFpbnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50
RWRpdGFibGUpKSB7CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKQEAgLTE4
OTMsMTMgKzE4OTUsOSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9u
IGxpa2Ugbm8gc2VsZWN0aW9uLgogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwot
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0
UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQuaGl0VGVzdChIaXRUZXN0UmVxdWVz
dCgpLCByZXN1bHQpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsK
ICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTI2LDEwICsxOTI0LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAg
ICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCkucGFy
ZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dHJlZSgpLnBh
cmVudCgpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5NDIsNyArMTk0MCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNl
bGVjdGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRvIHRoZSA8aWZyYW1lPiBv
ciA8ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZnJhbWUu
Ci0gICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7Cisg
ICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKTsKICAg
ICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRhaW5lck5vZGUq
IG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFyZW50Tm9kZSgpOwpAQCAtMTk2
OCw5ICsxOTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgp
OwogICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVj
dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LmNh
blNlbGVjdEFsbCgpKSB7CkBAIC0yMDAwLDggKzE5OTYsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3RBbGwoKQogICAgICAgICBpZiAocm9vdCkKICAgICAgICAgICAgIHNlbGVjdFN0YXJ0
VGFyZ2V0ID0gcm9vdC0+c2hhZG93SG9zdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RT
dGFydFRhcmdldCA9IGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOworICAgICAgICAgICAgcm9v
dCA9IG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RTdGFy
dFRhcmdldCA9IG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIXJvb3QpCkBAIC0yMDQxLDggKzIwMzcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91
bGRDbAogICAgICAgICBzZWxlY3Rpb25PcHRpb25zLmFkZChDbG9zZVR5cGluZyk7CiAKICAgICBp
ZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIEZyYW1lU2VsZWN0
aW9uIHRyaWFsRnJhbWVTZWxlY3Rpb247Ci0KKyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxG
cmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBzZWxlY3Rpb25PcHRpb25zKTsKIAogICAgICAgICBp
ZiAoIXNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbEZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigp
KSkKQEAgLTIwNTgsOSArMjA1Myw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotICAgIFJlZjxEb2N1bWVu
dD4gZG9jdW1lbnQoKm1fZnJhbWUtPmRvY3VtZW50KCkpOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX2RvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
IAogI2lmIFVTRShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3Mg
fCBkb2VzIG5vdCBibGluaykKQEAgLTIwNzEsNyArMjA2NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBSZW5kZXJP
YmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAgIC8vIFJlbmRlck9iamVj
dDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2
ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFp
bnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkp
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFy
cyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDc2LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0
eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQo
KSkgewogICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAg
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAg
ICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCkBAIC0yMTA3LDEzICsyMTAxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3Vz
ZWQoYm9vbCBmbGFnKQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUo
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1f
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4g
bV9mb2N1c2VkICYmIG1fZG9jdW1lbnQucGFnZSgpICYmIG1fZG9jdW1lbnQucGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1p
bmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKEZy
YW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5
cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFu
ZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIxMzIs
MTIgKzIxMjYsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAg
ICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24udmlz
aWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1
dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRp
bmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNo
b3VsZEJsaW5rID0gIXBhaW50QmxvY2tDdXJzb3IgJiYgY2FyZXRJc1Zpc2libGUoKSAmJiBpc0Nh
cmV0KCkgJiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGlu
ayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9mcmFtZSkpCisgICAg
aWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0
b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZCgmbV9kb2N1bWVudCkpCiAgICAgICAgIG1fY2Fy
ZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFj
ayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsyMTQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7
CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpOwogICAgIGlm
ICghdmlldykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAyLDggKzIxOTYsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxp
dHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dl
ciBhIHN5bmNocm9ub3VzIGxheW91dCBoZXJlLgotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUobV9kb2N1bWVudCk7CiAKICNpZiBF
TkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsy
MjQwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQo
KQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAg
ICAgICBpZiAoRWxlbWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChtX3NlbGVj
dGlvbi5iYXNlKCkpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJhbWUpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFu
Y2hvciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjU1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNl
dEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNG
cmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8g
bWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlz
IGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQt
PmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVs
ZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZG9jdW1l
bnQuZnJhbWUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAg
ICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQo
bnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7
CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUp
OworICAgICAgICBtX2RvY3VtZW50LnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQobnVsbHB0ciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIHZvaWQgRHJhZ0Nh
cmV0Q29udHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0NvbnRl
eHQmIHAsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYg
Y2xpcFJlY3QpIGNvbnN0CkBAIC0yMjk3LDE5ICsyMjkwLDE2IEBAIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBGcmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxl
Q29udGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7Ci0KLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5
b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKG1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LnJlbmRl
clZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKQEAgLTIzMjUsMTQgKzIzMTUsMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnQKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0UmVjdEhl
aWdodCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAg
IGlmICghbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9m
cmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9k
b2N1bWVudC52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdC
b3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWln
aHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAg
YXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50
UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0
LDcgKzIzNTQsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50
KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkg
Y29uc3QKIHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJz
dCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVu
dCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVs
ZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3Rh
cnQpCiAgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAg
aWYgKCFzdGFydCkKQEAgLTI0MDcsOCArMjM5Nyw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJl
dmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9s
CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRl
Rml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRh
dGVBcHBlYXJhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3Rp
ZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAg
ICAgICAgIGlmIChtX2RvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlT
Y3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogI2Vsc2UKQEAgLTI0MjYsMjcgKzI0MTYsMjYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9k
eSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50
aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1
bWVudCkuCiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJh
bWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgp
IHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC5oYXNFZGl0YWJs
ZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAg
aWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8
ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghKGlzTm9uZSgpIHx8IGlz
U3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50Lmhhc0VkaXRhYmxlU3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50
LT5ib2R5KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LmJvZHkoKSkKICAgICAg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNv
bnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgp
LT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgp
CkBAIC0yNDY0LDcgKzI0NTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93
QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRT
aG93QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBt
X2RvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAg
dXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ3MSwxMyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCkKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogewotICAg
IFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4g
cHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9y
U3R5bGVDaGFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5j
ZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3Vt
ZW50LmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRvclN0YXRl
QWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRSZWN0TmVl
ZHNVcGRhdGUoKTsKQEAgLTI3MDgsNyArMjY5Nyw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBG
cmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3Vu
CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxv
Y2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRyPFJhbmdl
PiByZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7CisgICAg
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAg
ICByZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRpb24pOwogICAgIHJlc3VsdFJhbmdl
LT5zZXRFbmQobm9kZSwgbG9jYXRpb24gKyBsZW5ndGgpOwogICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIFNFTF9ERUZBVUxUX0FG
RklOSVRZKTsKQEAgLTI3MjIsNyArMjcxMSw3IEBAIFZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxl
Y3Rpb246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzCiAg
ICAgICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKCk7CiAKICAgICBBU1NFUlQoc2VsZWN0aW9u
LmlzQ2FyZXRPclJhbmdlKCkpOwotICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOwor
ICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgIGZyYW1l
U2VsZWN0aW9uLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogCiAgICAgUG9zaXRpb24gc3RhcnRQ
b3NCZWZvcmVFeHBhbnNpb24oc2VsZWN0aW9uLnN0YXJ0KCkpOwpAQCAtMjg3MSw3ICsyODYwLDcg
QEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5QWx0ZXJpbmdD
dXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW8KICAgICBpZiAoIWFtb3VudCkKICAgICAgICAgcmV0
dXJuIG1fc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKLSAgICBGcmFtZVNlbGVjdGlv
biBmcmFtZVNlbGVjdGlvbjsKKyAgICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihtX2Rv
Y3VtZW50KTsKICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOwog
ICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gRGlyZWN0aW9u
Rm9yd2FyZCA6IERpcmVjdGlvbkJhY2t3YXJkOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJz
KGFtb3VudCk7IGkrKykKQEAgLTI4ODksNyArMjg3OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MpCiAgICAgaWYgKG1fY2FyZXRCbGlua3Mg
PT0gY2FyZXRCbGlua3MpCiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkK
LSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsgCisgICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKICAgICBpZiAobV9jYXJldFBhaW50KSB7CiAgICAgICAgIG1fY2FyZXRQYWludCA9
IGZhbHNlOyAKICAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVjdCgpOyAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBhYjI4OTA1MTE5ZDUxZDU0M2I1MzBlNzIyOGZk
MTk2NGVhYTA5M2IyLi4yNmY2MDkxNTY1ODZjN2QzMmE1ZWZmN2RhMTE2YWQ3YWNjZTI5NWNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0xNDAsNyArMTQwLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3B0aW9uczsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSBudWxscHRyKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihEb2N1bWVudCYpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVt
ZW50KCkgY29uc3Q7CiAgICAgIApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIFNob3Vs
ZENsb3NlVHlwaW5nLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhcigpOwotICAgIHZvaWQgcHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxs
QmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAKICAgICB2b2lkIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxh
eW91dCgpOwogICAgIHZvaWQgc2NoZWR1bGVBcHBlYXJhbmNlVXBkYXRlQWZ0ZXJTdHlsZUNoYW5n
ZSgpOwpAQCAtMzM2LDcgKzMzNiw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91
bnQpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBEb2N1bWVudCYg
bV9kb2N1bWVudDsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlmZjlmMzEyN2E4M2U1YjA4M2Q1
Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEyNGNmMTNiZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNw
cApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkCiAKIHZvaWQgSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgYm9vbCBwYXNzd29yZEVjaG9F
bmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0VuYWJsZWQoKTsKKyAgICBi
b29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNldHRpbmdzKCkucGFzc3dvcmRF
Y2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVkKQogICAgICAgICBkb2N1
bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAppbmRleCAx
NzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZiLi4yNzM1NWU2NmZiODlkNTU0
MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIElu
c2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNl
IHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgIXR5cGluZ1N0eWxlLT5p
c0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUgaW5z
ZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGU5MTMxZjZmYmYzMmQ4NjMw
NTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1MTM2OTk0NzE5ZDBlYzA2NWIz
ZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgp
CiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxlY3Rpb24uIFRoZSByZXN0IG9m
IHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1NlbGVjdGlvbiwgc28gYmFpbCBv
dXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2Rl
RW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgpLmVkaXRvcigpLmlzT3Zlcndy
aXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9ybU92ZXJ3cml0ZShtX3RleHQs
IG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
MjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0
eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lKCku
c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxl
PiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgewog
ICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRQb3NpdGlvbiwgRWRpdGlu
Z1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIXR5cGluZ1N0
eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFkOTM5ZDAxNGI1ODI5MmVkOWQ0
ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQxM2YwNTkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQu
Y3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpk
b0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2Vs
ZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghY2hhcmFjdGVy
Q291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxYzgxOTg0MGYwNTQzOWQyZWQy
ZjFkOGM1MmFjMjdmZTgxMmJlZjE4Li43Mzg2M2JlZmMzYjg5ODI3MzJmNTYwYTFkMGEzNTk1NjI5
MTIzZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6IENhbiB0aGlzIHdhaXQgdW50
aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQ/ICBUaGVyZSBkb2Vzbid0
IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQgYWZ0ZXIgdGhpcyB0aGF0IHF1
ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZyYW1lKCkuc2VsZWN0aW9uKCku
Y2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBp
bmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgZGVzdGluYXRpb24gdG8gZW5k
IHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQuICBUbyBhdm9pZCB0aGF0LCB3
ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0aG91dCBjaGFuZ2luZyB0aGUg
dmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUgc2FtZSB2aXNpYmxlIGxvY2F0
aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9u
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQu
Y3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4ZTliYTc5YmU2MzguLjBkZDI2
YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDAsNyArNDAsNyBAQCBTZXRT
ZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigp
OworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigp
OwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25U
b1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBoYW5lZCgpKSB7CiAgICAgICAg
IHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCwgbV9vcHRpb25zKTsKQEAg
LTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIAogdm9p
ZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5z
aG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSkgJiYgIXN0YXJ0aW5nU2Vs
ZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0
aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgzNjZiNTU4MDZkMDliZjYwMWZl
MWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0OThmZjI0OTRlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtOTgsOCArOTgsOCBAQCB2b2lk
IFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQoKQogICAgIG1fY2hlY2tlciA9
IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKEZyYW1lJiBmcmFtZSkK
LSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tlcihEb2N1bWVu
dCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV90aW1lclRv
UHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWRUb1By
b2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzExNCw3IEBAIFNwZWxsQ2hlY2tl
cjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50KiBTcGVsbENoZWNrZXI6OmNs
aWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOworICAgIFBh
Z2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JDbGllbnQoKS50ZXh0Q2hlY2tl
cigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjp0aW1lckZpcmVkVG9Q
cm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVja2VyOjppc0FzeW5jaHJvbm91
c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5zZXR0
aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKIGJvb2wgU3Bl
bGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlJiByYW5nZSkgY29uc3QKQEAg
LTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52b2tlUmVxdWVzdChSZWY8U3Bl
bGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7Ci0gICAg
Y2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGllbnQoKS0+cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3Qo
UmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9p
ZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZnJh
bWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3Vs
dHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vz
c2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFzdFByb2Nlc3NlZElkZW50aWZp
ZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkKICAgICAgICAgbV9sYXN0UHJv
Y2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBT
cGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmll
ciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3REYXRhLmNoZWNraW5nVHlwZXMo
KS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkKICAgICAgICAgICAgIG1hcmtl
clR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIGlmICghbWFya2Vy
VHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJz
KCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1h
cmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFya2VycygpLnJlbW92ZU1hcmtl
cnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CiAg
ICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5ZmI1YmVmNjcwNzMyMjJlYzQz
ZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4YTg2NjA4YTgxMTkzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03Niw3ICs3Niw3IEBAIGNsYXNz
IFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFNwZWxsQ2hlY2tSZXF1
ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1lJik7CisgICAgZXhwbGljaXQg
U3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hlY2tlcigpOwogCiAgICAgYm9v
bCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZp
ZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIsIGNv
bnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRp
ZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRl
bnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCA5OWU4ZjE1
ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIwODQ1MzUxZWE0MDNiOGM4NzM0
M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1faGFz
QmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS51bmFwcGxpZWRTcGVs
bENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3JyZWN0ZWQsIG1fY29ycmVjdGlv
bik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVuYXBwbGllZFNwZWxsQ29ycmVj
dGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwgbV9jb3JyZWN0aW9uKTsKICAg
ICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0
aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQpKQogICAgICAgICByZXR1
cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRTZWxlY3Rpb25Db21tYW5kOjpj
cmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNl
dFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25Ucmln
Z2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IDI2
NmQyM2JlMWIzZDM1Y2QyNTlkNjIxY2Q3NzMwNzIxNGNkODcyN2MuLmI1OTFiMTU5YTNlMzBiODZh
MzY1Zjk5ODkyNjQ2YWJmNjcxMTJiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5nQ29tbWFuZDo6VHlwaW5nQ29t
bWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBjb24K
IAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50
LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQog
ewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1l
KTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKKyAgICBpZiAoIWRv
Y3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21t
YW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlmIChSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNB
dXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9zaXRpb25UeXBlKTsKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlv
bnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCArMTgwLDggQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9w
dGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChEb2N1
bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewot
ICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFz
dFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsK
LSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZyYW1lKCkpOworICAgICAgICBp
ZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0Nv
bW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIHVwZGF0
ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1h
bmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJ
c0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgICAg
IGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9u
ZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxs
Q2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTE5OSwxMCArMTk2
LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1
bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2Fy
ZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBGSVhNRTogRm9yd2FyZCBkZWxl
dGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9zZSBhIG5ldyB0eXBpbmcgY29t
bWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwogICAgIGlmIChncmFu
dWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRp
ZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBmcmFt
ZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQg
PSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgeworICAg
ICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihs
YXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElzQXV0b2NvbXBsZXRpb24p
OwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0
Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91
bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcpOwpA
QCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLAogICAgIFR5cGluZ0Nv
bW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtleSwgZW1wdHlTdHJpbmcoKSwg
b3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6
OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29t
bWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9pZCBUeXBpbmdDb21tYW5kOjp1
cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1h
bmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZnJh
bWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rp
b24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoY3VycmVudFNl
bGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNl
bGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZAogCiB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBT
dHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3Np
dGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VS
VChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICBmcmFtZS0+ZWRp
dG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3
bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOwogICAg
IAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGluc2VydFRleHQoZG9jdW1lbnQs
IHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3Np
dGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVlZCB0byB0YWtlIHNlbGVjdGlv
bkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBGcmFtZVNlbGVjdGlvbidz
IGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9u
VHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3Vt
ZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIExPRyhFZGl0aW5nLCAiVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0LnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbiA9
IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAgU3RyaW5nIG5ld1RleHQg
PSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQsIHNlbGVjdGlvbkZvckluc2Vy
dGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogICAgIAog
ICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxlY3Rpb24gYXBwcm9wcmlhdGVs
eSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0aGF0IGlzIGRpZmZlcmVudCBm
cm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBjaGFu
Z2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3VzdG9tIHNlbGVjdGlvbnMgaW4g
YSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBvZiB0aGUgY29tbWFuZHMuCi0g
ICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBp
bmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlmIChSZWZQdHI8
VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBpZiAobGFzdFR5cGluZ0NvbW1h
bmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvckluc2VydGlvbikgewogICAgICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZv
ckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0RW5kaW5nU2Vs
ZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYsMTIgKzI1NSwxMiBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8gY21kID0gVHlwaW5nQ29tbWFu
ZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBvcHRpb25zLCBjb21wb3Np
dGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQoZnJhbWUuZ2V0KCksIGNt
ZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsKKyAgICBh
cHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1lKCksIGNtZC5nZXQoKSwgc2Vs
ZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsKIH0KIAogdm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkp
KSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxh
c3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAg
IGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9j
b21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlw
ZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNo
b3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29y
cmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiAK
IHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+
IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGlu
ZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhk
b2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRp
b24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0Q29tcG9zaXRpb25UeXBl
KFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgp
OwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIAogdm9pZCBUeXBp
bmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlw
aW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3Vt
ZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5n
Q29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQp
KSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlv
bnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENv
bXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGluZ0Nv
bW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMgJiBS
ZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcsOSArMjk2LDkgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQmIGRvY3VtZW50
LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIElu
c2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucyktPmFwcGx5KCk7
CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkKK1JlZlB0cjxUeXBpbmdDb21t
YW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5n
KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+
IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RFZGl0Q29tbWFuZCgpOworICAg
IFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kID0gZG9jdW1lbnQu
ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFsYXN0RWRpdENvbW1hbmQgfHwg
IWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwgIXN0YXRpY19jYXN0PFR5cGlu
Z0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09wZW5Gb3JNb3JlVHlwaW5nKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYgKzMxMCwxNiBAQCBib29sIFR5
cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFuZFVudGlsQWRkaW5nVHlwaW5n
Q29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxpbmdJbml0aWFsVHlwaW5nQ29t
bWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0aW5nQWN0aW9uKCkpOwogfQog
Ci12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1lKiBmcmFtZSkKK3ZvaWQgVHlw
aW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChS
ZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFu
ZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21t
YW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JU
eXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+Y2xvc2VUeXBpbmco
KTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmVu
c3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5n
KEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKQordm9p
ZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9u
SWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygq
ZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAg
ICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbk9uTGFzdElu
c2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00MzYsMTkgKzQyNSwxNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAKIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBl
KQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0KICNpZiBQTEFURk9STShN
QUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY1F1b3RlU3Vic3Rp
dHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAhZnJhbWUuZWRpdG9yKCku
aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKKyAgICAgICAgJiYg
IWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQo
KQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rp
b25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNE
YXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigp
LmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUoKSkK
KyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUo
KSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRv
cigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsK
ICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxlY3Rpb24gdGhhdCByZXN1bHRz
IGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBzcGVsbGNoZWNr
LiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAgICAgIFN0
cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAgIGlmIChyYW5nZSAmJiAoY29t
bWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8fCBjb21tYW5kVHlwZSA9PSBU
eXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29t
bWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0Nv
bW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCkpCiAgICAgICAg
ICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQoKnJhbmdlKS5zdHJpcFdo
aXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NB
ZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3Vz
V29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigpLCAhc3RyaXBw
ZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kVHlw
ZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZnJhbWUuZWRpdG9y
KCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAgICAgICAgICBkb2N1bWVudCgp
LmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwogI2Vsc2UKICAgICAgICAg
VU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8gSWYgdGhpcyBidWcgZ2V0cyBm
aXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNvdWxkIGJlIHJlbW92ZWQ6CkBA
IC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0
ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdvcmRTaWRlKTsKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIHN0YXJ0V29yZFNpZGUpOwog
ICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5tYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigpLCBmYWxzZSk7
CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsKICNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYgKzQ4NCwyNiBAQCBib29sIFR5
cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kIGNv
bW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghcmFuZ2Ug
fHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAgICAgICByZXR1cm4gZnJhbWUo
KS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJldHVybiBkb2N1bWVudCgpLmVk
aXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJn
ZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBmcmFtZSgpLmVkaXRvcigpLndp
bGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0p
OworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMs
IHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwogfQogCiB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlw
ZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Cisg
ICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFtZSgpKTsKIAogICAgIHVw
ZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRo
aXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogICAg
IC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFsc28gcGVyZm9ybSBjb3JyZWN0
aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQgaGFwcGVuIGFmdGVyIHRoZSB0
eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcpCiAg
ICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlwZUZvckFkZGVkVHlw
aW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNraW5nIGNvZGUgcmVxdWlyZXMg
dGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50IGlzc3VlcyBsaWtlIHRoYXQg
aW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBhcyBtaXNzcGVsbGVkLgogICAg
IG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKTsK
LSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgZG9jdW1lbnQo
KS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5kaWYKIH0KIApAQCAtNTM1LDkg
KzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dEFuZE5vdGlmeUFjY2Vzc2li
aWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAgICAgTE9HKEVkaXRpbmcsICJU
eXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5ICh0ZXh0ICVz
LCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51dGY4KCkuZGF0YSgpLCBzZWxl
Y3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNl
ZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0
eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwotICAgIHJl
cGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCB0ZXh0LCBmcmFtZSgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBB
WFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxh
Y2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAsOSArNTM3LDYgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKGNvbnN0IFN0cmluZyAm
dGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBv
c2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxp
bmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VBbGxXaGl0ZXNwYWNl
cywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rpb24oKSk7Ci0KLSAgICBGcmFt
ZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1l
KTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0VGV4dCk7CiB9CiAKQEAgLTU2
NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGlu
Z0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwogfQogCiB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAgIEFj
Y2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0
KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydExpbmVCcmVh
aygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRv
Y3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5nLCAi
XG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRleHQu
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1lbnQoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlV
bmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01ODgsMTcgKzU2
OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBmYWxzZSwgZmFsc2UsIEVk
aXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlw
aW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNlcGFyYXRvcik7CiB9CiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNz
aWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQo
ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxh
Y2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAgcmVwbGFjZWRUZXh0LnBvc3RU
ZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlw
aW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBjb21w
b3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2Vk
UmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCkKICAgICB9CiAgICAgICAg
IAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNv
bW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KTsKIH0KIAogdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRB
bmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0
IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBBY2Nl
c3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRl
bnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihk
b2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywg
IlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0
LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2Jq
ZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5
VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNjUyLDEwICs2
MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSgpCiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQ
dHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRp
dG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAg
IGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAgLTY3NCw3ICs2NDgsNyBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogCiAgICAgICAgIG1fc21hcnREZWxldGUgPSBmYWxz
ZTsKIAotICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247CisgICAgICAgIEZyYW1lU2Vs
ZWN0aW9uIHNlbGVjdGlvbihkb2N1bWVudCgpKTsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVj
dGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFudWxhcml0
eSk7CiAgICAgICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nICYmIHNlbGVjdGlvbi5pc0NhcmV0
KCkgJiYgZ3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCkBAIC03NDgsMjAgKzcy
MiwyMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjov
L3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVk
aXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJh
bWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlz
Q2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVj
dGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0Rl
bGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09w
ZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKCpz
ZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJhbmdl
VG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwor
ICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0
aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRo
ZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRl
KTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKIAogdm9pZCBU
eXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBS
ZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUu
ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwor
ICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAgLTc5OCw3ICs3NzEs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgICAgICAvLyBIYW5kbGUgZGVsZXRlIGF0
IGJlZ2lubmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAvLyBEbyBub3RoaW5nIGluIHRoZSBj
YXNlIHRoYXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiBhCiAgICAgICAgIC8vIHJvb3Qg
ZWRpdGFibGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudC4KLSAgICAgICAg
RnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxlY3Rp
b24oZG9jdW1lbnQoKSk7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oZW5kaW5nU2Vs
ZWN0aW9uKCkpOwogICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRl
cmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlm
IChzZWxlY3Rpb24uaXNOb25lKCkpCkBAIC04NTcsMTMgKzgzMCwxMyBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSwgYm9vbCBzaAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91
bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlL
aXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxh
dGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAg
IGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2Vs
ZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBp
ZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtl
eSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblRvRGVsZXRlLmZp
cnN0UmFuZ2UoKSkpKQpAQCAtODczLDcgKzg0Niw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNo
CiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlv
blRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFt
ZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25U
b0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1v
ZGU6OkFwcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9L
aWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7
CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRp
bmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBt
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRG
b3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1Mzg1NzVjYWEzODc2YmI5
YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQzZjFjODY5ZDU4ZWI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTY1LDkgKzY1LDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhEb2N1bWVudCYsIE9wdGlv
bnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCYs
IE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEZyYW1l
Kik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1
cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVybiBtX29wZW5G
b3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsgbV9vcGVuRm9yTW9yZVR5
cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RU
eXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
RG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwogICAgIGJvb2wgaXNUeXBp
bmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmlu
YWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxlKCkgY29uc3QgZmluYWw7
CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50
U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCos
IERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKEVUeXBp
bmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdD
b21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBS
ZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0VkaXRvckNvY29hLm1tCmluZGV4IDdmZTMwZTBhMGVhMmU3ZWJlMzNhMTI3YzMxZjc3YjRlMzJm
MDVjYTMuLjE0YjM1YzI4OGIzNmM2ZjBiY2RmMzAxZjk2NDljOGY5YmY1ZjBlNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtODAsOCArODAsOCBA
QCBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0
cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKgogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFy
YW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhj
bHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3Mo
KS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29t
cG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICByZXR1cm4g
c2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQ
cml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVN
RU5UKQpAQCAtMTA1LDE4ICsxMDUsMTggQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBl
c0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogI2Vu
ZGlmCiAKLXN0YXRpYyBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzZWxlY3Rpb25Bc0F0
dHJpYnV0ZWRTdHJpbmcoY29uc3QgRnJhbWUmIGZyYW1lKQorc3RhdGljIFJldGFpblB0cjxOU0F0
dHJpYnV0ZWRTdHJpbmc+IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhjb25zdCBEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgYXV0byByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIHJldHVybiByYW5nZSA/IGF0dHJpYnV0
ZWRTdHJpbmcoKnJhbmdlKS5zdHJpbmcgOiBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0XSk7CiB9CiAKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewotICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9u
QXNBdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUpOworICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9u
QXNBdHRyaWJ1dGVkU3RyaW5nKG1fZG9jdW1lbnQpOwogCiAgICAgUGFzdGVib2FyZFdlYkNvbnRl
bnQgY29udGVudDsKLSAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50
KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgY29udGVudC5jb250ZW50
T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwogICAg
IGNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwog
ICAgIGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2
ZUZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJpbmcgY29udGFp
bnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkgOiBudWxscHRy
OwpAQCAtMTMxLDEwICsxMzEsMTAgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVj
dGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiB7Ci0gICAg
YXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcobV9mcmFtZSk7CisgICAg
YXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcobV9kb2N1bWVudCk7CiAK
ICAgICBQYXN0ZWJvYXJkV3JpdGVyRGF0YTo6V2ViQ29udGVudCB3ZWJDb250ZW50OwotICAgIHdl
YkNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRp
ZmllckZvclBhc3RlYm9hcmQoKTsKKyAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2Rv
Y3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgd2ViQ29udGVudC5j
YW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgd2ViQ29u
dGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0
KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0
dGFjaG1lbnRzXSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CkBA
IC0xNDksNyArMTQ5LDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRX
cml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
RWRpdG9yOjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKQogewotICAgIGF1dG8gYXJjaGl2
ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUpOworICAg
IGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24obV9k
b2N1bWVudC5mcmFtZSgpKTsKICAgICBpZiAoIWFyY2hpdmUpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShhcmNoaXZlLT5yYXdEYXRhUmVw
cmVzZW50YXRpb24oKS5nZXQoKSk7CkBAIC0xNzcsMTEgKzE3NywxMSBAQCBTdHJpbmcgRWRpdG9y
OjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAKIHZvaWQg
RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVk
U3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9j
a3F1b3RlSGFuZGxpbmcpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFn
bWVudEFuZEFkZFJlc291cmNlcyhtX2ZyYW1lLCBhdHRyaWJ1dGVkU3RyaW5nKSkgeworICAgIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcygqbV9kb2N1bWVudC5mcmFtZSgpLCBhdHRyaWJ1dGVkU3RyaW5nKSkgewogICAg
ICAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5n
ZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAgICAgICAg
cGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwg
bWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJURkZvcm1hdChOU0F0dHJpYnV0ZWRT
dHJpbmcgKnN0cmluZykKIC8vIE9yIHJlZmFjdG9yIHNvIGl0IGRvZXMgbm90IGRvIHRoYXQuCiBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQo
UGFzdGVib2FyZCYgcGFzdGVib2FyZCwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGJvb2wg
YWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewotICAgIFdlYkNvbnRlbnRS
ZWFkZXIgcmVhZGVyKG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKKyAgICBXZWJD
b250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1Bs
YWluVGV4dCk7CiAgICAgcGFzdGVib2FyZC5yZWFkKHJlYWRlcik7CiAgICAgY2hvc2VQbGFpblRl
eHQgPSByZWFkZXIubWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dDsKICAgICByZXR1cm4gV1RGTW92
ZShyZWFkZXIuZnJhZ21lbnQpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgRWRpdG9yOjp0YWtl
RmluZFN0cmluZ0Zyb21TZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YXV0byBzdHJpbmdGcm9tU2VsZWN0aW9uID0gbV9mcmFtZS5kaXNwbGF5U3RyaW5nTW9kaWZpZWRC
eUVuY29kaW5nKHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpKTsKKyAgICBhdXRvIHN0cmlu
Z0Zyb21TZWxlY3Rpb24gPSBtX2RvY3VtZW50LmZyYW1lKCktPmRpc3BsYXlTdHJpbmdNb2RpZmll
ZEJ5RW5jb2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkpOwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKICAgICB0eXBlcy5hcHBlbmQoU3RyaW5n
KGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0
ay9FZGl0b3JHdGsuY3BwCmluZGV4IGU5ZGZkZmNiZWRhNGFkYzM2ODYwMmM5MWMwMjBlNjM2YjEw
MDQ4M2QuLmQ0MWU0YjkzMDI3NjEyNTY4ZGFlNGY5YmU5OGUwMTQyM2FkZjE4MGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApAQCAtOTQsNyArOTQsNyBAQCB2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRp
b25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFp
blRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsIG1fZnJhbWUsICpyYW5nZSwgb3B0
aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4
dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksICpy
YW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9z
ZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0
ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygq
ZnJhZ21lbnQpOwpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAgICAgUGFzdGVib2FyZFdl
YkNvbnRlbnQgcGFzdGVib2FyZENvbnRlbnQ7CiAgICAgcGFzdGVib2FyZENvbnRlbnQuY2FuU21h
cnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIHBhc3RlYm9hcmRD
b250ZW50LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKTsKLSAgICBwYXN0ZWJv
YXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZSht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5n
TG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRU
cmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAgICBwYXN0ZWJvYXJkQ29u
dGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9j
YWxGaWxlVVJMc0ZvclByaXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRU
cmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKICAgICBwYXN0ZWJvYXJkLndy
aXRlKHBhc3RlYm9hcmRDb250ZW50KTsKIH0KIAogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVk
aXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNv
bnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9z
ZVBsYWluVGV4dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERh
dGEocGFzdGVib2FyZCwgbV9mcmFtZSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxh
aW5UZXh0KTsKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEocGFz
dGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNo
b3NlUGxhaW5UZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IDNmMjljNGUyM2UyZjZjZGY1ZDQ2NDJmMmRj
MTg4NDZjNTdlMzJkODYuLjY3MjRkYjg1MGRhNzU5OWY4MGE2NjI2NjRlNjUwOGEzNmU1MmYyMjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTgyLDcgKzgyLDcg
QEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJl
Y3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXIKICAgICAvLyBJZiB0aGUgdGV4dCBoYXMgbGVmdCBv
ciByaWdodCBhbGlnbm1lbnQsIGZsaXAgbGVmdC0+cmlnaHQgYW5kIHJpZ2h0LT5sZWZ0LiAKICAg
ICAvLyBPdGhlcndpc2UsIGRvIG5vdGhpbmcuCiAKLSAgICBhdXRvIHNlbGVjdGlvblN0eWxlID0g
RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgYXV0byBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5
bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKQogICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xMjYsMTQgKzEyNiwxNCBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4
dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9u
IGRpcgogICAgIGlmICghbmV3VmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVsZW1lbnQq
IGZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgp
OwogICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKmZv
Y3VzZWRFbGVtZW50KSB8fCAoaXM8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KQog
ICAgICAgICAmJiAoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5p
c1RleHRGaWVsZCgpCiAgICAgICAgICAgICB8fCBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
Zm9jdXNlZEVsZW1lbnQpLmlzU2VhcmNoRmllbGQoKSkpKSkgewogICAgICAgICBpZiAoZGlyZWN0
aW9uID09IFdyaXRpbmdEaXJlY3Rpb246Ok5hdHVyYWwpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGRvd25jYXN0PEhUTUxFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWxpZ25BdHRyLCBuZXdWYWx1ZSk7Ci0gICAgICAgIG1f
ZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBtX2RvY3Vt
ZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTQ2LDcgKzE0Niw3IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVVbmNoYW5nZWFibGVTdHlsZXMoKQog
ewogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBzdHlsZXMgdGhhdCB0aGUgdXNlciBjYW5u
b3QgbW9kaWZ5IGJ5IGFwcGx5aW5nIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgogICAgIAotICAgIGF1
dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUobV9mcmFtZS5kb2N1bWVudCgp
LT5ib2R5T3JGcmFtZXNldCgpKTsKKyAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6Y3JlYXRlKG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSk7CiAgICAgYXV0byBkZWZhdWx0
U3R5bGUgPSBlZGl0aW5nU3R5bGUtPnN0eWxlKCktPm11dGFibGVDb3B5KCk7CiAgICAgCiAgICAg
Ly8gVGV4dCB3aWRnZXRzIGltcGxlbWVudCBiYWNrZ3JvdW5kIGNvbG9yIHZpYSB0aGUgVUlWaWV3
IHByb3BlcnR5LiBUaGVpciBib2R5IGVsZW1lbnQgd2lsbCBub3QgaGF2ZSBvbmUuCkBAIC0yMTgs
NyArMjE4LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogewogICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgYm9vbCBhbGxvd1BsYWluVGV4dCA9IG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KTsKLSAgICBXZWJDb250ZW50
UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0KTsKKyAgICBXZWJD
b250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIGFsbG93UGxh
aW5UZXh0KTsKICAgICBpbnQgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXMgPSBjbGllbnQoKS0+Z2V0
UGFzdGVib2FyZEl0ZW1zQ291bnQoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
UGFzdGVib2FyZEl0ZW1zOyArK2kpIHsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9tRGVsZWdhdGUoaSk7CkBA
IC0yNDIsNyArMjQyLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogCiB2b2lkIEVkaXRvcjo6
aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9u
UGhyYXNlcywgaWQgbWV0YWRhdGEpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChkaWN0YXRpb25QaHJhc2VzLmlzRW1wdHkoKSkKQEAgLTI2MCw3
ICsyNjAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgIC8vIFNvbWUgZGF5IHdlIGNv
dWxkIG1ha2UgdGhlbSBVbmRvYWJsZSwgYW5kIGxldCBjYWxsZXJzIGNsZWFyIHRoZSBVbmRvIHN0
YWNrIGV4cGxpY2l0bHkgaWYgdGhleSB3aXNoLgogICAgIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25z
KCk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCkBA
IC0zMzgsNyArMzM4LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNv
bnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIAogICAgIC8vIEFzIGEgc2lkZSBl
ZmZlY3QgdGhpcyBmdW5jdGlvbiBzZXRzIGEgY2FyZXQgc2VsZWN0aW9uIGFmdGVyIHRoZSBpbnNl
cnRlZCBjb250ZW50LiBNdWNoIG9mIHdoYXQKICAgICAvLyBmb2xsb3dzIGlzIG1vcmUgZXhwZW5z
aXZlIGlmIHRoZXJlIGlzIGEgc2VsZWN0aW9uLCBzbyBjbGVhciBpdCBzaW5jZSBpdCdzIGdvaW5n
IHRvIGNoYW5nZSBhbnl3YXkuCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhcigpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIC8vIGNsZWFyIG91dCBhbGwg
Y3VycmVudCBjaGlsZHJlbiBvZiBlbGVtZW50CiAgICAgZWxlbWVudC5yZW1vdmVDaGlsZHJlbigp
OwpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVu
dChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgc2VsZWN0aW9uLnNl
dEJhc2UodmlzaWJsZVBvcyk7CiAgICAgc2VsZWN0aW9uLnNldEV4dGVudCh2aXNpYmxlUG9zKTsK
IAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIAogICAgIGNs
aWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKIH0KQEAgLTM4OCw3ICszODgsNyBA
QCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBFbGVtZW50JiBlbGVtZW50KQogLy8gaGF2ZSBhIHN0YWxlIHNlbGVjdGlvbi4KIHZvaWQgRWRp
dG9yOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9y
ZVR5cGluZygpCiB7Ci0gICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFz
Q3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoJm1fZnJhbWUsIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFR5cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKG1fZG9jdW1lbnQs
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0
b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BF
LmNwcAppbmRleCA1ZDE1YTY0NjFjNTY5YjYzYWNjNjE1Nzk1ZTM0NDc3MDhhNGQ1NTc3Li4xMmZk
NmE0M2VhMDVhMmEwZTcyYjc0YmE3MmQ5NjI4NjQ3MDViYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAgLTY3LDggKzY3LDggQEAgdm9p
ZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiB7CiAgICAgUGFzdGVib2FyZFdlYkNvbnRlbnQgcGFzdGVib2FyZENvbnRlbnQ7CiAgICAg
cGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpOwot
ICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxB
cHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZ
ZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxp
emVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHBh
c3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJh
bmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNF
eGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxp
emVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogICAgIHBh
c3RlYm9hcmQud3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQogCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQs
IE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9z
ZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgbV9mcmFtZSwgKnJhbmdl
LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxh
aW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUo
KSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCks
IGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0
aW5nKCpmcmFnbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5k
ZXggOTMxYTIzMDBmMDk2NjQyNDNkODY2YWM4NjQwYTk3MWQ2YzU5MjE0ZC4uM2FjZDk5NzgzNjdh
NmZjYWQ0NTJlMTBkNzVmNWUzMDc3Y2RhN2ZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4K
IHZvaWQgRWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2Fy
ZCgmcGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQgfSk7CiAgICAgZWxz
ZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7CkBA
IC0xMzYsMTcgKzEzNiwxNiBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2Fy
ZChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIEFTU0VS
VChub2RlKTsKIAotICAgIGlmICgmbm9kZS0+ZG9jdW1lbnQoKSAhPSBtX2ZyYW1lLmRvY3VtZW50
KCkpCisgICAgaWYgKG5vZGUtPmRvY3VtZW50KCkgIT0gbV9kb2N1bWVudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KKyAgICBSZWY8RG9j
dW1lbnQ+IHByb3RlY3RvcihtX2RvY3VtZW50KTsKICAgICBhdXRvIHJhbmdlID0gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpub2RlKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlKSwgRnJhbWVTZWxlY3Rpb246OkRvTm90
U2V0Rm9jdXMpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24ocmFuZ2UpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAKICAg
ICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwogCi0gICAgaWYgKCFtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsK
KyAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkgewogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQo
cGFzdGVib2FyZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMjAsNyArMjE5LDcgQEAg
c3RhdGljIHZvaWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVtZW50LCBSZWZQdHI8SW1hZ2U+
JiBpbWFnZSwgQ2FjaGVkSW1hZ2UqJgogCiB2b2lkIEVkaXRvcjo6c2VsZWN0aW9uV2lsbENoYW5n
ZSgpCiB7Ci0gICAgaWYgKCFoYXNDb21wb3NpdGlvbigpIHx8IGlnbm9yZVNlbGVjdGlvbkNoYW5n
ZXMoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghaGFzQ29tcG9z
aXRpb24oKSB8fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FuY2VsQ29tcG9zaXRpb24o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9u
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0K
aW5kZXggODM0Y2MzNmJhOGE2N2EyYmU4YTdiN2I0OGNlYTNlMWY5NWM3MWNiNy4uODIzOTNkOTc4
NDE1MTIxOWI0N2MyYTFlODMzOTMyNTM4ZmUwNWUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KQEAgLTM0LDEwICszNCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0
eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50
KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KICAg
ICBpZiAobV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQo
KS5pc05vdE51bGwoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1
bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGlmIChBWE9iamVjdENhY2hl
KiBjYWNoZSA9IG1fZG9jdW1lbnQuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAg
ICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFy
dCgpLCBpbnRlbnQsIG1fc2VsZWN0aW9uKTsKICAgICB9CiAKQEAgLTQ2LDEwICs0NCwxMCBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdl
KGNvbnN0IEFYVGV4dFN0YXRlQ2hhbgogICAgIGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFtX3Nl
bGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclZpZXcqIHJl
bmRlclZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpOworICAgIFJlbmRlclZpZXcqIHJlbmRl
clZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAg
ICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPnZpZXco
KTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlm
ICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dp
bi9FZGl0b3JXaW4uY3BwCmluZGV4IDVlODY4N2Y4OTRiZWM2MDRjYzYyMWJkNGUwZDkxMjgyOTVj
MzRmNTkuLmM3OTZiZmFhZjY2ZWU5NGE4NWM1NWYzOTIzNDkxNTVkMjc0YTg2MGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcApAQCAtNDIsNyArNDIsNyBAQCB2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRp
b25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFp
blRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2Fy
ZC0+ZG9jdW1lbnRGcmFnbWVudChtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFz
dGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQo
Km1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9u
OjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAm
JiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1
b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC02OSw5ICs2OSw5IEBAIHN0YXRp
YyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRh
KFBsYXRmb3JtRHJhZ0RhdGEmCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJD
b250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgY29uc3QgU2ltcGxl
UmFuZ2UmLCBib29sIC8qYWxsb3dQbGFpblRleHQqLywgYm9vbCYgLypjaG9zZVBsYWluVGV4dCov
KQogewogICAgIGlmIChDT01QdHI8SURhdGFPYmplY3Q+IHBsYXRmb3JtRHJhZ0RhdGEgPSBwYXN0
ZWJvYXJkLmRhdGFPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBs
YXRmb3JtRGF0YSgqcGxhdGZvcm1EcmFnRGF0YSwgbV9mcmFtZSk7CisgICAgICAgIHJldHVybiBj
cmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEsICptX2RvY3Vt
ZW50LmZyYW1lKCkpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0
YShwYXN0ZWJvYXJkLmRyYWdEYXRhTWFwKCksIG1fZnJhbWUpOworICAgIHJldHVybiBjcmVhdGVG
cmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0YU1hcCgpLCAqbV9kb2N1
bWVudC5mcmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZEZyYW1lLmNwcAppbmRleCA1NWU0MWI3YWY1ZGM1YjlmNzFlZTdmOWFlZDZj
ZjYzZmNhMzBhMjExLi5kM2Q2NjVmYjcxMjJiNmNmN2FhYTNjMzE0NWMyMGMyMDBhYzk3ZTAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBA
IHZvaWQgQ2FjaGVkRnJhbWU6OmRlc3Ryb3koKQogICAgIG1fZG9jdW1lbnQtPnJlbW92ZUFsbEV2
ZW50TGlzdGVuZXJzKCk7CiAKICAgICBtX2RvY3VtZW50LT5zZXRCYWNrRm9yd2FyZENhY2hlU3Rh
dGUoRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgbV9kb2N1bWVudC0+cHJl
cGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgbV9kb2N1bWVudC0+d2lsbEJlUmVtb3ZlZEZyb21G
cmFtZSgpOwogCiAgICAgY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCmluZGV4IDhiMDVmODM3NTE0ZjUwYWUwOGIyYWY0ZDg0ZTNiMWVkNTcyNGFlYzcuLjU5MTI4
YmViODc1NjhkMWY3OWY4ODQ1NjY0MmM1NTkxY2ViMTIyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcApAQCAtNTQ4LDExICs1NDgsMTQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
c3RvcCgpCiB2b2lkIEZyYW1lTG9hZGVyOjp3aWxsVHJhbnNpdGlvblRvQ29tbWl0dGVkKCkKIHsK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZnJhbWUgaXMgc3RpbGwgZnVs
bHkgaW4gcGxhY2UgKG5vdCBjYWNoZWQsIG5vdCBkZXRhY2hlZCksIGJ1dCB3aWxsIGJlIHJlcGxh
Y2VkLgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBp
ZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5lZGl0b3Io
KS5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgaWYgKGRvY3VtZW50LT5lZGl0b3IoKS5oYXNDb21w
b3NpdGlvbigpKSB7CiAgICAgICAgIC8vIFRoZSB0ZXh0IHdhcyBhbHJlYWR5IHByZXNlbnQgaW4g
RE9NLCBzbyBpdCdzIGJldHRlciB0byBjb25maXJtIHRoYW4gdG8gY2FuY2VsIHRoZSBjb21wb3Np
dGlvbi4KLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKLSAg
ICAgICAgaWYgKEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS5lZGl0b3IoKS5j
bGllbnQoKSkgeworICAgICAgICBkb2N1bWVudC0+ZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9u
KCk7CisgICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCA9IGRvY3VtZW50LT5l
ZGl0b3IoKS5jbGllbnQoKSkgewogICAgICAgICAgICAgZWRpdG9yQ2xpZW50LT5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+ZGlz
Y2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOwogICAgICAgICB9CkBAIC01NjMsNyArNTY2LDcg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogewogICAgIGhpc3RvcnkoKS5zYXZlRG9j
dW1lbnRTdGF0ZSgpOwogCi0gICAgRG9jdW1lbnQqIGN1cnJlbnREb2N1bWVudCA9IG1fZnJhbWUu
ZG9jdW1lbnQoKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IGN1cnJlbnREb2N1bWVudCA9IG1fZnJh
bWUuZG9jdW1lbnQoKTsKICAgICBVbmxvYWRFdmVudFBvbGljeSB1bmxvYWRFdmVudFBvbGljeTsK
ICAgICBpZiAobV9mcmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5wYWdlKCktPmNocm9tZSgpLmNsaWVu
dCgpLmlzU1ZHSW1hZ2VDaHJvbWVDbGllbnQoKSkgewogICAgICAgICAvLyBJZiB0aGlzIGlzIHRo
ZSBTVkdEb2N1bWVudCBvZiBhbiBTVkdJbWFnZSwgbm8gbmVlZCB0byBkaXNwYXRjaCBldmVudHMg
b3IgcmVjYWxjU3R5bGUuCkBAIC01NzUsNyArNTc4LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xv
c2VVUkwoKQogCiAgICAgc3RvcExvYWRpbmcodW5sb2FkRXZlbnRQb2xpY3kpOwogICAgIAotICAg
IG1fZnJhbWUuZWRpdG9yKCkuY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKKyAgICBpZiAoY3Vy
cmVudERvY3VtZW50KQorICAgICAgICBjdXJyZW50RG9jdW1lbnQtPmVkaXRvcigpLmNsZWFyVW5k
b1JlZG9PcGVyYXRpb25zKCk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQpA
QCAtNTg3LDcgKzU5MSw2IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoKQogICAgIH0K
IAogICAgIG1fZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLmNhbmNlbCgpOwotICAgIG1fZnJh
bWUuZWRpdG9yKCkuY2xlYXJMYXN0RWRpdENvbW1hbmQoKTsKIAogICAgIG1faXNDb21wbGV0ZSA9
IGZhbHNlOwogICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSBmYWxzZTsKQEAgLTY1MCw4ICs2
NTMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQ2xlYXJXaW5kb3dOYW1lKGNvbnN0IEZy
YW1lJiBmcmFtZSwgY29uc3QgRG9jdW1lbnQmIG5ldwogCiB2b2lkIEZyYW1lTG9hZGVyOjpjbGVh
cihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29s
IGNsZWFyU2NyaXB0T2JqZWN0cywgYm9vbCBjbGVhckZyYW1lVmlldywgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgaGFuZGxlRE9NV2luZG93Q3JlYXRpb24pCiB7Ci0gICAgbV9mcmFtZS5lZGl0b3Io
KS5jbGVhcigpOwotCiAgICAgYm9vbCBuZWVkZWRDbGVhciA9IG1fbmVlZHNDbGVhcjsKICAgICBt
X25lZWRzQ2xlYXIgPSBmYWxzZTsKIApAQCAtNjU5LDcgKzY2MCw3IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRp
ZXMsIGJvb2wKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5jYW5jZWxQYXJzaW5nKCk7CiAg
ICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICAg
ICAgYm9vbCBoYWRMaXZpbmdSZW5kZXJUcmVlID0gbV9mcmFtZS5kb2N1bWVudCgpLT5oYXNMaXZp
bmdSZW5kZXJUcmVlKCk7Ci0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+cHJlcGFyZUZvckRl
c3RydWN0aW9uKCk7CisgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+d2lsbEJlUmVtb3ZlZEZy
b21GcmFtZSgpOwogICAgICAgICBpZiAoaGFkTGl2aW5nUmVuZGVyVHJlZSkKICAgICAgICAgICAg
IG1fZnJhbWUuZG9jdW1lbnQoKS0+YWRqdXN0Rm9jdXNlZE5vZGVPbk5vZGVSZW1vdmFsKCptX2Zy
YW1lLmRvY3VtZW50KCkpOwogICAgIH0KQEAgLTY4MCw3ICs2ODEsNiBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0
aWVzLCBib29sCiAgICAgICAgICAgICBtX2ZyYW1lLnRyZWUoKS5zZXROYW1lKG51bGxBdG9tKCkp
OwogICAgIH0KIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucHJlcGFyZUZvckRlc3RydWN0aW9u
KCk7CiAgICAgbV9mcmFtZS5ldmVudEhhbmRsZXIoKS5jbGVhcigpOwogCiAgICAgaWYgKGNsZWFy
RnJhbWVWaWV3ICYmIG1fZnJhbWUudmlldygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAxYTYw
ODk2NjM0NmQxMzY4MmI5M2I5MGQyNmM3NzljMjJkZmJjZjE4Li4zOWRlYTRkNWUyNWE3YzYzZDli
ZmRiMDNhYTVlNzU1NTRiYjFiYzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMTU2LDggKzE1
Niw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93
bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBtX25hdmlnYXRpb25TY2hlZHVs
ZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigqdGhpcykpCiAgICAgLCBtX293
bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdChtYWtlVW5pcXVlUmVmPFNj
cmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRp
dG9yPigqdGhpcykpCi0gICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0
aW9uPih0aGlzKSkKICAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlcihtYWtlVW5pcXVlUmVmPENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzKSkKICAgICAsIG1fcGFnZVpvb21GYWN0b3IocGFy
ZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAgICAgLCBtX3RleHRab29tRmFjdG9yKHBhcmVudFRl
eHRab29tRmFjdG9yKHRoaXMpKQpAQCAtMjM0LDcgKzIzMiw3IEBAIHZvaWQgRnJhbWU6OnNldFZp
ZXcoUmVmUHRyPEZyYW1lVmlldz4mJiB2aWV3KQogICAgIC8vIG5vdGlmaWVkLiBJZiB3ZSB3YWl0
IHVudGlsIHRoZSB2aWV3IGlzIGRlc3Ryb3llZCwgdGhlbiB0aGluZ3Mgd29uJ3QgYmUgaG9va2Vk
IHVwIGVub3VnaCBmb3IKICAgICAvLyB0aGVzZSBjYWxscyB0byB3b3JrLgogICAgIGlmICghdmll
dyAmJiBtX2RvYyAmJiBtX2RvYy0+YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6
OkluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgbV9kb2MtPnByZXBhcmVGb3JEZXN0cnVjdGlv
bigpOworICAgICAgICBtX2RvYy0+d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogICAgIAogICAg
IGlmIChtX3ZpZXcpCiAgICAgICAgIG1fdmlldy0+bGF5b3V0Q29udGV4dCgpLnVuc2NoZWR1bGVM
YXlvdXQoKTsKQEAgLTI3OSw3ICsyNzcsNyBAQCB2b2lkIEZyYW1lOjpzZXREb2N1bWVudChSZWZQ
dHI8RG9jdW1lbnQ+JiYgbmV3RG9jdW1lbnQpCiAjZW5kaWYKIAogICAgIGlmIChtX2RvYyAmJiBt
X2RvYy0+YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6OkluQmFja0ZvcndhcmRD
YWNoZSkKLSAgICAgICAgbV9kb2MtPnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOworICAgICAgICBt
X2RvYy0+d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogCiAgICAgbV9kb2MgPSBuZXdEb2N1bWVu
dC5jb3B5UmVmKCk7CiAgICAgQVNTRVJUKCFtX2RvYyB8fCBtX2RvYy0+ZG9tV2luZG93KCkpOwpA
QCAtNTU0LDcgKzU1Miw3IEBAIGJvb2wgRnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2VzcygpCiAg
ICAgY2FzZSBET01QYXN0ZUFjY2Vzc1BvbGljeTo6RGVuaWVkOgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgY2FzZSBET01QYXN0ZUFjY2Vzc1BvbGljeTo6Tm90UmVxdWVzdGVkWWV0OiB7Ci0g
ICAgICAgIGF1dG8qIGNsaWVudCA9IG1fZWRpdG9yLT5jbGllbnQoKTsKKyAgICAgICAgYXV0byog
Y2xpZW50ID0gZWRpdG9yKCkuY2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05MzcsNyArOTM1LDcgQEAgdm9pZCBGcmFtZTo6c2V0
UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpv
b21GYWN0b3IKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Vk
aXRvci0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOworICAgIGVkaXRvcigpLmRp
c21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKIAogICAgIC8vIFJlc3BlY3QgU1ZHcyB6
b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9uZSBTVkcgZG9jdW1lbnRz
LgogICAgIC8vIEZJWE1FOiBIb3cgdG8gaGFuZGxlIGNvbXBvdW5kIGRvY3VtZW50cyArIHpvb21B
bmRQYW49ImRpc2FibGVkIj8gTmVlZHMgU1ZHIFdHIGNsYXJpZmljYXRpb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmgKaW5kZXggZTljYWIzY2MwZjllY2JkYTFjMTE4MmUzYWE3NWQ0YzVjNmEyZWIwMC4uNDU0NDBh
YzFhYWYwNzM3MWMzNTJmMThkYjQxNjk2MWY4ZjE0MWI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWJzdHJhY3RGcmFtZS5oIgogI2luY2x1ZGUgIkFk
anVzdFZpZXdTaXplT3JOb3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIlBhZ2VJ
ZGVudGlmaWVyLmgiCkBAIC0xNjMsMTQgKzE2NCwxNCBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3Q7CiAgICAgRnJhbWVWaWV3KiB2aWV3KCkgY29uc3Q7CiAKLSAgICBF
ZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9Ci0gICAgY29uc3QgRWRpdG9yJiBl
ZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEVkaXRvciYgZWRpdG9yKCkg
eyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0KKyAgICBjb25zdCBFZGl0b3ImIGVkaXRv
cigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9CiAgICAgRXZlbnRIYW5k
bGVyJiBldmVudEhhbmRsZXIoKSB7IHJldHVybiBtX2V2ZW50SGFuZGxlcjsgfQogICAgIGNvbnN0
IEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudEhhbmRs
ZXI7IH0KICAgICBGcmFtZUxvYWRlciYgbG9hZGVyKCkgY29uc3Q7CiAgICAgTmF2aWdhdGlvblNj
aGVkdWxlciYgbmF2aWdhdGlvblNjaGVkdWxlcigpIGNvbnN0OwotICAgIEZyYW1lU2VsZWN0aW9u
JiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQotICAgIGNvbnN0IEZyYW1lU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24o
KTsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0
OwogICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIHsgcmV0dXJu
IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXImIGxlZ2FjeUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxl
cjsgfQpAQCAtMzM4LDggKzMzOSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBt
X2RvYzsKIAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBV
bmlxdWVSZWY8RWRpdG9yPiBtX2VkaXRvcjsKLSAgICBVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+
IG1fc2VsZWN0aW9uOwogICAgIFVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7CiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCAyZDZjZTgwOGJlZDY5M2MxZjcwMzNmZmM3
ZTdhZDU0NmM1MGFhM2ZjLi45NjZiYTZkOTlhMmU2NjZlZWViY2M5ZDk0NmM4MmZhZGMyY2ZiMjZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTY4LDExICs2OCw5IEBA
IFJlZjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGlj
YXRvckRhdGEmIGRhdGEpCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0
aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50
YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIGF1dG8gZnJhbWUgPSBt
YWtlUmVmUHRyKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWY8RG9jdW1lbnQ+
IGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpOwogCi0gICAgYm9v
bCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gcmFuZ2UgPT0gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYm9vbCBpbmRpY2F0ZXNDdXJy
ZW50U2VsZWN0aW9uID0gcmFuZ2UgPT0gZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zOwogICAgIHRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CkBA
IC04MCwxNCArNzgsMTQgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFQKICAgICB0ZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVj
dGlvbkNoYW5nZXMpOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFy
eVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpOwogI2VuZGlmCi0gICAg
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgcmFuZ2Ug
fSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hh
bmdlIHNlbGVjdGlvbkNoYW5nZShkb2N1bWVudCwgeyByYW5nZSB9LCB0ZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb25zKTsKIAogICAgIFRleHRJbmRpY2F0b3JEYXRhIGRhdGE7CiAKICAgICBkYXRhLnBy
ZXNlbnRhdGlvblRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0aW9uOwogICAgIGRhdGEu
b3B0aW9ucyA9IG9wdGlvbnM7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwg
KmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKKyAgICBp
ZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmRvY3VtZW50LT5mcmFtZSgpLCByYW5nZSwg
bWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggM2Iw
OWYzYzYyNTZiMDBkNzYzMGVjYTZlYTE2ZDNjYzYyNGQ3ZjhjMi4uOWUxMzdiM2EwOTMyZjNiMjJh
OTIwMTAxYWVhZjE5ZDEzMDI3ZjE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCkBAIC03OSw3ICs3OSw3IEBAIEBpbXBsZW1lbnRh
dGlvbiBET01SYW5nZSAoVUlLaXRFeHRlbnNpb25zKQogLSAodm9pZCltb3ZlOihVSW50MzIpYW1v
dW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsK
ICAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uIGZyYW1lU2VsZWN0aW9uOworICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZyYW1lU2Vs
ZWN0aW9uKFtzZWxmIG93bmVyRG9jdW1lbnRdKTsKICAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8o
cmFuZ2UpOwogICAgIAogICAgIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9
IFdlYkNvcmU6OkNoYXJhY3RlckdyYW51bGFyaXR5OwpAQCAtMTA3LDcgKzEwNyw3IEBAIC0gKHZv
aWQpbW92ZTooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJl
Y3Rpb24pZGlyZWN0aW9uCiAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlv
bjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7CiAgICAgUmFuZ2UgKnJh
bmdlID0gY29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVj
dGlvbjsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihbc2VsZiBv
d25lckRvY3VtZW50XSk7CiAgICAgZnJhbWVTZWxlY3Rpb24ubW92ZVRvKHJhbmdlKTsKICAgICAK
ICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IGFtb3VudDsgaSsrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggMWQyYjNmODA5MjA2ZDM3ZDA1ZGZi
MmFhOWFiMDg4ZmY2NjI0NGNiYi4uMTM2Y2Q4ZjczMjZkMzYzZjU1NWVlNzY5N2M1NGQ3N2RkNmFh
ZGMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBA
IC03ODAsMTEgKzc4MCwxNSBAQCAtIChCT09MKV9uZWVkc0xheW91dAogI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQogLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlv
bjooV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkVBbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0
aW9uOihXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihX
ZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKIHsKLSAgICBpZiAoX3ByaXZhdGUt
PmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgYXV0byogZG9jdW1lbnQgPSBf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoZG9jdW1lbnQtPnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gc2Vs
ZWN0aW9uOwotICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIHNl
bGVjdGlvbigqZG9jdW1lbnQpOworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oZG9jdW1lbnQt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRp
b24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwogICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZWMwYjdkN2IyNzdjMmUzZTZjMTcwMmRjNjk4ZjhjYzFlMGZjY2E2My4uZGM4YmIx
NmY0NmNkMjU3MTQ1Nzc1NjEzYmQ5ZWM3ZDNjZmVkNTU3YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBA
CisyMDIwLTA0LTI3ICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAg
ICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1
MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIGNyYXNoLgorCisgICAgICAgICogZWRpdGluZy9p
bnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVk
aXQtY29tbWFuZC1jcmFzaC5odG1sOiBBZGRlZC4KKworICAgICAgICBNb2RpZnkgdGhlIHRlc3Qg
cmVzdWx0LiBGcmFtZVNlbGVjdGlvbiBpcyBiZWluZyBkZXN0cnVjdGVkIGFsb25nIHdpdGgKKyAg
ICAgICAgZG9jdW1lbnQgc28gYW4gYWRkaXRpb25hbCBzZWxlY3Rpb24gY2hhbmdlIG5vdGlmaWNh
dGlvbiBpcyBleHBlY3RlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTA0LTI3ICBB
bnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgWyBpT1MgXSBSRUdS
RVNTSU9OOiBhbmltYXRpb25zL2NoYW5nZS1rZXlmcmFtZXMtbmFtZS5odG1sIGlzIGEgZmxha3kg
ZmFpbHVyZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0
LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwNDAzNDIzZTU5MDk1MDI2NWYwOGEzMjkyNmU2NjE3ZDAx
OGE3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9p
bnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSBAQAorVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93ZWQgYnkgYW4gZWRpdCBjb21tYW5kLiBU
aGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlv
bi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0
LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2Vy
dGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNhZjM4MWQ5ZWY1YTNmZDk0ZWIyMTA5MGMyYTIyZmJjMDc1MTJhYWYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQt
Y29tbWFuZC1jcmFzaC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzxib2R5PjxpbWFnZT48L2ltYWdl
Pjxmb3JtIGlkPWZvcm0gY29udGVudEVkaXRhYmxlPXRydWU+PG9iamVjdCBkYXRhPT8gb25sb2Fk
PW9iamVjdE9uTG9hZCgpPjwvb2JqZWN0PjwvZm9ybT48ZGlhbG9nIG9wZW49InRydWUiPmE8L2Rp
YWxvZz4KKzxzY3JpcHQ+CisgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTsKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgic2VsZWN0QWxsIiwgZmFsc2UpOworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gb2Jq
ZWN0T25Mb2FkKCkgeworICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VW5vcmRl
cmVkTGlzdCIsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIml0YWxpYyIs
IGZhbHNlKTsKKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxwPiBUZXN0cyBpbnNlcnRpbmcg
bGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBXZWJL
aXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwvcD4iOworICAgICAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgICAgICB9KTsKKyAgICB9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJh
bWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVi
b2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQKaW5kZXggZDZiYzdiMWU2ZjAz
ZTNiNDhhZjA0MThjNjU1MDRhNGQyMTM3YzFhYy4uZTViZGQyYTBiZmQ4OTUyZDk3NjZhNDM3Y2Fj
ZWE0NjY0ODk3Nzg2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRp
bmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1m
cmFtZS1leHBlY3RlZC50eHQKQEAgLTQsNiArNCw3IEBAIEVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlv
CiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZy
b20gMCBvZiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAwIG9mIEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gNSBvZiAjdGV4dCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6
V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBs
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397780</attachid>
            <date>2020-04-27 18:39:22 -0700</date>
            <delta_ts>2020-04-27 18:46:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200427183921.patch</filename>
            <type>text/plain</type>
            <size>235509</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGZiZTIyY2Y2NGNjODg5
NGQxYmRkOGQzMTNkODYzMWZkY2NkNzA2OC4uNDRhNTNiMDBjYWY4NmM2Zjg2MDE3M2FhMTVhMDk3
ZmM3MTgyOWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxOSBAQAorMjAyMC0wNC0yNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSBjb25zdCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpz
dG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9y
ZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtl
ckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5M
RVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6dW5hcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFn
cmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6ZnJhbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9F
ZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpi
ZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNsaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkVkaXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjYW5FZGl0UmljaGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDdXQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5ESFRNTENv
cHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5Db3B5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuUGFzdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjYW5EZWxldGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRT
bWFydERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnRE
ZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnRyeURIVE1MQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyeURIVE1MQ3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9y
ZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbFVub3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpwZXJmb3JtQ3V0T3JDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVuZGVyTGF5ZXJEaWRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTZXRDb21wb3NpdGlvblNjb3BlOjpTZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldENvbXBvc2l0aW9uU2NvcGU6On5TZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmxlYXJu
U3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRP
clJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTZWxlY3Rpb25Vbmdy
YW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRXb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGVkVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92
ZVRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbXB1dGVBbmRT
ZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3Rh
cnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFj
aG1lbnRVcGRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRl
TW9kZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkb2N1bWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6Oklnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlOjpJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRv
Y3VtZW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN3YXBXaXRoTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZSBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlm
RGlmZmVyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rp
b25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRD
bGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRP
clN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RS
YW5nZU9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcv
SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExp
bmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1Vu
YXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWxsQ2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tl
cjo6aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmRpZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9u
SWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBp
bmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91
dE5ld2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVha0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGlu
Z0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJs
ZVN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndw
ZS9FZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGVk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRp
b25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgICogcGFn
ZS9GcmFtZS5oOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UpOgorCiAyMDIwLTA0LTI3ICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggOWJkNGRjMzk3NTBmMmYxNWIzY2UyZTg5ZGRiNjk3OGFkNDg0NjZlYi4uM2QzZTJm
YmExOTI4YzZjZTgyYTZkMzE0M2M0NWNjOWZmN2Q5NzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA0LTI3ICBKYWNrIExlZSAgPHNoaWhjaGll
aF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6
OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NjAwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEZyYW1lU2VsZWN0aW9uIGFuZCBFZGl0b3Igb2JqZWN0
cyBmcm9tIEZyYW1lIHRvIERvY3VtZW50IHNvIHdoZW4gYSBkb2N1bWVudCBpcyBkZXRhY2hlZAor
ICAgICAgICBpbiBuZXN0ZWQgY29tbWFuZCBleGVjdXRpb25zLCB0aGUgbmV4dCBFZGl0Q29tbWFu
ZCB3b3VsZCBub3QgZmFpbCBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIERPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdlIG1vdmU6aW5EaXJlY3Rpb246XSk6
CisgICAgICAgICgtW0RPTVJhbmdlIGV4dGVuZDppbkRpcmVjdGlvbjpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbjpkaXJlY3Rpb246Z3JhbnVsYXJpdHk6XSk6CisKIDIwMjAtMDQtMjcg
IEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBz
b21lIHVzZWxlc3MgaW5jbHVkZXMgb2YgQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAppbmRleCAwMmM3NTcwMGE4NWIzYzcyNTY2OTc3YmEyZGJjMWUzYWY4MjkxNGI1
Li5kNDhmYmI5ZWZkMjAwYWQ0MDIxZjQzYmY2OGU2NzNhNTVkOWRmZmRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpCiAg
ICAgLy8gTk9URTogaWdub3JlcyByZXN1bHRzIG9mIHNlbC5tb2RpZnkgYmVjYXVzZSBpdCByZXR1
cm5zIGZhbHNlIHdoZW4KICAgICAvLyBzdGFydGluZyBhdCBhbiBlbXB0eSBsaW5lLiAgVGhlIHJl
c3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAgLy8gd2lsbCBiZSBhIGNhcmV0IGF0
IHZpc2libGVQb3MuCi0gICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgIEZyYW1lU2Vs
ZWN0aW9uIHNlbGVjdGlvbigqZG9jdW1lbnQoKSk7CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVQb3MpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5k
YXJ5KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDMwNjU4NGRiNWRjNzBmMmZi
NmVlY2IyZGU3YmU5NTE0ZWMzNWRiMDQuLjBiOWI1ZjVmYzlkOWU0MWMwY2QzZGE4NDY2MmQxYjVi
NTZhYTg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTgzLDYgKzU4Myw4IEBAIERv
Y3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCB1bnNpZ25lZCBk
b2N1bWVudENsYXNzZXMsIHVuc2lnCiAgICAgLCBtX29yaWVudGF0aW9uTm90aWZpZXIoY3VycmVu
dE9yaWVudGF0aW9uKGZyYW1lKSkKICAgICAsIG1faWRlbnRpZmllcihEb2N1bWVudElkZW50aWZp
ZXI6OmdlbmVyYXRlKCkpCiAgICAgLCBtX3VuZG9NYW5hZ2VyKFVuZG9NYW5hZ2VyOjpjcmVhdGUo
KnRoaXMpKQorICAgICwgbV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKKyAg
ICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KCp0aGlzKSkKIHsK
ICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIs
IHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CkBAIC0yNTAwLDcgKzI1MDIsNyBAQCB2b2lkIERvY3VtZW50OjpkZXN0cm95UmVuZGVyVHJl
ZSgpCiAgICAgICAgIHZpZXcoKS0+ZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRG9jdW1lbnQ6OndpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKQogewogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24p
CiAgICAgICAgIHJldHVybjsKQEAgLTI1OTMsNiArMjU5NSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVk
aWEoSFRNTE1lZGlhRWxlbWVudEludmFsaWRJRCk7CiAgICAgfQogCisgICAgZWRpdG9yKCkuY2xl
YXIoKTsKKyAgICBzZWxlY3Rpb24oKS53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgZGV0
YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggMjgxNGI2M2U1YmE3MjkzN2NhYjI0Zjk2ZjEyNTA1OGQ0ZDZlNDZiZC4u
Y2I4YWFjYjE4MzU1Mzg0MjQ2YjAyYTYzOTYzZTE3NmNkYzk1Zjc3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7
CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRp
dGluZ0JlaGF2aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZl
bnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjgsNiAr
MTI5LDcgQEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3Jt
Q29udHJvbGxlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBG
cmFtZVZpZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRl
eHQ7CkBAIC02MjYsNyArNjI4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWNvbWVDdXJy
ZW50RG9jdW1lbnRJbkZyYW1lKCk7CiAgICAgdm9pZCBkZXN0cm95UmVuZGVyVHJlZSgpOwotICAg
IHZvaWQgcHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJv
bUZyYW1lKCk7CiAKICAgICAvLyBPdmVycmlkZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG1ldGhv
ZHMgdG8gZG8gYWRkaXRpb25hbCB3b3JrCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbDsKQEAgLTE1
NzgsNiArMTU4MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNWaXN1YWxseU5vbkVtcHR5
Q3VzdG9tQ29udGVudCgpIHsgbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCA9IHRy
dWU7IH0KICAgICBib29sIGhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudDsgfQogCisgICAgRWRp
dG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRp
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKwogcHJvdGVjdGVk
OgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRl
cmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVS
TCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlv
bkZsYWdzID0gMCk7CkBAIC0yMTE4LDYgKzIxMjUsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjsKIAogICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lk
ZW50aWZpZWRFbGVtZW50c01hcDsKKworICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwor
ICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCiBFbGVtZW50
KiBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXgg
M2JkNjU4ZGY2NDQwMWQyMmIwNjFkNmNjNDMwZmVlY2I0MWZlYjAwNi4uYWVmNGJjNWE3ZDhmNmQ2
ZDVhZDY2ZTY2MGI3ZjRlOGVlZTE4OGExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0
YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQor
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1
bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3Vt
ZW50KGRvY3VtZW50KQogewogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8g
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gIW1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtl
cnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOworICAgIHJldHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVs
bGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5n
SWZBcHByb3ByaWF0ZSgpCiAgICAgaWYgKG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29y
cmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3Np
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3Np
dGlvbiBjYXJldFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpOwogCiAgICAgaWYgKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkg
PT0gY2FyZXRQb3NpdGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQp
KTsKQEAgLTIyMCwxNCArMjIwLDE0IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYg
KGF1dG8gY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZl
cnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KG1fZnJhbWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAg
UmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9kb2N1bWVudC5mcmFtZSgpKTsKKyAgICBtX2RvY3Vt
ZW50LnVwZGF0ZUxheW91dCgpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7
Ci0gICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlv
bk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMo
KSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8g
cmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgbWFya2VycyA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3Vt
ZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMoKnJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1h
cmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5h
ZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7
CkBAIC0yMzgsMTIgKzIzOCwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRp
bWVyRmlyZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsK
LSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHAsIHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50
V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBl
OjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5n
ZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIG51bGxwdHIpOworICAgICAg
ICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVw
bGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29y
ZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVy
bmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFn
cmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAo
c3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0
cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8
fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3Vt
ZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2RvY3VtZW50ICE9IHJh
bmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
OwpAQCAtMzQyLDcgKzM0Miw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIAogRmxvYXRSZWN0IEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAg
YXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOwogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5n
ZSkpKTsKQEAgLTM1MCw3ICszNTAsNyBAQCBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbgogCiB2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewotICAgIFZpc2libGVTZWxlY3Rp
b24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQg
b2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCiAgICAg
Ly8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVz
ZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlv
bi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0g
dGhhdApAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0
ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29t
bWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigp
KQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbV9kb2N1bWVudC5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRv
cik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlv
bkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0
ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kQ29tcG9zaXRpb24KICAgICBhdXRvIHJhbmdlID0gY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgbWFya2Vycy5hZGRNYXJr
ZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRk
TWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwog
fQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVkaXRvckNsaWVu
dCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFnZSgpLT5lZGl0
b3JDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFnZSgpID8gJm1f
ZG9jdW1lbnQucGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFRleHRDaGVj
a2VyQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCkBAIC00
ODMsMTIgKzQ4MywxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgaWYgKG1hcmtlcnMuaGFz
TWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KSkgewogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikKICAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRD
b3JyZWN0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3Vs
dC5yZXBsYWNlbWVudCk7CkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtl
ciYKICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlv
bi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBO
b2RlKiBub2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8g
d29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdv
cmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zm
c2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3Jk
ID0gcGxhaW5UZXh0KHdvcmRSYW5nZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTYyLDcgKzU2Miw3IEBAIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1l
bnRNYXJrZXImCiAKIEFsdGVybmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdl
KCkgPyBtX2ZyYW1lLnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwor
ICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2Rv
Y3VtZW50LnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBT
dHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBs
aWVkQWx0ZXJuYXRpdmVUZXh0KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlw
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU5OSw3ICs1OTks
NyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0
VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1
IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmlu
Z0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7
Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtl
Qm91bmRhcnlQb2ludChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwor
ICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJv
dW5kYXJ5UG9pbnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsK
ICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAg
ICAgcmV0dXJuOwogICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRl
ZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJl
Y3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYyMSwx
MSArNjIxLDExIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0
ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdF
dmVudCkKICAgICAgICAgdGFyZ2V0ID0gdHJpZ2dlcmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBl
bHNlCi0gICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJh
bWUuZG9jdW1lbnQoKSk7CisgICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRv
Y3VtZW50KCZtX2RvY3VtZW50KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZt
X2ZyYW1lLndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAg
YXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZy
YW1lKCktPndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAg
ZXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCBWZWN0b3I8U3RyaW5n
PiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJr
ZXIoY29uc3QgRAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlv
bkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgYXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0
b3IoKTsKKyAgICBhdXRvJiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8g
c2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8
fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmlu
ZGV4IDk0Nzc0YTc2YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZj
MzA4OGRjMjc3YjNmNzkxY2Y4MjMxYjkwNjMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3Np
dGlvbjsKIGNsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBj
bGFzcyBSYW5nZTsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJh
bWUoZnJhbWUpIHsgfSkKKyAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERv
Y3VtZW50JiBkb2N1bWVudCkgVU5MRVNTX0VOQUJMRUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7
IH0pCiAgICAgfkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0p
CiAKICAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRU
eXBlKSBVTkxFU1NfRU5BQkxFRCh7IH0pCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAg
ICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlm
CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAK
ICN1bmRlZiBVTkxFU1NfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAzNTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3
MjI3ZmUxNzRiLi44MDdlZTdiODhiM2IxMWViZWFmOGFjM2UxNzY0NDJkNDY4Mzk5MGE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAt
MjI4LDE3ICsyMjgsMTcgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkK
ICAgICAvLyB1cCB0aGUgY29tcG9zaXRpb24gd2lsbCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNv
bXBvc2l0aW9uLCBhcyBpbiA8cmRhcjovL3Byb2JsZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3Rv
cCBoYW5kbGVzIHRoaXMgaW4gLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRN
YW5hZ2VyXSwgYnV0IHRoZSBwaG9uZQogICAgIC8vIGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBm
cmFtZS0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0
b3IoKS5jYW5jZWxDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0
b3IoKS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRp
dG9yKCkud2lsbFVuYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
c2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6
ZTsgaTsgLS1pKQogICAgICAgICBtX2NvbW1hbmRzW2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAg
ICBmcmFtZS0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVu
dC0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMjU4LDEzICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOjpyZWFwcGx5KCkKICAgICAvLyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtl
IGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1l
LT5lZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVu
dC0+ZWRpdG9yKCkud2lsbFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChhdXRvJiBjb21tYW5kIDogbV9jb21tYW5kcykKICAgICAgICAgY29tbWFuZC0+
ZG9SZWFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAg
bV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHko
bV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBA
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQogCiBib29sIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJh
bWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5k
aW5ncygpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5n
KCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQpAQCAtMzc4LDEzICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBs
eUNvbW1hbmQoKQogewotICAgIGZyYW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMp
OworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBW
ZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJh
bmdlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0
KCkpOwotICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gZmlyc3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9m
UGFyYWdyYXAKICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5z
ZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNl
cnRGcmFnbWVudCBoZXJlLgogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwotICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rp
b24oKSk7CiAgICAgZGVsZXRlU2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsK
IAogICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+
aXNDb25uZWN0ZWQoKSk7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJh
Z3JhcAogICAgICAgICBvcHRpb25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0g
ICAgZnJhbWUoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdT
ZWxlY3Rpb24oKSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9u
IGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVt
cHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVj
dGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0Vu
ZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGNh
NTZmMzAxMWEwMDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2NGYuLmUyMGE4ZDhkYTZlNDhiMzk2
YmE2NDhlOWFjMjQwODFjMTczMTc5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2
ZXIsIGlmIHR5cGluZyBzdHlsZSB3YXMgcHJldmlvdXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQg
bm9kZSBhdCB0aGUgcHJldmlvdXMKICAgICAvLyBwb3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBu
ZWVkIHRvIGNsZWFyIHRoYXQgc3R5bGUgYXMgd2VsbC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYg
bV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTc0NCw3ICs3NDQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2Vk
ID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgp
LmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIo
KSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdl
VG9CZVJlcGxhY2VkLnB0cigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQ
YXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0
aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTgxOCw3ICs4
MTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUoKQogICAgIC8vIEluIHRoaXMgY2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRo
ZSBuZXcgY2hhcmFjdGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBk
ZWxldGVkIG9uZXMsCiAgICAgLy8gYnV0LCBpZiB3ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29t
ZSBiYWNrIGFuZCBzdGFydCB0eXBpbmcgdGhhdCBzdHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28g
c2VlIAogICAgIC8vIHByZXNlcnZlVHlwaW5nU3R5bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNl
bGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJl
ZigpKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0
YXRlKCkKQEAgLTg4OSw3ICs4ODksNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIGlmICghbV9yZXBsYWNlKSB7CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250
cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KSk7CiAgICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQot
ICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KHRleHRDb250cm9sKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxC
ZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0
aGlzIHRvIGxhdGVyIG1ha2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05NDQsNyArOTQ0LDcgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAKICAgICBib29s
IHNob3VsZFJlYmFsYWNlV2hpdGVTcGFjZSA9IHRydWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkp
IHsKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFu
Y2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9l
bmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4obm9k
ZSkpIHsKICAgICAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OwpAQCAtOTU4LDcgKzk1OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFv
cmlnaW5hbFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRl
ZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmlu
Zyk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwg
ZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRT
dGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMz
ZjdkYTE3Yzc4OTRlMmNmNzg1NTU5YmM4NzZjODg0NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYw
MDU2Yzc3Mzc3MDBlMmI4ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24o
ZWRpdGluZ0FjdGlvbikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0
U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewot
ICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihz
dGFydGluZ1NlbGVjdGlvbik7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjp+RWRpdENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1l
JiBFZGl0Q29tbWFuZDo6ZnJhbWUoKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkp
OwotICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRp
dENvbW1hbmQ6OmZyYW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgp
KTsKLSAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0
Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0Fj
dGlvbjsKQEAgLTE2OCwxMSArMTUzLDcgQEAgc3RhdGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKiBjb21wb3NpdGlvbklmUG9zc2libGUoRWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9v
bCBFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0g
ICAgYXV0byogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBj
b250YWluZXIgPSBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKTsKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0yMTcsNyArMTk4LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBp
ZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbih0eXBlLCB0ZXh0LCBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRD
b21tYW5kLmgKaW5kZXggZGViY2ZmMDI0NWVkZjBkZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4u
MmY2N2NkNzMzNGMyYzhiZDU2OTBmMTEzNWMxMGQwMDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxl
bWVudDsKLWNsYXNzIEZyYW1lOwogCiBTdHJpbmcgaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rp
b24oRWRpdEFjdGlvbik7CiAKQEAgLTY0LDggKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IEVkaXRDb21tYW5kKERvY3VtZW50JiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3Bl
Y2lmaWVkKTsKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUo
KSBjb25zdDsKLSAgICBGcmFtZSYgZnJhbWUoKTsKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50
KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJl
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKaW5kZXggYzExM2MwMTNkMDA0OGVmYTk1MjMzYWJkNjRmMDRlNGE5NTU1YzcyZC4uNGJiNDQ2
Njg4NDJlNGJlYTJlZDgzNDQ3ZDNiYTYyZDkwNzNmZWQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCkBAIC04OTgsNyArODk4LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0
IE5vZGUqIG5vZGUpCiAKIFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUo
KS0+ZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChk
b2N1bWVudC5lZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNl
IEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0
b3JJc1A6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggZDU0MjRh
YzdkMjE5MjhkNTI2NzM0NTk1ZjVmZjY2ZWU3NzMzMGFhZC4uMmY2MzU0YTVkMmYzMGEzNmI5MDNm
MTBiOTM3M2ZmYTIzYTBjODZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcApAQCAtMTY4Niw3ICsxNjg2LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRp
bmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJv
cGVydGllc05vdEluKCpzdHlsZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJv
cGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NT
ID0gZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOworICAg
IGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxl
V2l0aENTUygpOwogICAgIGlmICghc2hvdWxkU3R5bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0
VGV4dFN0eWxlcygqZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4
ZWRGb250RGVmYXVsdFNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAy
YjEwNjA2ODk5MGI3MjI4MjRjZDg2ZDE3ZmRjYzJlNWYxY2MzOGQ1Li5jNDZmOTNjYjUxMTFlY2Iy
MmU2YjExZjY1MWE3NWE4ZTQ4MDQzOTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBA
IC0xNzMsOCArMTczLDggQEAgc3RhdGljIFN0cmluZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdT
dHlsZUFuZEFjdGlvbihFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4
dENvbW1hbmQgOiBwdWJsaWMgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAg
Q2xlYXJUZXh0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENy
ZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRp
YyB2b2lkIENyZWF0ZUFuZEFwcGx5KERvY3VtZW50Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODks
MTcgQEAgRWRpdEFjdGlvbiBDbGVhclRleHRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QK
ICAgICByZXR1cm4gRWRpdEFjdGlvbjo6RGVsZXRlOwogfQogCi12b2lkIENsZWFyVGV4dENvbW1h
bmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFy
VGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJv
dW5kIHN0YWxlIGNvbXBvc2l0aW9uIHN0YXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigp
OworICAgIGRvY3VtZW50LmVkaXRvcigpLmNsZWFyKCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21t
YW5kID0gYWRvcHRSZWYoKm5ldyBDbGVhclRleHRDb21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxs
KCk7CisgICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1h
bmQoZG9jdW1lbnQpKTsKICAgICBjbGVhckNvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9s
ZFNlbGVjdGlvbik7CiAgICAgY2xlYXJDb21tYW5kLT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsy
MDcsMjQgQEAgdm9pZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQ
dHI8RnJhbWU+IGZyYW1lKQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY6OlVuaWNvZGU7CiAKLVRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiBmcmFtZSwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4g
dGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8Vmlz
aWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9uPiBvcHRpb25zKQorICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50
KSkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlv
bkNoYW5nZXMoZnJhbWUuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwg
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcygpKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVh
cmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZnJhbWUuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCgpKQorICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYK
IAogICAgIGlmIChvcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKHRydWUpOworICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKHRydWUpOwogCiAgICAgaWYgKHRlbXBvcmFyeVNlbGVjdGlvbikgewotICAgICAg
ICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgICAgICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgICAgICBzZXRTZWxlY3Rpb24odGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkp
OwogICAgIH0KIH0KQEAgLTIzNiwxMiArMjM2LDEyIEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5n
ZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgpCiAKICAgICBpZiAobV9vcHRpb25zICYgVGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAg
IGF1dG8gcmV2ZWFsU2VsZWN0aW9uID0gbV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpSZXZlYWxTZWxlY3Rpb24gPyBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRp
dG9yOjpSZXZlYWxTZWxlY3Rpb246Ok5vOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJ
Z25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZl
YWxTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rp
b24pOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9u
cyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0g
ICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1f
YXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVj
dGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJl
RW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAtMjUwLDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiAgICAgYXV0byBvcHRpb25zID0gRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCk7CiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbjo6RG9Ob3RTZXRGb2N1cykKICAgICAgICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rp
b246OkRvTm90U2V0Rm9jdXMpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihzZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMpOwogfQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRs
ZXIgaGFzIG1vdmVkIHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8g
d2Ugc2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRp
dGluZyBvcGVyYXRpb24uCiBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29t
bWFuZChFdmVudCogZXZlbnQpCiB7Ci0gICAgYXV0byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uOwogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUg
Y3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYs
MTIgKzI3NiwxMiBAQCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFu
ZChFdmVudCogZXZlbnQpCiAvLyBGdW5jdGlvbiBjb25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZp
b3IgYSBmYWxsYmFjayB3aGVuIFBhZ2Ugb3IgU2V0dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVk
aXRpbmdCZWhhdmlvciBFZGl0b3I6OmJlaGF2aW9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRp
dGluZ0JlaGF2aW9yKG1fZnJhbWUuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOwor
ICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3IobV9kb2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdC
ZWhhdmlvclR5cGUoKSk7CiB9CiAKIEVkaXRvckNsaWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25z
dAogewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JD
bGllbnQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJv
b2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0
b3I6OmNhbkVkaXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wg
RWRpdG9yOjpjYW5FZGl0UmljaGx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVy
biBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCk7CiB9CiAKIGVudW0gY2xhc3MgQ2xpcGJvYXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0
NDIsNyBAQCBzdGF0aWMgYm9vbCBkaXNwYXRjaENsaXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50
PiYmIHRhcmdldCwgQ2xpcGJvYXJkRXZlbnRLaW5kCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1
dCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3
b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
IWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBD
bGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9yZUN1dCk7CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBF
ZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENs
aXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZl
bnRLaW5kOjpCZWZvcmVDb3B5KTsKIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9y
OjpjYW5Db3B5KCkgY29uc3QKIHsKICAgICBpZiAoaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1l
bnQoZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2Vs
ZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3Vw
cHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkt
Pm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmco
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5
OCw3ICs0OTgsNyBAQCBib29sIEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRv
cjo6Y2FuRGVsZXRlKCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTI0LDcgKzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91
bGRTbWFydERlbGV0ZSgpCiB7CiAgICAgaWYgKGJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnRE
ZWxldGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0
aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAK
IGJvb2wgRWRpdG9yOjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3
IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
eworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBp
ZiAoaXNUeXBpbmdBY3Rpb24pIHsKICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1h
bmQ6OlNtYXJ0RGVsZXRlIDogMCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKIAogdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFy
dERlbGV0ZShib29sIHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2Us
IGZhbHNlLCB0cnVlLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBA
QCB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnRE
ZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZwogCiB2b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsK
LSAgICBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xl
YXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkobV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRp
dG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21h
cnRSZXBsYWNlKQpAQCAtNjYxLDcgKzY2MSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRG
cmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAK
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRS
ZXBsYWNlIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVk
aXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZykKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkg
fHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTY4OSwxOSArNjg5LDE5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1h
Z2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJ
blBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9u
OjpQYXN0ZSkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0
cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJ
bnNlcnRlZFRleHQoKSk7Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlUGFzdGUsIHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
ICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29t
cG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNl
ZFJhbmdlKCkpOwogICAgIH0KIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gY29tbWFuZC0+ZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwot
ICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4
dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAg
IH0KIApAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0
cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtNzQ0LDcgKzc0NCw3IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIGJvb2wgRWRp
dG9yOjp0cnlESFRNTENvcHkoKQogeyAgIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDb3B5KTsKQEAgLTc1Miw3ICs3
NTIsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIAogYm9vbCBFZGl0b3I6OnRyeURI
VE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVj
dGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkN1dCk7CkBAIC03NjAsNyArNzYwLDcgQEAgYm9v
bCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rp
b24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxk
U3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0g
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdl
LCBhY3Rpb24pOwpAQCAtNzgyLDE3ICs3ODIsMTcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAK
IGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogc3RhcnROb2RlOwot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBzdGFydE5v
ZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAg
ICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJl
YW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xvc2luZ0Js
b2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQotICAg
ICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODEyLDEyICs4MTIsMTIgQEAgYm9vbCBFZGl0b3I6
Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVu
b3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNDYXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKKyAgICBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxU
YWcpKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9
IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOwor
ICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAg
ICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7CisgICAgICAgIGF1dG8qIGVu
ZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9k
ZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3Rh
dGU7CiAgICAgfQpAQCAtODI3LDEyICs4MjcsMTIgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rp
b25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlv
bk9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9s
VGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUg
PSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCksIG9sVGFnKTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9sVGFnKTsK
KyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAg
ICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOworICAgICAgICBhdXRvKiBl
bmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5v
ZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0
YXRlOwogICAgIH0KQEAgLTg3Miw3ICs4NzIsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVjcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
ICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29t
bWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAtODgyLDcg
Kzg4Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRl
cmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0
cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtODkyLDcgKzg5
Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3Jk
ZXJlZCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
VW5vcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
OjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC05
MDIsNyArOTAyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxVbm9yZGVyZWQoKQogCiB2b2lkIEVkaXRvcjo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50
KCkpOwpAQCAtOTMyLDcgKzkzMiw3IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAKIEVsZW1lbnQq
IEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJvcGVydGll
cyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTk0NiwxMyArOTQ2LDEzIEBA
IHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0
aW9uVHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0Fj
dGlvbihlZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2
ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbigqc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwot
ICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCplbGVtZW50
LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
OTY5LDcgKzk2OSw4IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5
bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgY2xpZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CiAgICAgaWYgKGVsZW1lbnQpCiAg
ICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRF
dmVudERhdGEpOwogfQpAQCAtOTg0LDEzICs5ODUsMTMgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW8KICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlv
blR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsK
KyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0
VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsK
ICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHls
ZUFuZEFjdGlvbihzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50ICYm
ICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0
RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA1LDcgKzEwMDYsNyBAQCB2b2lk
IEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8
fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNsaWVudCgp
IHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
KQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxl
KHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRp
dG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5
LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBjcmVhdGVMaXZlUmFu
Z2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxp
dmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3Zl
KHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEw
MjgsMjUgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxl
LT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBw
bHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICBhcHBseVBhcmFn
cmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlKSBjb25zdAogewotICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQorICAgIGlmIChhdXRv
IGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpKQogICAgICAgICByZXR1cm4gZWRpdGluZ1N0eWxlLT5oYXNTdHlsZShw
cm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBUcmlTdGF0ZSBFZGl0
b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJv
cGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZh
bHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVj
dGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rp
b25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCiAgICAgICAgIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlv
blN0eWxlLT5zdHlsZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMTM2LDcgKzEx
MzcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQm
IGNvbW1hbmQpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoJmNvbW1hbmQpOwogCiAgICAgICAgIGlmICghY29tbWFuZC5wcmVzZXJ2
ZXNUeXBpbmdTdHlsZSgpKQotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5
cGluZ1N0eWxlKCk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKIAogICAgICAgICAvLyBDb21tYW5kIHdpbGwgYmUgZXF1YWwgdG8gbGFzdCBl
ZGl0IGNvbW1hbmQgb25seSBpbiB0aGUgY2FzZSBvZiB0eXBpbmcKICAgICAgICAgaWYgKG1fbGFz
dEVkaXRDb21tYW5kLmdldCgpID09ICZjb21tYW5kKQpAQCAtMTIwMCwxMSArMTIwMSwxMSBAQCB2
b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uJiBjb21w
b3NpdGlvbikKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMobmV3U2VsZWN0aW9uKTsKIH0K
IAotRWRpdG9yOjpFZGl0b3IoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK0Vk
aXRvcjo6RWRpdG9yKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiAgICAgLCBtX2tpbGxSaW5nKG1ha2VVbmlxdWU8UEFMOjpLaWxsUmluZz4oKSkKLSAgICAs
IG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihmcmFtZSkpCi0gICAgLCBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyPihmcmFtZSkpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hl
Y2tlcj4oZG9jdW1lbnQpKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VV
bmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZG9jdW1lbnQpKQogICAgICwgbV9lZGl0
b3JVSVVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQp
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAsIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIoKnRo
aXMsICZFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKQpAQCAtMTIyMCw3
ICsxMjIxLDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKICAgICBpZiAobV9jb21wb3NpdGlvbk5v
ZGUpIHsKICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBudWxscHRyOwogICAgICAgICBpZiAo
RWRpdG9yQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVu
dC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOworICAgICAgICAgICAgY2xpZW50LT5k
aXNjYXJkZWRDb21wb3NpdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIH0KICAgICBtX2N1
c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRp
b25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0xMjI5LDYgKzEyMzAsNyBAQCB2b2lkIEVkaXRvcjo6
Y2xlYXIoKQogICAgIG1fbWFyayA9IHsgfTsKICAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJ
VXBkYXRlID0geyB9OwogICAgIG1fZWRpdG9yVUlVcGRhdGVUaW1lci5zdG9wKCk7CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwog
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0b3Ao
KTsKQEAgLTEyMzgsMTIgKzEyNDAsMTIgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9vbCBF
ZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2
ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQogewotICAgIHJldHVybiBtX2ZyYW1l
LmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVu
dCwgaW5wdXRUeXBlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlw
ZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigp
LmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24p
OworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRl
eHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOwogfQogCiBi
b29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVu
dCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAtMTMwMiwxMCArMTMwNCw4IEBAIGJvb2wgRWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29s
IHNlbGVjdEluCiAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgY29kZSBzaG91bGQgY29uZGl0aW9u
YWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlvbiBvbiB3aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKCkgYml0CiAgICAgICAgICAgICAvLyBpcyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1c2Vk
IGZyYW1lLgogICAgICAgICAgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRSZXZl
YWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBwYWdlID0gZWRpdGVkRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgp
KQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5yZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzE4LDEwICsxMzE4LDEwIEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxk
SW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpOwogICAgIGJvb2wgYWxpZ25Ub0VkZ2UgPSBpc0VuZE9mRWRpdGFi
bGVPck5vbkVkaXRhYmxlQ29udGVudChjYXJldCk7CiAgICAgYm9vbCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRM
aW5lQnJlYWsoZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21t
YW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwpAQCAtMTMzOCwxMCArMTMz
OCwxMCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAo
IWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDUsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI0LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzMsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1Myw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzgsNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNiw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUwLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODEsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNiw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUxLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4Myw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0xOTk5LDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNCw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMiwxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODEsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDgsNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjIsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFu
Z2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVk
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNl
bGVjdGVkVGV4dCgpOwpAQCAtMjEzNyw3ICsyMTM3LDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3Bl
bGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJs
ZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNh
bGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFy
b3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0g
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRl
eHQoKTsKQEAgLTIxNDksMTQgKzIxNDksMTQgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmco
KQogCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBU
aGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFzZXMgLSBmcm9tIHRoZSBz
ZWxlY3Rpb24gZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCiAgICAgLy8gdGhlbiB3ZSB3
cmFwIGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHByb3hpbWF0ZWx5KSB3aGVy
ZSB3ZSBzdGFydGVkLgotICAgIAorCiAgICAgLy8gU3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vs
ZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5nIGF0IHRoZSBzZWxl
Y3Rpb24gZW5kIG1ha2VzCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5k
cyB3b3JrLgotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIFJlZjxSYW5nZT4gc3BlbGxpbmdTZWFy
Y2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKIAogICAgIGJvb2wgc3RhcnRl
ZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTIzMDUsOCArMjMwNSw4IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRo
IGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAogICAgICAgICBh
dXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZ3JhbW1hclNlYXJj
aFJhbmdlLCB7IGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLnJhbmdlLmxvY2F0
aW9uLCBncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0aCB9KTsKLSAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFs
U2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAg
ICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIzMTcsOCArMjMxNyw4IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgcmVkIHNxdWlnZ2xl
IGxhdGVyLgogICAgICAgICAKICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3BlbGxpbmdPZmZzZXQs
IG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJF
QU0pKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihtaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CiAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjMzMiw3ICsyMzMyLDcgQEAgU3RyaW5nIEVkaXRv
cjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QK
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgfHwgIWNsaWNrZWRO
b2RlIHx8ICFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGNsaWNrZWROb2RlKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg2LDcgKzIzODYsNyBAQCBTdHJpbmcgRWRpdG9yOjpt
aXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlv
blVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIGF1dG8g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgp
LCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQwMSw3ICsyNDAxLDcgQEAgVmVjdG9y
PFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3
b3JkKSBjb25zdAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50
KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmlu
ZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAg
dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2Vz
OwogfQogCkBAIC0yNDA5LDcgKzI0MDksNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNz
ZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvbwogewog
ICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxs
aW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2Uo
KSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29y
ZEdyYW51bGFyaXR5KTsKQEAgLTI0NjksNyArMjQ2OSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxl
Y3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1l
bnQobV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5MSwxOSArMjU5MSwxOSBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHks
IHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRv
Y29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5l
d1NlbGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChu
ZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1f
ZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBt
aXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFy
dFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVk
aXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxl
Y3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7
CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0g
ICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc1LDcgKzI2NzUsNyBAQCBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAg
IHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKQpAQCAtMjcyMyw3ICsyNzIzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7
CisgICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsK
IAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBh
cmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0g
cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0
aW9ucyk7CkBAIC0yNzM4LDcgKzI3MzgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAg
IH0KIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCBy
ZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0No
ZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VO
b25OdWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBS
ZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0
ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAg
IFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCks
IHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhS
YW5nZSgpKTsKQEAgLTI4MDgsOSArMjgwOCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFj
ZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAg
ICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAK
ICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8
fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNh
cmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBz
byB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwor
ICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJh
Z3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAg
ICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAg
aWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50
ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9
PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTIsMTMgKzI4OTIsMTMgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAg
ICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNl
bGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5n
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBy
ZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAo
Y2FuRWRpdFJpY2hseSgpKQpAQCAtMjkwNyw3ICsyOTA3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0
b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQs
IHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rp
b25PY2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5MzcsMTMgKzI5MzcsMTMgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5k
UmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5n
ZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkg
ewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1
YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0p
OworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFu
Z2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNl
bGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rp
b25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBE
aXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJh
Y2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92
ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0zMDIwLDggKzMwMjAsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9u
QQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2Ug
cG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJp
ZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2Vs
ZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0
aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5MywxMSArMzA5Myw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
biwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwor
ICAgIGF1dG8gZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMxMTYsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOCw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1MSw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzQsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTk5LDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NCw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjQsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODEsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk1LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwMyw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzEzLDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMSw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTMzMjksNyArMzMyNSw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNl
aG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVT
ZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAog
ICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNDksOCArMzM0NSw4IEBAIHZvaWQgRWRp
dG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vo
b2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUg
TGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2lu
dCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9j
dXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0
aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0
aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQt
PmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2
ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFt
ZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3Qp
CkBAIC0zNDAyLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2Uo
UmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFt
ZSgpICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9s
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5l
d1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2Vs
ZWN0aW5nKTsKQEAgLTM0MTEsMTcgKzM0MDcsMTcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHls
ZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZTsKLSAgICBpZiAoYXV0byBl
eGlzdGluZ1R5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQor
ICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHR5cGluZ1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHls
ZS0+Y29weSgpOwogICAgIGVsc2UKICAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZSgpOwotICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUs
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKSk7CisgICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0
aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxv
Y2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
CkBAIC0zNDI5LDcgKzM0MjUsNyBAQCB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgICAgICBB
cHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVk
aXRpbmdBY3Rpb24pLT5hcHBseSgpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUg
YXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0
eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNv
bXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0ODgsMTggKzM0ODQsMTggQEAgdm9pZCBFZGl0b3I6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHBy
b3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAog
ICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKICAgICBpZiAoIXJl
c3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVB
TSkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oKnJlc3VsdFJhbmdlLCBET1dOU1RSRUFNKSk7CiAKICAgICBpZiAoIShvcHRpb25zLmNv
bnRhaW5zKERvTm90UmV2ZWFsU2VsZWN0aW9uKSkpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1OTYsNyArMzU5Miw3
IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRh
cmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGlm
ICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKICAgICAgICAgICAgIHNl
YXJjaFJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZShtX2Zy
YW1lLCAqcmFuZ2UpKQorICAgICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBp
ZiAoIXNlYXJjaFJhbmdlKQpAQCAtMzY2Niw3ICszNjYyLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxG
cmFtZVMKICNlbmRpZgogCiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKICNpZiBFTkFCTEUo
VEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmIChzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkpCkBAIC0zNjg5LDcgKzM2ODUsNyBA
QCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogCiBib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVs
ZXBob25lTnVtYmVycygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhv
bmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5p
c1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0
b3I6OmlzU3VwcG9ydGVkKCk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8U2ltcGxlUmFuZ2U+IHNjYW5G
b3JUZWxlcGhvbmVOdW1iZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKQEAgLTM3MzIsNyAr
MzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygp
CiAKICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CiAKLSAgICBh
dXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcg
Y2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVj
dGVkIHBob25lIG51bWJlcnMuCkBAIC0zNzQ5LDcgKzM3NDUsNyBAQCB2b2lkIEVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1f
ZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTM3NzQs
OSArMzc3MCw5IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAg
IGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld0FkamFjZW50V29yZHM7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0ZWRTZW50ZW5jZTsKLSAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5z
ZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOworICAgICAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAg
ICAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
bmV3U3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBuZXdBZGphY2VudFdv
cmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwog
I2Vsc2UKQEAgLTM4MjksNyArMzgyNSw3IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRp
bWVyRmlyZWQoKQogICAgIGlmICghbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlE
aWN0YXRpb24pCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogCi0gICAgbV9vbGRTZWxlY3Rpb25Gb3JF
ZGl0b3JVSVVwZGF0ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9v
bGRTZWxlY3Rpb25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIG5vdGlmeUNs
aWVudE9mQXR0YWNobWVudFVwZGF0ZXMoKTsKQEAgLTM4NTYsNyArMzg1Miw3IEBAIHN0YXRpYyBO
b2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBub2RlKQogCiBib29sIEVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRG
aXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTM0LDcgKzM5MzAs
NyBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgp
CiAgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQogICAg
ICAgICA6IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CkBA
IC0zOTQ3LDcgKzM5NDMsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogfQog
CkBAIC00MDE0LDcgKzQwMTAsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0cmli
dXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAgICBh
dXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1JlbW92
ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDU1LDcgKzQwNTEs
NyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4dExp
c3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRM
aXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2ggKHN0
eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBAIC00
MDgxLDcgKzQwNzcsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8g
dHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUo
KSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUt
PnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTQx
NjksMTIgKzQxNjUsOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBk
YXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJZGVu
dGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRlbnRp
ZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAoYXV0
byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAgICAg
IGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZpZXIo
aWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50LmF0
dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50KCkt
PmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2htZW50
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciksIGF0
dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQxOTcsNyArNDE4OSw3IEBAIHZvaWQgRWRpdG9y
OjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8dWlu
dDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0
Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0
cnVlOwogCkBAIC00MjE2LDcgKzQyMDgsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29sIEVk
aXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVybiBX
ZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2Vy
KGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjMyLDEzICs0MjI0LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0cmlu
ZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5h
YmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1vZGVF
bmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29y
KG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVu
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJu
ICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTaG91
bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQyOTEsOSArNDI3Nyw5
IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBs
ZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAgIGlm
ICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAg
ICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2Rl
VG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAv
LyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRy
OwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMDUsMTIgKzQyOTEsMTIgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8v
IEZJWE1FOiBBZGp1c3RpbmcgdGhlIHN0YXJ0IG1heSBtb3ZlIGl0IHBhc3QgdGhlIGVuZC4gSW4g
dGhhdCBjYXNlIHRoZSBpdGVyYXRvciBiZWxvdyB3aWxsIGdvIG9uIHRvIHRoZSBlbmQgb2YgdGhl
IGRvY3VtZW50LgotICAgIGF1dG8gYWRqdXN0ZWRTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGFk
anVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpKTsKKyAgICBhdXRvIGFkanVzdGVkU3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CiAgICAgaWYgKCFhZGp1c3RlZFN0YXJ0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByYW5nZS0+c3RhcnQgPSAqYWRqdXN0ZWRTdGFydDsK
QEAgLTQzMzksNyArNDMyNSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omlu
c2VydEVkaXRhYmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAm
JiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCmluZGV4IDIzZjVkZTEzMDQwNDk4ZTU4MGNlMWQxZDQxY2U0NzBkN2RhZTQ5YTMuLjU2ZjVl
ZTNjYWY5ZGUzMGI3NjEyMTIzNDk4YzYwOGRhNjA4ZTdhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1
ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTks
MTMgKzEyMCwxMyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4
X3QgewogCiBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZp
c2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uPiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlKERvY3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxv
cHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJD
T1JFX0VYUE9SVCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZy
YW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dh
c0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
MTM3LDcgKzEzOCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JT
Y29wZSB7CiBwdWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUm
IGZyYW1lKQotICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQs
IFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAg
ICAgOiBtX3NlbGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewog
ICAgIH0KIApAQCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihG
cmFtZSYpOworICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsK
IAogICAgIGVudW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIs
NyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBX
RUJDT1JFX0VYUE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50
ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29t
bWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBE
b2N1bWVudCYpOwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBT
dHJpbmcmIHBhcmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVs
bHB0cikgY29uc3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQg
eyBudWxscHRyIH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAg
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBt
X2ZyYW1lOwogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1l
bnVPcktleUJpbmRpbmcuCkBAIC01NjgsNyArNTcwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQm
KTsKIAogcHJpdmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29s
IGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTksNyArNjIxLDcgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBT
dHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1h
bmQ+IG1fbGFzdEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9k
ZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCAxM2YyYmVkNDllNDZiYmExYTlkNjA1ODY2YWQxMzFh
NTU4MDExZDA5Li5lMWZiM2NkMDc5MDNmZWMzYzc4ZTI1OGI3NzI1MTY4ZjQxMTlhMjEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTExMDcsNiArMTEwNyw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0
aE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50
KCkpOwogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpA
QCAtMTgzNCwxMiArMTgzNSwxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5k
KiBpbnRlcm5hbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpD
b21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAg
IHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9t
TWVudU9yS2V5QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxD
b21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3Vt
ZW50KTsKIH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4g
Q29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOwor
ICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwg
bV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVu
dU9yS2V5QmluZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTg1MSwxMiArMTg1
MiwxMyBAQCBFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1h
bmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNv
dXJjZSBzb3VyY2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5k
KQogICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1l
IDogbnVsbHB0cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxw
dHIpCisgICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikK
IHsKLSAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQg
fHwgIW1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25z
dCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4
NjYsOSArMTg2OCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxs
b3dFeGVjdXRpb25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1l
bnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1l
KCkgIT0gbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29t
bWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1l
dGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggYTBj
MDkwOWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJjNDMzMy4uMTYxZTg4YTM3NGJmNGM0ZDJh
MDQ3MWY0YzBkODViOTRjZDNkNDAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5LDEzIEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJv
bGxlcjo6ZWRpdGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgcmV0dXJuICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25z
aWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKIH0K
IAotRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1f
ZnJhbWUoZnJhbWUpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1feFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAg
ICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhU
X0NBUkVUKQpAQCAtMTU2LDcgKzE1Niw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlv
bihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAs
IG1fY2FyZXRQYWludCh0cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFs
c2UpCi0gICAgLCBtX2ZvY3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1f
Zm9jdXNlZChkb2N1bWVudC5mcmFtZSgpICYmIGRvY3VtZW50LnBhZ2UoKSAmJiBkb2N1bWVudC5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LmZyYW1l
KCkpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVuZGlu
Z1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9s
bFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0xNjUsMTQgKzE2NSwyNCBAQCBGcmFt
ZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9jYXJldEJs
aW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNl
bGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25h
bCh0cnVlKTsKKworICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2
ZSgpOworICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9t
Tm9uZSgpOworI2lmIFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChi
bGlua3MgfCBkb2VzIG5vdCBibGluaykKKyAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9j
dXNlZCk7CisjZWxzZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8g
VmlzaWJsZSA6IEhpZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxl
bWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
LSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNl
bGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJp
Z2dlcmVkIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQs
NyArMjk0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlm
ZmVyZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3Rt
ZW50TW9kZSBlbmRwb2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbiA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9u
YWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdT
ZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3Vs
ZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlv
bi5pc0RpcmVjdGlvbmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2lu
YWxCYXNlLmlzTm90TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJs
ZUJhc2UoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsMTAg
KzMzMiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGJvb2wgc2hvdWxkQ2xlYXJU
eXBpbmdTdHlsZSA9IG9wdGlvbnMuY29udGFpbnMoQ2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvblBvc3NpYmx5V2l0aG91
dERpcmVjdGlvbjsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24o
bV9mcmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1f
ZG9jdW1lbnQpKQogICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsK
IAotICAgIGlmICghbV9mcmFtZSkgeworICAgIGlmICghbV9kb2N1bWVudC5mcmFtZSgpKSB7CiAg
ICAgICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMzM0LDcgKzM0NCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
Ly8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5m
aW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdT
ZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4g
bmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAg
ICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9u
RG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKG5ld1Nl
bGVjdGlvbkZyYW1lICE9IG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVu
dCAhPSAmbV9kb2N1bWVudCkgewogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8v
IEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMg
RnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNl
bGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKQEAgLTM0OSw3ICszNTksNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNv
bnN0IFZpc2libGVTZWxlY3RpbwogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKIAog
ICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmco
bV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQp
OwogCiAgICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5n
U3R5bGUoKTsKQEAgLTM1Nyw3ICszNjcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBk
aWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlm
IChkaWRNdXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlv
bldpbGxDaGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zZWxlY3Rpb25XaWxs
Q2hhbmdlKCk7CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDM1
ICszODEsMzEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVk
c1VwZGF0ZSgpOwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25z
ICYgRG9Ob3RTZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRG
b2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICAgICAgc2V0
Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBi
ZSBuZWVkZWQuCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVu
dCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5mb2N1c2Vk
RWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC51
cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4
IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQg
d2lsbCBiZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlm
IG5lY2Vzc2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC5l
ZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7
CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlvbi1hcGkvI3NlbGVjdGlvbmNo
YW5nZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNr
IHNvdXJjZSB0byB1c2UuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cXVldWVUYXNrVG9EaXNw
YXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVu
dDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9jdW1lbnQucXVldWVUYXNrVG9EaXNwYXRj
aEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQogewotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFt
ZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywg
YWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJh
bWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6
OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVj
dGlvbikKQEAgLTQxMSwyNyArNDE3LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAg
bV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9u
VXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxj
KCkpCisgICAgaWYgKG1fZG9jdW1lbnQuaGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmIChm
cmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQp
OwogCiAgICAgaWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0
byogY2xpZW50ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNs
aWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZyYW1l
JiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBm
cmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICNl
bHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRv
Y3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyArNDQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBSZXZl
YWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJldmVh
bE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0
aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC5y
ZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7
CiB9CiAKQEAgLTQ1Nyw3ICs0NjMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAgIGlm
IChtX3NlbGVjdGlvblJldmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZl
YWwpIHsKICAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBpZiAo
bV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rp
b25Jc1JldmVhbGVkKCkpCisgICAgICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQogICAgICAgICAg
ICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFs
aWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rp
b24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvRWRnZUlmTmVlZGVkOwpAQCAtNDcxLDcgKzQ3Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dCYgaW50CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0
aW9uKCkKIHsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIG1fZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCk7CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zY2FuU2VsZWN0aW9u
Rm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MDksNyBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBp
c0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUg
c2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0byB3aGlj
aCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBj
aGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAgaWYgKG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRT
ZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2lu
dCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0
aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogCiAgICAgcmV0
dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2VsZWN0aW9u
LnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MjksNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVT
ZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRp
bwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0
V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0gICAgaWYgKG1fZnJhbWUgJiYgbV9m
cmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KSkgeworICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNw
YWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFj
ZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVy
dGhlciBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBz
ZW1hbnRpY3Mgb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRo
ZQpAQCAtODU1LDcgKzg2MSw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAg
ICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpLnJpZ2h0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdo
ZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5z
aG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNl
V2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVu
dFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsK
ICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1Nw
YWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEw
NzYsNyArMTA4Miw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92
aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpLmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmlu
Z1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92
aW5nUmlnaHQgPSBtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNl
V2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAg
ICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5N
b3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMzE3LDcgKzEz
MjMsNyBAQCBzdGF0aWMgQVhUZXh0U2VsZWN0aW9uIHRleHRTZWxlY3Rpb25XaXRoRGlyZWN0aW9u
QW5kR3JhbnVsYXJpdHkoU2VsZWN0aW9uRGlyZWN0aQogYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7
CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCkgewotICAgICAgICBGcmFt
ZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uOworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0
cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0
aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rp
b24ubW9kaWZ5KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBOb3RVc2VyVHJpZ2dlcmVk
KTsKIApAQCAtMTM2Miw3ICsxMzY4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVB
bHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgp
ICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2ZyYW1lICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICBpZiAocmVhY2hlZEJvdW5kYXJ5
ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNjZXNz
aWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlv
bkJvdW5kYXJ5LCB0ZXh0U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0x
MzcwLDEyICsxMzc2LDEzIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlv
biBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNTcGF0aWFs
TmF2aWdhdGlvbkVuYWJsZWQobV9mcmFtZSkpCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSkpIHsKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBh
bHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRp
b24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgaWYgKG1fZnJhbWUg
JiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAo
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2Jq
ZWN0Q2FjaGUoKSkKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldFRleHRTZWxlY3Rpb25J
bnRlbnQodGV4dFNlbGVjdGlvbkludGVudChhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSkp
OwogICAgIH0KIApAQCAtMTM4NCw3ICsxMzkxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgK
ICAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkgYmVjYXVz
ZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBwb3NpdGlv
biB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uIHNl
dC4KICAgICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0
ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRl
cmF0aW9uRXh0ZW5kKTsKIAogICAgIHN3aXRjaCAoYWx0ZXIpIHsKICAgICBjYXNlIEFsdGVyYXRp
b25Nb3ZlOgpAQCAtMTM5NCw3ICsxNDAxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAog
ICAgICAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKQogICAgICAgICAgICAgJiYgKGdyYW51
bGFyaXR5ID09IFdvcmRHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFu
dWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBMaW5lR3JhbnVsYXJpdHkpCi0gICAgICAgICAgICAm
JiBtX2ZyYW1lICYmICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVuZFNl
bGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKKyAgICAgICAgICAgICYmICFtX2Rv
Y3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JM
aW5lQWNyb3NzQ2FyZXQoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IHRoZSBzZWxlY3Rp
b24gZ28gYWNyb3NzIHRoZSBiYXNlIHBvc2l0aW9uIGRpcmVjdGx5LiBOZWVkZWQgdG8gbWF0Y2gg
bWFjCiAgICAgICAgICAgICAvLyBiZWhhdmlvciB3aGVuLCBmb3IgaW5zdGFuY2UsIHdvcmQtc2Vs
ZWN0aW5nIGJhY2t3YXJkcyBzdGFydGluZyB3aXRoIHRoZSBjYXJldCBpbgogICAgICAgICAgICAg
Ly8gdGhlIG1pZGRsZSBvZiBhIHdvcmQgYW5kIHRoZW4gd29yZC1zZWxlY3RpbmcgZm9yd2FyZCwg
bGVhdmluZyB0aGUgY2FyZXQgaW4gdGhlCkBAIC0xNDA3LDcgKzE0MTQsNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleAogCiAgICAgICAgIC8vIFN0YW5kYXJkIE1hYyBiZWhhdmlvciB3aGVuIGV4
dGVuZGluZyB0byBhIGJvdW5kYXJ5IGlzIGdyb3cgdGhlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBs
ZWF2aW5nIHRoZQogICAgICAgICAvLyBiYXNlIGluIHBsYWNlIGFuZCBtb3ZpbmcgdGhlIGV4dGVu
dC4gTWF0Y2hlcyBOU1RleHRWaWV3LgotICAgICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUt
PmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRp
bmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdy
YW51bGFyaXR5KSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAg
ICAgIHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jaygpOwpAQCAtMTQ0Niw3ICsxNDUzLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0
aWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNl
clRyaWdnZXJlZCkgewotICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9u
OworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQp
OwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7
CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyLCB2ZXJ0aWNhbERpc3Rh
bmNlLCBkaXJlY3Rpb24sIE5vdFVzZXJUcmlnZ2VyZWQpOwogCkBAIC0xNTE3LDcgKzE1MjQsNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIHVuc2lnbmVk
IHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJU
cmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsK
IAotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7Cisg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25h
bFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU2Nyw3ICsxNTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Y2xlYXIoKQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCkpOwogfQog
Ci12b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQordm9pZCBGcmFt
ZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiB7CiAgICAgbV9ncmFudWxhcml0
eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwogCkBAIC0xNTc1LDcgKzE1ODIsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgIG1fY2FyZXRCbGlua1Rp
bWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmll
dygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAg
c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCks
IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY1NSw5ICsxNjYyLDcgQEAgc3RhdGljIGJv
b2wgaXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikK
IAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNp
ZGVGaXhlZCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwor
ICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKG1fZG9jdW1lbnQpOwog
ICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAgICAg
Kmluc2lkZUZpeGVkID0gbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjc1LDEwICsx
NjgwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICBp
ZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lVmlldyog
diA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2Rv
Y3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTY5MCw3ICsxNjkyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2ZyYW1lLT5kb2N1bWVu
dCgpLCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KCZt
X2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0g
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
MTcxNSw3ICsxNzE3LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkp
IHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpKSB7
CiAgICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0g
bV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAm
JiBtX3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYg
KHNob3VsZFJlcGFpbnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50
RWRpdGFibGUpKSB7CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKQEAgLTE4
OTMsMTMgKzE4OTUsOSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9u
IGxpa2Ugbm8gc2VsZWN0aW9uLgogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwot
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0
UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQuaGl0VGVzdChIaXRUZXN0UmVxdWVz
dCgpLCByZXN1bHQpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsK
ICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTI2LDEwICsxOTI0LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAg
ICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCkucGFy
ZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dHJlZSgpLnBh
cmVudCgpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5NDIsNyArMTk0MCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNl
bGVjdGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRvIHRoZSA8aWZyYW1lPiBv
ciA8ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZnJhbWUu
Ci0gICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7Cisg
ICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKTsKICAg
ICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRhaW5lck5vZGUq
IG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFyZW50Tm9kZSgpOwpAQCAtMTk2
OCw5ICsxOTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgp
OwogICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVj
dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LmNh
blNlbGVjdEFsbCgpKSB7CkBAIC0yMDAwLDggKzE5OTYsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3RBbGwoKQogICAgICAgICBpZiAocm9vdCkKICAgICAgICAgICAgIHNlbGVjdFN0YXJ0
VGFyZ2V0ID0gcm9vdC0+c2hhZG93SG9zdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RT
dGFydFRhcmdldCA9IGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOworICAgICAgICAgICAgcm9v
dCA9IG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RTdGFy
dFRhcmdldCA9IG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIXJvb3QpCkBAIC0yMDQxLDggKzIwMzcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91
bGRDbAogICAgICAgICBzZWxlY3Rpb25PcHRpb25zLmFkZChDbG9zZVR5cGluZyk7CiAKICAgICBp
ZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIEZyYW1lU2VsZWN0
aW9uIHRyaWFsRnJhbWVTZWxlY3Rpb247Ci0KKyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxG
cmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBzZWxlY3Rpb25PcHRpb25zKTsKIAogICAgICAgICBp
ZiAoIXNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbEZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigp
KSkKQEAgLTIwNTgsOSArMjA1Myw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotICAgIFJlZjxEb2N1bWVu
dD4gZG9jdW1lbnQoKm1fZnJhbWUtPmRvY3VtZW50KCkpOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX2RvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
IAogI2lmIFVTRShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3Mg
fCBkb2VzIG5vdCBibGluaykKQEAgLTIwNzEsNyArMjA2NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBSZW5kZXJP
YmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAgIC8vIFJlbmRlck9iamVj
dDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2
ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFp
bnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkp
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFy
cyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDc2LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0
eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQo
KSkgewogICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAg
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAg
ICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCkBAIC0yMTA3LDEzICsyMTAxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3Vz
ZWQoYm9vbCBmbGFnKQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUo
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1f
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4g
bV9mb2N1c2VkICYmIG1fZG9jdW1lbnQucGFnZSgpICYmIG1fZG9jdW1lbnQucGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1p
bmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKEZy
YW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5
cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFu
ZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIxMzIs
MTIgKzIxMjYsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAg
ICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24udmlz
aWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1
dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRp
bmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNo
b3VsZEJsaW5rID0gIXBhaW50QmxvY2tDdXJzb3IgJiYgY2FyZXRJc1Zpc2libGUoKSAmJiBpc0Nh
cmV0KCkgJiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGlu
ayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9mcmFtZSkpCisgICAg
aWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0
b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZCgmbV9kb2N1bWVudCkpCiAgICAgICAgIG1fY2Fy
ZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFj
ayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsyMTQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7
CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpOwogICAgIGlm
ICghdmlldykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAyLDggKzIxOTYsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxp
dHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dl
ciBhIHN5bmNocm9ub3VzIGxheW91dCBoZXJlLgotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUobV9kb2N1bWVudCk7CiAKICNpZiBF
TkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsy
MjQwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQo
KQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAg
ICAgICBpZiAoRWxlbWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChtX3NlbGVj
dGlvbi5iYXNlKCkpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJhbWUpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFu
Y2hvciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjU1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNl
dEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNG
cmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8g
bWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlz
IGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQt
PmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVs
ZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZG9jdW1l
bnQuZnJhbWUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAg
ICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQo
bnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7
CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUp
OworICAgICAgICBtX2RvY3VtZW50LnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQobnVsbHB0ciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIHZvaWQgRHJhZ0Nh
cmV0Q29udHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0NvbnRl
eHQmIHAsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYg
Y2xpcFJlY3QpIGNvbnN0CkBAIC0yMjk3LDE5ICsyMjkwLDE2IEBAIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBGcmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxl
Q29udGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7Ci0KLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5
b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKG1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LnJlbmRl
clZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKQEAgLTIzMjUsMTQgKzIzMTUsMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnQKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0UmVjdEhl
aWdodCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAg
IGlmICghbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9m
cmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9k
b2N1bWVudC52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdC
b3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWln
aHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAg
YXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50
UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0
LDcgKzIzNTQsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50
KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkg
Y29uc3QKIHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJz
dCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVu
dCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVs
ZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3Rh
cnQpCiAgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAg
aWYgKCFzdGFydCkKQEAgLTI0MDcsOCArMjM5Nyw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJl
dmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9s
CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRl
Rml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRh
dGVBcHBlYXJhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3Rp
ZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAg
ICAgICAgIGlmIChtX2RvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlT
Y3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogI2Vsc2UKQEAgLTI0MjYsMjcgKzI0MTYsMjYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9k
eSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50
aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1
bWVudCkuCiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJh
bWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgp
IHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC5oYXNFZGl0YWJs
ZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAg
aWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8
ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghKGlzTm9uZSgpIHx8IGlz
U3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50Lmhhc0VkaXRhYmxlU3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50
LT5ib2R5KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LmJvZHkoKSkKICAgICAg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNv
bnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgp
LT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgp
CkBAIC0yNDY0LDcgKzI0NTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93
QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRT
aG93QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBt
X2RvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAg
dXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ3MSwxMyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCkKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogewotICAg
IFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4g
cHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9y
U3R5bGVDaGFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5j
ZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3Vt
ZW50LmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRvclN0YXRl
QWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRSZWN0TmVl
ZHNVcGRhdGUoKTsKQEAgLTI1MzksMTQgKzI1MjgsMTQgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEZyYW1lU2VsZWN0aW9uOjplbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBj
b24KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKCkKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbih3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKSk7ICAgICAgICAK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbih3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKG1fZG9jdW1lbnQsIG1fc2VsZWN0aW9uKSk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc0NhcmV0T3JSYW5nZSgpKQogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIH0K
IAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKQogewotICAgIHJldHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJl
dHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fZG9jdW1lbnQsIG1f
c2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkK
QEAgLTI1NTcsNyArMjU0Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlv
blRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogICAgIFZpc2libGVQb3Np
dGlvbiBzMShtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZTEobV9z
ZWxlY3Rpb24uZW5kKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBleHBhbmRlZCh3b3JkU2Vs
ZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKSk7CisgICAgVmlzaWJs
ZVNlbGVjdGlvbiBleHBhbmRlZCh3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KG1fZG9jdW1lbnQsIG1fc2VsZWN0aW9uKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHMyKGV4cGFu
ZGVkLnN0YXJ0KCkpOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIHN0YXJ0IHRvIGJlY29tZSBn
cmVhdGVyIGFmdGVyIHRoZSBleHBhbnNpb24uCkBAIC0yNzA4LDcgKzI2OTcsNyBAQCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2Vs
ZWN0aW9uKGludCBhbW91bgogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxl
bWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVh
dGVSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2RvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxvY2F0aW9uKTsK
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoKTsKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdl
LCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CkBAIC0yNzE2LDEzICsyNzA1LDEzIEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgsIE5vCiAgICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyBGaXJlU2VsZWN0
RXZlbnQgfSk7CiB9CiAKLVZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxlY3Rpb246OndvcmRTZWxl
Y3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQorVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOwogCiAgICAgQVNTRVJUKHNlbGVjdGlvbi5p
c0NhcmV0T3JSYW5nZSgpKTsKLSAgICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKKyAg
ICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihkb2N1bWVudCk7CiAgICAgZnJhbWVTZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CiAKICAgICBQb3NpdGlvbiBzdGFydFBvc0Jl
Zm9yZUV4cGFuc2lvbihzZWxlY3Rpb24uc3RhcnQoKSk7CkBAIC0yODcxLDcgKzI4NjAsNyBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJl
bnRTZWxlY3Rpb24oRUFsdGVyYXRpbwogICAgIGlmICghYW1vdW50KQogICAgICAgICByZXR1cm4g
bV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAotICAgIEZyYW1lU2VsZWN0aW9uIGZy
YW1lU2VsZWN0aW9uOworICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uKG1fZG9jdW1l
bnQpOwogICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyBEaXJlY3Rpb25Gb3J3
YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoYW1v
dW50KTsgaSsrKQpAQCAtMjg4OSw3ICsyODc4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcykKICAgICBpZiAobV9jYXJldEJsaW5rcyA9PSBj
YXJldEJsaW5rcykKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOyAKKyAgICBtX2RvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50ID0gZmFs
c2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGFiMjg5MDUxMTlkNTFkNTQzYjUzMGU3MjI4ZmQxOTY0
ZWFhMDkzYjIuLmQzZjRhNTExZDJmNmZhZjFjNjdkMzA4MGYyNDBiMDBjMzE2OTEyNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKERvY3VtZW50Jik7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQo
KSBjb25zdDsKICAgICAgCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgU2hvdWxkQ2xv
c2VUeXBpbmcsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFy
KCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICB2b2lkIHdpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKTsKIAogICAgIHZvaWQgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0
KCk7CiAgICAgdm9pZCBzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCk7
CkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0
QmxpbmtzID0gdHJ1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYXJldENvbG9yKGNv
bnN0IENvbG9yJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpc2libGVTZWxlY3Rpb24g
d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpc2libGVTZWxlY3Rpb24gd29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihEb2N1bWVudCYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKTsKICAgICBib29sIGlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRVcGRhdGVB
cHBlYXJhbmNlRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV91cGRhdGVBcHBlYXJhbmNlRW5hYmxl
ZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHN1cHByZXNzU2Nyb2xsaW5nKCkgeyArK21fc2Nyb2xs
aW5nU3VwcHJlc3NDb3VudDsgfQpAQCAtMzM2LDcgKzMzNiw3IEBAIHByaXZhdGU6CiAgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVy
YXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBGcmFtZSogbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlmZjlm
MzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEyNGNm
MTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVk
CiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgYm9v
bCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0Vu
YWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNldHRp
bmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVk
KQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVh
a0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZiLi4y
NzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3ICsx
NDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8g
SGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGlu
Z1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUgJiYg
IXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGluZyBz
dHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGU5
MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1MTM2
OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxlY3Rp
b24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1NlbGVj
dGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9yKCku
aXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgpLmVk
aXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9ybU92
ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJl
IGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdT
dHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChSZWZQ
dHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkudHlw
aW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRQ
b3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAgICAg
ICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxlKHR5
cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFkOTM5
ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQxM2Yw
NTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VX
aXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9uKCku
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxYzgx
OTg0MGYwNTQzOWQyZWQyZjFkOGM1MmFjMjdmZTgxMmJlZjE4Li43Mzg2M2JlZmMzYjg5ODI3MzJm
NTYwYTFkMGEzNTk1NjI5MTIzZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6IENh
biB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQ/
ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQgYWZ0
ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZyYW1l
KCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgZGVz
dGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQuICBU
byBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0aG91
dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUgc2Ft
ZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4ZTli
YTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDAs
NyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFt
ZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBoYW5l
ZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCwg
bV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewotICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAg
aWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSkg
JiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBzZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgzNjZi
NTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0OThm
ZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtOTgs
OCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQoKQog
ICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2Vy
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNwZWxs
Q2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQog
ICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNrZXI6
OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzExNCw3
IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50KiBT
cGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JDbGll
bnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVja2Vy
Ojp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVja2Vy
Ojppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNl
dHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7
CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlJiBy
YW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52b2tl
UmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNsaWVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1vdmUo
cmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3Byb2Nl
c3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGll
bnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6
ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0xOTks
NyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1JlcXVl
c3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vzc2lu
Z1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJlcGxh
Y2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFzdFBy
b2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkKICAg
ICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTksNyAr
MjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3REYXRh
LmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkKICAg
ICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAg
ICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1
bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVj
a2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBt
YXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5ZmI1
YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4YTg2
NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03Niw3
ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1lJik7
CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hlY2tl
cigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEwNiw3
ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAgICBG
cmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIwODQ1
MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcgKzY1
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewogICAg
ICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3Io
KS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3JyZWN0
ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVuYXBw
bGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwgbV9j
b3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgpLnNl
bGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQp
KQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNlbGVj
dGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVs
bENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IDI2NmQyM2JlMWIzZDM1Y2QyNTlkNjIxY2Q3NzMwNzIxNGNkODcyN2MuLmI1
OTFiMTU5YTNlMzBiODZhMzY1Zjk5ODkyNjQ2YWJmNjcxMTJiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5nQ29t
bWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNv
bW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29t
cG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0g
ICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7
CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9zaXRp
b25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVs
bENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCArMTgw
LDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
S2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJH
cmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1l
bnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZyYW1l
KCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5k
ID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAg
ICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
bGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9u
KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4
dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hv
dWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsK
QEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlwaW5n
Q29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRp
b25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBGSVhN
RTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9zZSBh
IG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgp
OwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAgICAg
ICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGlu
Z0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21t
YW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFz
dFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRv
Y3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3Vy
cmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElz
QXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBv
c2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNw
ZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25z
LAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtleSwg
ZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxl
Y3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9pZCBU
eXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0
aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkKIHsK
LSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlw
aW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0
aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigp
LnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUo
dGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGluc2Vy
dFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBv
cHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVlZCB0
byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBG
cmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9ucywg
VGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZyYW1l
PiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIExP
RyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0LnV0
ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3Vy
cmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAg
U3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQsIHNl
bGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvblBl
bmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxlY3Rp
b24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0aGF0
IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1cmUs
IHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3VzdG9t
IHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBvZiB0
aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29t
bWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgewor
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBpZiAo
bGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvckluc2Vy
dGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0
aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYsMTIg
KzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8gY21k
ID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBv
cHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQo
ZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2Vs
ZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1lKCks
IGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsKIH0K
IAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50
LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRv
Y3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlw
aW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1l
bnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9w
dGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMg
JiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRp
b25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5
QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1l
bnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21t
YW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JU
eXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9j
b21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcsOSAr
Mjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwgb3B0
aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5k
OjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkKK1Jl
ZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29tcG9z
aXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RFZGl0
Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21t
YW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFsYXN0
RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwgIXN0
YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09wZW5G
b3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYgKzMx
MCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFuZFVu
dGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxpbmdJ
bml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0aW5n
QWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1lKiBm
cmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50
KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYgKFJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFR5
cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9w
ZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3
U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXND
dXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
ZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1Nl
bGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00MzYs
MTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21t
YW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0K
ICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3Io
KS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVk
aXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAh
ZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisgICAg
aWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9t
YXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9y
KCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1
bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0
ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZyYW1l
LmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKCFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxlY3Rp
b24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVl
ZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkK
ICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAgIGlm
IChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8fCBj
b21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFuZFR5
cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1hbmRU
eXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29u
dGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQo
KnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFz
dHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVj
dGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBlbHNl
IGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwog
I2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8gSWYg
dGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNvdWxk
IGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdvcmRT
aWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIHN0
YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVj
dGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsK
ICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYgKzQ4
NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVU
eXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAgICAg
ICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJldHVy
biBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBmcmFt
ZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNy
ZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBs
eUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwogfQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29t
bWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFt
ZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9yQWRk
ZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCkuYXBw
bGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRp
bmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFsc28g
cGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQgaGFw
cGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVudFNw
ZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5k
VHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNraW5n
IGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50IGlz
c3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBhcyBt
aXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlwZUZv
ckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7
CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5kaWYK
IH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dEFu
ZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAgICAg
TE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51dGY4
KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJlcGxh
Y2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNlcnRl
ZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5n
LCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVk
QnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAsOSAr
NTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVz
KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlvblR5
cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VM
ZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rpb24o
KSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0VGV4
dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZy
YW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJh
bWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwogfQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2liaWxp
dHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRl
eHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAg
IGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgp
LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9j
dW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQog
CkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBm
YWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0gICAg
RnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rvcihm
cmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNlcGFy
YXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4
dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNj
ZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAgcmVw
bGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlz
dGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFY
VGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFj
ZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCkK
ICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBp
bmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250
ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmls
aXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRF
ZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQo
KS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRv
Y3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNl
dFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0K
IApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJv
b3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBG
cmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZy
YW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwog
Ci0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAg
LTY3NCw3ICs2NDgsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogCiAgICAgICAgIG1fc21h
cnREZWxldGUgPSBmYWxzZTsKIAotICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247Cisg
ICAgICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbihkb2N1bWVudCgpKTsKICAgICAgICAgc2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAgIHNlbGVjdGlv
bi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3
YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nICYmIHNl
bGVjdGlvbi5pc0NhcmV0KCkgJiYgZ3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
CkBAIC03NDgsMjAgKzcyMiwyMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3Vs
ZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBj
bG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQo
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50
KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVj
dGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRl
U2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUu
aXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlv
bihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoIXdp
bGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVk
aXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVs
ZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxs
UmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwog
CiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxs
IHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91
bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc5OCw3ICs3NzEsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgICAgICAvLyBI
YW5kbGUgZGVsZXRlIGF0IGJlZ2lubmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAvLyBEbyBu
b3RoaW5nIGluIHRoZSBjYXNlIHRoYXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiBhCiAg
ICAgICAgIC8vIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1
bWVudC4KLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgICAgICBGcmFtZVNl
bGVjdGlvbiBzZWxlY3Rpb24oZG9jdW1lbnQoKSk7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBncmFudWxhcml0
eSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCkBAIC04NTcsMTMgKzgzMCwxMyBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
ICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcg
QVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOwor
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQo
KSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRv
RGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQo
Rm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQpAQCAtODczLDcgKzg0Niw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRl
bGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5n
KQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxs
UmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9k
ZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVk
CiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3Nt
YXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSov
IGZhbHNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1
Mzg1NzVjYWEzODc2YmI5YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQz
ZjFjODY5ZDU4ZWI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAg
LTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhE
b2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFy
YXRvcihEb2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNs
b3NlVHlwaW5nKEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQm
KTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RF
ZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50Jiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQo
Y29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyAr
MTAzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7
IHJldHVybiBtX29wZW5Gb3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsg
bV9vcGVuRm9yTW9yZVR5cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsK
KyAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGls
bE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwog
ICAgIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5z
ZmVyKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxl
KCkgY29uc3QgZmluYWw7CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZl
cmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZCosIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5
cGluZ1N0eWxlKEVUeXBpbmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5D
b21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBl
bXB0eVN0cmluZygpLCBSZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IDdmZTMwZTBhMGVhMmU3ZWJlMzNh
MTI3YzMxZjc3YjRlMzJmMDVjYTMuLjE0YjM1YzI4OGIzNmM2ZjBiY2RmMzAxZjk2NDljOGY5YmY1
ZjBlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpA
QCAtODAsOCArODAsOCBAQCBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZWREYXRh
Rm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKgogCiBTdHJpbmcgRWRpdG9y
OjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKQogewotICAgIHJldHVybiBzZXJpYWxpemVQcmVzZXJ2
aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNv
bHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1f
ZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgp
ID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5v
KTsKKyAgICByZXR1cm4gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xv
Y2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2Vs
ZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2Vk
VHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiB9CiAKICNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQpAQCAtMTA1LDE4ICsxMDUsMTggQEAgdm9pZCBFZGl0b3I6Omdl
dFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZl
Y3RvcjxTdHIKIAogI2VuZGlmCiAKLXN0YXRpYyBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5n
PiBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcoY29uc3QgRnJhbWUmIGZyYW1lKQorc3RhdGlj
IFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmlu
Zyhjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgYXV0byByYW5nZSA9IGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIHJldHVybiBy
YW5nZSA/IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKS5zdHJpbmcgOiBhZG9wdE5TKFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CiB9CiAKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewotICAgIGF1dG8gc3Ry
aW5nID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUpOworICAgIGF1dG8gc3Ry
aW5nID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKG1fZG9jdW1lbnQpOwogCiAgICAgUGFz
dGVib2FyZFdlYkNvbnRlbnQgY29udGVudDsKLSAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBt
X2ZyYW1lLmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAg
Y29udGVudC5jb250ZW50T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFz
dGVib2FyZCgpOwogICAgIGNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENv
cHlPckRlbGV0ZSgpOwogICAgIGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVj
dGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9
IFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5n
ZXQoKSkgOiBudWxscHRyOwpAQCAtMTMxLDEwICsxMzEsMTAgQEAgdm9pZCBFZGl0b3I6OndyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAKIHZvaWQgRWRp
dG9yOjp3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRl
ckRhdGEpCiB7Ci0gICAgYXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmco
bV9mcmFtZSk7CisgICAgYXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmco
bV9kb2N1bWVudCk7CiAKICAgICBQYXN0ZWJvYXJkV3JpdGVyRGF0YTo6V2ViQ29udGVudCB3ZWJD
b250ZW50OwotICAgIHdlYkNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQo
KS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKKyAgICB3ZWJDb250ZW50LmNvbnRl
bnRPcmlnaW4gPSBtX2RvY3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAg
ICAgd2ViQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRl
KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5X
ZWJBcmNoaXZlRm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0
cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgp
KSA6IG51bGxwdHI7CkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0
aW9uKFBhc3RlYm9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIAogUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKQogewot
ICAgIGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24o
Jm1fZnJhbWUpOworICAgIGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZy
b21TZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICBpZiAoIWFyY2hpdmUpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShhcmNo
aXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKS5nZXQoKSk7CkBAIC0xNzcsMTEgKzE3NywxMSBA
QCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0
VGV4dCgpCiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJp
bmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxvY2txdW90ZUhh
bmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhtX2ZyYW1lLCBhdHRyaWJ1dGVkU3Ry
aW5nKSkgeworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEFuZEFkZFJlc291cmNlcygqbV9kb2N1bWVudC5mcmFtZSgpLCBhdHRyaWJ1dGVk
U3RyaW5nKSkgewogICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVu
dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAg
ICAgICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCks
IGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0KQEAgLTIy
Nyw3ICsyMjcsNyBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJURkZvcm1h
dChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKIC8vIE9yIHJlZmFjdG9yIHNvIGl0IGRvZXMg
bm90IGRvIHRoYXQuCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50
RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgY29uc3QgU2ltcGxlUmFuZ2Um
IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewot
ICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5U
ZXh0KTsKKyAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCBj
b250ZXh0LCBhbGxvd1BsYWluVGV4dCk7CiAgICAgcGFzdGVib2FyZC5yZWFkKHJlYWRlcik7CiAg
ICAgY2hvc2VQbGFpblRleHQgPSByZWFkZXIubWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dDsKICAg
ICByZXR1cm4gV1RGTW92ZShyZWFkZXIuZnJhZ21lbnQpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHZv
aWQgRWRpdG9yOjp0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBzdHJpbmdGcm9tU2VsZWN0aW9uID0gbV9mcmFtZS5kaXNwbGF5
U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpKTsK
KyAgICBhdXRvIHN0cmluZ0Zyb21TZWxlY3Rpb24gPSBtX2RvY3VtZW50LmZyYW1lKCktPmRpc3Bs
YXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkp
OwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKICAgICB0eXBl
cy5hcHBlbmQoU3RyaW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCmluZGV4IGU5ZGZkZmNiZWRhNGFkYzM2ODYw
MmM5MWMwMjBlNjM2YjEwMDQ4M2QuLmQ0MWU0YjkzMDI3NjEyNTY4ZGFlNGY5YmU5OGUwMTQyM2Fk
ZjE4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApAQCAtOTQs
NyArOTQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBw
YXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAg
IGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsIG1fZnJh
bWUsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQp
LCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9hcmQsICptX2RvY3Vt
ZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQ
bGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdt
ZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgdm9pZCBFZGl0
b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAg
ICAgUGFzdGVib2FyZFdlYkNvbnRlbnQgcGFzdGVib2FyZENvbnRlbnQ7CiAgICAgcGFzdGVib2Fy
ZENvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwog
ICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIo
KTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJM
czo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCi0gICAgICAgIG1fZnJhbWUu
c2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKKyAg
ICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6
WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisgICAgICAgIG1fZG9jdW1lbnQu
c2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpID8gU2Vy
aWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3NlZFRyZWU6Ok5vKTsKICAg
ICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsKIH0KIAogUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQm
IHBhc3RlYm9hcmQsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5U
ZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRG
cm9tUGFzdGVib2FyZERhdGEocGFzdGVib2FyZCwgbV9mcmFtZSwgY29udGV4dCwgYWxsb3dQbGFp
blRleHQsIGNob3NlUGxhaW5UZXh0KTsKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGFz
dGVib2FyZERhdGEocGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgY29udGV4dCwgYWxs
b3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IDNmMjljNGUyM2Uy
ZjZjZGY1ZDQ2NDJmMmRjMTg4NDZjNTdlMzJkODYuLjY3MjRkYjg1MGRhNzU5OWY4MGE2NjI2NjRl
NjUwOGEzNmU1MmYyMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0Vk
aXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0K
QEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2Vk
QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXIKICAgICAvLyBJZiB0aGUg
dGV4dCBoYXMgbGVmdCBvciByaWdodCBhbGlnbm1lbnQsIGZsaXAgbGVmdC0+cmlnaHQgYW5kIHJp
Z2h0LT5sZWZ0LiAKICAgICAvLyBPdGhlcndpc2UsIGRvIG5vdGhpbmcuCiAKLSAgICBhdXRvIHNl
bGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgYXV0byBzZWxlY3Rpb25TdHlsZSA9IEVk
aXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlvblN0eWxl
LT5zdHlsZSgpKQogICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjYsMTQgKzEyNiwxNCBAQCB2b2lk
IEVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihX
cml0aW5nRGlyZWN0aW9uIGRpcgogICAgIGlmICghbmV3VmFsdWUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1
c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC5m
b2N1c2VkRWxlbWVudCgpOwogICAgIGlmIChmb2N1c2VkRWxlbWVudCAmJiAoaXM8SFRNTFRleHRB
cmVhRWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KSB8fCAoaXM8SFRNTElucHV0RWxlbWVudD4oKmZv
Y3VzZWRFbGVtZW50KQogICAgICAgICAmJiAoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmZv
Y3VzZWRFbGVtZW50KS5pc1RleHRGaWVsZCgpCiAgICAgICAgICAgICB8fCBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLmlzU2VhcmNoRmllbGQoKSkpKSkgewogICAg
ICAgICBpZiAoZGlyZWN0aW9uID09IFdyaXRpbmdEaXJlY3Rpb246Ok5hdHVyYWwpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGRvd25jYXN0PEhUTUxFbGVtZW50PigqZm9jdXNlZEVsZW1l
bnQpLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWxpZ25BdHRyLCBuZXdWYWx1
ZSk7Ci0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwor
ICAgICAgICBtX2RvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVVbmNoYW5n
ZWFibGVTdHlsZXMoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBzdHlsZXMgdGhh
dCB0aGUgdXNlciBjYW5ub3QgbW9kaWZ5IGJ5IGFwcGx5aW5nIHRoZWlyIGRlZmF1bHQgdmFsdWVz
LgogICAgIAotICAgIGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUobV9m
cmFtZS5kb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpKTsKKyAgICBhdXRvIGVkaXRpbmdTdHls
ZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSk7CiAg
ICAgYXV0byBkZWZhdWx0U3R5bGUgPSBlZGl0aW5nU3R5bGUtPnN0eWxlKCktPm11dGFibGVDb3B5
KCk7CiAgICAgCiAgICAgLy8gVGV4dCB3aWRnZXRzIGltcGxlbWVudCBiYWNrZ3JvdW5kIGNvbG9y
IHZpYSB0aGUgVUlWaWV3IHByb3BlcnR5LiBUaGVpciBib2R5IGVsZW1lbnQgd2lsbCBub3QgaGF2
ZSBvbmUuCkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9h
cmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogewogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgYm9vbCBhbGxvd1Bs
YWluVGV4dCA9IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KTsK
LSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCAqcmFuZ2UsIGFsbG93UGxhaW5U
ZXh0KTsKKyAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCAq
cmFuZ2UsIGFsbG93UGxhaW5UZXh0KTsKICAgICBpbnQgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRlbXMg
PSBjbGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bWJlck9mUGFzdGVib2FyZEl0ZW1zOyArK2kpIHsKICAgICAgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY2xpZW50KCktPmRvY3VtZW50RnJhZ21lbnRGcm9t
RGVsZWdhdGUoaSk7CkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBh
c3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgog
CiB2b2lkIEVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVjdG9yPFN0cmlu
Zz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEpCiB7Ci0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChkaWN0YXRpb25QaHJhc2VzLmlzRW1w
dHkoKSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNl
c0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgIC8v
IFNvbWUgZGF5IHdlIGNvdWxkIG1ha2UgdGhlbSBVbmRvYWJsZSwgYW5kIGxldCBjYWxsZXJzIGNs
ZWFyIHRoZSBVbmRvIHN0YWNrIGV4cGxpY2l0bHkgaWYgdGhleSB3aXNoLgogICAgIGNsZWFyVW5k
b1JlZG9PcGVyYXRpb25zKCk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyKCk7Cisg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgZWxlbWVudC5yZW1vdmVD
aGlsZHJlbigpOwogCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIAogICAg
IC8vIEFzIGEgc2lkZSBlZmZlY3QgdGhpcyBmdW5jdGlvbiBzZXRzIGEgY2FyZXQgc2VsZWN0aW9u
IGFmdGVyIHRoZSBpbnNlcnRlZCBjb250ZW50LiBNdWNoIG9mIHdoYXQKICAgICAvLyBmb2xsb3dz
IGlzIG1vcmUgZXhwZW5zaXZlIGlmIHRoZXJlIGlzIGEgc2VsZWN0aW9uLCBzbyBjbGVhciBpdCBz
aW5jZSBpdCdzIGdvaW5nIHRvIGNoYW5nZSBhbnl3YXkuCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5jbGVhcigpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIC8v
IGNsZWFyIG91dCBhbGwgY3VycmVudCBjaGlsZHJlbiBvZiBlbGVtZW50CiAgICAgZWxlbWVudC5y
ZW1vdmVDaGlsZHJlbigpOwpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0
QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQpCiAg
ICAgc2VsZWN0aW9uLnNldEJhc2UodmlzaWJsZVBvcyk7CiAgICAgc2VsZWN0aW9uLnNldEV4dGVu
dCh2aXNpYmxlUG9zKTsKIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNl
bGVjdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKIAogICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKIH0KQEAg
LTM4OCw3ICszODgsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogLy8gaGF2ZSBhIHN0YWxlIHNlbGVj
dGlvbi4KIHZvaWQgRWRpdG9yOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0
aW9uSWZPcGVuRm9yTW9yZVR5cGluZygpCiB7Ci0gICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFz
dEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoJm1fZnJh
bWUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFR5cGluZ0NvbW1hbmQ6
OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlw
aW5nKG1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3
cGUvRWRpdG9yTGliV1BFLmNwcAppbmRleCA1ZDE1YTY0NjFjNTY5YjYzYWNjNjE1Nzk1ZTM0NDc3
MDhhNGQ1NTc3Li4xMmZkNmE0M2VhMDVhMmEwZTcyYjc0YmE3MmQ5NjI4NjQ3MDViYWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKQEAgLTY3
LDggKzY3LDggQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3Rl
Ym9hcmQmIHBhc3RlYm9hcmQpCiB7CiAgICAgUGFzdGVib2FyZFdlYkNvbnRlbnQgcGFzdGVib2Fy
ZENvbnRlbnQ7CiAgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRh
dGFUcmFuc2ZlcigpOwotICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKLSAgICAg
ICAgbV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFi
bGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJl
ZTo6Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZp
bmdWaXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJl
c29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAg
bV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFi
bGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJl
ZTo6Tm8pOwogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQogCkBA
IC04NCw3ICs4NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwog
CiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwg
bV9mcmFtZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWlu
VGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1f
ZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpB
bGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIGlmIChmcmFnbWVudCAmJiBv
cHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlvbikpCiAgICAgICAgIHF1b3Rl
RnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0KaW5kZXggOTMxYTIzMDBmMDk2NjQyNDNkODY2YWM4NjQwYTk3MWQ2YzU5MjE0
ZC4uM2FjZDk5NzgzNjdhNmZjYWQ0NTJlMTBkNzVmNWUzMDc3Y2RhN2ZjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgRWRp
dG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNl
dDxQYXN0ZU9wdGlvbj4KIHZvaWQgRWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFz
dGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRl
eHQgfSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQo
cGFzdGVib2FyZCk7CkBAIC0xMzYsMTcgKzEzNiwxNiBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5v
ZGVGcm9tUGFzdGVib2FyZChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQogewogICAgIEFTU0VSVChub2RlKTsKIAotICAgIGlmICgmbm9kZS0+ZG9jdW1lbnQoKSAhPSBt
X2ZyYW1lLmRvY3VtZW50KCkpCisgICAgaWYgKG5vZGUtPmRvY3VtZW50KCkgIT0gbV9kb2N1bWVu
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7
Ci0KKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RvcihtX2RvY3VtZW50KTsKICAgICBhdXRvIHJh
bmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpub2RlKTsKLSAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlKSwgRnJhbWVT
ZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RT
ZXRGb2N1cyk7CiAKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwog
Ci0gICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0
V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
MjAsNyArMjE5LDcgQEAgc3RhdGljIHZvaWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVtZW50
LCBSZWZQdHI8SW1hZ2U+JiBpbWFnZSwgQ2FjaGVkSW1hZ2UqJgogCiB2b2lkIEVkaXRvcjo6c2Vs
ZWN0aW9uV2lsbENoYW5nZSgpCiB7Ci0gICAgaWYgKCFoYXNDb21wb3NpdGlvbigpIHx8IGlnbm9y
ZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAg
IGlmICghaGFzQ29tcG9zaXRpb24oKSB8fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fu
Y2VsQ29tcG9zaXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0ZyYW1lU2VsZWN0aW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVT
ZWxlY3Rpb25NYWMubW0KaW5kZXggODM0Y2MzNmJhOGE2N2EyYmU4YTdiN2I0OGNlYTNlMWY5NWM3
MWNiNy4uODIzOTNkOTc4NDE1MTIxOWI0N2MyYTFlODMzOTMyNTM4ZmUwNWUzMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KQEAgLTM0LDEw
ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90
aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYgaW50ZW50KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCk7Ci0KICAgICBpZiAobV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBt
X3NlbGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBkb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQuZXhpc3RpbmdBWE9iamVjdENhY2hl
KCkpCiAgICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbiht
X3NlbGVjdGlvbi5zdGFydCgpLCBpbnRlbnQsIG1fc2VsZWN0aW9uKTsKICAgICB9CiAKQEAgLTQ2
LDEwICs0NCwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9y
U2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbgogICAgIGlmICghVUFab29tRW5h
YmxlZCgpIHx8ICFtX3NlbGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpOworICAgIFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKTsKICAgICBpZiAo
IXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQu
dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4IDVlODY4N2Y4OTRiZWM2MDRjYzYy
MWJkNGUwZDkxMjgyOTVjMzRmNTkuLmM3OTZiZmFhZjY2ZWU5NGE4NWM1NWYzOTIzNDkxNTVkMjc0
YTg2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcApAQCAtNDIs
NyArNDIsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBw
YXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJldHVybjsKIAogICAg
IGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudChtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQp
OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRv
Y3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRh
aW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAg
IGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlv
bikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC02OSw5
ICs2OSw5IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tUGxhdGZvcm1EYXRhKFBsYXRmb3JtRHJhZ0RhdGEmCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2Fy
ZCwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIC8qYWxsb3dQbGFpblRleHQqLywgYm9vbCYgLypj
aG9zZVBsYWluVGV4dCovKQogewogICAgIGlmIChDT01QdHI8SURhdGFPYmplY3Q+IHBsYXRmb3Jt
RHJhZ0RhdGEgPSBwYXN0ZWJvYXJkLmRhdGFPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EcmFnRGF0YSwgbV9mcmFtZSk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJh
Z0RhdGEsICptX2RvY3VtZW50LmZyYW1lKCkpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50
RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRhTWFwKCksIG1fZnJhbWUpOworICAg
IHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0
YU1hcCgpLCAqbV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAppbmRleCA1NWU0MWI3YWY1ZGM1
YjlmNzFlZTdmOWFlZDZjZjYzZmNhMzBhMjExLi5kM2Q2NjVmYjcxMjJiNmNmN2FhYTNjMzE0NWMy
MGMyMDBhYzk3ZTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAt
Mjg2LDcgKzI4Niw3IEBAIHZvaWQgQ2FjaGVkRnJhbWU6OmRlc3Ryb3koKQogICAgIG1fZG9jdW1l
bnQtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiAKICAgICBtX2RvY3VtZW50LT5zZXRCYWNr
Rm9yd2FyZENhY2hlU3RhdGUoRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAg
bV9kb2N1bWVudC0+cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgbV9kb2N1bWVudC0+d2ls
bEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogCiAgICAgY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDhiMDVmODM3NTE0ZjUwYWUwOGIyYWY0ZDg0ZTNiMWVk
NTcyNGFlYzcuLjU5MTI4YmViODc1NjhkMWY3OWY4ODQ1NjY0MmM1NTkxY2ViMTIyNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNTQ4LDExICs1NDgsMTQgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6c3RvcCgpCiB2b2lkIEZyYW1lTG9hZGVyOjp3aWxsVHJhbnNpdGlvblRv
Q29tbWl0dGVkKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZnJh
bWUgaXMgc3RpbGwgZnVsbHkgaW4gcGxhY2UgKG5vdCBjYWNoZWQsIG5vdCBkZXRhY2hlZCksIGJ1
dCB3aWxsIGJlIHJlcGxhY2VkLgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bV9mcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgaWYgKGRvY3VtZW50LT5l
ZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIC8vIFRoZSB0ZXh0IHdhcyBhbHJl
YWR5IHByZXNlbnQgaW4gRE9NLCBzbyBpdCdzIGJldHRlciB0byBjb25maXJtIHRoYW4gdG8gY2Fu
Y2VsIHRoZSBjb21wb3NpdGlvbi4KLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5jb25maXJtQ29t
cG9zaXRpb24oKTsKLSAgICAgICAgaWYgKEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50ID0gbV9m
cmFtZS5lZGl0b3IoKS5jbGllbnQoKSkgeworICAgICAgICBkb2N1bWVudC0+ZWRpdG9yKCkuY29u
ZmlybUNvbXBvc2l0aW9uKCk7CisgICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVu
dCA9IGRvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkgewogICAgICAgICAgICAgZWRpdG9yQ2xp
ZW50LT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKICAgICAgICAgICAgIGVk
aXRvckNsaWVudC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOwogICAgICAgICB9CkBA
IC01NjMsNyArNTY2LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogewogICAgIGhp
c3RvcnkoKS5zYXZlRG9jdW1lbnRTdGF0ZSgpOwogCi0gICAgRG9jdW1lbnQqIGN1cnJlbnREb2N1
bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IGN1cnJlbnRE
b2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKICAgICBVbmxvYWRFdmVudFBvbGljeSB1bmxv
YWRFdmVudFBvbGljeTsKICAgICBpZiAobV9mcmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5wYWdlKCkt
PmNocm9tZSgpLmNsaWVudCgpLmlzU1ZHSW1hZ2VDaHJvbWVDbGllbnQoKSkgewogICAgICAgICAv
LyBJZiB0aGlzIGlzIHRoZSBTVkdEb2N1bWVudCBvZiBhbiBTVkdJbWFnZSwgbm8gbmVlZCB0byBk
aXNwYXRjaCBldmVudHMgb3IgcmVjYWxjU3R5bGUuCkBAIC01NzUsNyArNTc4LDggQEAgdm9pZCBG
cmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogCiAgICAgc3RvcExvYWRpbmcodW5sb2FkRXZlbnRQb2xp
Y3kpOwogICAgIAotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMo
KTsKKyAgICBpZiAoY3VycmVudERvY3VtZW50KQorICAgICAgICBjdXJyZW50RG9jdW1lbnQtPmVk
aXRvcigpLmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6
OmRpZE9wZW5VUkwoKQpAQCAtNTg3LDcgKzU5MSw2IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9w
ZW5VUkwoKQogICAgIH0KIAogICAgIG1fZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLmNhbmNl
bCgpOwotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXJMYXN0RWRpdENvbW1hbmQoKTsKIAogICAg
IG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSBmYWxz
ZTsKQEAgLTY1MCw4ICs2NTMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQ2xlYXJXaW5k
b3dOYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRG9jdW1lbnQmIG5ldwogCiB2b2lkIEZy
YW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJvb2wgY2xlYXJXaW5kb3dQ
cm9wZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cywgYm9vbCBjbGVhckZyYW1lVmlldywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlRE9NV2luZG93Q3JlYXRpb24pCiB7Ci0gICAg
bV9mcmFtZS5lZGl0b3IoKS5jbGVhcigpOwotCiAgICAgYm9vbCBuZWVkZWRDbGVhciA9IG1fbmVl
ZHNDbGVhcjsKICAgICBtX25lZWRzQ2xlYXIgPSBmYWxzZTsKIApAQCAtNjU5LDcgKzY2MCw3IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVh
cldpbmRvd1Byb3BlcnRpZXMsIGJvb2wKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5jYW5j
ZWxQYXJzaW5nKCk7CiAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+c3RvcEFjdGl2ZURPTU9i
amVjdHMoKTsKICAgICAgICAgYm9vbCBoYWRMaXZpbmdSZW5kZXJUcmVlID0gbV9mcmFtZS5kb2N1
bWVudCgpLT5oYXNMaXZpbmdSZW5kZXJUcmVlKCk7Ci0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQo
KS0+cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+
d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogICAgICAgICBpZiAoaGFkTGl2aW5nUmVuZGVyVHJl
ZSkKICAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+YWRqdXN0Rm9jdXNlZE5vZGVPbk5v
ZGVSZW1vdmFsKCptX2ZyYW1lLmRvY3VtZW50KCkpOwogICAgIH0KQEAgLTY4MCw3ICs2ODEsNiBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJvb2wgY2xl
YXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sCiAgICAgICAgICAgICBtX2ZyYW1lLnRyZWUoKS5zZXRO
YW1lKG51bGxBdG9tKCkpOwogICAgIH0KIAotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucHJlcGFy
ZUZvckRlc3RydWN0aW9uKCk7CiAgICAgbV9mcmFtZS5ldmVudEhhbmRsZXIoKS5jbGVhcigpOwog
CiAgICAgaWYgKGNsZWFyRnJhbWVWaWV3ICYmIG1fZnJhbWUudmlldygpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAppbmRleCAxYTYwODk2NjM0NmQxMzY4MmI5M2I5MGQyNmM3NzljMjJkZmJjZjE4Li4zOWRl
YTRkNWUyNWE3YzYzZDliZmRiMDNhYTVlNzU1NTRiYjFiYzY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cApAQCAtMTU2LDggKzE1Niw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBtX25h
dmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigqdGhp
cykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdCht
YWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fZWRpdG9yKG1h
a2VVbmlxdWVSZWY8RWRpdG9yPigqdGhpcykpCi0gICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVl
UmVmPEZyYW1lU2VsZWN0aW9uPih0aGlzKSkKICAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlciht
YWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzKSkKICAgICAsIG1fcGFn
ZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAgICAgLCBtX3RleHRab29t
RmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQpAQCAtMjM0LDcgKzIzMiw3IEBAIHZv
aWQgRnJhbWU6OnNldFZpZXcoUmVmUHRyPEZyYW1lVmlldz4mJiB2aWV3KQogICAgIC8vIG5vdGlm
aWVkLiBJZiB3ZSB3YWl0IHVudGlsIHRoZSB2aWV3IGlzIGRlc3Ryb3llZCwgdGhlbiB0aGluZ3Mg
d29uJ3QgYmUgaG9va2VkIHVwIGVub3VnaCBmb3IKICAgICAvLyB0aGVzZSBjYWxscyB0byB3b3Jr
LgogICAgIGlmICghdmlldyAmJiBtX2RvYyAmJiBtX2RvYy0+YmFja0ZvcndhcmRDYWNoZVN0YXRl
KCkgIT0gRG9jdW1lbnQ6OkluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgbV9kb2MtPnByZXBh
cmVGb3JEZXN0cnVjdGlvbigpOworICAgICAgICBtX2RvYy0+d2lsbEJlUmVtb3ZlZEZyb21GcmFt
ZSgpOwogICAgIAogICAgIGlmIChtX3ZpZXcpCiAgICAgICAgIG1fdmlldy0+bGF5b3V0Q29udGV4
dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKQEAgLTI3OSw3ICsyNzcsNyBAQCB2b2lkIEZyYW1lOjpz
ZXREb2N1bWVudChSZWZQdHI8RG9jdW1lbnQ+JiYgbmV3RG9jdW1lbnQpCiAjZW5kaWYKIAogICAg
IGlmIChtX2RvYyAmJiBtX2RvYy0+YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6
OkluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgbV9kb2MtPnByZXBhcmVGb3JEZXN0cnVjdGlv
bigpOworICAgICAgICBtX2RvYy0+d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpOwogCiAgICAgbV9k
b2MgPSBuZXdEb2N1bWVudC5jb3B5UmVmKCk7CiAgICAgQVNTRVJUKCFtX2RvYyB8fCBtX2RvYy0+
ZG9tV2luZG93KCkpOwpAQCAtNTU0LDcgKzU1Miw3IEBAIGJvb2wgRnJhbWU6OnJlcXVlc3RET01Q
YXN0ZUFjY2VzcygpCiAgICAgY2FzZSBET01QYXN0ZUFjY2Vzc1BvbGljeTo6RGVuaWVkOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBET01QYXN0ZUFjY2Vzc1BvbGljeTo6Tm90UmVx
dWVzdGVkWWV0OiB7Ci0gICAgICAgIGF1dG8qIGNsaWVudCA9IG1fZWRpdG9yLT5jbGllbnQoKTsK
KyAgICAgICAgYXV0byogY2xpZW50ID0gZWRpdG9yKCkuY2xpZW50KCk7CiAgICAgICAgIGlmICgh
Y2xpZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05MzcsNyArOTM1LDcgQEAg
dm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3Rv
ciwgZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2VkaXRvci0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwor
ICAgIGVkaXRvcigpLmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKIAogICAgIC8v
IFJlc3BlY3QgU1ZHcyB6b29tQW5kUGFuPSJkaXNhYmxlZCIgcHJvcGVydHkgaW4gc3RhbmRhbG9u
ZSBTVkcgZG9jdW1lbnRzLgogICAgIC8vIEZJWE1FOiBIb3cgdG8gaGFuZGxlIGNvbXBvdW5kIGRv
Y3VtZW50cyArIHpvb21BbmRQYW49ImRpc2FibGVkIj8gTmVlZHMgU1ZHIFdHIGNsYXJpZmljYXRp
b24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggZTljYWIzY2MwZjllY2JkYTFjMTE4MmUzYWE3NWQ0YzVj
NmEyZWIwMC4uNDU0NDBhYzFhYWYwNzM3MWMzNTJmMThkYjQxNjk2MWY4ZjE0MWI2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWJzdHJhY3RGcmFtZS5o
IgogI2luY2x1ZGUgIkFkanVzdFZpZXdTaXplT3JOb3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgog
I2luY2x1ZGUgIlBhZ2VJZGVudGlmaWVyLmgiCkBAIC0xNjMsMTQgKzE2NCwxNCBAQCBwdWJsaWM6
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CiAgICAgRnJhbWVWaWV3KiB2aWV3KCkg
Y29uc3Q7CiAKLSAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9Ci0gICAg
Y29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEVk
aXRvciYgZWRpdG9yKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0KKyAgICBjb25z
dCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9
CiAgICAgRXZlbnRIYW5kbGVyJiBldmVudEhhbmRsZXIoKSB7IHJldHVybiBtX2V2ZW50SGFuZGxl
cjsgfQogICAgIGNvbnN0IEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgY29uc3QgeyByZXR1
cm4gbV9ldmVudEhhbmRsZXI7IH0KICAgICBGcmFtZUxvYWRlciYgbG9hZGVyKCkgY29uc3Q7CiAg
ICAgTmF2aWdhdGlvblNjaGVkdWxlciYgbmF2aWdhdGlvblNjaGVkdWxlcigpIGNvbnN0OwotICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQotICAg
IGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGlvbjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVu
dCgpLT5zZWxlY3Rpb24oKTsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJl
ZSYgdHJlZSgpIGNvbnN0OwogICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1h
dGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAgIGNvbnN0IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW9uQ29udHJvbGxlcjsgfQpAQCAtMzM4LDggKzMzOSw2IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPERvY3VtZW50PiBtX2RvYzsKIAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBt
X3NjcmlwdDsKLSAgICBVbmlxdWVSZWY8RWRpdG9yPiBtX2VkaXRvcjsKLSAgICBVbmlxdWVSZWY8
RnJhbWVTZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwogICAgIFVuaXF1ZVJlZjxDU1NBbmltYXRpb25D
b250cm9sbGVyPiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiAKICNpZiBFTkFCTEUoREFUQV9ERVRF
Q1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCAyZDZjZTgwOGJl
ZDY5M2MxZjcwMzNmZmM3ZTdhZDU0NmM1MGFhM2ZjLi45NjZiYTZkOTlhMmU2NjZlZWViY2M5ZDk0
NmM4MmZhZGMyY2ZiMjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRp
Y2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAg
LTY4LDExICs2OCw5IEBAIFJlZjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUo
Y29uc3QgVGV4dEluZGljYXRvckRhdGEmIGRhdGEpCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBU
ZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBU
ZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAg
IGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KS5mcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpOwogCi0gICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gcmFuZ2UgPT0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYm9v
bCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gcmFuZ2UgPT0gZG9jdW1lbnQtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBPcHRpb25TZXQ8VGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zOwogICAgIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RG9O
b3RTZXRGb2N1cyk7CkBAIC04MCwxNCArNzgsMTQgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFQK
ICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRp
b246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlv
bnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMp
OwogI2VuZGlmCi0gICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgq
ZnJhbWUsIHsgcmFuZ2UgfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9y
YXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZShkb2N1bWVudCwgeyByYW5nZSB9LCB0
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zKTsKIAogICAgIFRleHRJbmRpY2F0b3JEYXRhIGRhdGE7
CiAKICAgICBkYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0
aW9uOwogICAgIGRhdGEub3B0aW9ucyA9IG9wdGlvbnM7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJ
bmRpY2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2Vs
ZWN0aW9uKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmRvY3VtZW50LT5m
cmFtZSgpLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRh
dGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDU0MzI1YWQ4MGMzYTNhNDg3ZjkwYzJm
MTkxNjc4NmFmOGRiOWY2ZWIuLmRhNDVmNWJjODM5YzYzOTVlODBlMWJkZjdhZDk1NDU4NzFjYzdh
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTQ2Nyw3ICs0NjcsNyBAQCAtIChXZWJW
aXNpYmxlUG9zaXRpb24gKillbmRQb3NpdGlvbgogLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdXb3Jk
UmFuZ2UKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihbc2VsZi5zdGFydFBvc2l0
aW9uIF92aXNpYmxlUG9zaXRpb25dLCBbc2VsZi5lbmRQb3NpdGlvbiBfdmlzaWJsZVBvc2l0aW9u
XSk7Ci0gICAgc2VsZWN0aW9uID0gRnJhbWVTZWxlY3Rpb246OndvcmRTZWxlY3Rpb25Db250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBzZWxlY3Rpb24gPSBGcmFtZVNlbGVj
dGlvbjo6d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihbc2VsZiBvd25lckRv
Y3VtZW50XSwgc2VsZWN0aW9uKTsKICAgICBXZWJWaXNpYmxlUG9zaXRpb24gKnN0YXJ0ID0gW1dl
YlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCldOwogICAgIFdlYlZpc2libGVQb3NpdGlvbiAqZW5kID0gW1dlYlZpc2libGVQb3NpdGlv
biBfd3JhcFZpc2libGVQb3NpdGlvbjpzZWxlY3Rpb24udmlzaWJsZUVuZCgpXTsKICAgICByZXR1
cm4gW0RPTVJhbmdlIHJhbmdlRm9yRmlyc3RQb3NpdGlvbjpzdGFydCBzZWNvbmQ6ZW5kXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmlu
ZGV4IDNiMDlmM2M2MjU2YjAwZDc2MzBlY2E2ZWExNmQzY2M2MjRkN2Y4YzIuLjllMTM3YjNhMDkz
MmYzYjIyYTkyMDEwMWFlYWYxOWQxMzAyN2YxOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQpAQCAtNzksNyArNzksNyBAQCBAaW1w
bGVtZW50YXRpb24gRE9NUmFuZ2UgKFVJS2l0RXh0ZW5zaW9ucykKIC0gKHZvaWQpbW92ZTooVUlu
dDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0
aW9uCiB7CiAgICAgUmFuZ2UgKnJhbmdlID0gY29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBm
cmFtZVNlbGVjdGlvbihbc2VsZiBvd25lckRvY3VtZW50XSk7CiAgICAgZnJhbWVTZWxlY3Rpb24u
bW92ZVRvKHJhbmdlKTsKICAgICAKICAgICBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkgPSBXZWJDb3JlOjpDaGFyYWN0ZXJHcmFudWxhcml0eTsKQEAgLTEwNyw3ICsxMDcsNyBA
QCAtICh2b2lkKW1vdmU6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3Rt
ZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5E
aXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgogewogICAgIFJh
bmdlICpyYW5nZSA9IGNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJh
bWVTZWxlY3Rpb247CisgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb24o
W3NlbGYgb3duZXJEb2N1bWVudF0pOwogICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7
CiAgICAgCiAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDFkMmIzZjgwOTIwNmQz
N2QwNWRmYjJhYTlhYjA4OGZmNjYyNDRjYmIuLjEzNmNkOGY3MzI2ZDM2M2Y1NTVlZTc2OTdjNTRk
NzdkZDZhYWRjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQpAQCAtNzgwLDExICs3ODAsMTUgQEAgLSAoQk9PTClfbmVlZHNMYXlvdXQKICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIC0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRT
ZWxlY3Rpb246KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9u
IGRpcmVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxh
cml0eTooV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CiB7Ci0gICAgaWYgKF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGF1dG8qIGRvY3Vt
ZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKGRvY3VtZW50LT5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uIHNlbGVjdGlvbjsKLSAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbiBzZWxlY3Rpb24oKmRvY3VtZW50KTsKKyAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKGRv
Y3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShh
bHRlcmF0aW9uLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKICAgICByZXR1cm4ga2l0KGNyZWF0
ZUxpdmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGVjMGI3ZDdiMjc3YzJlM2U2YzE3MDJkYzY5OGY4Y2MxZTBmY2NhNjMu
LmRjOGJiMTZmNDZjZDI1NzE0NTc3NTYxM2JkOWVjN2QzY2ZlZDU1N2IgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAyMC0wNC0yNyAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4K
KworICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NTY5Njk0NTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBjcmFzaC4KKworICAgICAgICAqIGVk
aXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3Qt
dGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbDogQWRkZWQuCisKKyAgICAgICAgTW9kaWZ5IHRo
ZSB0ZXN0IHJlc3VsdC4gRnJhbWVTZWxlY3Rpb24gaXMgYmVpbmcgZGVzdHJ1Y3RlZCBhbG9uZyB3
aXRoCisgICAgICAgIGRvY3VtZW50IHNvIGFuIGFkZGl0aW9uYWwgc2VsZWN0aW9uIGNoYW5nZSBu
b3RpZmljYXRpb24gaXMgZXhwZWN0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dDoKKwogMjAyMC0w
NC0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFsgaU9T
IF0gUkVHUkVTU0lPTjogYW5pbWF0aW9ucy9jaGFuZ2Uta2V5ZnJhbWVzLW5hbWUuaHRtbCBpcyBh
IGZsYWt5IGZhaWx1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5n
L2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNy
YXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDQwMzQyM2U1OTA5NTAyNjVmMDhhMzI5MjZl
NjYxN2QwMThhN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNl
cnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEgQEAKK1Rlc3RzIGluc2VydGluZyBsaXN0IGZvbGxvd2VkIGJ5IGFuIGVkaXQgY29t
bWFuZC4gVGhlIHRlc3QgcGFzc2VzIGlmIFdlYktpdCBkb2Vzbid0IGNyYXNoIG9yIGhpdCBhbiBh
c3NlcnRpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNl
cnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zYWYzODFkOWVmNWEzZmQ5NGViMjEwOTBjMmEyMmZiYzA3NTEyYWFmCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhl
bi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApAQCAtMCwwICsxLDE5IEBACis8Ym9keT48aW1hZ2U+
PC9pbWFnZT48Zm9ybSBpZD1mb3JtIGNvbnRlbnRFZGl0YWJsZT10cnVlPjxvYmplY3QgZGF0YT0/
IG9ubG9hZD1vYmplY3RPbkxvYWQoKT48L29iamVjdD48L2Zvcm0+PGRpYWxvZyBvcGVuPSJ0cnVl
Ij5hPC9kaWFsb2c+Cis8c2NyaXB0PgorICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmVtcHR5
KCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIsIGZhbHNlKTsKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIG9iamVjdE9uTG9hZCgpIHsKKyAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2Vy
dFVub3JkZXJlZExpc3QiLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJp
dGFsaWMiLCBmYWxzZSk7CisgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICI8cD4gVGVzdHMgaW5z
ZXJ0aW5nIGxpc3QgZm9sbG93ZWQgYnkgYW4gZWRpdCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMg
aWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlvbi48L3A+IjsKKyAgICAg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSk7CisgICAgfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1k
ZWFkLWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5n
L3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CmluZGV4IGQ2YmM3
YjFlNmYwM2UzYjQ4YWYwNDE4YzY1NTA0YTRkMjEzN2MxYWMuLmU1YmRkMmEwYmZkODk1MmQ5NzY2
YTQzN2NhY2VhNDY2NDg5Nzc4NjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9w
LWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC00LDYgKzQsNyBAQCBFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3Rp
ZmljYXRpbwogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpy
YW5nZSBmcm9tIDAgb2YgQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMCBvZiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDUgb2YgI3RleHQgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBh
ZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxT
RQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRlclZpZXcgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397781</attachid>
            <date>2020-04-27 18:47:16 -0700</date>
            <delta_ts>2020-04-27 20:52:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200427184715.patch</filename>
            <type>text/plain</type>
            <size>236143</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGZiZTIyY2Y2NGNjODg5
NGQxYmRkOGQzMTNkODYzMWZkY2NkNzA2OC4uNDRhNTNiMDBjYWY4NmM2Zjg2MDE3M2FhMTVhMDk3
ZmM3MTgyOWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxOSBAQAorMjAyMC0wNC0yNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSBjb25zdCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpz
dG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9y
ZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtl
ckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5M
RVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6dW5hcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFn
cmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6ZnJhbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9F
ZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpi
ZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNsaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkVkaXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjYW5FZGl0UmljaGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDdXQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5ESFRNTENv
cHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5Db3B5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuUGFzdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjYW5EZWxldGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRT
bWFydERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnRE
ZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnRyeURIVE1MQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyeURIVE1MQ3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9y
ZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbFVub3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpwZXJmb3JtQ3V0T3JDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVuZGVyTGF5ZXJEaWRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTZXRDb21wb3NpdGlvblNjb3BlOjpTZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldENvbXBvc2l0aW9uU2NvcGU6On5TZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmxlYXJu
U3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRP
clJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTZWxlY3Rpb25Vbmdy
YW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRXb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGVkVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92
ZVRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbXB1dGVBbmRT
ZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3Rh
cnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFj
aG1lbnRVcGRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRl
TW9kZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkb2N1bWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6Oklnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlOjpJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRv
Y3VtZW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN3YXBXaXRoTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZSBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlm
RGlmZmVyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rp
b25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRD
bGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRP
clN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RS
YW5nZU9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcv
SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExp
bmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1Vu
YXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWxsQ2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tl
cjo6aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmRpZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9u
SWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBp
bmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91
dE5ld2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVha0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGlu
Z0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJs
ZVN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndw
ZS9FZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGVk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRp
b25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgICogcGFn
ZS9GcmFtZS5oOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UpOgorCiAyMDIwLTA0LTI3ICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggOWJkNGRjMzk3NTBmMmYxNWIzY2UyZTg5ZGRiNjk3OGFkNDg0NjZlYi4uM2QzZTJm
YmExOTI4YzZjZTgyYTZkMzE0M2M0NWNjOWZmN2Q5NzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA0LTI3ICBKYWNrIExlZSAgPHNoaWhjaGll
aF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6
OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NjAwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEZyYW1lU2VsZWN0aW9uIGFuZCBFZGl0b3Igb2JqZWN0
cyBmcm9tIEZyYW1lIHRvIERvY3VtZW50IHNvIHdoZW4gYSBkb2N1bWVudCBpcyBkZXRhY2hlZAor
ICAgICAgICBpbiBuZXN0ZWQgY29tbWFuZCBleGVjdXRpb25zLCB0aGUgbmV4dCBFZGl0Q29tbWFu
ZCB3b3VsZCBub3QgZmFpbCBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIERPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdlIG1vdmU6aW5EaXJlY3Rpb246XSk6
CisgICAgICAgICgtW0RPTVJhbmdlIGV4dGVuZDppbkRpcmVjdGlvbjpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbjpkaXJlY3Rpb246Z3JhbnVsYXJpdHk6XSk6CisKIDIwMjAtMDQtMjcg
IEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBz
b21lIHVzZWxlc3MgaW5jbHVkZXMgb2YgQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAppbmRleCAwMmM3NTcwMGE4NWIzYzcyNTY2OTc3YmEyZGJjMWUzYWY4MjkxNGI1
Li5kNDhmYmI5ZWZkMjAwYWQ0MDIxZjQzYmY2OGU2NzNhNTVkOWRmZmRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpCiAg
ICAgLy8gTk9URTogaWdub3JlcyByZXN1bHRzIG9mIHNlbC5tb2RpZnkgYmVjYXVzZSBpdCByZXR1
cm5zIGZhbHNlIHdoZW4KICAgICAvLyBzdGFydGluZyBhdCBhbiBlbXB0eSBsaW5lLiAgVGhlIHJl
c3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAgLy8gd2lsbCBiZSBhIGNhcmV0IGF0
IHZpc2libGVQb3MuCi0gICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgIEZyYW1lU2Vs
ZWN0aW9uIHNlbGVjdGlvbigqZG9jdW1lbnQoKSk7CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVQb3MpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5k
YXJ5KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDMwNjU4NGRiNWRjNzBmMmZi
NmVlY2IyZGU3YmU5NTE0ZWMzNWRiMDQuLjBiOWI1ZjVmYzlkOWU0MWMwY2QzZGE4NDY2MmQxYjVi
NTZhYTg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTgzLDYgKzU4Myw4IEBAIERv
Y3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCB1bnNpZ25lZCBk
b2N1bWVudENsYXNzZXMsIHVuc2lnCiAgICAgLCBtX29yaWVudGF0aW9uTm90aWZpZXIoY3VycmVu
dE9yaWVudGF0aW9uKGZyYW1lKSkKICAgICAsIG1faWRlbnRpZmllcihEb2N1bWVudElkZW50aWZp
ZXI6OmdlbmVyYXRlKCkpCiAgICAgLCBtX3VuZG9NYW5hZ2VyKFVuZG9NYW5hZ2VyOjpjcmVhdGUo
KnRoaXMpKQorICAgICwgbV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKKyAg
ICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KCp0aGlzKSkKIHsK
ICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIs
IHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CkBAIC0yNTAwLDcgKzI1MDIsNyBAQCB2b2lkIERvY3VtZW50OjpkZXN0cm95UmVuZGVyVHJl
ZSgpCiAgICAgICAgIHZpZXcoKS0+ZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRG9jdW1lbnQ6OndpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKQogewogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24p
CiAgICAgICAgIHJldHVybjsKQEAgLTI1OTMsNiArMjU5NSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVk
aWEoSFRNTE1lZGlhRWxlbWVudEludmFsaWRJRCk7CiAgICAgfQogCisgICAgZWRpdG9yKCkuY2xl
YXIoKTsKKyAgICBzZWxlY3Rpb24oKS53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgZGV0
YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggMjgxNGI2M2U1YmE3MjkzN2NhYjI0Zjk2ZjEyNTA1OGQ0ZDZlNDZiZC4u
Y2I4YWFjYjE4MzU1Mzg0MjQ2YjAyYTYzOTYzZTE3NmNkYzk1Zjc3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7
CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRp
dGluZ0JlaGF2aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZl
bnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjgsNiAr
MTI5LDcgQEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3Jt
Q29udHJvbGxlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBG
cmFtZVZpZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRl
eHQ7CkBAIC02MjYsNyArNjI4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWNvbWVDdXJy
ZW50RG9jdW1lbnRJbkZyYW1lKCk7CiAgICAgdm9pZCBkZXN0cm95UmVuZGVyVHJlZSgpOwotICAg
IHZvaWQgcHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJv
bUZyYW1lKCk7CiAKICAgICAvLyBPdmVycmlkZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG1ldGhv
ZHMgdG8gZG8gYWRkaXRpb25hbCB3b3JrCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbDsKQEAgLTE1
NzgsNiArMTU4MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNWaXN1YWxseU5vbkVtcHR5
Q3VzdG9tQ29udGVudCgpIHsgbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCA9IHRy
dWU7IH0KICAgICBib29sIGhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudDsgfQogCisgICAgRWRp
dG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRp
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKwogcHJvdGVjdGVk
OgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRl
cmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVS
TCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlv
bkZsYWdzID0gMCk7CkBAIC0yMTE4LDYgKzIxMjUsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjsKIAogICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lk
ZW50aWZpZWRFbGVtZW50c01hcDsKKworICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwor
ICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCiBFbGVtZW50
KiBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXgg
M2JkNjU4ZGY2NDQwMWQyMmIwNjFkNmNjNDMwZmVlY2I0MWZlYjAwNi4uYWVmNGJjNWE3ZDhmNmQ2
ZDVhZDY2ZTY2MGI3ZjRlOGVlZTE4OGExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0
YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQor
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1
bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3Vt
ZW50KGRvY3VtZW50KQogewogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8g
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gIW1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtl
cnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOworICAgIHJldHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVs
bGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5n
SWZBcHByb3ByaWF0ZSgpCiAgICAgaWYgKG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29y
cmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3Np
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3Np
dGlvbiBjYXJldFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpOwogCiAgICAgaWYgKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkg
PT0gY2FyZXRQb3NpdGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQp
KTsKQEAgLTIyMCwxNCArMjIwLDE0IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYg
KGF1dG8gY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZl
cnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KG1fZnJhbWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAg
UmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9kb2N1bWVudC5mcmFtZSgpKTsKKyAgICBtX2RvY3Vt
ZW50LnVwZGF0ZUxheW91dCgpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7
Ci0gICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlv
bk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMo
KSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8g
cmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgbWFya2VycyA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3Vt
ZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMoKnJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1h
cmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5h
ZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7
CkBAIC0yMzgsMTIgKzIzOCwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRp
bWVyRmlyZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsK
LSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHAsIHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50
V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBl
OjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5n
ZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIG51bGxwdHIpOworICAgICAg
ICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVw
bGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29y
ZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVy
bmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFn
cmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAo
c3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0
cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8
fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3Vt
ZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2RvY3VtZW50ICE9IHJh
bmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
OwpAQCAtMzQyLDcgKzM0Miw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIAogRmxvYXRSZWN0IEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAg
YXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOwogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5n
ZSkpKTsKQEAgLTM1MCw3ICszNTAsNyBAQCBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbgogCiB2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewotICAgIFZpc2libGVTZWxlY3Rp
b24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQg
b2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCiAgICAg
Ly8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVz
ZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlv
bi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0g
dGhhdApAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0
ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29t
bWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigp
KQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbV9kb2N1bWVudC5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRv
cik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlv
bkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0
ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kQ29tcG9zaXRpb24KICAgICBhdXRvIHJhbmdlID0gY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgbWFya2Vycy5hZGRNYXJr
ZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRk
TWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwog
fQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVkaXRvckNsaWVu
dCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFnZSgpLT5lZGl0
b3JDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFnZSgpID8gJm1f
ZG9jdW1lbnQucGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFRleHRDaGVj
a2VyQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCkBAIC00
ODMsMTIgKzQ4MywxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgaWYgKG1hcmtlcnMuaGFz
TWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KSkgewogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikKICAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRD
b3JyZWN0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3Vs
dC5yZXBsYWNlbWVudCk7CkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtl
ciYKICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlv
bi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBO
b2RlKiBub2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8g
d29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdv
cmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zm
c2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3Jk
ID0gcGxhaW5UZXh0KHdvcmRSYW5nZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTYyLDcgKzU2Miw3IEBAIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1l
bnRNYXJrZXImCiAKIEFsdGVybmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdl
KCkgPyBtX2ZyYW1lLnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwor
ICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2Rv
Y3VtZW50LnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBT
dHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBs
aWVkQWx0ZXJuYXRpdmVUZXh0KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlw
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU5OSw3ICs1OTks
NyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0
VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1
IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmlu
Z0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7
Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtl
Qm91bmRhcnlQb2ludChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwor
ICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJv
dW5kYXJ5UG9pbnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsK
ICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAg
ICAgcmV0dXJuOwogICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRl
ZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJl
Y3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYyMSwx
MSArNjIxLDExIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0
ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdF
dmVudCkKICAgICAgICAgdGFyZ2V0ID0gdHJpZ2dlcmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBl
bHNlCi0gICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJh
bWUuZG9jdW1lbnQoKSk7CisgICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRv
Y3VtZW50KCZtX2RvY3VtZW50KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZt
X2ZyYW1lLndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAg
YXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZy
YW1lKCktPndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAg
ZXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCBWZWN0b3I8U3RyaW5n
PiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJr
ZXIoY29uc3QgRAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlv
bkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgYXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0
b3IoKTsKKyAgICBhdXRvJiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8g
c2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8
fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmlu
ZGV4IDk0Nzc0YTc2YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZj
MzA4OGRjMjc3YjNmNzkxY2Y4MjMxYjkwNjMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3Np
dGlvbjsKIGNsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBj
bGFzcyBSYW5nZTsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJh
bWUoZnJhbWUpIHsgfSkKKyAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERv
Y3VtZW50JiBkb2N1bWVudCkgVU5MRVNTX0VOQUJMRUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7
IH0pCiAgICAgfkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0p
CiAKICAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRU
eXBlKSBVTkxFU1NfRU5BQkxFRCh7IH0pCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAg
ICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlm
CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAK
ICN1bmRlZiBVTkxFU1NfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAzNTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3
MjI3ZmUxNzRiLi44MDdlZTdiODhiM2IxMWViZWFmOGFjM2UxNzY0NDJkNDY4Mzk5MGE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAt
MjI4LDE3ICsyMjgsMTcgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkK
ICAgICAvLyB1cCB0aGUgY29tcG9zaXRpb24gd2lsbCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNv
bXBvc2l0aW9uLCBhcyBpbiA8cmRhcjovL3Byb2JsZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3Rv
cCBoYW5kbGVzIHRoaXMgaW4gLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRN
YW5hZ2VyXSwgYnV0IHRoZSBwaG9uZQogICAgIC8vIGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBm
cmFtZS0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0
b3IoKS5jYW5jZWxDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0
b3IoKS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRp
dG9yKCkud2lsbFVuYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
c2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6
ZTsgaTsgLS1pKQogICAgICAgICBtX2NvbW1hbmRzW2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAg
ICBmcmFtZS0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVu
dC0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMjU4LDEzICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOjpyZWFwcGx5KCkKICAgICAvLyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtl
IGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1l
LT5lZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVu
dC0+ZWRpdG9yKCkud2lsbFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChhdXRvJiBjb21tYW5kIDogbV9jb21tYW5kcykKICAgICAgICAgY29tbWFuZC0+
ZG9SZWFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAg
bV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHko
bV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBA
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQogCiBib29sIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJh
bWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5k
aW5ncygpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5n
KCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQpAQCAtMzc4LDEzICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBs
eUNvbW1hbmQoKQogewotICAgIGZyYW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMp
OworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBW
ZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJh
bmdlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0
KCkpOwotICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gZmlyc3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9m
UGFyYWdyYXAKICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5z
ZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNl
cnRGcmFnbWVudCBoZXJlLgogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwotICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rp
b24oKSk7CiAgICAgZGVsZXRlU2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsK
IAogICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+
aXNDb25uZWN0ZWQoKSk7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJh
Z3JhcAogICAgICAgICBvcHRpb25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0g
ICAgZnJhbWUoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdT
ZWxlY3Rpb24oKSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9u
IGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVt
cHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVj
dGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0Vu
ZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGNh
NTZmMzAxMWEwMDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2NGYuLmUyMGE4ZDhkYTZlNDhiMzk2
YmE2NDhlOWFjMjQwODFjMTczMTc5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2
ZXIsIGlmIHR5cGluZyBzdHlsZSB3YXMgcHJldmlvdXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQg
bm9kZSBhdCB0aGUgcHJldmlvdXMKICAgICAvLyBwb3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBu
ZWVkIHRvIGNsZWFyIHRoYXQgc3R5bGUgYXMgd2VsbC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYg
bV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTc0NCw3ICs3NDQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2Vk
ID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgp
LmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIo
KSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdl
VG9CZVJlcGxhY2VkLnB0cigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQ
YXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0
aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTgxOCw3ICs4
MTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUoKQogICAgIC8vIEluIHRoaXMgY2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRo
ZSBuZXcgY2hhcmFjdGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBk
ZWxldGVkIG9uZXMsCiAgICAgLy8gYnV0LCBpZiB3ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29t
ZSBiYWNrIGFuZCBzdGFydCB0eXBpbmcgdGhhdCBzdHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28g
c2VlIAogICAgIC8vIHByZXNlcnZlVHlwaW5nU3R5bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNl
bGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJl
ZigpKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0
YXRlKCkKQEAgLTg4OSw3ICs4ODksNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIGlmICghbV9yZXBsYWNlKSB7CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250
cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KSk7CiAgICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQot
ICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KHRleHRDb250cm9sKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxC
ZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0
aGlzIHRvIGxhdGVyIG1ha2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05NDQsNyArOTQ0LDcgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAKICAgICBib29s
IHNob3VsZFJlYmFsYWNlV2hpdGVTcGFjZSA9IHRydWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkp
IHsKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFu
Y2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9l
bmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4obm9k
ZSkpIHsKICAgICAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OwpAQCAtOTU4LDcgKzk1OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFv
cmlnaW5hbFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRl
ZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmlu
Zyk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwg
ZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRT
dGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMz
ZjdkYTE3Yzc4OTRlMmNmNzg1NTU5YmM4NzZjODg0NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYw
MDU2Yzc3Mzc3MDBlMmI4ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24o
ZWRpdGluZ0FjdGlvbikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0
U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewot
ICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihz
dGFydGluZ1NlbGVjdGlvbik7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjp+RWRpdENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1l
JiBFZGl0Q29tbWFuZDo6ZnJhbWUoKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkp
OwotICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRp
dENvbW1hbmQ6OmZyYW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgp
KTsKLSAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0
Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0Fj
dGlvbjsKQEAgLTE2OCwxMSArMTUzLDcgQEAgc3RhdGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKiBjb21wb3NpdGlvbklmUG9zc2libGUoRWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9v
bCBFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0g
ICAgYXV0byogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBj
b250YWluZXIgPSBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKTsKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0yMTcsNyArMTk4LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBp
ZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbih0eXBlLCB0ZXh0LCBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRD
b21tYW5kLmgKaW5kZXggZGViY2ZmMDI0NWVkZjBkZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4u
MmY2N2NkNzMzNGMyYzhiZDU2OTBmMTEzNWMxMGQwMDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxl
bWVudDsKLWNsYXNzIEZyYW1lOwogCiBTdHJpbmcgaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rp
b24oRWRpdEFjdGlvbik7CiAKQEAgLTY0LDggKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IEVkaXRDb21tYW5kKERvY3VtZW50JiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3Bl
Y2lmaWVkKTsKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUo
KSBjb25zdDsKLSAgICBGcmFtZSYgZnJhbWUoKTsKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50
KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJl
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKaW5kZXggYzExM2MwMTNkMDA0OGVmYTk1MjMzYWJkNjRmMDRlNGE5NTU1YzcyZC4uNGJiNDQ2
Njg4NDJlNGJlYTJlZDgzNDQ3ZDNiYTYyZDkwNzNmZWQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCkBAIC04OTgsNyArODk4LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0
IE5vZGUqIG5vZGUpCiAKIFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUo
KS0+ZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChk
b2N1bWVudC5lZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNl
IEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0
b3JJc1A6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggZDU0MjRh
YzdkMjE5MjhkNTI2NzM0NTk1ZjVmZjY2ZWU3NzMzMGFhZC4uMmY2MzU0YTVkMmYzMGEzNmI5MDNm
MTBiOTM3M2ZmYTIzYTBjODZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcApAQCAtMTY4Niw3ICsxNjg2LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRp
bmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJv
cGVydGllc05vdEluKCpzdHlsZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJv
cGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NT
ID0gZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOworICAg
IGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxl
V2l0aENTUygpOwogICAgIGlmICghc2hvdWxkU3R5bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0
VGV4dFN0eWxlcygqZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4
ZWRGb250RGVmYXVsdFNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAy
YjEwNjA2ODk5MGI3MjI4MjRjZDg2ZDE3ZmRjYzJlNWYxY2MzOGQ1Li5jNDZmOTNjYjUxMTFlY2Iy
MmU2YjExZjY1MWE3NWE4ZTQ4MDQzOTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBA
IC0xNzMsOCArMTczLDggQEAgc3RhdGljIFN0cmluZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdT
dHlsZUFuZEFjdGlvbihFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4
dENvbW1hbmQgOiBwdWJsaWMgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAg
Q2xlYXJUZXh0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENy
ZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRp
YyB2b2lkIENyZWF0ZUFuZEFwcGx5KERvY3VtZW50Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODks
MTcgQEAgRWRpdEFjdGlvbiBDbGVhclRleHRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QK
ICAgICByZXR1cm4gRWRpdEFjdGlvbjo6RGVsZXRlOwogfQogCi12b2lkIENsZWFyVGV4dENvbW1h
bmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFy
VGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJv
dW5kIHN0YWxlIGNvbXBvc2l0aW9uIHN0YXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigp
OworICAgIGRvY3VtZW50LmVkaXRvcigpLmNsZWFyKCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21t
YW5kID0gYWRvcHRSZWYoKm5ldyBDbGVhclRleHRDb21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxs
KCk7CisgICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1h
bmQoZG9jdW1lbnQpKTsKICAgICBjbGVhckNvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9s
ZFNlbGVjdGlvbik7CiAgICAgY2xlYXJDb21tYW5kLT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsy
MDcsMjQgQEAgdm9pZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQ
dHI8RnJhbWU+IGZyYW1lKQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY6OlVuaWNvZGU7CiAKLVRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiBmcmFtZSwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4g
dGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8Vmlz
aWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9uPiBvcHRpb25zKQorICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50
KSkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlv
bkNoYW5nZXMoZnJhbWUuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwg
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcygpKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVh
cmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZnJhbWUuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCgpKQorICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYK
IAogICAgIGlmIChvcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKHRydWUpOworICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKHRydWUpOwogCiAgICAgaWYgKHRlbXBvcmFyeVNlbGVjdGlvbikgewotICAgICAg
ICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgICAgICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgICAgICBzZXRTZWxlY3Rpb24odGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkp
OwogICAgIH0KIH0KQEAgLTIzNiwxMiArMjM2LDEyIEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5n
ZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgpCiAKICAgICBpZiAobV9vcHRpb25zICYgVGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAg
IGF1dG8gcmV2ZWFsU2VsZWN0aW9uID0gbV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpSZXZlYWxTZWxlY3Rpb24gPyBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRp
dG9yOjpSZXZlYWxTZWxlY3Rpb246Ok5vOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJ
Z25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZl
YWxTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rp
b24pOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9u
cyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0g
ICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1f
YXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVj
dGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJl
RW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAtMjUwLDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiAgICAgYXV0byBvcHRpb25zID0gRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCk7CiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbjo6RG9Ob3RTZXRGb2N1cykKICAgICAgICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rp
b246OkRvTm90U2V0Rm9jdXMpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihzZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMpOwogfQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRs
ZXIgaGFzIG1vdmVkIHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8g
d2Ugc2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRp
dGluZyBvcGVyYXRpb24uCiBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29t
bWFuZChFdmVudCogZXZlbnQpCiB7Ci0gICAgYXV0byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uOwogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUg
Y3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYs
MTIgKzI3NiwxMiBAQCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFu
ZChFdmVudCogZXZlbnQpCiAvLyBGdW5jdGlvbiBjb25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZp
b3IgYSBmYWxsYmFjayB3aGVuIFBhZ2Ugb3IgU2V0dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVk
aXRpbmdCZWhhdmlvciBFZGl0b3I6OmJlaGF2aW9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRp
dGluZ0JlaGF2aW9yKG1fZnJhbWUuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOwor
ICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3IobV9kb2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdC
ZWhhdmlvclR5cGUoKSk7CiB9CiAKIEVkaXRvckNsaWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25z
dAogewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JD
bGllbnQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJv
b2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0
b3I6OmNhbkVkaXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wg
RWRpdG9yOjpjYW5FZGl0UmljaGx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVy
biBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCk7CiB9CiAKIGVudW0gY2xhc3MgQ2xpcGJvYXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0
NDIsNyBAQCBzdGF0aWMgYm9vbCBkaXNwYXRjaENsaXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50
PiYmIHRhcmdldCwgQ2xpcGJvYXJkRXZlbnRLaW5kCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1
dCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3
b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
IWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBD
bGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9yZUN1dCk7CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBF
ZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENs
aXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZl
bnRLaW5kOjpCZWZvcmVDb3B5KTsKIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9y
OjpjYW5Db3B5KCkgY29uc3QKIHsKICAgICBpZiAoaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1l
bnQoZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2Vs
ZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3Vw
cHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkt
Pm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmco
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5
OCw3ICs0OTgsNyBAQCBib29sIEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRv
cjo6Y2FuRGVsZXRlKCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTI0LDcgKzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91
bGRTbWFydERlbGV0ZSgpCiB7CiAgICAgaWYgKGJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnRE
ZWxldGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0
aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAK
IGJvb2wgRWRpdG9yOjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3
IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
eworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBp
ZiAoaXNUeXBpbmdBY3Rpb24pIHsKICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1h
bmQ6OlNtYXJ0RGVsZXRlIDogMCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKIAogdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFy
dERlbGV0ZShib29sIHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2Us
IGZhbHNlLCB0cnVlLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBA
QCB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnRE
ZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZwogCiB2b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsK
LSAgICBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xl
YXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkobV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRp
dG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21h
cnRSZXBsYWNlKQpAQCAtNjYxLDcgKzY2MSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRG
cmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAK
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRS
ZXBsYWNlIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVk
aXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZykKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkg
fHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTY4OSwxOSArNjg5LDE5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1h
Z2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJ
blBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9u
OjpQYXN0ZSkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0
cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJ
bnNlcnRlZFRleHQoKSk7Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlUGFzdGUsIHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
ICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29t
cG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNl
ZFJhbmdlKCkpOwogICAgIH0KIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gY29tbWFuZC0+ZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwot
ICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4
dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAg
IH0KIApAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0
cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtNzQ0LDcgKzc0NCw3IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIGJvb2wgRWRp
dG9yOjp0cnlESFRNTENvcHkoKQogeyAgIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDb3B5KTsKQEAgLTc1Miw3ICs3
NTIsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIAogYm9vbCBFZGl0b3I6OnRyeURI
VE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVj
dGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkN1dCk7CkBAIC03NjAsNyArNzYwLDcgQEAgYm9v
bCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rp
b24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxk
U3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0g
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdl
LCBhY3Rpb24pOwpAQCAtNzgyLDE3ICs3ODIsMTcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAK
IGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogc3RhcnROb2RlOwot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBzdGFydE5v
ZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAg
ICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJl
YW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xvc2luZ0Js
b2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQotICAg
ICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODEyLDEyICs4MTIsMTIgQEAgYm9vbCBFZGl0b3I6
Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVu
b3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNDYXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKKyAgICBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxU
YWcpKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9
IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOwor
ICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAg
ICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7CisgICAgICAgIGF1dG8qIGVu
ZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9k
ZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3Rh
dGU7CiAgICAgfQpAQCAtODI3LDEyICs4MjcsMTIgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rp
b25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlv
bk9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9s
VGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUg
PSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCksIG9sVGFnKTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9sVGFnKTsK
KyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAg
ICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOworICAgICAgICBhdXRvKiBl
bmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5v
ZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0
YXRlOwogICAgIH0KQEAgLTg3Miw3ICs4NzIsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVjcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
ICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29t
bWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAtODgyLDcg
Kzg4Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRl
cmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0
cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtODkyLDcgKzg5
Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3Jk
ZXJlZCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
VW5vcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
OjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC05
MDIsNyArOTAyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxVbm9yZGVyZWQoKQogCiB2b2lkIEVkaXRvcjo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50
KCkpOwpAQCAtOTMyLDcgKzkzMiw3IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAKIEVsZW1lbnQq
IEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJvcGVydGll
cyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTk0NiwxMyArOTQ2LDEzIEBA
IHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0
aW9uVHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0Fj
dGlvbihlZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2
ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbigqc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwot
ICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCplbGVtZW50
LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
OTY5LDcgKzk2OSw4IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5
bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgY2xpZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CiAgICAgaWYgKGVsZW1lbnQpCiAg
ICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRF
dmVudERhdGEpOwogfQpAQCAtOTg0LDEzICs5ODUsMTMgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW8KICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlv
blR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsK
KyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0
VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsK
ICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHls
ZUFuZEFjdGlvbihzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50ICYm
ICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0
RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA1LDcgKzEwMDYsNyBAQCB2b2lk
IEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8
fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNsaWVudCgp
IHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
KQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxl
KHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRp
dG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5
LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBjcmVhdGVMaXZlUmFu
Z2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxp
dmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3Zl
KHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEw
MjgsMjUgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxl
LT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBw
bHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICBhcHBseVBhcmFn
cmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlKSBjb25zdAogewotICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQorICAgIGlmIChhdXRv
IGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpKQogICAgICAgICByZXR1cm4gZWRpdGluZ1N0eWxlLT5oYXNTdHlsZShw
cm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBUcmlTdGF0ZSBFZGl0
b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJv
cGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZh
bHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVj
dGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rp
b25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCiAgICAgICAgIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlv
blN0eWxlLT5zdHlsZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMTM2LDcgKzEx
MzcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQm
IGNvbW1hbmQpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoJmNvbW1hbmQpOwogCiAgICAgICAgIGlmICghY29tbWFuZC5wcmVzZXJ2
ZXNUeXBpbmdTdHlsZSgpKQotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5
cGluZ1N0eWxlKCk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKIAogICAgICAgICAvLyBDb21tYW5kIHdpbGwgYmUgZXF1YWwgdG8gbGFzdCBl
ZGl0IGNvbW1hbmQgb25seSBpbiB0aGUgY2FzZSBvZiB0eXBpbmcKICAgICAgICAgaWYgKG1fbGFz
dEVkaXRDb21tYW5kLmdldCgpID09ICZjb21tYW5kKQpAQCAtMTIwMCwxMSArMTIwMSwxMSBAQCB2
b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uJiBjb21w
b3NpdGlvbikKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMobmV3U2VsZWN0aW9uKTsKIH0K
IAotRWRpdG9yOjpFZGl0b3IoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK0Vk
aXRvcjo6RWRpdG9yKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiAgICAgLCBtX2tpbGxSaW5nKG1ha2VVbmlxdWU8UEFMOjpLaWxsUmluZz4oKSkKLSAgICAs
IG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihmcmFtZSkpCi0gICAgLCBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyPihmcmFtZSkpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hl
Y2tlcj4oZG9jdW1lbnQpKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VV
bmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZG9jdW1lbnQpKQogICAgICwgbV9lZGl0
b3JVSVVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQp
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAsIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIoKnRo
aXMsICZFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKQpAQCAtMTIyMCw3
ICsxMjIxLDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKICAgICBpZiAobV9jb21wb3NpdGlvbk5v
ZGUpIHsKICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBudWxscHRyOwogICAgICAgICBpZiAo
RWRpdG9yQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVu
dC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOworICAgICAgICAgICAgY2xpZW50LT5k
aXNjYXJkZWRDb21wb3NpdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIH0KICAgICBtX2N1
c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRp
b25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0xMjI5LDYgKzEyMzAsNyBAQCB2b2lkIEVkaXRvcjo6
Y2xlYXIoKQogICAgIG1fbWFyayA9IHsgfTsKICAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJ
VXBkYXRlID0geyB9OwogICAgIG1fZWRpdG9yVUlVcGRhdGVUaW1lci5zdG9wKCk7CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwog
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0b3Ao
KTsKQEAgLTEyMzgsMTIgKzEyNDAsMTIgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9vbCBF
ZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2
ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQogewotICAgIHJldHVybiBtX2ZyYW1l
LmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVu
dCwgaW5wdXRUeXBlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlw
ZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigp
LmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24p
OworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRl
eHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOwogfQogCiBi
b29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVu
dCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAtMTMwMiwxMCArMTMwNCw4IEBAIGJvb2wgRWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29s
IHNlbGVjdEluCiAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgY29kZSBzaG91bGQgY29uZGl0aW9u
YWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlvbiBvbiB3aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKCkgYml0CiAgICAgICAgICAgICAvLyBpcyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1c2Vk
IGZyYW1lLgogICAgICAgICAgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRSZXZl
YWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBwYWdlID0gZWRpdGVkRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgp
KQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5yZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzE4LDEwICsxMzE4LDEwIEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxk
SW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpOwogICAgIGJvb2wgYWxpZ25Ub0VkZ2UgPSBpc0VuZE9mRWRpdGFi
bGVPck5vbkVkaXRhYmxlQ29udGVudChjYXJldCk7CiAgICAgYm9vbCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRM
aW5lQnJlYWsoZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21t
YW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwpAQCAtMTMzOCwxMCArMTMz
OCwxMCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAo
IWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDUsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI0LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzMsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1Myw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzgsNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNiw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUwLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODEsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNiw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUxLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4Myw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0xOTk5LDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNCw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMiwxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODEsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDgsNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjIsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFu
Z2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVk
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNl
bGVjdGVkVGV4dCgpOwpAQCAtMjEzNyw3ICsyMTM3LDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3Bl
bGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJs
ZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNh
bGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFy
b3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0g
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRl
eHQoKTsKQEAgLTIxNDksMTQgKzIxNDksMTQgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmco
KQogCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBU
aGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFzZXMgLSBmcm9tIHRoZSBz
ZWxlY3Rpb24gZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCiAgICAgLy8gdGhlbiB3ZSB3
cmFwIGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHByb3hpbWF0ZWx5KSB3aGVy
ZSB3ZSBzdGFydGVkLgotICAgIAorCiAgICAgLy8gU3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vs
ZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5nIGF0IHRoZSBzZWxl
Y3Rpb24gZW5kIG1ha2VzCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5k
cyB3b3JrLgotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIFJlZjxSYW5nZT4gc3BlbGxpbmdTZWFy
Y2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKIAogICAgIGJvb2wgc3RhcnRl
ZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTIzMDUsOCArMjMwNSw4IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRo
IGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAogICAgICAgICBh
dXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZ3JhbW1hclNlYXJj
aFJhbmdlLCB7IGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLnJhbmdlLmxvY2F0
aW9uLCBncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0aCB9KTsKLSAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFs
U2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAg
ICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIzMTcsOCArMjMxNyw4IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgcmVkIHNxdWlnZ2xl
IGxhdGVyLgogICAgICAgICAKICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3BlbGxpbmdPZmZzZXQs
IG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJF
QU0pKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihtaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CiAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjMzMiw3ICsyMzMyLDcgQEAgU3RyaW5nIEVkaXRv
cjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QK
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgfHwgIWNsaWNrZWRO
b2RlIHx8ICFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGNsaWNrZWROb2RlKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg2LDcgKzIzODYsNyBAQCBTdHJpbmcgRWRpdG9yOjpt
aXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlv
blVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIGF1dG8g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgp
LCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQwMSw3ICsyNDAxLDcgQEAgVmVjdG9y
PFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3
b3JkKSBjb25zdAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50
KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmlu
ZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAg
dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2Vz
OwogfQogCkBAIC0yNDA5LDcgKzI0MDksNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNz
ZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvbwogewog
ICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxs
aW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2Uo
KSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29y
ZEdyYW51bGFyaXR5KTsKQEAgLTI0NjksNyArMjQ2OSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxl
Y3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1l
bnQobV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5MSwxOSArMjU5MSwxOSBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHks
IHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRv
Y29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5l
d1NlbGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChu
ZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1f
ZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBt
aXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFy
dFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVk
aXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxl
Y3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7
CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0g
ICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc1LDcgKzI2NzUsNyBAQCBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAg
IHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKQpAQCAtMjcyMyw3ICsyNzIzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7
CisgICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsK
IAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBh
cmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0g
cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0
aW9ucyk7CkBAIC0yNzM4LDcgKzI3MzgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAg
IH0KIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCBy
ZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0No
ZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VO
b25OdWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBS
ZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0
ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAg
IFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCks
IHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhS
YW5nZSgpKTsKQEAgLTI4MDgsOSArMjgwOCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFj
ZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAg
ICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAK
ICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8
fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNh
cmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBz
byB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwor
ICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJh
Z3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAg
ICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAg
aWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50
ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9
PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTIsMTMgKzI4OTIsMTMgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAg
ICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNl
bGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5n
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBy
ZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAo
Y2FuRWRpdFJpY2hseSgpKQpAQCAtMjkwNyw3ICsyOTA3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0
b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQs
IHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rp
b25PY2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5MzcsMTMgKzI5MzcsMTMgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5k
UmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5n
ZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkg
ewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1
YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0p
OworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFu
Z2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNl
bGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rp
b25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBE
aXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJh
Y2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92
ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0zMDIwLDggKzMwMjAsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9u
QQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2Ug
cG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJp
ZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2Vs
ZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0
aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5MywxMSArMzA5Myw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
biwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwor
ICAgIGF1dG8gZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMxMTYsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOCw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1MSw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzQsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTk5LDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NCw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjQsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODEsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk1LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwMyw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzEzLDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMSw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTMzMjksNyArMzMyNSw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNl
aG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVT
ZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAog
ICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNDksOCArMzM0NSw4IEBAIHZvaWQgRWRp
dG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vo
b2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUg
TGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2lu
dCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9j
dXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0
aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0
aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQt
PmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2
ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFt
ZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3Qp
CkBAIC0zNDAyLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2Uo
UmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFt
ZSgpICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9s
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5l
d1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2Vs
ZWN0aW5nKTsKQEAgLTM0MTEsMTcgKzM0MDcsMTcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHls
ZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZTsKLSAgICBpZiAoYXV0byBl
eGlzdGluZ1R5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQor
ICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHR5cGluZ1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHls
ZS0+Y29weSgpOwogICAgIGVsc2UKICAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZSgpOwotICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUs
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKSk7CisgICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0
aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxv
Y2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
CkBAIC0zNDI5LDcgKzM0MjUsNyBAQCB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgICAgICBB
cHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVk
aXRpbmdBY3Rpb24pLT5hcHBseSgpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUg
YXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0
eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNv
bXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0ODgsMTggKzM0ODQsMTggQEAgdm9pZCBFZGl0b3I6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHBy
b3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAog
ICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKICAgICBpZiAoIXJl
c3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVB
TSkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oKnJlc3VsdFJhbmdlLCBET1dOU1RSRUFNKSk7CiAKICAgICBpZiAoIShvcHRpb25zLmNv
bnRhaW5zKERvTm90UmV2ZWFsU2VsZWN0aW9uKSkpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1OTYsNyArMzU5Miw3
IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRh
cmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGlm
ICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKICAgICAgICAgICAgIHNl
YXJjaFJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZShtX2Zy
YW1lLCAqcmFuZ2UpKQorICAgICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBp
ZiAoIXNlYXJjaFJhbmdlKQpAQCAtMzY2Niw3ICszNjYyLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxG
cmFtZVMKICNlbmRpZgogCiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKICNpZiBFTkFCTEUo
VEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmIChzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkpCkBAIC0zNjg5LDcgKzM2ODUsNyBA
QCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogCiBib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVs
ZXBob25lTnVtYmVycygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhv
bmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5p
c1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0
b3I6OmlzU3VwcG9ydGVkKCk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8U2ltcGxlUmFuZ2U+IHNjYW5G
b3JUZWxlcGhvbmVOdW1iZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKQEAgLTM3MzIsNyAr
MzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygp
CiAKICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CiAKLSAgICBh
dXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcg
Y2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVj
dGVkIHBob25lIG51bWJlcnMuCkBAIC0zNzQ5LDcgKzM3NDUsNyBAQCB2b2lkIEVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1f
ZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTM3NzQs
OSArMzc3MCw5IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAg
IGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld0FkamFjZW50V29yZHM7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0ZWRTZW50ZW5jZTsKLSAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5z
ZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOworICAgICAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAg
ICAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
bmV3U3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBuZXdBZGphY2VudFdv
cmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwog
I2Vsc2UKQEAgLTM4MjksNyArMzgyNSw3IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRp
bWVyRmlyZWQoKQogICAgIGlmICghbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlE
aWN0YXRpb24pCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogCi0gICAgbV9vbGRTZWxlY3Rpb25Gb3JF
ZGl0b3JVSVVwZGF0ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9v
bGRTZWxlY3Rpb25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIG5vdGlmeUNs
aWVudE9mQXR0YWNobWVudFVwZGF0ZXMoKTsKQEAgLTM4NTYsNyArMzg1Miw3IEBAIHN0YXRpYyBO
b2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBub2RlKQogCiBib29sIEVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRG
aXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTM0LDcgKzM5MzAs
NyBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgp
CiAgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQogICAg
ICAgICA6IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CkBA
IC0zOTQ3LDcgKzM5NDMsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogfQog
CkBAIC00MDE0LDcgKzQwMTAsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0cmli
dXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAgICBh
dXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1JlbW92
ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDU1LDcgKzQwNTEs
NyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4dExp
c3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRM
aXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2ggKHN0
eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBAIC00
MDgxLDcgKzQwNzcsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8g
dHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUo
KSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUt
PnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTQx
NjksMTIgKzQxNjUsOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBk
YXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJZGVu
dGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRlbnRp
ZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAoYXV0
byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAgICAg
IGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZpZXIo
aWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50LmF0
dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50KCkt
PmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2htZW50
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciksIGF0
dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQxOTcsNyArNDE4OSw3IEBAIHZvaWQgRWRpdG9y
OjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8dWlu
dDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0
Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0
cnVlOwogCkBAIC00MjE2LDcgKzQyMDgsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29sIEVk
aXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVybiBX
ZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2Vy
KGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjMyLDEzICs0MjI0LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0cmlu
ZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5h
YmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1vZGVF
bmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29y
KG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVu
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJu
ICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTaG91
bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQyOTEsOSArNDI3Nyw5
IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBs
ZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAgIGlm
ICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAg
ICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2Rl
VG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAv
LyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRy
OwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMDUsMTIgKzQyOTEsMTIgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8v
IEZJWE1FOiBBZGp1c3RpbmcgdGhlIHN0YXJ0IG1heSBtb3ZlIGl0IHBhc3QgdGhlIGVuZC4gSW4g
dGhhdCBjYXNlIHRoZSBpdGVyYXRvciBiZWxvdyB3aWxsIGdvIG9uIHRvIHRoZSBlbmQgb2YgdGhl
IGRvY3VtZW50LgotICAgIGF1dG8gYWRqdXN0ZWRTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGFk
anVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpKTsKKyAgICBhdXRvIGFkanVzdGVkU3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CiAgICAgaWYgKCFhZGp1c3RlZFN0YXJ0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByYW5nZS0+c3RhcnQgPSAqYWRqdXN0ZWRTdGFydDsK
QEAgLTQzMzksNyArNDMyNSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omlu
c2VydEVkaXRhYmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAm
JiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCmluZGV4IDIzZjVkZTEzMDQwNDk4ZTU4MGNlMWQxZDQxY2U0NzBkN2RhZTQ5YTMuLjU2ZjVl
ZTNjYWY5ZGUzMGI3NjEyMTIzNDk4YzYwOGRhNjA4ZTdhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1
ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTks
MTMgKzEyMCwxMyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4
X3QgewogCiBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZp
c2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uPiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlKERvY3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxv
cHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJD
T1JFX0VYUE9SVCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZy
YW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dh
c0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
MTM3LDcgKzEzOCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JT
Y29wZSB7CiBwdWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUm
IGZyYW1lKQotICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQs
IFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAg
ICAgOiBtX3NlbGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewog
ICAgIH0KIApAQCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihG
cmFtZSYpOworICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsK
IAogICAgIGVudW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIs
NyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBX
RUJDT1JFX0VYUE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50
ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29t
bWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBE
b2N1bWVudCYpOwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBT
dHJpbmcmIHBhcmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVs
bHB0cikgY29uc3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQg
eyBudWxscHRyIH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAg
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBt
X2ZyYW1lOwogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1l
bnVPcktleUJpbmRpbmcuCkBAIC01NjgsNyArNTcwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQm
KTsKIAogcHJpdmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29s
IGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTksNyArNjIxLDcgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBT
dHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1h
bmQ+IG1fbGFzdEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9k
ZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCAxM2YyYmVkNDllNDZiYmExYTlkNjA1ODY2YWQxMzFh
NTU4MDExZDA5Li5lMWZiM2NkMDc5MDNmZWMzYzc4ZTI1OGI3NzI1MTY4ZjQxMTlhMjEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTExMDcsNiArMTEwNyw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0
aE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50
KCkpOwogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpA
QCAtMTgzNCwxMiArMTgzNSwxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5k
KiBpbnRlcm5hbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpD
b21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAg
IHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9t
TWVudU9yS2V5QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxD
b21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3Vt
ZW50KTsKIH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4g
Q29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOwor
ICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwg
bV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVu
dU9yS2V5QmluZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTg1MSwxMiArMTg1
MiwxMyBAQCBFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1h
bmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNv
dXJjZSBzb3VyY2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5k
KQogICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1l
IDogbnVsbHB0cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxw
dHIpCisgICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikK
IHsKLSAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQg
fHwgIW1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25z
dCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4
NjYsOSArMTg2OCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxs
b3dFeGVjdXRpb25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1l
bnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1l
KCkgIT0gbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29t
bWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1l
dGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggYTBj
MDkwOWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJjNDMzMy4uMTYxZTg4YTM3NGJmNGM0ZDJh
MDQ3MWY0YzBkODViOTRjZDNkNDAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5LDEzIEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJv
bGxlcjo6ZWRpdGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgcmV0dXJuICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25z
aWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKIH0K
IAotRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1f
ZnJhbWUoZnJhbWUpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1feFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAg
ICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhU
X0NBUkVUKQpAQCAtMTU2LDcgKzE1Niw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlv
bihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAs
IG1fY2FyZXRQYWludCh0cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFs
c2UpCi0gICAgLCBtX2ZvY3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1f
Zm9jdXNlZChkb2N1bWVudC5mcmFtZSgpICYmIGRvY3VtZW50LnBhZ2UoKSAmJiBkb2N1bWVudC5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LmZyYW1l
KCkpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVuZGlu
Z1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9s
bFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0xNjUsMTQgKzE2NSwyNCBAQCBGcmFt
ZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9jYXJldEJs
aW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNl
bGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25h
bCh0cnVlKTsKKworICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2
ZSgpOworICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9t
Tm9uZSgpOworI2lmIFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChi
bGlua3MgfCBkb2VzIG5vdCBibGluaykKKyAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9j
dXNlZCk7CisjZWxzZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8g
VmlzaWJsZSA6IEhpZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxl
bWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
LSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNl
bGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJp
Z2dlcmVkIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQs
NyArMjk0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlm
ZmVyZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3Rt
ZW50TW9kZSBlbmRwb2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbiA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9u
YWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdT
ZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3Vs
ZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlv
bi5pc0RpcmVjdGlvbmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2lu
YWxCYXNlLmlzTm90TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJs
ZUJhc2UoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsMTAg
KzMzMiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGJvb2wgc2hvdWxkQ2xlYXJU
eXBpbmdTdHlsZSA9IG9wdGlvbnMuY29udGFpbnMoQ2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvblBvc3NpYmx5V2l0aG91
dERpcmVjdGlvbjsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24o
bV9mcmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1f
ZG9jdW1lbnQpKQogICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsK
IAotICAgIGlmICghbV9mcmFtZSkgeworICAgIGlmICghbV9kb2N1bWVudC5mcmFtZSgpKSB7CiAg
ICAgICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMzM0LDcgKzM0NCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
Ly8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5m
aW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdT
ZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4g
bmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAg
ICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9u
RG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKG5ld1Nl
bGVjdGlvbkZyYW1lICE9IG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVu
dCAhPSAmbV9kb2N1bWVudCkgewogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8v
IEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMg
RnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNl
bGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKQEAgLTM0OSw3ICszNTksNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNv
bnN0IFZpc2libGVTZWxlY3RpbwogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKIAog
ICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmco
bV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQp
OwogCiAgICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5n
U3R5bGUoKTsKQEAgLTM1Nyw3ICszNjcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBk
aWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlm
IChkaWRNdXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlv
bldpbGxDaGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zZWxlY3Rpb25XaWxs
Q2hhbmdlKCk7CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDM1
ICszODEsMzEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVk
c1VwZGF0ZSgpOwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25z
ICYgRG9Ob3RTZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRG
b2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICAgICAgc2V0
Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBi
ZSBuZWVkZWQuCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVu
dCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5mb2N1c2Vk
RWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC51
cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4
IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQg
d2lsbCBiZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlm
IG5lY2Vzc2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC5l
ZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7
CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlvbi1hcGkvI3NlbGVjdGlvbmNo
YW5nZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNr
IHNvdXJjZSB0byB1c2UuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cXVldWVUYXNrVG9EaXNw
YXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVu
dDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9jdW1lbnQucXVldWVUYXNrVG9EaXNwYXRj
aEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQogewotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFt
ZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywg
YWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJh
bWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6
OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVj
dGlvbikKQEAgLTQxMSwyNyArNDE3LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAg
bV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9u
VXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxj
KCkpCisgICAgaWYgKG1fZG9jdW1lbnQuaGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmIChm
cmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQp
OwogCiAgICAgaWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0
byogY2xpZW50ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNs
aWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZyYW1l
JiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBm
cmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICNl
bHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRv
Y3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyArNDQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBSZXZl
YWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJldmVh
bE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0
aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC5y
ZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7
CiB9CiAKQEAgLTQ1Nyw3ICs0NjMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAgIGlm
IChtX3NlbGVjdGlvblJldmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZl
YWwpIHsKICAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBpZiAo
bV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rp
b25Jc1JldmVhbGVkKCkpCisgICAgICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQogICAgICAgICAg
ICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFs
aWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rp
b24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvRWRnZUlmTmVlZGVkOwpAQCAtNDcxLDcgKzQ3Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dCYgaW50CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0
aW9uKCkKIHsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIG1fZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCk7CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zY2FuU2VsZWN0aW9u
Rm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MDksNyBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBp
c0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUg
c2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0byB3aGlj
aCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBj
aGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAgaWYgKG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRT
ZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2lu
dCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0
aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogCiAgICAgcmV0
dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2VsZWN0aW9u
LnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MjksNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVT
ZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRp
bwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0
V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0gICAgaWYgKG1fZnJhbWUgJiYgbV9m
cmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KSkgeworICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNw
YWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFj
ZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVy
dGhlciBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBz
ZW1hbnRpY3Mgb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRo
ZQpAQCAtODU1LDcgKzg2MSw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAg
ICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpLnJpZ2h0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdo
ZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5z
aG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNl
V2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVu
dFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsK
ICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1Nw
YWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEw
NzYsNyArMTA4Miw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92
aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpLmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmlu
Z1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92
aW5nUmlnaHQgPSBtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNl
V2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAg
ICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5N
b3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMzE3LDcgKzEz
MjMsNyBAQCBzdGF0aWMgQVhUZXh0U2VsZWN0aW9uIHRleHRTZWxlY3Rpb25XaXRoRGlyZWN0aW9u
QW5kR3JhbnVsYXJpdHkoU2VsZWN0aW9uRGlyZWN0aQogYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7
CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCkgewotICAgICAgICBGcmFt
ZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uOworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0
cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0
aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rp
b24ubW9kaWZ5KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBOb3RVc2VyVHJpZ2dlcmVk
KTsKIApAQCAtMTM2Miw3ICsxMzY4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVB
bHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgp
ICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2ZyYW1lICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICBpZiAocmVhY2hlZEJvdW5kYXJ5
ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNjZXNz
aWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlv
bkJvdW5kYXJ5LCB0ZXh0U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0x
MzcwLDEyICsxMzc2LDEzIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlv
biBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNTcGF0aWFs
TmF2aWdhdGlvbkVuYWJsZWQobV9mcmFtZSkpCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSkpIHsKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBh
bHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRp
b24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgaWYgKG1fZnJhbWUg
JiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAo
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2Jq
ZWN0Q2FjaGUoKSkKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldFRleHRTZWxlY3Rpb25J
bnRlbnQodGV4dFNlbGVjdGlvbkludGVudChhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSkp
OwogICAgIH0KIApAQCAtMTM4NCw3ICsxMzkxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgK
ICAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkgYmVjYXVz
ZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBwb3NpdGlv
biB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uIHNl
dC4KICAgICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0
ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRl
cmF0aW9uRXh0ZW5kKTsKIAogICAgIHN3aXRjaCAoYWx0ZXIpIHsKICAgICBjYXNlIEFsdGVyYXRp
b25Nb3ZlOgpAQCAtMTM5NCw3ICsxNDAxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAog
ICAgICAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKQogICAgICAgICAgICAgJiYgKGdyYW51
bGFyaXR5ID09IFdvcmRHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFu
dWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBMaW5lR3JhbnVsYXJpdHkpCi0gICAgICAgICAgICAm
JiBtX2ZyYW1lICYmICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVuZFNl
bGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKKyAgICAgICAgICAgICYmICFtX2Rv
Y3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JM
aW5lQWNyb3NzQ2FyZXQoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IHRoZSBzZWxlY3Rp
b24gZ28gYWNyb3NzIHRoZSBiYXNlIHBvc2l0aW9uIGRpcmVjdGx5LiBOZWVkZWQgdG8gbWF0Y2gg
bWFjCiAgICAgICAgICAgICAvLyBiZWhhdmlvciB3aGVuLCBmb3IgaW5zdGFuY2UsIHdvcmQtc2Vs
ZWN0aW5nIGJhY2t3YXJkcyBzdGFydGluZyB3aXRoIHRoZSBjYXJldCBpbgogICAgICAgICAgICAg
Ly8gdGhlIG1pZGRsZSBvZiBhIHdvcmQgYW5kIHRoZW4gd29yZC1zZWxlY3RpbmcgZm9yd2FyZCwg
bGVhdmluZyB0aGUgY2FyZXQgaW4gdGhlCkBAIC0xNDA3LDcgKzE0MTQsNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleAogCiAgICAgICAgIC8vIFN0YW5kYXJkIE1hYyBiZWhhdmlvciB3aGVuIGV4
dGVuZGluZyB0byBhIGJvdW5kYXJ5IGlzIGdyb3cgdGhlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBs
ZWF2aW5nIHRoZQogICAgICAgICAvLyBiYXNlIGluIHBsYWNlIGFuZCBtb3ZpbmcgdGhlIGV4dGVu
dC4gTWF0Y2hlcyBOU1RleHRWaWV3LgotICAgICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUt
PmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRp
bmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdy
YW51bGFyaXR5KSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAg
ICAgIHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jaygpOwpAQCAtMTQ0Niw3ICsxNDUzLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0
aWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNl
clRyaWdnZXJlZCkgewotICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9u
OworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQp
OwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7
CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyLCB2ZXJ0aWNhbERpc3Rh
bmNlLCBkaXJlY3Rpb24sIE5vdFVzZXJUcmlnZ2VyZWQpOwogCkBAIC0xNTE3LDcgKzE1MjQsNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIHVuc2lnbmVk
IHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJU
cmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsK
IAotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7Cisg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25h
bFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU2Nyw3ICsxNTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Y2xlYXIoKQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCkpOwogfQog
Ci12b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQordm9pZCBGcmFt
ZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiB7CiAgICAgbV9ncmFudWxhcml0
eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwogCkBAIC0xNTc1LDcgKzE1ODIsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgIG1fY2FyZXRCbGlua1Rp
bWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmll
dygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAg
c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCks
IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY1NSw5ICsxNjYyLDcgQEAgc3RhdGljIGJv
b2wgaXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikK
IAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNp
ZGVGaXhlZCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwor
ICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKG1fZG9jdW1lbnQpOwog
ICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAgICAg
Kmluc2lkZUZpeGVkID0gbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjc1LDEwICsx
NjgwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICBp
ZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lVmlldyog
diA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2Rv
Y3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTY5MCw3ICsxNjkyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2ZyYW1lLT5kb2N1bWVu
dCgpLCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KCZt
X2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0g
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
MTcxNSw3ICsxNzE3LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkp
IHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpKSB7
CiAgICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0g
bV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAm
JiBtX3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYg
KHNob3VsZFJlcGFpbnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50
RWRpdGFibGUpKSB7CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKQEAgLTE4
OTMsMTMgKzE4OTUsOSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9u
IGxpa2Ugbm8gc2VsZWN0aW9uLgogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwot
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0
UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQuaGl0VGVzdChIaXRUZXN0UmVxdWVz
dCgpLCByZXN1bHQpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsK
ICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTI2LDEwICsxOTI0LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAg
ICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCkucGFy
ZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dHJlZSgpLnBh
cmVudCgpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5NDIsNyArMTk0MCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNl
bGVjdGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRvIHRoZSA8aWZyYW1lPiBv
ciA8ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZnJhbWUu
Ci0gICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7Cisg
ICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKTsKICAg
ICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRhaW5lck5vZGUq
IG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFyZW50Tm9kZSgpOwpAQCAtMTk2
OCw5ICsxOTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgp
OwogICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVj
dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LmNh
blNlbGVjdEFsbCgpKSB7CkBAIC0yMDAwLDggKzE5OTYsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3RBbGwoKQogICAgICAgICBpZiAocm9vdCkKICAgICAgICAgICAgIHNlbGVjdFN0YXJ0
VGFyZ2V0ID0gcm9vdC0+c2hhZG93SG9zdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RT
dGFydFRhcmdldCA9IGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOworICAgICAgICAgICAgcm9v
dCA9IG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RTdGFy
dFRhcmdldCA9IG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIXJvb3QpCkBAIC0yMDQxLDggKzIwMzcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91
bGRDbAogICAgICAgICBzZWxlY3Rpb25PcHRpb25zLmFkZChDbG9zZVR5cGluZyk7CiAKICAgICBp
ZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIEZyYW1lU2VsZWN0
aW9uIHRyaWFsRnJhbWVTZWxlY3Rpb247Ci0KKyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxG
cmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBzZWxlY3Rpb25PcHRpb25zKTsKIAogICAgICAgICBp
ZiAoIXNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbEZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigp
KSkKQEAgLTIwNTgsOSArMjA1Myw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotICAgIFJlZjxEb2N1bWVu
dD4gZG9jdW1lbnQoKm1fZnJhbWUtPmRvY3VtZW50KCkpOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX2RvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
IAogI2lmIFVTRShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3Mg
fCBkb2VzIG5vdCBibGluaykKQEAgLTIwNzEsNyArMjA2NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBSZW5kZXJP
YmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAgIC8vIFJlbmRlck9iamVj
dDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2
ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFp
bnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkp
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFy
cyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDc2LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0
eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQo
KSkgewogICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAg
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAg
ICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCkBAIC0yMTA3LDEzICsyMTAxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3Vz
ZWQoYm9vbCBmbGFnKQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUo
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1f
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4g
bV9mb2N1c2VkICYmIG1fZG9jdW1lbnQucGFnZSgpICYmIG1fZG9jdW1lbnQucGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1p
bmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKEZy
YW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5
cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFu
ZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIxMzIs
MTIgKzIxMjYsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAg
ICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24udmlz
aWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1
dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRp
bmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNo
b3VsZEJsaW5rID0gIXBhaW50QmxvY2tDdXJzb3IgJiYgY2FyZXRJc1Zpc2libGUoKSAmJiBpc0Nh
cmV0KCkgJiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGlu
ayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9mcmFtZSkpCisgICAg
aWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0
b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZCgmbV9kb2N1bWVudCkpCiAgICAgICAgIG1fY2Fy
ZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFj
ayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsyMTQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7
CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpOwogICAgIGlm
ICghdmlldykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAyLDggKzIxOTYsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxp
dHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dl
ciBhIHN5bmNocm9ub3VzIGxheW91dCBoZXJlLgotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUobV9kb2N1bWVudCk7CiAKICNpZiBF
TkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsy
MjQwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQo
KQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAg
ICAgICBpZiAoRWxlbWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChtX3NlbGVj
dGlvbi5iYXNlKCkpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJhbWUpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFu
Y2hvciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjU1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNl
dEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNG
cmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8g
bWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlz
IGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQt
PmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVs
ZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZG9jdW1l
bnQuZnJhbWUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAg
ICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQo
bnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7
CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUp
OworICAgICAgICBtX2RvY3VtZW50LnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQobnVsbHB0ciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIHZvaWQgRHJhZ0Nh
cmV0Q29udHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0NvbnRl
eHQmIHAsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYg
Y2xpcFJlY3QpIGNvbnN0CkBAIC0yMjk3LDE5ICsyMjkwLDE2IEBAIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBGcmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxl
Q29udGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7Ci0KLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5
b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKG1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LnJlbmRl
clZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKQEAgLTIzMjUsMTQgKzIzMTUsMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnQKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0UmVjdEhl
aWdodCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAg
IGlmICghbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9m
cmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9k
b2N1bWVudC52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdC
b3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWln
aHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAg
YXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50
UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0
LDcgKzIzNTQsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50
KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkg
Y29uc3QKIHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJz
dCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVu
dCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVs
ZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3Rh
cnQpCiAgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAg
aWYgKCFzdGFydCkKQEAgLTI0MDcsOCArMjM5Nyw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJl
dmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9s
CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRl
Rml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRh
dGVBcHBlYXJhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3Rp
ZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAg
ICAgICAgIGlmIChtX2RvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlT
Y3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogI2Vsc2UKQEAgLTI0MjYsMjcgKzI0MTYsMjYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9k
eSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50
aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1
bWVudCkuCiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJh
bWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgp
IHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC5oYXNFZGl0YWJs
ZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAg
aWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8
ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghKGlzTm9uZSgpIHx8IGlz
U3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50Lmhhc0VkaXRhYmxlU3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50
LT5ib2R5KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LmJvZHkoKSkKICAgICAg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNv
bnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgp
LT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgp
CkBAIC0yNDY0LDcgKzI0NTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93
QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRT
aG93QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBt
X2RvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAg
dXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ3MSwxMyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCkKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogewotICAg
IFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4g
cHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9y
U3R5bGVDaGFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5j
ZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3Vt
ZW50LmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRvclN0YXRl
QWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRSZWN0TmVl
ZHNVcGRhdGUoKTsKQEAgLTI1MzksMTQgKzI1MjgsMTQgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEZyYW1lU2VsZWN0aW9uOjplbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBj
b24KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKCkKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbih3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKSk7ICAgICAgICAK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbih3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKG1fZG9jdW1lbnQsIG1fc2VsZWN0aW9uKSk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc0NhcmV0T3JSYW5nZSgpKQogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIH0K
IAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKQogewotICAgIHJldHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJl
dHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fZG9jdW1lbnQsIG1f
c2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkK
QEAgLTI1NTcsNyArMjU0Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlv
blRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogICAgIFZpc2libGVQb3Np
dGlvbiBzMShtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZTEobV9z
ZWxlY3Rpb24uZW5kKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBleHBhbmRlZCh3b3JkU2Vs
ZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKSk7CisgICAgVmlzaWJs
ZVNlbGVjdGlvbiBleHBhbmRlZCh3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KG1fZG9jdW1lbnQsIG1fc2VsZWN0aW9uKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHMyKGV4cGFu
ZGVkLnN0YXJ0KCkpOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIHN0YXJ0IHRvIGJlY29tZSBn
cmVhdGVyIGFmdGVyIHRoZSBleHBhbnNpb24uCkBAIC0yNzA4LDcgKzI2OTcsNyBAQCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2Vs
ZWN0aW9uKGludCBhbW91bgogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxl
bWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVh
dGVSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2RvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxvY2F0aW9uKTsK
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoKTsKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdl
LCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CkBAIC0yNzE2LDEzICsyNzA1LDEzIEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgsIE5vCiAgICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyBGaXJlU2VsZWN0
RXZlbnQgfSk7CiB9CiAKLVZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxlY3Rpb246OndvcmRTZWxl
Y3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQorVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOwogCiAgICAgQVNTRVJUKHNlbGVjdGlvbi5p
c0NhcmV0T3JSYW5nZSgpKTsKLSAgICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKKyAg
ICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihkb2N1bWVudCk7CiAgICAgZnJhbWVTZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CiAKICAgICBQb3NpdGlvbiBzdGFydFBvc0Jl
Zm9yZUV4cGFuc2lvbihzZWxlY3Rpb24uc3RhcnQoKSk7CkBAIC0yODcxLDcgKzI4NjAsNyBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJl
bnRTZWxlY3Rpb24oRUFsdGVyYXRpbwogICAgIGlmICghYW1vdW50KQogICAgICAgICByZXR1cm4g
bV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAotICAgIEZyYW1lU2VsZWN0aW9uIGZy
YW1lU2VsZWN0aW9uOworICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uKG1fZG9jdW1l
bnQpOwogICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyBEaXJlY3Rpb25Gb3J3
YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoYW1v
dW50KTsgaSsrKQpAQCAtMjg4OSw3ICsyODc4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcykKICAgICBpZiAobV9jYXJldEJsaW5rcyA9PSBj
YXJldEJsaW5rcykKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOyAKKyAgICBtX2RvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50ID0gZmFs
c2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGFiMjg5MDUxMTlkNTFkNTQzYjUzMGU3MjI4ZmQxOTY0
ZWFhMDkzYjIuLmQzZjRhNTExZDJmNmZhZjFjNjdkMzA4MGYyNDBiMDBjMzE2OTEyNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKERvY3VtZW50Jik7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQo
KSBjb25zdDsKICAgICAgCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgU2hvdWxkQ2xv
c2VUeXBpbmcsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFy
KCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICB2b2lkIHdpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKTsKIAogICAgIHZvaWQgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0
KCk7CiAgICAgdm9pZCBzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCk7
CkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0
QmxpbmtzID0gdHJ1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYXJldENvbG9yKGNv
bnN0IENvbG9yJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpc2libGVTZWxlY3Rpb24g
d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpc2libGVTZWxlY3Rpb24gd29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihEb2N1bWVudCYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKTsKICAgICBib29sIGlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRVcGRhdGVB
cHBlYXJhbmNlRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV91cGRhdGVBcHBlYXJhbmNlRW5hYmxl
ZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHN1cHByZXNzU2Nyb2xsaW5nKCkgeyArK21fc2Nyb2xs
aW5nU3VwcHJlc3NDb3VudDsgfQpAQCAtMzM2LDcgKzMzNiw3IEBAIHByaXZhdGU6CiAgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVy
YXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBGcmFtZSogbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlmZjlm
MzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEyNGNm
MTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVk
CiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgYm9v
bCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0Vu
YWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNldHRp
bmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVk
KQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVh
a0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZiLi4y
NzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3ICsx
NDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8g
SGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGlu
Z1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUgJiYg
IXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGluZyBz
dHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGU5
MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1MTM2
OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxlY3Rp
b24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1NlbGVj
dGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9yKCku
aXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgpLmVk
aXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9ybU92
ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJl
IGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdT
dHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChSZWZQ
dHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkudHlw
aW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRQ
b3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAgICAg
ICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxlKHR5
cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFkOTM5
ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQxM2Yw
NTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VX
aXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9uKCku
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxYzgx
OTg0MGYwNTQzOWQyZWQyZjFkOGM1MmFjMjdmZTgxMmJlZjE4Li43Mzg2M2JlZmMzYjg5ODI3MzJm
NTYwYTFkMGEzNTk1NjI5MTIzZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6IENh
biB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQ/
ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQgYWZ0
ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZyYW1l
KCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgZGVz
dGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQuICBU
byBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0aG91
dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUgc2Ft
ZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4ZTli
YTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDAs
NyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFt
ZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBoYW5l
ZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCwg
bV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewotICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAg
aWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSkg
JiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBzZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgzNjZi
NTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0OThm
ZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtOTgs
OCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQoKQog
ICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2Vy
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNwZWxs
Q2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQog
ICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNrZXI6
OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzExNCw3
IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50KiBT
cGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JDbGll
bnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVja2Vy
Ojp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVja2Vy
Ojppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNl
dHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7
CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlJiBy
YW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52b2tl
UmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNsaWVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1vdmUo
cmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3Byb2Nl
c3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGll
bnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6
ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0xOTks
NyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1JlcXVl
c3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vzc2lu
Z1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJlcGxh
Y2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFzdFBy
b2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkKICAg
ICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTksNyAr
MjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3REYXRh
LmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkKICAg
ICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAg
ICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1
bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVj
a2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBt
YXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5ZmI1
YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4YTg2
NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03Niw3
ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1lJik7
CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hlY2tl
cigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEwNiw3
ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAgICBG
cmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIwODQ1
MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcgKzY1
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewogICAg
ICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3Io
KS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3JyZWN0
ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVuYXBw
bGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwgbV9j
b3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgpLnNl
bGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQp
KQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNlbGVj
dGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVs
bENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IDI2NmQyM2JlMWIzZDM1Y2QyNTlkNjIxY2Q3NzMwNzIxNGNkODcyN2MuLmI1
OTFiMTU5YTNlMzBiODZhMzY1Zjk5ODkyNjQ2YWJmNjcxMTJiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5nQ29t
bWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNv
bW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29t
cG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0g
ICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7
CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9zaXRp
b25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVs
bENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCArMTgw
LDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
S2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJH
cmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1l
bnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZyYW1l
KCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5k
ID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAg
ICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
bGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9u
KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4
dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hv
dWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsK
QEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlwaW5n
Q29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRp
b25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBGSVhN
RTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9zZSBh
IG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgp
OwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAgICAg
ICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGlu
Z0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21t
YW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFz
dFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRv
Y3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3Vy
cmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElz
QXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBv
c2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNw
ZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25z
LAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtleSwg
ZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxl
Y3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9pZCBU
eXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0
aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkKIHsK
LSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlw
aW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0
aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigp
LnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUo
dGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGluc2Vy
dFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBv
cHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVlZCB0
byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBG
cmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9ucywg
VGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZyYW1l
PiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIExP
RyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0LnV0
ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3Vy
cmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAg
U3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQsIHNl
bGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvblBl
bmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxlY3Rp
b24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0aGF0
IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1cmUs
IHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3VzdG9t
IHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBvZiB0
aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29t
bWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgewor
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBpZiAo
bGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvckluc2Vy
dGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0
aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYsMTIg
KzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8gY21k
ID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBv
cHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQo
ZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2Vs
ZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1lKCks
IGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsKIH0K
IAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50
LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRv
Y3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlw
aW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1l
bnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9w
dGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMg
JiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRp
b25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5
QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1l
bnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21t
YW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JU
eXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9j
b21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcsOSAr
Mjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwgb3B0
aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5k
OjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkKK1Jl
ZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29tcG9z
aXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RFZGl0
Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21t
YW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFsYXN0
RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwgIXN0
YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09wZW5G
b3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYgKzMx
MCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFuZFVu
dGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxpbmdJ
bml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0aW5n
QWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1lKiBm
cmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50
KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYgKFJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFR5
cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9w
ZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3
U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXND
dXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
ZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1Nl
bGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00MzYs
MTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21t
YW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0K
ICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3Io
KS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVk
aXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAh
ZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisgICAg
aWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9t
YXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9y
KCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1
bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0
ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZyYW1l
LmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKCFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxlY3Rp
b24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVl
ZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkK
ICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAgIGlm
IChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8fCBj
b21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFuZFR5
cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1hbmRU
eXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29u
dGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQo
KnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFz
dHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVj
dGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBlbHNl
IGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwog
I2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8gSWYg
dGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNvdWxk
IGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdvcmRT
aWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIHN0
YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVj
dGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsK
ICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYgKzQ4
NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVU
eXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAgICAg
ICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJldHVy
biBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBmcmFt
ZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNy
ZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBs
eUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwogfQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29t
bWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFt
ZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9yQWRk
ZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCkuYXBw
bGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRp
bmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFsc28g
cGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQgaGFw
cGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVudFNw
ZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5k
VHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNraW5n
IGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50IGlz
c3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBhcyBt
aXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlwZUZv
ckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7
CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5kaWYK
IH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dEFu
ZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAgICAg
TE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51dGY4
KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJlcGxh
Y2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNlcnRl
ZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5n
LCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVk
QnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAsOSAr
NTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVz
KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlvblR5
cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VM
ZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rpb24o
KSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0VGV4
dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZy
YW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJh
bWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwogfQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2liaWxp
dHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRl
eHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAg
IGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgp
LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9j
dW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQog
CkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBm
YWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0gICAg
RnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rvcihm
cmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNlcGFy
YXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4
dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNj
ZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAgcmVw
bGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlz
dGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFY
VGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFj
ZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCkK
ICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBp
bmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250
ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmls
aXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRF
ZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQo
KS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRv
Y3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNl
dFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0K
IApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJv
b3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBG
cmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZy
YW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwog
Ci0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAg
LTY3NCw3ICs2NDgsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogCiAgICAgICAgIG1fc21h
cnREZWxldGUgPSBmYWxzZTsKIAotICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247Cisg
ICAgICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbihkb2N1bWVudCgpKTsKICAgICAgICAgc2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAgIHNlbGVjdGlv
bi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3
YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nICYmIHNl
bGVjdGlvbi5pc0NhcmV0KCkgJiYgZ3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
CkBAIC03NDgsMjAgKzcyMiwyMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3Vs
ZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBj
bG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQo
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50
KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVj
dGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRl
U2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUu
aXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlv
bihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoIXdp
bGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVk
aXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVs
ZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxs
UmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwog
CiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxs
IHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91
bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc5OCw3ICs3NzEsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgICAgICAvLyBI
YW5kbGUgZGVsZXRlIGF0IGJlZ2lubmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAvLyBEbyBu
b3RoaW5nIGluIHRoZSBjYXNlIHRoYXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiBhCiAg
ICAgICAgIC8vIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1
bWVudC4KLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgICAgICBGcmFtZVNl
bGVjdGlvbiBzZWxlY3Rpb24oZG9jdW1lbnQoKSk7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBncmFudWxhcml0
eSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCkBAIC04NTcsMTMgKzgzMCwxMyBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
ICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcg
QVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOwor
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQo
KSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRv
RGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQo
Rm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQpAQCAtODczLDcgKzg0Niw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRl
bGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5n
KQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxs
UmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9k
ZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVk
CiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3Nt
YXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSov
IGZhbHNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1
Mzg1NzVjYWEzODc2YmI5YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQz
ZjFjODY5ZDU4ZWI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAg
LTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhE
b2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFy
YXRvcihEb2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNs
b3NlVHlwaW5nKEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQm
KTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RF
ZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50Jiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQo
Y29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyAr
MTAzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7
IHJldHVybiBtX29wZW5Gb3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsg
bV9vcGVuRm9yTW9yZVR5cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsK
KyAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGls
bE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwog
ICAgIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5z
ZmVyKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxl
KCkgY29uc3QgZmluYWw7CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZl
cmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZCosIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5
cGluZ1N0eWxlKEVUeXBpbmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5D
b21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBl
bXB0eVN0cmluZygpLCBSZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAppbmRleCAyNzJlMzRiZWI3
OTI2NGViNjcxZGM5YTg2ZDdhZGE4NzU2YmU3MmI0Li4wNjVlZWE5YmE0NWQ3MmFiY2I5NzY5OWEz
NTZlNDU5ZDAwYjEwYjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9G
cmFtZVNlbGVjdGlvbkF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJh
bWVTZWxlY3Rpb25BdGsuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVD
aGFuCiAgICAgaWYgKCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVhPYmpl
Y3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCA3ZmUzMGUwYTBlYTJl
N2ViZTMzYTEyN2MzMWY3N2I0ZTMyZjA1Y2EzLi4xNGIzNWMyODhiMzZjNmYwYmNkZjMwMWY5NjQ5
YzhmOWJmNWYwZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW0KQEAgLTgwLDggKzgwLDggQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGFyY2hp
dmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICoKIAogU3RyaW5n
IEVkaXRvcjo6c2VsZWN0aW9uSW5IVE1MRm9ybWF0KCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXpl
UHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAg
ICAgICBtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0Vu
YWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRU
cmVlOjpObyk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNl
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNs
dWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5zZXR0aW5n
cygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVD
b21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogfQogCiAjaWYg
RU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTEwNSwxOCArMTA1LDE4IEBAIHZvaWQgRWRp
dG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChFbGVtZW50JiBlbGVt
ZW50LCBWZWN0b3I8U3RyCiAKICNlbmRpZgogCi1zdGF0aWMgUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IEZyYW1lJiBmcmFtZSkK
K3N0YXRpYyBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzZWxlY3Rpb25Bc0F0dHJpYnV0
ZWRTdHJpbmcoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGF1dG8gcmFuZ2UgPSBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byByYW5n
ZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBy
ZXR1cm4gcmFuZ2UgPyBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkuc3RyaW5nIDogYWRvcHROUyhb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwogfQogCiB2b2lkIEVkaXRvcjo6d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKLSAgICBh
dXRvIHN0cmluZyA9IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKKyAgICBh
dXRvIHN0cmluZyA9IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2RvY3VtZW50KTsKIAog
ICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0gICAgY29udGVudC5jb250ZW50T3Jp
Z2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgp
OworICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmll
ckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2Fu
U21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQg
PSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblJURkRG
b3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChz
dHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKQEAgLTEzMSwxMCArMTMxLDEwIEBAIHZvaWQgRWRpdG9y
Ojp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogCiB2
b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9h
cmRXcml0ZXJEYXRhKQogewotICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVk
U3RyaW5nKG1fZnJhbWUpOworICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVk
U3RyaW5nKG1fZG9jdW1lbnQpOwogCiAgICAgUGFzdGVib2FyZFdyaXRlckRhdGE6OldlYkNvbnRl
bnQgd2ViQ29udGVudDsKLSAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgd2ViQ29udGVu
dC5jb250ZW50T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2Fy
ZCgpOwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVj
dGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1h
dCA9IFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmlu
Zy5nZXQoKSkgOiBudWxscHRyOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRWRpdG9yOjp3cml0
ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiAK
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0
KCkKIHsKLSAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2Vs
ZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGVGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgaWYgKCFhcmNoaXZl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkpOwpAQCAtMTc3LDExICsx
NzcsMTEgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJ
bWFnZUFsdFRleHQoKQogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1
dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZywgTWFpbEJsb2Nr
cXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRv
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMobV9mcmFtZSwgYXR0cmli
dXRlZFN0cmluZykpIHsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoKm1fZG9jdW1lbnQuZnJhbWUoKSwgYXR0
cmlidXRlZFN0cmluZykpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgq
ZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKQogICAgICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9u
TnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpOwogICAgICAgICB9
CkBAIC0yMjcsNyArMjI3LDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhSW5S
VEZGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCiAvLyBPciByZWZhY3RvciBzbyBp
dCBkb2VzIG5vdCBkbyB0aGF0LgogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2Vi
Q29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNvbnN0IFNpbXBs
ZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4
dCkKIHsKLSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCBjb250ZXh0LCBhbGxv
d1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJh
bWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQpOwogICAgIHBhc3RlYm9hcmQucmVhZChyZWFk
ZXIpOwogICAgIGNob3NlUGxhaW5UZXh0ID0gcmVhZGVyLm1hZGVGcmFnbWVudEZyb21QbGFpblRl
eHQ7CiAgICAgcmV0dXJuIFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZnJhbWUu
ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNm
ZXIoKSk7CisgICAgYXV0byBzdHJpbmdGcm9tU2VsZWN0aW9uID0gbV9kb2N1bWVudC5mcmFtZSgp
LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkVGV4dEZvckRhdGFUcmFu
c2ZlcigpKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAg
ICAgdHlwZXMuYXBwZW5kKFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCBlOWRmZGZjYmVkYTRh
ZGMzNjg2MDJjOTFjMDIwZTYzNmIxMDA0ODNkLi5kNDFlNGI5MzAyNzYxMjU2OGRhZTRmOWJlOThl
MDE0MjNhZGYxODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0
b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAK
QEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJk
LCBtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxh
aW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYm
IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVv
dGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZv
aWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJv
YXJkKQogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250ZW50OwogICAgIHBh
c3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxl
dGUoKTsKICAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRy
YW5zZmVyKCk7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVz
b2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBt
X2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zp
c3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2
ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0
ZWJvYXJkJiBwYXN0ZWJvYXJkLCBjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZy
YWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsIG1fZnJhbWUsIGNvbnRleHQsIGFs
bG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50
RnJvbVBhc3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksIGNvbnRl
eHQsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAzZjI5
YzRlMjNlMmY2Y2RmNWQ0NjQyZjJkYzE4ODQ2YzU3ZTMyZDg2Li42NzI0ZGI4NTBkYTc1OTlmODBh
NjYyNjY0ZTY1MDhhMzZlNTJmMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9y
Q2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgLy8g
SWYgdGhlIHRleHQgaGFzIGxlZnQgb3IgcmlnaHQgYWxpZ25tZW50LCBmbGlwIGxlZnQtPnJpZ2h0
IGFuZCByaWdodC0+bGVmdC4gCiAgICAgLy8gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLgogCi0gICAg
YXV0byBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rp
b25TdHlsZS0+c3R5bGUoKSkKICAgICAgICAgIHJldHVybjsKIApAQCAtMTI2LDE0ICsxMjYsMTQg
QEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJl
Y3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXIKICAgICBpZiAoIW5ld1ZhbHVlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQo
KS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9j
dW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhU
TUxUZXh0QXJlYUVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KCpmb2N1c2VkRWxlbWVudCkKICAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkp
IHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmZvY3Vz
ZWRFbGVtZW50KS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsaWduQXR0ciwg
bmV3VmFsdWUpOwotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKKyAgICAgICAgbV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEVkaXRvcjo6cmVtb3Zl
VW5jaGFuZ2VhYmxlU3R5bGVzKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgc3R5
bGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVpciBkZWZhdWx0
IHZhbHVlcy4KICAgICAKLSAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3Jl
YXRlKG1fZnJhbWUuZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgYXV0byBlZGl0
aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0
KCkpOwogICAgIGF1dG8gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHlsZSgpLT5tdXRh
YmxlQ29weSgpOwogICAgIAogICAgIC8vIFRleHQgd2lkZ2V0cyBpbXBsZW1lbnQgYmFja2dyb3Vu
ZCBjb2xvciB2aWEgdGhlIFVJVmlldyBwcm9wZXJ0eS4gVGhlaXIgYm9keSBlbGVtZW50IHdpbGwg
bm90IGhhdmUgb25lLgpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4K
IHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGJvb2wg
YWxsb3dQbGFpblRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWlu
VGV4dCk7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgKnJhbmdlLCBhbGxv
d1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJh
bWUoKSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFzdGVib2Fy
ZEl0ZW1zID0gY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7CiAgICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdt
ZW50RnJvbURlbGVnYXRlKGkpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9w
dGlvbj4KIAogdm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3Rv
cjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewotICAgIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZGljdGF0aW9uUGhyYXNl
cy5pc0VtcHR5KCkpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlv
blBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQK
ICAgICAvLyBTb21lIGRheSB3ZSBjb3VsZCBtYWtlIHRoZW0gVW5kb2FibGUsIGFuZCBsZXQgY2Fs
bGVycyBjbGVhciB0aGUgVW5kbyBzdGFjayBleHBsaWNpdGx5IGlmIHRoZXkgd2lzaC4KICAgICBj
bGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVh
cigpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGVsZW1lbnQu
cmVtb3ZlQ2hpbGRyZW4oKTsKIApAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRU
ZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQp
CiAKICAgICAvLyBBcyBhIHNpZGUgZWZmZWN0IHRoaXMgZnVuY3Rpb24gc2V0cyBhIGNhcmV0IHNl
bGVjdGlvbiBhZnRlciB0aGUgaW5zZXJ0ZWQgY29udGVudC4gTXVjaCBvZiB3aGF0CiAgICAgLy8g
Zm9sbG93cyBpcyBtb3JlIGV4cGVuc2l2ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgc28gY2xl
YXIgaXQgc2luY2UgaXQncyBnb2luZyB0byBjaGFuZ2UgYW55d2F5LgotICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAK
ICAgICAvLyBjbGVhciBvdXQgYWxsIGN1cnJlbnQgY2hpbGRyZW4gb2YgZWxlbWVudAogICAgIGVs
ZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEVkaXRvcjo6
c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVt
ZW50KQogICAgIHNlbGVjdGlvbi5zZXRCYXNlKHZpc2libGVQb3MpOwogICAgIHNlbGVjdGlvbi5z
ZXRFeHRlbnQodmlzaWJsZVBvcyk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihzZWxlY3Rpb24pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHNlbGVjdGlvbik7CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7
CiB9CkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVt
ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIC8vIGhhdmUgYSBzdGFs
ZSBzZWxlY3Rpb24uCiB2b2lkIEVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoKQogewotICAgIFR5cGluZ0NvbW1hbmQ6OmVu
c3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5n
KCZtX2ZyYW1lLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBUeXBpbmdD
b21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9y
TW9yZVR5cGluZyhtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggNWQxNWE2NDYxYzU2OWI2M2FjYzYxNTc5
NWUzNDQ3NzA4YTRkNTU3Ny4uMTJmZDZhNDNlYTA1YTJhMGU3MmI3NGJhNzJkOTYyODY0NzA1YmFl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3Bw
CkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBh
c3RlYm9hcmRDb250ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRl
eHRGb3JEYXRhVHJhbnNmZXIoKTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJp
YWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ks
Ci0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFy
aWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21w
b3NlZFRyZWU6Ok5vKTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQ
cmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisg
ICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFy
aWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21w
b3NlZFRyZWU6Ok5vKTsKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsK
IH0KIApAQCAtODQsNyArODQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3Rl
Ym9hcmQsIG1fZnJhbWUsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxs
b3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9h
cmQsICptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9w
dGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21l
bnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAg
ICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDkzMWEyMzAwZjA5NjY0MjQzZDg2NmFjODY0MGE5NzFk
NmM1OTIxNGQuLjNhY2Q5OTc4MzY3YTZmY2FkNDUyZTEwZDc1ZjVlMzA3N2NkYTdmYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTEwMiw3ICsxMDIsNyBAQCB2
b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBP
cHRpb25TZXQ8UGFzdGVPcHRpb24+CiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZCBw
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAg
ICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93
UGxhaW5UZXh0IH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKHBhc3RlYm9hcmQpOwpAQCAtMTM2LDE3ICsxMzYsMTYgQEAgdm9pZCBFZGl0b3I6OnJl
cGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBpZiAoJm5vZGUtPmRvY3VtZW50
KCkgIT0gbV9mcmFtZS5kb2N1bWVudCgpKQorICAgIGlmIChub2RlLT5kb2N1bWVudCgpICE9IG1f
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1f
ZnJhbWUpOwotCisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAg
YXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9kZSk7Ci0gICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZSks
IEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlKSwgRnJhbWVTZWxlY3Rpb246
OkRvTm90U2V0Rm9jdXMpOwogCiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKTsKIAotICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgcGFzdGVBc1Bs
YWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMjIwLDcgKzIxOSw3IEBAIHN0YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQmIGltYWdl
RWxlbWVudCwgUmVmUHRyPEltYWdlPiYgaW1hZ2UsIENhY2hlZEltYWdlKiYKIAogdm9pZCBFZGl0
b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UoKQogewotICAgIGlmICghaGFzQ29tcG9zaXRpb24oKSB8
fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygp
IHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhbmNlbENvbXBvc2l0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmluZGV4IDgzNGNjMzZiYThhNjdhMmJlOGE3YjdiNDhjZWEz
ZTFmOTVjNzFjYjcuLjgyMzkzZDk3ODQxNTEyMTliNDdjMmExZTgzMzkzMjUzOGZlMDVlMzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCkBA
IC0zNCwxMCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3Rh
dGVDaGFuZ2VJbnRlbnQmIGludGVudCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpOwotCiAgICAgaWYgKG1fc2VsZWN0aW9uLnN0YXJ0KCkuaXNOb3ROdWxs
KCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAg
ICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgaW50ZW50LCBtX3NlbGVjdGlvbik7CiAgICAgfQog
CkBAIC00NiwxMCArNDQsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJp
bGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW4KICAgICBpZiAoIVVB
Wm9vbUVuYWJsZWQoKSB8fCAhbV9zZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsK
KyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gbV9kb2N1bWVudC5yZW5kZXJWaWV3KCk7CiAg
ICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2Rv
Y3VtZW50LnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAppbmRleCA1ZTg2ODdmODk0YmVj
NjA0Y2M2MjFiZDRlMGQ5MTI4Mjk1YzM0ZjU5Li5jNzk2YmZhYWY2NmVlOTRhODVjNTVmMzkyMzQ5
MTU1ZDI3NGE4NjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0
b3JXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAK
QEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQobV9mcmFtZSwgKnJhbmdl
LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxh
aW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBwYXN0ZWJv
YXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7
CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNR
dW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpA
QCAtNjksOSArNjksOSBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZy
YWdtZW50RnJvbVBsYXRmb3JtRGF0YShQbGF0Zm9ybURyYWdEYXRhJgogUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBh
c3RlYm9hcmQsIGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCAvKmFsbG93UGxhaW5UZXh0Ki8sIGJv
b2wmIC8qY2hvc2VQbGFpblRleHQqLykKIHsKICAgICBpZiAoQ09NUHRyPElEYXRhT2JqZWN0PiBw
bGF0Zm9ybURyYWdEYXRhID0gcGFzdGVib2FyZC5kYXRhT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEsIG1fZnJh
bWUpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0
Zm9ybURyYWdEYXRhLCAqbV9kb2N1bWVudC5mcmFtZSgpKTsKIAotICAgIHJldHVybiBjcmVhdGVG
cmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0YU1hcCgpLCBtX2ZyYW1l
KTsKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKHBhc3RlYm9hcmQu
ZHJhZ0RhdGFNYXAoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKaW5kZXggNTVlNDFi
N2FmNWRjNWI5ZjcxZWU3ZjlhZWQ2Y2Y2M2ZjYTMwYTIxMS4uZDNkNjY1ZmI3MTIyYjZjZjdhYWEz
YzMxNDVjMjBjMjAwYWM5N2UwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9D
YWNoZWRGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHAKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIENhY2hlZEZyYW1lOjpkZXN0cm95KCkKICAgICBt
X2RvY3VtZW50LT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCiAgICAgbV9kb2N1bWVudC0+
c2V0QmFja0ZvcndhcmRDYWNoZVN0YXRlKERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
OwotICAgIG1fZG9jdW1lbnQtPnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOworICAgIG1fZG9jdW1l
bnQtPndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKIAogICAgIGNsZWFyKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA4YjA1ZjgzNzUxNGY1MGFlMDhiMmFmNGQ4
NGUzYjFlZDU3MjRhZWM3Li41OTEyOGJlYjg3NTY4ZDFmNzlmODg0NTY2NDJjNTU5MWNlYjEyMjU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTU0OCwxMSArNTQ4LDE0
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogdm9pZCBGcmFtZUxvYWRlcjo6d2lsbFRyYW5z
aXRpb25Ub0NvbW1pdHRlZCgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl
biBhIGZyYW1lIGlzIHN0aWxsIGZ1bGx5IGluIHBsYWNlIChub3QgY2FjaGVkLCBub3QgZGV0YWNo
ZWQpLCBidXQgd2lsbCBiZSByZXBsYWNlZC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgeworICAgIGlmIChkb2N1
bWVudC0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAvLyBUaGUgdGV4dCB3
YXMgYWxyZWFkeSBwcmVzZW50IGluIERPTSwgc28gaXQncyBiZXR0ZXIgdG8gY29uZmlybSB0aGFu
IHRvIGNhbmNlbCB0aGUgY29tcG9zaXRpb24uCi0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkuY29u
ZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVu
dCA9IG1fZnJhbWUuZWRpdG9yKCkuY2xpZW50KCkpIHsKKyAgICAgICAgZG9jdW1lbnQtPmVkaXRv
cigpLmNvbmZpcm1Db21wb3NpdGlvbigpOworICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0
b3JDbGllbnQgPSBkb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpIHsKICAgICAgICAgICAgIGVk
aXRvckNsaWVudC0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CiAgICAgICAg
ICAgICBlZGl0b3JDbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1lKTsKICAgICAg
ICAgfQpAQCAtNTYzLDcgKzU2Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsb3NlVVJMKCkKIHsK
ICAgICBoaXN0b3J5KCkuc2F2ZURvY3VtZW50U3RhdGUoKTsKIAotICAgIERvY3VtZW50KiBjdXJy
ZW50RG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgUmVmUHRyPERvY3VtZW50PiBj
dXJyZW50RG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CiAgICAgVW5sb2FkRXZlbnRQb2xp
Y3kgdW5sb2FkRXZlbnRQb2xpY3k7CiAgICAgaWYgKG1fZnJhbWUucGFnZSgpICYmIG1fZnJhbWUu
cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5pc1NWR0ltYWdlQ2hyb21lQ2xpZW50KCkpIHsKICAg
ICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgU1ZHRG9jdW1lbnQgb2YgYW4gU1ZHSW1hZ2UsIG5vIG5l
ZWQgdG8gZGlzcGF0Y2ggZXZlbnRzIG9yIHJlY2FsY1N0eWxlLgpAQCAtNTc1LDcgKzU3OCw4IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmNsb3NlVVJMKCkKIAogICAgIHN0b3BMb2FkaW5nKHVubG9hZEV2
ZW50UG9saWN5KTsKICAgICAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVy
YXRpb25zKCk7CisgICAgaWYgKGN1cnJlbnREb2N1bWVudCkKKyAgICAgICAgY3VycmVudERvY3Vt
ZW50LT5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogfQogCiBib29sIEZyYW1l
TG9hZGVyOjpkaWRPcGVuVVJMKCkKQEAgLTU4Nyw3ICs1OTEsNiBAQCBib29sIEZyYW1lTG9hZGVy
OjpkaWRPcGVuVVJMKCkKICAgICB9CiAKICAgICBtX2ZyYW1lLm5hdmlnYXRpb25TY2hlZHVsZXIo
KS5jYW5jZWwoKTsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7
CiAKICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3Nl
ID0gZmFsc2U7CkBAIC02NTAsOCArNjUzLDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZENs
ZWFyV2luZG93TmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IERvY3VtZW50JiBuZXcKIAog
dm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFy
V2luZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvb2wgY2xlYXJGcmFt
ZVZpZXcsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZURPTVdpbmRvd0NyZWF0aW9uKQog
ewotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXIoKTsKLQogICAgIGJvb2wgbmVlZGVkQ2xlYXIg
PSBtX25lZWRzQ2xlYXI7CiAgICAgbV9uZWVkc0NsZWFyID0gZmFsc2U7CiAKQEAgLTY1OSw3ICs2
NjAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJv
b2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sCiAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQo
KS0+Y2FuY2VsUGFyc2luZygpOwogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnN0b3BBY3Rp
dmVET01PYmplY3RzKCk7CiAgICAgICAgIGJvb2wgaGFkTGl2aW5nUmVuZGVyVHJlZSA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+aGFzTGl2aW5nUmVuZGVyVHJlZSgpOwotICAgICAgICBtX2ZyYW1lLmRv
Y3VtZW50KCktPnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOworICAgICAgICBtX2ZyYW1lLmRvY3Vt
ZW50KCktPndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKICAgICAgICAgaWYgKGhhZExpdmluZ1Jl
bmRlclRyZWUpCiAgICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPmFkanVzdEZvY3VzZWRO
b2RlT25Ob2RlUmVtb3ZhbCgqbV9mcmFtZS5kb2N1bWVudCgpKTsKICAgICB9CkBAIC02ODAsNyAr
NjgxLDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBi
b29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbAogICAgICAgICAgICAgbV9mcmFtZS50cmVl
KCkuc2V0TmFtZShudWxsQXRvbSgpKTsKICAgICB9CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOwogICAgIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuY2xl
YXIoKTsKIAogICAgIGlmIChjbGVhckZyYW1lVmlldyAmJiBtX2ZyYW1lLnZpZXcoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKaW5kZXggMWE2MDg5NjYzNDZkMTM2ODJiOTNiOTBkMjZjNzc5YzIyZGZiY2Yx
OC4uMzlkZWE0ZDVlMjVhN2M2M2Q5YmZkYjAzYWE1ZTc1NTU0YmIxYmM2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAg
ICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxl
cj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9z
Y3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2Vk
aXRvcihtYWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rpb24obWFr
ZVVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRy
b2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigqdGhpcykpCiAgICAg
LCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV90
ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTIzNCw3ICsyMzIs
NyBAQCB2b2lkIEZyYW1lOjpzZXRWaWV3KFJlZlB0cjxGcmFtZVZpZXc+JiYgdmlldykKICAgICAv
LyBub3RpZmllZC4gSWYgd2Ugd2FpdCB1bnRpbCB0aGUgdmlldyBpcyBkZXN0cm95ZWQsIHRoZW4g
dGhpbmdzIHdvbid0IGJlIGhvb2tlZCB1cCBlbm91Z2ggZm9yCiAgICAgLy8gdGhlc2UgY2FsbHMg
dG8gd29yay4KICAgICBpZiAoIXZpZXcgJiYgbV9kb2MgJiYgbV9kb2MtPmJhY2tGb3J3YXJkQ2Fj
aGVTdGF0ZSgpICE9IERvY3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpCi0gICAgICAgIG1fZG9j
LT5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICAgICAgbV9kb2MtPndpbGxCZVJlbW92ZWRG
cm9tRnJhbWUoKTsKICAgICAKICAgICBpZiAobV92aWV3KQogICAgICAgICBtX3ZpZXctPmxheW91
dENvbnRleHQoKS51bnNjaGVkdWxlTGF5b3V0KCk7CkBAIC0yNzksNyArMjc3LDcgQEAgdm9pZCBG
cmFtZTo6c2V0RG9jdW1lbnQoUmVmUHRyPERvY3VtZW50PiYmIG5ld0RvY3VtZW50KQogI2VuZGlm
CiAKICAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERv
Y3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpCi0gICAgICAgIG1fZG9jLT5wcmVwYXJlRm9yRGVz
dHJ1Y3Rpb24oKTsKKyAgICAgICAgbV9kb2MtPndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKIAog
ICAgIG1fZG9jID0gbmV3RG9jdW1lbnQuY29weVJlZigpOwogICAgIEFTU0VSVCghbV9kb2MgfHwg
bV9kb2MtPmRvbVdpbmRvdygpKTsKQEAgLTU1NCw3ICs1NTIsNyBAQCBib29sIEZyYW1lOjpyZXF1
ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6OkRlbmll
ZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6
Ok5vdFJlcXVlc3RlZFlldDogewotICAgICAgICBhdXRvKiBjbGllbnQgPSBtX2VkaXRvci0+Y2xp
ZW50KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9IGVkaXRvcigpLmNsaWVudCgpOwogICAgICAg
ICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTM3LDcgKzkz
NSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpv
b21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9y
ZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAK
ICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0
YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTogSG93IHRvIGhhbmRsZSBjb21w
b3VuZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFy
aWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IGU5Y2FiM2NjMGY5ZWNiZGExYzExODJlM2Fh
NzVkNGM1YzZhMmViMDAuLjQ1NDQwYWMxYWFmMDczNzFjMzUyZjE4ZGI0MTY5NjFmOGYxNDFiNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0
RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgpAQCAtMTYzLDE0ICsxNjQsMTQgQEAg
cHVibGljOgogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwogICAgIEZyYW1lVmlldyog
dmlldygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsg
fQotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0K
KyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9Cisg
ICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0
b3IoKTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgeyByZXR1cm4gbV9ldmVu
dEhhbmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgRnJhbWVMb2FkZXImIGxvYWRlcigpIGNv
bnN0OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXImIG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25z
dDsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247
IH0KLSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4g
ZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBG
cmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdh
Y3lBbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KICAgICBjb25z
dCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdhY3lBbmltYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzksNiBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29udHJv
bGxlcj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7Ci0gICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBVbmlxdWVSZWY8Q1NTQW5p
bWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMmQ2
Y2U4MDhiZWQ2OTNjMWY3MDMzZmZjN2U3YWQ1NDZjNTBhYTNmYy4uOTY2YmE2ZDk5YTJlNjY2ZWVl
YmNjOWQ5NDZjODJmYWRjMmNmYjI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9U
ZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCkBAIC02OCwxMSArNjgsOSBAQCBSZWY8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6
Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQogCiBSZWZQdHI8VGV4dEluZGlj
YXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikK
IHsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihyYW5nZS5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKTsKIAotICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9IHJhbmdl
ID09IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9IHJhbmdlID09IGRvY3VtZW50LT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uczsK
ICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRp
b246OkRvTm90U2V0Rm9jdXMpOwpAQCAtODAsMTQgKzc4LDE0IEBAIFJlZlB0cjxUZXh0SW5kaWNh
dG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBUCiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKTsKICAgICB0ZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VV
cGRhdGVzKTsKICNlbmRpZgotICAgIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25D
aGFuZ2UoKmZyYW1lLCB7IHJhbmdlIH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOworICAg
IFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoZG9jdW1lbnQsIHsgcmFu
Z2UgfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0
YSBkYXRhOwogCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9u
VHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgaWYgKCFpbml0
aWFsaXplSW5kaWNhdG9yKGRhdGEsICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3Vy
cmVudFNlbGVjdGlvbikpCisgICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsICpkb2N1
bWVudC0+ZnJhbWUoKSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbikp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZShkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQppbmRleCA1NDMyNWFkODBjM2EzYTQ4
N2Y5MGMyZjE5MTY3ODZhZjhkYjlmNmViLi5kYTQ1ZjViYzgzOWM2Mzk1ZTgwZTFiZGY3YWQ5NTQ1
ODcxY2M3YTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCkBAIC00NjcsNyArNDY3LDcgQEAg
LSAoV2ViVmlzaWJsZVBvc2l0aW9uICopZW5kUG9zaXRpb24KIC0gKERPTVJhbmdlICopZW5jbG9z
aW5nV29yZFJhbmdlCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oW3NlbGYuc3Rh
cnRQb3NpdGlvbiBfdmlzaWJsZVBvc2l0aW9uXSwgW3NlbGYuZW5kUG9zaXRpb24gX3Zpc2libGVQ
b3NpdGlvbl0pOwotICAgIHNlbGVjdGlvbiA9IEZyYW1lU2VsZWN0aW9uOjp3b3JkU2VsZWN0aW9u
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgc2VsZWN0aW9uID0gRnJh
bWVTZWxlY3Rpb246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oW3NlbGYg
b3duZXJEb2N1bWVudF0sIHNlbGVjdGlvbik7CiAgICAgV2ViVmlzaWJsZVBvc2l0aW9uICpzdGFy
dCA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246c2VsZWN0aW9uLnZp
c2libGVTdGFydCgpXTsKICAgICBXZWJWaXNpYmxlUG9zaXRpb24gKmVuZCA9IFtXZWJWaXNpYmxl
UG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246c2VsZWN0aW9uLnZpc2libGVFbmQoKV07CiAg
ICAgcmV0dXJuIFtET01SYW5nZSByYW5nZUZvckZpcnN0UG9zaXRpb246c3RhcnQgc2Vjb25kOmVu
ZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRl
bnNpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9u
cy5tbQppbmRleCAzYjA5ZjNjNjI1NmIwMGQ3NjMwZWNhNmVhMTZkM2NjNjI0ZDdmOGMyLi45ZTEz
N2IzYTA5MzJmM2IyMmE5MjAxMDFhZWFmMTlkMTMwMjdmMTkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTc5LDcgKzc5LDcg
QEAgQGltcGxlbWVudGF0aW9uIERPTVJhbmdlIChVSUtpdEV4dGVuc2lvbnMpCiAtICh2b2lkKW1v
dmU6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9u
KWRpcmVjdGlvbgogewogICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247CisgICAgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb24gZnJhbWVTZWxlY3Rpb24oW3NlbGYgb3duZXJEb2N1bWVudF0pOwogICAgIGZyYW1lU2Vs
ZWN0aW9uLm1vdmVUbyhyYW5nZSk7CiAgICAgCiAgICAgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk7CkBAIC0xMDcsNyAr
MTA3LDcgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0
QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIC0gKHZvaWQpZXh0ZW5kOihVSW50MzIpYW1v
dW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIHsK
ICAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uIGZyYW1lU2VsZWN0aW9uOworICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZyYW1lU2Vs
ZWN0aW9uKFtzZWxmIG93bmVyRG9jdW1lbnRdKTsKICAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8o
cmFuZ2UpOwogICAgIAogICAgIGZvciAoVUludDMyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAxZDJiM2Y4
MDkyMDZkMzdkMDVkZmIyYWE5YWIwODhmZjY2MjQ0Y2JiLi4xMzZjZDhmNzMyNmQzNjNmNTU1ZWU3
Njk3YzU0ZDc3ZGQ2YWFkYzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KQEAgLTc4MCwxMSArNzgwLDE1IEBAIC0gKEJPT0wpX25lZWRzTGF5b3V0CiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdD
dXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0
ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24g
Z3JhbnVsYXJpdHk6KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eQogewotICAg
IGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBhdXRv
KiBkb2N1bWVudCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFk
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChkb2N1bWVudC0+c2VsZWN0
aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb24gc2VsZWN0aW9uKCpkb2N1bWVudCk7CisgICAgc2VsZWN0aW9uLnNldFNlbGVj
dGlvbihkb2N1bWVudC0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIHNlbGVjdGlvbi5t
b2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiAgICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlYzBiN2Q3YjI3N2MyZTNlNmMxNzAyZGM2OThmOGNjMWUw
ZmNjYTYzLi5kYzhiYjE2ZjQ2Y2QyNTcxNDU3NzU2MTNiZDllYzdkM2NmZWQ1NTdiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMjAtMDQtMjcgIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBs
ZS5jb20+CisKKyAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1h
bmQgdmlhIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc2MDAKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzU2OTY5NDUwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgY3Jhc2guCisKKyAgICAg
ICAgKiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFz
aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5nL2luc2Vy
dC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWw6IEFkZGVkLgorCisgICAgICAgIE1v
ZGlmeSB0aGUgdGVzdCByZXN1bHQuIEZyYW1lU2VsZWN0aW9uIGlzIGJlaW5nIGRlc3RydWN0ZWQg
YWxvbmcgd2l0aAorICAgICAgICBkb2N1bWVudCBzbyBhbiBhZGRpdGlvbmFsIHNlbGVjdGlvbiBj
aGFuZ2Ugbm90aWZpY2F0aW9uIGlzIGV4cGVjdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQ6CisK
IDIwMjAtMDQtMjcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbIGlPUyBdIFJFR1JFU1NJT046IGFuaW1hdGlvbnMvY2hhbmdlLWtleWZyYW1lcy1uYW1lLmh0
bWwgaXMgYSBmbGFreSBmYWlsdXJlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2lu
c2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29t
bWFuZC1jcmFzaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA0MDM0MjNlNTkwOTUwMjY1ZjA4
YTMyOTI2ZTY2MTdkMDE4YTdmNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRp
bmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxIEBACitUZXN0cyBpbnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBl
ZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBo
aXQgYW4gYXNzZXJ0aW9uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRp
bmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbCBiL0xheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2FmMzgxZDllZjVhM2ZkOTRlYjIxMDkwYzJhMjJmYmMwNzUxMmFhZgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1s
aXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPGJvZHk+
PGltYWdlPjwvaW1hZ2U+PGZvcm0gaWQ9Zm9ybSBjb250ZW50RWRpdGFibGU9dHJ1ZT48b2JqZWN0
IGRhdGE9PyBvbmxvYWQ9b2JqZWN0T25Mb2FkKCk+PC9vYmplY3Q+PC9mb3JtPjxkaWFsb2cgb3Bl
bj0idHJ1ZSI+YTwvZGlhbG9nPgorPHNjcmlwdD4KKyAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24o
KS5lbXB0eSgpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJzZWxlY3RBbGwiLCBmYWxzZSk7
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBvYmplY3RPbkxvYWQoKSB7CisgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCJpbnNlcnRVbm9yZGVyZWRMaXN0IiwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC5leGVjQ29t
bWFuZCgiaXRhbGljIiwgZmFsc2UpOworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiPHA+IFRl
c3RzIGluc2VydGluZyBsaXN0IGZvbGxvd2VkIGJ5IGFuIGVkaXQgY29tbWFuZC4gVGhlIHRlc3Qg
cGFzc2VzIGlmIFdlYktpdCBkb2Vzbid0IGNyYXNoIG9yIGhpdCBhbiBhc3NlcnRpb24uPC9wPiI7
CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFn
LWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dAppbmRl
eCBkNmJjN2IxZTZmMDNlM2I0OGFmMDQxOGM2NTUwNGE0ZDIxMzdjMWFjLi5lNWJkZDJhMGJmZDg5
NTJkOTc2NmE0MzdjYWNlYTQ2NjQ4OTc3ODY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2Ry
YWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtNCw2ICs0LDcgQEAgRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW8KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0
ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397795</attachid>
            <date>2020-04-27 20:52:12 -0700</date>
            <delta_ts>2020-04-27 22:45:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200427205211.patch</filename>
            <type>text/plain</type>
            <size>236154</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGZiZTIyY2Y2NGNjODg5
NGQxYmRkOGQzMTNkODYzMWZkY2NkNzA2OC4uNDRhNTNiMDBjYWY4NmM2Zjg2MDE3M2FhMTVhMDk3
ZmM3MTgyOWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxOSBAQAorMjAyMC0wNC0yNyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSBjb25zdCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpz
dG9wUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9y
ZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmVkaXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtl
ckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5M
RVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6dW5hcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpyZWFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBseUNvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFn
cmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6ZnJhbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1lIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9F
ZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNo
YW5nZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGlvbkZvckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpi
ZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNsaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkVkaXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjYW5FZGl0UmljaGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDdXQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5ESFRNTENv
cHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5Db3B5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6Y2FuUGFzdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjYW5EZWxldGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGRT
bWFydERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnRE
ZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnRyeURIVE1MQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyeURIVE1MQ3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9y
ZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbFVub3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpwZXJmb3JtQ3V0T3JDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVuZGVyTGF5ZXJEaWRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTZXRDb21wb3NpdGlvblNjb3BlOjpTZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldENvbXBvc2l0aW9uU2NvcGU6On5TZXRDb21wb3NpdGlvblNjb3BlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmxlYXJu
U3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRP
clJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTZWxlY3Rpb25Vbmdy
YW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxs
ZWRXb3JkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
c1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGVkVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92
ZVRleHRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbXB1dGVBbmRT
ZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3Rh
cnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFj
aG1lbnRVcGRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRl
TW9kZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkb2N1bWVudCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6Oklnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlOjpJZ25v
cmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRv
Y3VtZW50IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN3YXBXaXRoTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZSBjb25zdCk6
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlm
RGlmZmVyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rp
b25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRD
bGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRP
clN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RS
YW5nZU9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcv
SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExp
bmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1Vu
YXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
ZWxsQ2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tl
cjo6aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6
OmRpZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9u
SWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBp
bmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91
dE5ld2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVha0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBl
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGlu
Z0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJs
ZVN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJl
bnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndw
ZS9FZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGVk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRp
b25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6CisgICAgICAgICogcGFn
ZS9GcmFtZS5oOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UpOgorCiAyMDIwLTA0LTI3ICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggOWJkNGRjMzk3NTBmMmYxNWIzY2UyZTg5ZGRiNjk3OGFkNDg0NjZlYi4uM2QzZTJm
YmExOTI4YzZjZTgyYTZkMzE0M2M0NWNjOWZmN2Q5NzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA0LTI3ICBKYWNrIExlZSAgPHNoaWhjaGll
aF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6
OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NjAwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEZyYW1lU2VsZWN0aW9uIGFuZCBFZGl0b3Igb2JqZWN0
cyBmcm9tIEZyYW1lIHRvIERvY3VtZW50IHNvIHdoZW4gYSBkb2N1bWVudCBpcyBkZXRhY2hlZAor
ICAgICAgICBpbiBuZXN0ZWQgY29tbWFuZCBleGVjdXRpb25zLCB0aGUgbmV4dCBFZGl0Q29tbWFu
ZCB3b3VsZCBub3QgZmFpbCBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIERPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdlIG1vdmU6aW5EaXJlY3Rpb246XSk6
CisgICAgICAgICgtW0RPTVJhbmdlIGV4dGVuZDppbkRpcmVjdGlvbjpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbjpkaXJlY3Rpb246Z3JhbnVsYXJpdHk6XSk6CisKIDIwMjAtMDQtMjcg
IEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBz
b21lIHVzZWxlc3MgaW5jbHVkZXMgb2YgQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAppbmRleCAwMmM3NTcwMGE4NWIzYzcyNTY2OTc3YmEyZGJjMWUzYWY4MjkxNGI1
Li5kNDhmYmI5ZWZkMjAwYWQ0MDIxZjQzYmY2OGU2NzNhNTVkOWRmZmRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpCiAg
ICAgLy8gTk9URTogaWdub3JlcyByZXN1bHRzIG9mIHNlbC5tb2RpZnkgYmVjYXVzZSBpdCByZXR1
cm5zIGZhbHNlIHdoZW4KICAgICAvLyBzdGFydGluZyBhdCBhbiBlbXB0eSBsaW5lLiAgVGhlIHJl
c3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAgLy8gd2lsbCBiZSBhIGNhcmV0IGF0
IHZpc2libGVQb3MuCi0gICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgIEZyYW1lU2Vs
ZWN0aW9uIHNlbGVjdGlvbigqZG9jdW1lbnQoKSk7CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVQb3MpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5k
YXJ5KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDMwNjU4NGRiNWRjNzBmMmZi
NmVlY2IyZGU3YmU5NTE0ZWMzNWRiMDQuLjBiOWI1ZjVmYzlkOWU0MWMwY2QzZGE4NDY2MmQxYjVi
NTZhYTg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTgzLDYgKzU4Myw4IEBAIERv
Y3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCB1bnNpZ25lZCBk
b2N1bWVudENsYXNzZXMsIHVuc2lnCiAgICAgLCBtX29yaWVudGF0aW9uTm90aWZpZXIoY3VycmVu
dE9yaWVudGF0aW9uKGZyYW1lKSkKICAgICAsIG1faWRlbnRpZmllcihEb2N1bWVudElkZW50aWZp
ZXI6OmdlbmVyYXRlKCkpCiAgICAgLCBtX3VuZG9NYW5hZ2VyKFVuZG9NYW5hZ2VyOjpjcmVhdGUo
KnRoaXMpKQorICAgICwgbV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKKyAg
ICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KCp0aGlzKSkKIHsK
ICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFkZChtX2lkZW50aWZpZXIs
IHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CkBAIC0yNTAwLDcgKzI1MDIsNyBAQCB2b2lkIERvY3VtZW50OjpkZXN0cm95UmVuZGVyVHJl
ZSgpCiAgICAgICAgIHZpZXcoKS0+ZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKK3ZvaWQgRG9jdW1lbnQ6OndpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKQogewogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24p
CiAgICAgICAgIHJldHVybjsKQEAgLTI1OTMsNiArMjU5NSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAgICAgICAgIHBhZ2UoKS0+dXBkYXRlSXNQbGF5aW5nTWVk
aWEoSFRNTE1lZGlhRWxlbWVudEludmFsaWRJRCk7CiAgICAgfQogCisgICAgZWRpdG9yKCkuY2xl
YXIoKTsKKyAgICBzZWxlY3Rpb24oKS53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgZGV0
YWNoRnJvbUZyYW1lKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggMjgxNGI2M2U1YmE3MjkzN2NhYjI0Zjk2ZjEyNTA1OGQ0ZDZlNDZiZC4u
Y2I4YWFjYjE4MzU1Mzg0MjQ2YjAyYTYzOTYzZTE3NmNkYzk1Zjc3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBjbGFzcyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w7
CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRWRp
dGluZ0JlaGF2aW9yOworY2xhc3MgRWRpdG9yOwogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgRXZl
bnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CkBAIC0xMjgsNiAr
MTI5LDcgQEAgY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udEZhY2VTZXQ7CiBjbGFzcyBGb3Jt
Q29udHJvbGxlcjsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVTZWxlY3Rpb247CiBjbGFzcyBG
cmFtZVZpZXc7CiBjbGFzcyBGdWxsc2NyZWVuTWFuYWdlcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRl
eHQ7CkBAIC02MjYsNyArNjI4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRCZWNvbWVDdXJy
ZW50RG9jdW1lbnRJbkZyYW1lKCk7CiAgICAgdm9pZCBkZXN0cm95UmVuZGVyVHJlZSgpOwotICAg
IHZvaWQgcHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJv
bUZyYW1lKCk7CiAKICAgICAvLyBPdmVycmlkZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG1ldGhv
ZHMgdG8gZG8gYWRkaXRpb25hbCB3b3JrCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbDsKQEAgLTE1
NzgsNiArMTU4MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNWaXN1YWxseU5vbkVtcHR5
Q3VzdG9tQ29udGVudCgpIHsgbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudCA9IHRy
dWU7IH0KICAgICBib29sIGhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNWaXN1YWxseU5vbkVtcHR5Q3VzdG9tQ29udGVudDsgfQogCisgICAgRWRp
dG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIGNvbnN0IEVkaXRvciYgZWRp
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKwogcHJvdGVjdGVk
OgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRl
cmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVS
TCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlv
bkZsYWdzID0gMCk7CkBAIC0yMTE4LDYgKzIxMjUsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjsKIAogICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lk
ZW50aWZpZWRFbGVtZW50c01hcDsKKworICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwor
ICAgIFVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCiBFbGVtZW50
KiBldmVudFRhcmdldEVsZW1lbnRGb3JEb2N1bWVudChEb2N1bWVudCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXgg
M2JkNjU4ZGY2NDQwMWQyMmIwNjFkNmNjNDMwZmVlY2I0MWZlYjAwNi4uYWVmNGJjNWE3ZDhmNmQ2
ZDVhZDY2ZTY2MGI3ZjRlOGVlZTE4OGExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHN0
YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQor
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihEb2N1
bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX3RpbWVyKCp0aGlzLCAmQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RvY3Vt
ZW50KGRvY3VtZW50KQogewogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8g
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gIW1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtl
cnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOworICAgIHJldHVybiAhbV9kb2N1bWVudC5tYXJrZXJzKCkuaGFzTWFya2VycyhtaXNzcGVs
bGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5n
SWZBcHByb3ByaWF0ZSgpCiAgICAgaWYgKG1fdHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29y
cmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3Np
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQb3Np
dGlvbiBjYXJldFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpOwogCiAgICAgaWYgKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkg
PT0gY2FyZXRQb3NpdGlvbikgewogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQp
KTsKQEAgLTIyMCwxNCArMjIwLDE0IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTCiAgICAgaWYg
KGF1dG8gY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZl
cnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KG1fZnJhbWUpOwotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAg
UmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9kb2N1bWVudC5mcmFtZSgpKTsKKyAgICBtX2RvY3Vt
ZW50LnVwZGF0ZUxheW91dCgpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7
Ci0gICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlv
bk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMo
KSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8g
cmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgbWFya2VycyA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3Vt
ZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMoKnJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBtYXJrZXJzLmFkZE1h
cmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5h
ZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7
CkBAIC0yMzgsMTIgKzIzOCwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRp
bWVyRmlyZWQoKQogICAgIG1faXNEaXNtaXNzZWRCeUVkaXRpbmcgPSBmYWxzZTsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsK
LSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHAsIHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50
V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBl
OjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5n
ZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIG51bGxwdHIpOworICAgICAg
ICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVw
bGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29y
ZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVy
bmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFn
cmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOworICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAo
c3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0
cmluZyYgcmVzdWx0KQogewogICAgIFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCk7Ci0gICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8
fCBtX2ZyYW1lLmRvY3VtZW50KCkgIT0gJnJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3Vt
ZW50KCkpCisgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2RvY3VtZW50ICE9IHJh
bmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
OwpAQCAtMzQyLDcgKzM0Miw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIAogRmxvYXRSZWN0IEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAg
YXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOwogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5n
ZSkpKTsKQEAgLTM1MCw3ICszNTAsNyBAQCBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbgogCiB2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewotICAgIFZpc2libGVTZWxlY3Rp
b24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQg
b2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCiAgICAg
Ly8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVz
ZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQogICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlv
bi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0g
dGhhdApAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0
ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29t
bWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigp
KQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbV9kb2N1bWVudC5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRv
cik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlv
bkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0
ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwpAQCAtNDAwLDE0ICs0MDAsMTQgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kQ29tcG9zaXRpb24KICAgICBhdXRvIHJhbmdlID0gY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgbWFya2Vycy5hZGRNYXJr
ZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogICAgIG1hcmtlcnMuYWRk
TWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwog
fQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmVkaXRvckNsaWVu
dCgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUucGFnZSgpID8gJm1fZnJhbWUucGFnZSgpLT5lZGl0
b3JDbGllbnQoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQucGFnZSgpID8gJm1f
ZG9jdW1lbnQucGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFRleHRDaGVj
a2VyQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCkBAIC00
ODMsMTIgKzQ4MywxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24s
IG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAogYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewot
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9kb2N1bWVudC5tYXJrZXJzKCk7CiAgICAgaWYgKG1hcmtlcnMuaGFz
TWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KSkgewogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikKICAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRD
b3JyZWN0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3Vs
dC5yZXBsYWNlbWVudCk7CkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtl
ciYKICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlv
bi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBO
b2RlKiBub2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8g
d29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBhdXRvIHdv
cmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zm
c2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3Jk
ID0gcGxhaW5UZXh0KHdvcmRSYW5nZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTYyLDcgKzU2Miw3IEBAIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1l
bnRNYXJrZXImCiAKIEFsdGVybmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdl
KCkgPyBtX2ZyYW1lLnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwor
ICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5wYWdlKCkgPyBtX2Rv
Y3VtZW50LnBhZ2UoKS0+YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkgOiBudWxscHRyOwogfQogCiBT
dHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBs
aWVkQWx0ZXJuYXRpdmVUZXh0KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlw
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU5OSw3ICs1OTks
NyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0
VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1
IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmlu
Z0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSk7
Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtl
Qm91bmRhcnlQb2ludChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwor
ICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0gbWFrZUJv
dW5kYXJ5UG9pbnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsK
ICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAg
ICAgcmV0dXJuOwogICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRl
ZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdlKGNvcnJl
Y3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKQEAgLTYyMSwx
MSArNjIxLDExIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0
ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKHRyaWdnZXJpbmdF
dmVudCkKICAgICAgICAgdGFyZ2V0ID0gdHJpZ2dlcmluZ0V2ZW50LT50YXJnZXQoKTsKICAgICBl
bHNlCi0gICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KG1fZnJh
bWUuZG9jdW1lbnQoKSk7CisgICAgICAgIHRhcmdldCA9IGV2ZW50VGFyZ2V0RWxlbWVudEZvckRv
Y3VtZW50KCZtX2RvY3VtZW50KTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZt
X2ZyYW1lLndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAg
YXV0byBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKCZtX2RvY3VtZW50LmZy
YW1lKCktPndpbmRvd1Byb3h5KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAg
ZXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCiAgICAgdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKQEAgLTY1Nyw3ICs2NTcsNyBAQCBWZWN0b3I8U3RyaW5n
PiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJr
ZXIoY29uc3QgRAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseURpY3RhdGlv
bkFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmVTdHJpbmcpCiB7CiAjaWYgVVNF
KERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgYXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0
b3IoKTsKKyAgICBhdXRvJiBlZGl0b3IgPSBtX2RvY3VtZW50LmVkaXRvcigpOwogICAgIGF1dG8g
c2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvbiB8
fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQoYWx0ZXJuYXRpdmVTdHJpbmcsIHNlbGVjdGlvbi5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmlu
ZGV4IDk0Nzc0YTc2YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkuLmUzZGY5YjU3NmZj
MzA4OGRjMjc3YjNmNzkxY2Y4MjMxYjkwNjMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0zNSwxMSArMzUsMTEgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CitjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVkaXRDb21tYW5kOwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3Np
dGlvbjsKIGNsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRnJhbWU7CiBj
bGFzcyBSYW5nZTsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpIFVOTEVTU19FTkFCTEVEKCA6IG1fZnJh
bWUoZnJhbWUpIHsgfSkKKyAgICBleHBsaWNpdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERv
Y3VtZW50JiBkb2N1bWVudCkgVU5MRVNTX0VOQUJMRUQoOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7
IH0pCiAgICAgfkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0p
CiAKICAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRU
eXBlKSBVTkxFU1NfRU5BQkxFRCh7IH0pCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAg
ICBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGFsdGVybmF0aXZlVGV4dENsaWVudCgpOwogI2VuZGlm
CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIH07CiAK
ICN1bmRlZiBVTkxFU1NfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAzNTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3
MjI3ZmUxNzRiLi44MDdlZTdiODhiM2IxMWViZWFmOGFjM2UxNzY0NDJkNDY4Mzk5MGE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAt
MjI4LDE3ICsyMjgsMTcgQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjp1bmFwcGx5KCkK
ICAgICAvLyB1cCB0aGUgY29tcG9zaXRpb24gd2lsbCBsZWF2ZSBhIHN0YWxlLCBpbnZhbGlkIGNv
bXBvc2l0aW9uLCBhcyBpbiA8cmRhcjovL3Byb2JsZW0vNjgzMTYzNz4uCiAgICAgLy8gRGVza3Rv
cCBoYW5kbGVzIHRoaXMgaW4gLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRN
YW5hZ2VyXSwgYnV0IHRoZSBwaG9uZQogICAgIC8vIGdvZXMgYW5vdGhlciByb3V0ZS4KLSAgICBm
cmFtZS0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0
b3IoKS5jYW5jZWxDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0
b3IoKS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVudC0+ZWRp
dG9yKCkud2lsbFVuYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
c2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6
ZTsgaTsgLS1pKQogICAgICAgICBtX2NvbW1hbmRzW2kgLSAxXS0+ZG9VbmFwcGx5KCk7CiAKLSAg
ICBmcmFtZS0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CisgICAgbV9kb2N1bWVu
dC0+ZWRpdG9yKCkudW5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAKICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgbV9yZXBsYWNlZFRleHQucG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclVuYXBwbHkobV9kb2N1bWVudC0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMjU4LDEzICsyNTgsMTMgQEAgdm9pZCBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOjpyZWFwcGx5KCkKICAgICAvLyBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtl
IGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgbV9kb2N1bWVudC0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBpZiAoIWZyYW1l
LT5lZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQorICAgIGlmICghbV9kb2N1bWVu
dC0+ZWRpdG9yKCkud2lsbFJlYXBwbHlFZGl0aW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChhdXRvJiBjb21tYW5kIDogbV9jb21tYW5kcykKICAgICAgICAgY29tbWFuZC0+
ZG9SZWFwcGx5KCk7CiAKLSAgICBmcmFtZS0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhp
cyk7CisgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkucmVhcHBsaWVkRWRpdGluZygqdGhpcyk7CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAg
bV9yZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvclJlYXBwbHko
bV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpOwpAQCAtMzE5LDcgKzMxOSw3IEBA
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQogCiBib29sIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICByZXR1cm4gZnJh
bWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5k
aW5ncygpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5n
KCp0aGlzLCB0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQpAQCAtMzc4LDEzICszNzgsMTMgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwbHkoKQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkaWRBcHBs
eUNvbW1hbmQoKQogewotICAgIGZyYW1lKCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMp
OworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOwogfQogCiBW
ZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJh
bmdlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0
KCkpOwotICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gZmlyc3RSYW5nZSA9IGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9m
UGFyYWdyYXAKICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5z
ZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNl
cnRGcmFnbWVudCBoZXJlLgogCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwotICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rp
b24oKSk7CiAgICAgZGVsZXRlU2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsK
IAogICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+
aXNDb25uZWN0ZWQoKSk7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJh
Z3JhcAogICAgICAgICBvcHRpb25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgb3B0aW9ucykpOwogCi0g
ICAgZnJhbWUoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdT
ZWxlY3Rpb24oKSk7CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9u
IGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVt
cHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVj
dGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0Vu
ZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGNh
NTZmMzAxMWEwMDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2NGYuLmUyMGE4ZDhkYTZlNDhiMzk2
YmE2NDhlOWFjMjQwODFjMTczMTc5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUoKQogICAgIC8vIEhvd2V2
ZXIsIGlmIHR5cGluZyBzdHlsZSB3YXMgcHJldmlvdXNseSBzZXQgZnJvbSBhbm90aGVyIHRleHQg
bm9kZSBhdCB0aGUgcHJldmlvdXMKICAgICAvLyBwb3NpdGlvbiAobm93IGRlbGV0ZWQpLCB3ZSBu
ZWVkIHRvIGNsZWFyIHRoYXQgc3R5bGUgYXMgd2VsbC4KICAgICBpZiAobV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYg
bV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTc0NCw3ICs3NDQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocygpCiAgICAgCiAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2Vk
ID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFmcmFtZSgp
LmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIo
KSwgcmFuZ2VUb0JlUmVwbGFjZWQucHRyKCkpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UucHRyKCksIHJhbmdl
VG9CZVJlcGxhY2VkLnB0cigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIG1vdmVQ
YXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0
aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTgxOCw3ICs4
MTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUoKQogICAgIC8vIEluIHRoaXMgY2FzZSBpZiB3ZSBzdGFydCB0eXBpbmcsIHRo
ZSBuZXcgY2hhcmFjdGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBzdHlsZSBhcyB0aGUganVzdCBk
ZWxldGVkIG9uZXMsCiAgICAgLy8gYnV0LCBpZiB3ZSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiwgY29t
ZSBiYWNrIGFuZCBzdGFydCB0eXBpbmcgdGhhdCBzdHlsZSBzaG91bGQgYmUgbG9zdC4gIEFsc28g
c2VlIAogICAgIC8vIHByZXNlcnZlVHlwaW5nU3R5bGUoKSBiZWxvdy4KLSAgICBmcmFtZSgpLnNl
bGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJlZigpKTsKKyAgICBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKG1fdHlwaW5nU3R5bGUuY29weVJl
ZigpKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0
YXRlKCkKQEAgLTg4OSw3ICs4ODksNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIGlmICghbV9yZXBsYWNlKSB7CiAgICAgICAgIEVsZW1lbnQqIHRleHRDb250
cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KSk7CiAgICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQot
ICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KHRleHRDb250cm9sKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxC
ZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbCk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0
aGlzIHRvIGxhdGVyIG1ha2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05NDQsNyArOTQ0LDcgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAKICAgICBib29s
IHNob3VsZFJlYmFsYWNlV2hpdGVTcGFjZSA9IHRydWU7Ci0gICAgaWYgKCFmcmFtZSgpLmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkUmViYWxhbmNlV2hpdGVTcGFjZXNJblNlY3VyZUZpZWxkKCkp
IHsKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFu
Y2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9l
bmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBpZiAoaXM8VGV4dD4obm9k
ZSkpIHsKICAgICAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OwpAQCAtOTU4LDcgKzk1OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSgpOwogCiAgICAgaWYgKCFv
cmlnaW5hbFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGZyYW1lKCkuZWRpdG9yKCkuZGVsZXRl
ZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmlu
Zyk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CiAKICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSwg
ZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgY2xlYXJUcmFuc2llbnRT
dGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCBkZjA5OGMz
ZjdkYTE3Yzc4OTRlMmNmNzg1NTU5YmM4NzZjODg0NjEyLi4xZjViNmFjYjlkYjE4OGVhNjkwZjYw
MDU2Yzc3Mzc3MDBlMmI4ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEyNywzMyArMTI2LDE5IEBAIEVkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24o
ZWRpdGluZ0FjdGlvbikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgc2V0
U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpOworICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1lbnQtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24obV9zdGFydGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewot
ICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihz
dGFydGluZ1NlbGVjdGlvbik7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlv
bik7CiB9CiAKIEVkaXRDb21tYW5kOjp+RWRpdENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKLUZyYW1l
JiBFZGl0Q29tbWFuZDo6ZnJhbWUoKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkp
OwotICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1jb25zdCBGcmFtZSYgRWRp
dENvbW1hbmQ6OmZyYW1lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS5mcmFtZSgp
KTsKLSAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKLX0KLQogRWRpdEFjdGlvbiBFZGl0
Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWRpdGluZ0Fj
dGlvbjsKQEAgLTE2OCwxMSArMTUzLDcgQEAgc3RhdGljIGlubGluZSBFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKiBjb21wb3NpdGlvbklmUG9zc2libGUoRWRpdENvbW1hbmQqIGNvbW1hbmQKIAogYm9v
bCBFZGl0Q29tbWFuZDo6aXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpIGNvbnN0CiB7Ci0g
ICAgYXV0byogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIGNvbnRhaW5lciA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvKiBj
b250YWluZXIgPSBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKTsKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0yMTcsNyArMTk4LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHIKIHsKICAgICBp
ZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbih0eXBlLCB0ZXh0LCBtX2RvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRD
b21tYW5kLmgKaW5kZXggZGViY2ZmMDI0NWVkZjBkZWU3ZGZiZWZlZDVmNjQwODFiNTEyYTM2Ny4u
MmY2N2NkNzMzNGMyYzhiZDU2OTBmMTEzNWMxMGQwMDBkYzMwNDNkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxl
bWVudDsKLWNsYXNzIEZyYW1lOwogCiBTdHJpbmcgaW5wdXRUeXBlTmFtZUZvckVkaXRpbmdBY3Rp
b24oRWRpdEFjdGlvbik7CiAKQEAgLTY0LDggKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IEVkaXRDb21tYW5kKERvY3VtZW50JiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3Bl
Y2lmaWVkKTsKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBjb25zdCBGcmFtZSYgZnJhbWUo
KSBjb25zdDsKLSAgICBGcmFtZSYgZnJhbWUoKTsKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50
KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJl
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKaW5kZXggYzExM2MwMTNkMDA0OGVmYTk1MjMzYWJkNjRmMDRlNGE5NTU1YzcyZC4uNGJiNDQ2
Njg4NDJlNGJlYTJlZDgzNDQ3ZDNiYTYyZDkwNzNmZWQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCkBAIC04OTgsNyArODk4LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0
IE5vZGUqIG5vZGUpCiAKIFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVs
ZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHN3aXRjaCAoZG9jdW1lbnQuZnJhbWUo
KS0+ZWRpdG9yKCkuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcigpKSB7CisgICAgc3dpdGNoIChk
b2N1bWVudC5lZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKICAgICBjYXNl
IEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzRGl2OgogICAgICAgICByZXR1cm4gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgY2FzZSBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0
b3JJc1A6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggZDU0MjRh
YzdkMjE5MjhkNTI2NzM0NTk1ZjVmZjY2ZWU3NzMzMGFhZC4uMmY2MzU0YTVkMmYzMGEzNmI5MDNm
MTBiOTM3M2ZmYTIzYTBjODZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcApAQCAtMTY4Niw3ICsxNjg2LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRp
bmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgZ2V0UHJv
cGVydGllc05vdEluKCpzdHlsZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHlsZSkgOiBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJv
cGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgIGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NT
ID0gZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpOworICAg
IGJvb2wgc2hvdWxkU3R5bGVXaXRoQ1NTID0gZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZFN0eWxl
V2l0aENTUygpOwogICAgIGlmICghc2hvdWxkU3R5bGVXaXRoQ1NTKQogICAgICAgICBleHRyYWN0
VGV4dFN0eWxlcygqZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4
ZWRGb250RGVmYXVsdFNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAy
YjEwNjA2ODk5MGI3MjI4MjRjZDg2ZDE3ZmRjYzJlNWYxY2MzOGQ1Li5jNDZmOTNjYjUxMTFlY2Iy
MmU2YjExZjY1MWE3NWE4ZTQ4MDQzOTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBA
IC0xNzMsOCArMTczLDggQEAgc3RhdGljIFN0cmluZyBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdT
dHlsZUFuZEFjdGlvbihFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWMKIGNsYXNzIENsZWFyVGV4
dENvbW1hbmQgOiBwdWJsaWMgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCB7CiBwdWJsaWM6CiAgICAg
Q2xlYXJUZXh0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpOwotICAgIHN0YXRpYyB2b2lkIENy
ZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpOwotICAgIAorICAgIHN0YXRp
YyB2b2lkIENyZWF0ZUFuZEFwcGx5KERvY3VtZW50Jik7CisKIHByaXZhdGU6CiAgICAgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpAQCAtMTg5LDE3ICsxODks
MTcgQEAgRWRpdEFjdGlvbiBDbGVhclRleHRDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QK
ICAgICByZXR1cm4gRWRpdEFjdGlvbjo6RGVsZXRlOwogfQogCi12b2lkIENsZWFyVGV4dENvbW1h
bmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxGcmFtZT4gZnJhbWUpCit2b2lkIENsZWFy
VGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChkb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG9uJ3QgbGVhdmUgYXJv
dW5kIHN0YWxlIGNvbXBvc2l0aW9uIHN0YXRlLgotICAgIGZyYW1lLT5lZGl0b3IoKS5jbGVhcigp
OworICAgIGRvY3VtZW50LmVkaXRvcigpLmNsZWFyKCk7CiAgICAgCi0gICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwotICAgIGF1dG8gY2xlYXJDb21t
YW5kID0gYWRvcHRSZWYoKm5ldyBDbGVhclRleHRDb21tYW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSkp
OworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0QWxs
KCk7CisgICAgYXV0byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1h
bmQoZG9jdW1lbnQpKTsKICAgICBjbGVhckNvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKG9s
ZFNlbGVjdGlvbik7CiAgICAgY2xlYXJDb21tYW5kLT5hcHBseSgpOwogfQpAQCAtMjA3LDI0ICsy
MDcsMjQgQEAgdm9pZCBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShjb25zdCBSZWZQ
dHI8RnJhbWU+IGZyYW1lKQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY6OlVuaWNvZGU7CiAKLVRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6VGVtcG9yYXJ5
U2VsZWN0aW9uQ2hhbmdlKEZyYW1lJiBmcmFtZSwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4g
dGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBv
cHRpb25zKQotICAgIDogbV9mcmFtZShmcmFtZSkKK1RlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZTo6
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9uYWw8Vmlz
aWJsZVNlbGVjdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uLCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2Vs
ZWN0aW9uT3B0aW9uPiBvcHRpb25zKQorICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRvY3VtZW50
KSkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotICAgICwgbV93YXNJZ25vcmluZ1NlbGVjdGlv
bkNoYW5nZXMoZnJhbWUuZWRpdG9yKCkuaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpKQorICAgICwg
bV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMoZG9jdW1lbnQuZWRpdG9yKCkuaWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcygpKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLCBtX2FwcGVh
cmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZnJhbWUuc2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJh
bmNlRW5hYmxlZCgpKQorICAgICwgbV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKGRvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSkKICNlbmRpZgogewog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxl
Y3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VVcGRhdGVzKQotICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYK
IAogICAgIGlmIChvcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKHRydWUpOworICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKHRydWUpOwogCiAgICAgaWYgKHRlbXBvcmFyeVNlbGVjdGlvbikgewotICAgICAg
ICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgICAgICBtX3NlbGVjdGlvblRvUmVzdG9yZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgICAgICBzZXRTZWxlY3Rpb24odGVtcG9yYXJ5U2VsZWN0aW9uLnZhbHVlKCkp
OwogICAgIH0KIH0KQEAgLTIzNiwxMiArMjM2LDEyIEBAIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5n
ZTo6flRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSgpCiAKICAgICBpZiAobV9vcHRpb25zICYgVGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKSB7CiAgICAgICAg
IGF1dG8gcmV2ZWFsU2VsZWN0aW9uID0gbV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpSZXZlYWxTZWxlY3Rpb24gPyBFZGl0b3I6OlJldmVhbFNlbGVjdGlvbjo6WWVzIDogRWRp
dG9yOjpSZXZlYWxTZWxlY3Rpb246Ok5vOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJ
Z25vcmVTZWxlY3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZl
YWxTZWxlY3Rpb24pOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxl
Y3Rpb25DaGFuZ2VzKG1fd2FzSWdub3JpbmdTZWxlY3Rpb25DaGFuZ2VzLCByZXZlYWxTZWxlY3Rp
b24pOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fb3B0aW9u
cyAmIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0g
ICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1f
YXBwZWFyYW5jZVVwZGF0ZXNXZXJlRW5hYmxlZCk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNlbGVj
dGlvbigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKG1fYXBwZWFyYW5jZVVwZGF0ZXNXZXJl
RW5hYmxlZCk7CiAjZW5kaWYKIH0KIApAQCAtMjUwLDE0ICsyNTAsMTQgQEAgdm9pZCBUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2U6OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiAgICAgYXV0byBvcHRpb25zID0gRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCk7CiAgICAgaWYgKG1fb3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbjo6RG9Ob3RTZXRGb2N1cykKICAgICAgICAgb3B0aW9ucy5hZGQoRnJhbWVTZWxlY3Rp
b246OkRvTm90U2V0Rm9jdXMpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihzZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihzZWxlY3Rpb24sIG9wdGlvbnMpOwogfQogCiAvLyBXaGVuIGFuIGV2ZW50IGhhbmRs
ZXIgaGFzIG1vdmVkIHRoZSBzZWxlY3Rpb24gb3V0c2lkZSBvZiBhIHRleHQgY29udHJvbAogLy8g
d2Ugc2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGNvbnRyb2wncyBzZWxlY3Rpb24gZm9yIHRoaXMgZWRp
dGluZyBvcGVyYXRpb24uCiBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29t
bWFuZChFdmVudCogZXZlbnQpCiB7Ci0gICAgYXV0byBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uOwogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUg
Y3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCkBAIC0yNzYs
MTIgKzI3NiwxMiBAQCBWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFu
ZChFdmVudCogZXZlbnQpCiAvLyBGdW5jdGlvbiBjb25zaWRlcnMgTWFjIGVkaXRpbmcgYmVoYXZp
b3IgYSBmYWxsYmFjayB3aGVuIFBhZ2Ugb3IgU2V0dGluZ3MgaXMgbm90IGF2YWlsYWJsZS4KIEVk
aXRpbmdCZWhhdmlvciBFZGl0b3I6OmJlaGF2aW9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRp
dGluZ0JlaGF2aW9yKG1fZnJhbWUuc2V0dGluZ3MoKS5lZGl0aW5nQmVoYXZpb3JUeXBlKCkpOwor
ICAgIHJldHVybiBFZGl0aW5nQmVoYXZpb3IobV9kb2N1bWVudC5zZXR0aW5ncygpLmVkaXRpbmdC
ZWhhdmlvclR5cGUoKSk7CiB9CiAKIEVkaXRvckNsaWVudCogRWRpdG9yOjpjbGllbnQoKSBjb25z
dAogewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCisgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgcmV0dXJuICZwYWdlLT5lZGl0b3JD
bGllbnQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTM0NCwxMiArMzQ0LDEyIEBAIGJv
b2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKIAogYm9vbCBFZGl0
b3I6OmNhbkVkaXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wg
RWRpdG9yOjpjYW5FZGl0UmljaGx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIHJldHVy
biBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCk7CiB9CiAKIGVudW0gY2xhc3MgQ2xpcGJvYXJkRXZlbnRLaW5kIHsKQEAgLTQ0Miw3ICs0
NDIsNyBAQCBzdGF0aWMgYm9vbCBkaXNwYXRjaENsaXBib2FyZEV2ZW50KFJlZlB0cjxFbGVtZW50
PiYmIHRhcmdldCwgQ2xpcGJvYXJkRXZlbnRLaW5kCiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTEN1
dCgpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3
b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
IWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBD
bGlwYm9hcmRFdmVudEtpbmQ6OkJlZm9yZUN1dCk7CkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBF
ZGl0b3I6OmNhbkRIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dv
cmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFkaXNwYXRjaENs
aXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZl
bnRLaW5kOjpCZWZvcmVDb3B5KTsKIH0KQEAgLTQ4NCwxMyArNDg0LDEzIEBAIGJvb2wgRWRpdG9y
OjpjYW5Db3B5KCkgY29uc3QKIHsKICAgICBpZiAoaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1l
bnQoZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2Vs
ZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3Vw
cHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCkt
Pm1haW5GcmFtZSgpLmxvYWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmco
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNhbkVkaXQoKTsKQEAgLTQ5
OCw3ICs0OTgsNyBAQCBib29sIEVkaXRvcjo6Y2FuUGFzdGUoKSBjb25zdAogCiBib29sIEVkaXRv
cjo6Y2FuRGVsZXRlKCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTI0LDcgKzUyNCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91
bGRTbWFydERlbGV0ZSgpCiB7CiAgICAgaWYgKGJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzU21hcnRE
ZWxldGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0
aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAK
IGJvb2wgRWRpdG9yOjpzbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKQpAQCAtNTQ3LDcgKzU0Nyw3
IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
eworICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewogICAgICAgICBp
ZiAoaXNUeXBpbmdBY3Rpb24pIHsKICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFR5cGluZ0NvbW1h
bmQ6OlNtYXJ0RGVsZXRlIDogMCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKIAogdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFy
dERlbGV0ZShib29sIHNtYXJ0RGVsZXRlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgdHJ1ZSwgZmFsc2Us
IGZhbHNlLCB0cnVlLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKQEAgLTU5NSw3ICs1OTUsNyBA
QCB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnRE
ZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZwogCiB2b2lkIEVkaXRvcjo6Y2xlYXJUZXh0KCkKIHsK
LSAgICBDbGVhclRleHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseSgmbV9mcmFtZSk7CisgICAgQ2xl
YXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkobV9kb2N1bWVudCk7CiB9CiAKIHZvaWQgRWRp
dG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21h
cnRSZXBsYWNlKQpAQCAtNjYxLDcgKzY2MSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRG
cmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUmFuZ2UqIHJlcGxhY2luZ0RPCiAK
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlY3RSZXBsYWNlbWVudCwgU21hcnRS
ZXBsYWNlIHNtYXJ0UmVwbGFjZSwgTWF0Y2hTdHlsZSBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVk
aXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZykKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkg
fHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTY4OSwxOSArNjg5LDE5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKG1faW1h
Z2VFbGVtZW50c1RvTG9hZEJlZm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgc2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBzZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNJ
blBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9u
OjpQYXN0ZSkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0
cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbW1hbmQtPnZpc2libGVTZWxlY3Rpb25Gb3JJ
bnNlcnRlZFRleHQoKSk7Ci0gICAgICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlUGFzdGUsIHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
ICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVu
dCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVBhc3RlLCB0ZXh0LCBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29t
cG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNl
ZFJhbmdlKCkpOwogICAgIH0KIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpICYmIGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvbjo6SW5zZXJ0KSB7CiAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gY29tbWFuZC0+ZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dCgpOwot
ICAgICAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdGV4
dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIHJlcGxhY2VkVGV4
dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgY29tbWFuZC0+Y29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogICAg
IH0KIApAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0
cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxk
RGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtNzQ0LDcgKzc0NCw3IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIGJvb2wgRWRp
dG9yOjp0cnlESFRNTENvcHkoKQogeyAgIAotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuICFkaXNwYXRjaENsaXBib2FyZEV2ZW50KGZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSwgQ2xpcGJvYXJkRXZlbnRLaW5kOjpDb3B5KTsKQEAgLTc1Miw3ICs3
NTIsNyBAQCBib29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKIAogYm9vbCBFZGl0b3I6OnRyeURI
VE1MQ3V0KCkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVj
dGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkN1dCk7CkBAIC03NjAsNyArNzYwLDcgQEAgYm9v
bCBFZGl0b3I6OnRyeURIVE1MQ3V0KCkKIAogYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rp
b24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkubG9hZGVyKCkuc2hvdWxk
U3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKQorICAgIGlmIChtX2RvY3VtZW50LmZyYW1lKCktPm1haW5GcmFtZSgpLmxv
YWRlcigpLnNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmcoKSAmJiBhY3Rpb24gPT0g
RWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdl
LCBhY3Rpb24pOwpAQCAtNzgyLDE3ICs3ODIsMTcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiAK
IGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogc3RhcnROb2RlOwot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBzdGFydE5v
ZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAg
ICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJl
YW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xvc2luZ0Js
b2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQotICAg
ICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgc3RhcnRO
b2RlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODEyLDEyICs4MTIsMTIgQEAgYm9vbCBFZGl0b3I6
Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVu
b3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNDYXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKSkKKyAgICBpZiAobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxU
YWcpKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9
IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSwgdWxUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVu
dFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgdWxUYWcpOwor
ICAgIH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAg
ICAgYXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZyk7CisgICAgICAgIGF1dG8qIGVu
ZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9k
ZSAmJiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3Rh
dGU7CiAgICAgfQpAQCAtODI3LDEyICs4MjcsMTIgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rp
b25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlv
bk9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXQoKSkgewotICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZykpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlbmNsb3NpbmdFbGVt
ZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9s
VGFnKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgfSBlbHNlIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUg
PSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCksIG9sVGFnKTsKLSAgICAgICAgYXV0byogZW5kTm9kZSA9IGVuY2xvc2luZ0VsZW1l
bnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIG9sVGFnKTsK
KyAgICB9IGVsc2UgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAg
ICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcpOworICAgICAgICBhdXRvKiBl
bmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOwogICAgICAgICBpZiAoc3RhcnROb2RlICYmIGVuZE5v
ZGUgJiYgc3RhcnROb2RlID09IGVuZE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0
YXRlOwogICAgIH0KQEAgLTg3Miw3ICs4NzIsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVjcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbCgpCiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
ICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29t
bWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50KCkpOwpAQCAtODgyLDcg
Kzg4Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRl
cmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIFJlZlB0
cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoJmRvY3VtZW50KCkpOwpAQCAtODkyLDcgKzg5
Miw3IEBAIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3Jk
ZXJlZCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
VW5vcmRlcmVkKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
OjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC05
MDIsNyArOTAyLDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxVbm9yZGVyZWQoKQogCiB2b2lkIEVkaXRvcjo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCku
aXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoJmRvY3VtZW50
KCkpOwpAQCAtOTMyLDcgKzkzMiw3IEBAIEVsZW1lbnQqIEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0
RnJvbShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAKIEVsZW1lbnQq
IEVkaXRvcjo6ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7
CisgICAgcmV0dXJuIGZpbmRFdmVudFRhcmdldEZyb20obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJvcGVydGll
cyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTk0NiwxMyArOTQ2LDEzIEBA
IHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKKyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0
aW9uVHlwZSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIGlucHV0VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0Fj
dGlvbihlZGl0aW5nQWN0aW9uKTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2
ZW50RGF0YUZvckVkaXRpbmdTdHlsZUFuZEFjdGlvbigqc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwot
ICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICBpZiAoZWxlbWVudCAmJiAhZGlzcGF0Y2hCZWZvcmVJbnB1dEV2ZW50KCplbGVtZW50
LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50RGF0YSkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
OTY5LDcgKzk2OSw4IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5
bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgY2xpZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5kaWRBcHBseVN0eWxlKCk7CiAgICAgaWYgKGVsZW1lbnQpCiAg
ICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRF
dmVudERhdGEpOwogfQpAQCAtOTg0LDEzICs5ODUsMTMgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW8KICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNlbGVjdGlv
blR5cGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKTsK
KyAgICBhdXRvIHNlbGVjdGlvblR5cGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKTsKICAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGlucHV0
VHlwZU5hbWUgPSBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKTsK
ICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEgPSBpbnB1dEV2ZW50RGF0YUZvckVkaXRpbmdTdHls
ZUFuZEFjdGlvbihzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChlbGVtZW50ICYm
ICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0
RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA1LDcgKzEwMDYsNyBAQCB2b2lk
IEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8
fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNsaWVudCgp
IHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
KQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxl
KHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAgLTEwMTYsNyArMTAxNyw3IEBAIHZvaWQgRWRp
dG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5
LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBjcmVhdGVMaXZlUmFu
Z2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxp
dmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3Zl
KHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsMjUgKzEw
MjgsMjUgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxl
LT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBw
bHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICBhcHBseVBhcmFn
cmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlKSBjb25zdAogewotICAgIGlmIChhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKQorICAgIGlmIChhdXRv
IGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpKQogICAgICAgICByZXR1cm4gZWRpdGluZ1N0eWxlLT5oYXNTdHlsZShw
cm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBUcmlTdGF0ZSBFZGl0
b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJv
cGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZh
bHVlKS0+dHJpU3RhdGVPZlN0eWxlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogfQogCiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVj
dGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rp
b25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksCiAgICAgICAgIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlv
blN0eWxlLT5zdHlsZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMTM2LDcgKzEx
MzcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQm
IGNvbW1hbmQpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoJmNvbW1hbmQpOwogCiAgICAgICAgIGlmICghY29tbWFuZC5wcmVzZXJ2
ZXNUeXBpbmdTdHlsZSgpKQotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5
cGluZ1N0eWxlKCk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKIAogICAgICAgICAvLyBDb21tYW5kIHdpbGwgYmUgZXF1YWwgdG8gbGFzdCBl
ZGl0IGNvbW1hbmQgb25seSBpbiB0aGUgY2FzZSBvZiB0eXBpbmcKICAgICAgICAgaWYgKG1fbGFz
dEVkaXRDb21tYW5kLmdldCgpID09ICZjb21tYW5kKQpAQCAtMTIwMCwxMSArMTIwMSwxMSBAQCB2
b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uJiBjb21w
b3NpdGlvbikKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMobmV3U2VsZWN0aW9uKTsKIH0K
IAotRWRpdG9yOjpFZGl0b3IoRnJhbWUmIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKK0Vk
aXRvcjo6RWRpdG9yKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiAgICAgLCBtX2tpbGxSaW5nKG1ha2VVbmlxdWU8UEFMOjpLaWxsUmluZz4oKSkKLSAgICAs
IG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2VyPihmcmFtZSkpCi0gICAgLCBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1ZTxBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyPihmcmFtZSkpCisgICAgLCBtX3NwZWxsQ2hlY2tlcihtYWtlVW5pcXVlPFNwZWxsQ2hl
Y2tlcj4oZG9jdW1lbnQpKQorICAgICwgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKG1ha2VV
bmlxdWU8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4oZG9jdW1lbnQpKQogICAgICwgbV9lZGl0
b3JVSVVwZGF0ZVRpbWVyKCp0aGlzLCAmRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQp
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAsIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIoKnRo
aXMsICZFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKQpAQCAtMTIyMCw3
ICsxMjIxLDcgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKICAgICBpZiAobV9jb21wb3NpdGlvbk5v
ZGUpIHsKICAgICAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSBudWxscHRyOwogICAgICAgICBpZiAo
RWRpdG9yQ2xpZW50KiBjbGllbnQgPSB0aGlzLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVu
dC0+ZGlzY2FyZGVkQ29tcG9zaXRpb24oJm1fZnJhbWUpOworICAgICAgICAgICAgY2xpZW50LT5k
aXNjYXJkZWRDb21wb3NpdGlvbihtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIH0KICAgICBtX2N1
c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1fY3VzdG9tQ29tcG9zaXRp
b25IaWdobGlnaHRzLmNsZWFyKCk7CkBAIC0xMjI5LDYgKzEyMzAsNyBAQCB2b2lkIEVkaXRvcjo6
Y2xlYXIoKQogICAgIG1fbWFyayA9IHsgfTsKICAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJ
VXBkYXRlID0geyB9OwogICAgIG1fZWRpdG9yVUlVcGRhdGVUaW1lci5zdG9wKCk7CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwog
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0b3Ao
KTsKQEAgLTEyMzgsMTIgKzEyNDAsMTIgQEAgdm9pZCBFZGl0b3I6OmNsZWFyKCkKIAogYm9vbCBF
ZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2
ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQogewotICAgIHJldHVybiBtX2ZyYW1l
LmV2ZW50SGFuZGxlcigpLmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVu
dCwgaW5wdXRUeXBlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCB0cmlnZ2VyaW5nRXZlbnQsIGlucHV0VHlw
ZSk7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0Rm9yQ29uZmlybWVkQ29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIHJldHVybiBtX2ZyYW1lLmV2ZW50SGFuZGxlcigp
LmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24p
OworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmhhbmRsZVRl
eHRJbnB1dEV2ZW50KHRleHQsIDAsIFRleHRFdmVudElucHV0Q29tcG9zaXRpb24pOwogfQogCiBi
b29sIEVkaXRvcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBFdmVu
dCogdHJpZ2dlcmluZ0V2ZW50KQpAQCAtMTMwMiwxMCArMTMwNCw4IEBAIGJvb2wgRWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29s
IHNlbGVjdEluCiAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgY29kZSBzaG91bGQgY29uZGl0aW9u
YWxpemUgcmV2ZWFsaW5nIHNlbGVjdGlvbiBvbiB3aGV0aGVyIHRoZSBpZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzKCkgYml0CiAgICAgICAgICAgICAvLyBpcyBzZXQgZm9yIHRoZSBuZXdseSBmb2N1c2Vk
IGZyYW1lLgogICAgICAgICAgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRSZXZl
YWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBlZGl0ZWRGcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBwYWdlID0gZWRpdGVkRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgp
KQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5yZXZlYWxDdXJyZW50U2VsZWN0aW9uKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzE4LDEwICsxMzE4LDEwIEBAIGJv
b2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxk
SW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpOwogICAgIGJvb2wgYWxpZ25Ub0VkZ2UgPSBpc0VuZE9mRWRpdGFi
bGVPck5vbkVkaXRhYmxlQ29udGVudChjYXJldCk7CiAgICAgYm9vbCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRM
aW5lQnJlYWsoZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21t
YW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwpAQCAtMTMzOCwxMCArMTMz
OCwxMCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAo
IWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3Jl
YXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsK
ICAgICBib29sIGFsaWduVG9FZGdlID0gaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRl
bnQoY2FyZXQpOwogICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGRv
Y3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKQEAgLTE0MDUsNyArMTQwNSw3IEBAIHZvaWQg
RWRpdG9yOjpwZXJmb3JtQ3V0T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwogICAg
IH0KIAotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9s
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgIFBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9h
cmQ6OkNhblNtYXJ0UmVwbGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IG51bGxw
dHI7CkBAIC0xNDI0LDcgKzE0MjQsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5k
UGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUo
KSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgIH0KQEAgLTE0MzMsMTAgKzE0MzMsMTAgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICBpZiAoYWN0aW9uID09IEN1dEFj
dGlvbikgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgICAgICAgICB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBFZGl0QWN0aW9uOjpDdXQpOwogICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQodGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0
KHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtMTQ1Myw3ICsxNDUzLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3Rl
Ym9hcmQpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3Rl
ZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
IHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7
Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZw
YXN0ZWJvYXJkLCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAg
ICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTE0
NzgsNyArMTQ3OCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUXVvdGF0aW9uKCkKICAgICB1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhmYWxzZSk7CiAgICAgUmVzb3VyY2VD
YWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2Fy
ZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAg
ICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQuZ2V0KCksIHsgUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0LCBQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24gfSk7CiAgICAgZWxzZQog
ICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpOwpAQCAt
MTYxNiw3ICsxNjE2LDcgQEAgdm9pZCBFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAobV9pbWFnZUVsZW1lbnRzVG9Mb2FkQmVmb3Jl
UmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzdGFydENvbnRhaW5lciA9IG1ha2VSZWZQdHIobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSk7CisgICAgYXV0byBzdGFydENvbnRhaW5lciA9
IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmNv
bnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODUwLDggKzE4NTAsOCBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlVW5kZXJsaW5lKCkK
IHZvaWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChpblNhbWVQYXJh
Z3JhcGgobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpICYmIAotICAgICAgICBi
YXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgPT0gZGlyZWN0aW9uKQorICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkpCisgICAgICAgICYmIGJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSA9PSBkaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICAKQEAgLTE4
ODEsNyArMTg4MSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVj
dGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlc3VsdCA9IFdyaXRp
bmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTkxNiw3ICsxOTE2LDcgQEAgdm9pZCBFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKCkKICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgxPgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRXaXRob3V0VmFs
aWRhdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IH0pOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbigpCkBAIC0xOTUxLDI4ICsxOTUxLDI4
IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiBjbGFzcyBTZXRDb21wb3NpdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBTZXRDb21wb3NpdGlv
blNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICAgICAs
IG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcihmcmFtZSkKKyAgICBTZXRDb21wb3NpdGlvblNjb3Bl
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1l
bnQpKQorICAgICAgICAsIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcigqZG9jdW1lbnQuZnJhbWUo
KSkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVj
dGlvbkNoYW5nZXModHJ1ZSk7CiAgICAgfQogCiAgICAgflNldENvbXBvc2l0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdl
cyhmYWxzZSk7Ci0gICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2V0SWdub3JlU2Vs
ZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgICAgIGlmIChhdXRvKiBlZGl0b3JDbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGVkaXRvckNsaWVudC0+
ZGlkVXBkYXRlQ29tcG9zaXRpb24oKTsKICAgICB9CiAKLSAgICBSZWY8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yIG1fdHlwaW5nR2VzdHVyZUluZGljYXRvcjsKIH07CiAKIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2Rl
KQogewogICAgIEFTU0VSVChtb2RlID09IENvbmZpcm1Db21wb3NpdGlvbiB8fCBtb2RlID09IENh
bmNlbENvbXBvc2l0aW9uKTsKLSAgICBTZXRDb21wb3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9u
U2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNj
b3BlKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKG1vZGUgPT0gQ2FuY2VsQ29tcG9zaXRpb24pCiAg
ICAgICAgIEFTU0VSVCh0ZXh0ID09IGVtcHR5U3RyaW5nKCkpOwpAQCAtMTk4Myw3ICsxOTgzLDcg
QEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgU2V0Q29t
cG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMuY2xl
YXIoKTsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cy5jbGVhcigpOwogCi0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyBkZWxl
dGUgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gYmVmb3JlIGluc2VydGluZyB0aGUgZmluYWxpemVk
IGNvbXBvc2l0aW9uIHRleHQgaWYgd2UncmUgY29uZmlybWluZyBvdXIgY29tcG9zaXRpb24uCkBA
IC0xOTk5LDEzICsxOTk5LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogCiAgICAgaWYgKG1vZGUgPT0g
Q2FuY2VsQ29tcG9zaXRpb24pIHsKICAgICAgICAgLy8gQW4gb3BlbiB0eXBpbmcgY29tbWFuZCB0
aGF0IGRpc2FncmVlcyBhYm91dCBjdXJyZW50IHNlbGVjdGlvbiB3b3VsZCBjYXVzZSBpc3N1ZXMg
d2l0aCB0eXBpbmcgbGF0ZXIgb24uCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5n
KCZtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcobV9kb2N1bWVu
dCk7CiAgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCBj
b25zdCBWZWN0b3I8Q29tcG9zaXRpb25IaWdobGlnaHQ+JiBoaWdobGlnaHRzLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQogewotICAgIFNldENvbXBvc2l0
aW9uU2NvcGUgc2V0Q29tcG9zaXRpb25TY29wZShtX2ZyYW1lKTsKKyAgICBTZXRDb21wb3NpdGlv
blNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9kb2N1bWVudCk7CiAKICAgICAvLyBVcGRhdGVz
IHN0eWxlcyBiZWZvcmUgc2V0dGluZyBzZWxlY3Rpb24gZm9yIGNvbXBvc2l0aW9uIHRvIHByZXZl
bnQKICAgICAvLyBpbnNlcnRpbmcgdGhlIHByZXZpb3VzIGNvbXBvc2l0aW9uIHRleHQgaW50byB0
ZXh0IG5vZGVzIG9kZGx5LgpAQCAtMjAxNCw3ICsyMDE0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW4KIAogICAgIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IHNlbGVjdGVk
VGV4dCgpOwpAQCAtMjAyMiwxMCArMjAyMiwxMCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgog
ICAgIGlmIChpc1N0YXJ0aW5nVG9SZWNvbXBvc2VFeGlzdGluZ1JhbmdlKSB7CiAgICAgICAgIC8v
IFdlIHBhc3MgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwgaGVyZSB0byBpbmRp
Y2F0ZSB0aGF0IHdlIGFyZSByZW1vdmluZyBjb21wb3NpdGlvbiB0ZXh0IHRoYXQgaGFzIGJlZW4g
ZmluYWxpemVkLgogICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oZG9jdW1l
bnQoKSwgMCwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uRmluYWwpOwotICAgICAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gSWYgZGVs
ZXRpb24gd2FzIHByZXZlbnRlZCwgdGhlbiB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRoZSBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBzbyB0aGF0IHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgbm90IGJlIHJlY29t
cG9zZWQuCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1
cnJlbnRTZWxlY3Rpb24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IGN1cnJlbnRTZWxlY3Rp
b24uZW5kKCksIGN1cnJlbnRTZWxlY3Rpb24uZW5kKCkgfSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwODEsOCArMjA4MSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1lbnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6
U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29tbWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblBlbmRpbmcpOwogCiAgICAgICAgIC8vIEZp
bmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KLSAgICAgICAgUG9zaXRp
b24gYmFzZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJl
YW0oKTsKLSAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5leHRlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgUG9zaXRp
b24gZXh0ZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKTsK
ICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBiYXNlLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IHVuc2lnbmVkIGJhc2VPZmZzZXQgPSBiYXNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAg
ICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRlbnQuZGVwcmVjYXRlZE5vZGUoKTsKQEAgLTIx
MDgsNyArMjEwOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50
T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0
YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50
KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5wdHIoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5w
dHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMjIsNyArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjpp
Z25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFu
Z2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVk
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNl
bGVjdGVkVGV4dCgpOwpAQCAtMjEzNyw3ICsyMTM3LDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3Bl
bGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJs
ZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNh
bGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFy
b3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0g
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRl
eHQoKTsKQEAgLTIxNDksMTQgKzIxNDksMTQgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmco
KQogCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICAvLyBU
aGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8gc2VhcmNoIGluIHR3byBwaGFzZXMgLSBmcm9tIHRoZSBz
ZWxlY3Rpb24gZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGRvYywgYW5kCiAgICAgLy8gdGhlbiB3ZSB3
cmFwIGFuZCBzZWFyY2ggZnJvbSB0aGUgZG9jIHN0YXJ0IHRvIChhcHByb3hpbWF0ZWx5KSB3aGVy
ZSB3ZSBzdGFydGVkLgotICAgIAorCiAgICAgLy8gU3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vs
ZWN0aW9uLCBzZWFyY2ggdG8gZWRnZSBvZiBkb2N1bWVudC4gIFN0YXJ0aW5nIGF0IHRoZSBzZWxl
Y3Rpb24gZW5kIG1ha2VzCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5k
cyB3b3JrLgotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIFJlZjxSYW5nZT4gc3BlbGxpbmdTZWFy
Y2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKIAogICAgIGJvb2wgc3RhcnRl
ZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTIzMDUsOCArMjMwNSw4IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRo
IGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAogICAgICAgICBh
dXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZ3JhbW1hclNlYXJj
aFJhbmdlLCB7IGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLnJhbmdlLmxvY2F0
aW9uLCBncmFtbWFyRGV0YWlsLnJhbmdlLmxlbmd0aCB9KTsKLSAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFs
U2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAg
ICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKQEAgLTIzMTcsOCArMjMxNyw4IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgcmVkIHNxdWlnZ2xl
IGxhdGVyLgogICAgICAgICAKICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UsIHsgbWlzc3BlbGxpbmdPZmZzZXQs
IG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpIH0pOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJF
QU0pKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihtaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CiAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjMzMiw3ICsyMzMyLDcgQEAgU3RyaW5nIEVkaXRv
cjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QK
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgfHwgIWNsaWNrZWRO
b2RlIHx8ICFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGNsaWNrZWROb2RlKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg2LDcgKzIzODYsNyBAQCBTdHJpbmcgRWRpdG9yOjpt
aXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlv
blVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIGF1dG8g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgp
LCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQwMSw3ICsyNDAxLDcgQEAgVmVjdG9y
PFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3
b3JkKSBjb25zdAogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50
KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmlu
ZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAg
dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2Vz
OwogfQogCkBAIC0yNDA5LDcgKzI0MDksNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNz
ZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvbwogewog
ICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHJhbmdlOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxs
aW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2Uo
KSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29y
ZEdyYW51bGFyaXR5KTsKQEAgLTI0NjksNyArMjQ2OSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxl
Y3RpCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCiB7Ci0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1l
bnQobV9kb2N1bWVudCk7CiAKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5MSwxOSArMjU5MSwxOSBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LAogICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHks
IHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRv
Y29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5l
d1NlbGVjdGlvbigqbWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChu
ZXdTZWxlY3Rpb24gIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgewotICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pKQorICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9mcmFtZS5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICBpZiAoIW1f
ZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBt
aXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFy
dFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOworICAgICAgICBtX2RvY3VtZW50LmVk
aXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxl
Y3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7
CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0g
ICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8obV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAgIG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIH0KIAogICAgIGlmICghaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yNjc1LDcgKzI2NzUsNyBAQCBib29sIEVkaXRv
cjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogCiBib29sIEVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAg
IHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gaXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKQpAQCAtMjcyMyw3ICsyNzIzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGUKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7
CisgICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuYXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbDsK
IAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNrIHBh
cmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25zID0g
cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5nT3B0
aW9ucyk7CkBAIC0yNzM4LDcgKzI3MzgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZQogICAg
IH0KIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCBy
ZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0No
ZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VO
b25OdWxsKCksIHJlc3VsdHMpOwogfQogCkBAIC0yNzg0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYQogCiB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBS
ZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAgYXV0byB0
ZXh0Q2hlY2tpbmdPcHRpb25zID0gcmVxdWVzdC5kYXRhKCkuY2hlY2tpbmdUeXBlcygpOwogICAg
IFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgocmVxdWVzdC5jaGVja2luZ1JhbmdlKCks
IHJlcXVlc3QuYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpLCAmcmVxdWVzdC5wYXJhZ3JhcGhS
YW5nZSgpKTsKQEAgLTI4MDgsOSArMjgwOCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFj
ZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAg
ICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVzID0gZmFsc2U7CiAK
ICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZE1hcmtTcGVsbGluZyB8
fCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24pIHsKLSAgICAgICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNh
cmV0U2VsZWN0aW9uKSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBz
byB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKLSAgICAgICAgICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwor
ICAgICAgICAgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgPSBwYXJh
Z3JhcGgub2Zmc2V0VG8oY2FyZXRQb3NpdGlvbikucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAg
ICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgICAg
aWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50
ZXh0KCkubGVuZ3RoKCkgfHwgcGFyYWdyYXBoLnRleHQoKVtzZWxlY3Rpb25PZmZzZXQgLSAxXSA9
PSBuZXdsaW5lQ2hhcmFjdGVyKSkKQEAgLTI4OTIsMTMgKzI4OTIsMTMgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb25Ub1JlcGxhY2UocmFuZ2VUb1JlcGxhY2UsIERPV05TVFJFQU0pOwotICAgICAg
ICAgICAgaWYgKHNlbGVjdGlvblRvUmVwbGFjZSAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQorICAgICAgICAgICAgaWYgKHNl
bGVjdGlvblRvUmVwbGFjZSAhPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5n
ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZTo6TGluaykgewotICAgICAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBy
ZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAo
Y2FuRWRpdFJpY2hseSgpKQpAQCAtMjkwNyw3ICsyOTA3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0
b3I8VGUKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQs
IHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJvb3QsIEFYT2JqZWN0Q2FjaGU6OkFYQXV0b2NvcnJlY3Rp
b25PY2N1cmVkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5MzcsMTMgKzI5MzcsMTMgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgZXh0ZW5kZWRQYXJhZ3JhcGguZXhwYW5k
UmFuZ2VUb05leHRFbmQoKTsKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5n
ZSAmJiBzZWxlY3Rpb25PZmZzZXQgPD0gZXh0ZW5kZWRQYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkg
ewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1
YnJhbmdlKHsgMCwgc2VsZWN0aW9uT2Zmc2V0IH0pOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0p
OworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFu
Z2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNl
bGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rp
b25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBE
aXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJh
Y2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAotICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkubW92
ZVRvKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0zMDIwLDggKzMwMjAsOCBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9u
QQogICAgIC8vIE9mIGNvdXJzZSwgaWYgY3VycmVudCBzZWxlY3Rpb24gaXMgYSByYW5nZSwgd2Ug
cG90ZW50aWFsbHkgd2lsbCBlZGl0IHR3byB3b3JkcyB0aGF0IGZhbGwgb24gdGhlIGJvdW5kYXJp
ZXMgb2YKICAgICAvLyBzZWxlY3Rpb24sIGFuZCByZW1vdmUgd29yZHMgYmV0d2VlbiB0aGUgc2Vs
ZWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgLy8KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmVuZCgpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCk7CiAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAvLyBGaXJzdCB3b3JkIGlzIHRoZSB3b3JkIHRoYXQgZW5kcyBhZnRlciBvciBvbiB0
aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLgpAQCAtMzA5MywxMSArMzA5Myw3IEBAIHZvaWQgRWRpdG9y
OjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
biwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwor
ICAgIGF1dG8gZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTMxMTYsNyArMzExMiw3IEBAIHZvaWQgRWRpdG9y
OjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnbm1lCiAgICAgICAgIHJldHVybjsKIAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUg
cmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKLSAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4
dGVudE9wdGlvbik7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24o
cmV2ZWFsTW9kZSwgYWxpZ25tZW50LCByZXZlYWxFeHRlbnRPcHRpb24pOwogfQogCiB2b2lkIEVk
aXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0
aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uKQpAQCAtMzEyOCw3ICszMTI0LDcgQEAg
dm9pZCBFZGl0b3I6OnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMoYm9vbCBpZ25vcmUsIFJldmVh
bFNlbGVjdGlvbiBzaG91bGRSZXZlYWwKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgc3VwcHJlc3Mgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb25zIGR1
cmluZyBhIGNvbXBvc2l0aW9uIGNoYW5nZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMzg4MzA+IAog
ICAgIGlmICghaWdub3JlKQotICAgICAgICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHsgfSk7CisgICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKICNl
bmRpZgogICAgIGlmICghaWdub3JlICYmIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0aW9uID09
IFJldmVhbFNlbGVjdGlvbjo6WWVzKQogICAgICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBSZXZlYWxF
eHRlbnQpOwpAQCAtMzE1MSw3ICszMTQ3LDcgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQmIHNlbGVjdGkKIHsK
ICAgICBpZiAoIW1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21w
b3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzQsNyArMzE3MCw3IEBA
IHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTk5LDEwICszMTk1LDEwIEBAIHZvaWQgRWRp
dG9yOjp0cmFuc3Bvc2UoKQogICAgIFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSAr
IHRleHQubGVmdCgxKTsKIAogICAgIC8vIFNlbGVjdCB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAg
aWYgKG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0g
ICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKSkKKyAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwogICAgIH0KIAogICAgIC8vIEluc2VydCB0aGUgdHJhbnNwb3NlZCBjaGFyYWN0ZXJzLgpAQCAt
MzI1NCw3ICszMjUwLDcgQEAgdm9pZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0ln
bm9yZWQoKQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgT3B0aW9uU2V0PEZyYW1lU2VsZWN0aW9u
OjpTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
aW9uKG1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1
bWVudCk7CiAKICAgICAvLyBJZiB0aGUgbmV3IHNlbGVjdGlvbiBpcyBvcnBoYW5lZCwgdGhlbiBk
b24ndCB1cGRhdGUgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAobmV3U2VsZWN0aW9uLnN0YXJ0KCku
aXNPcnBoYW4oKSB8fCBuZXdTZWxlY3Rpb24uZW5kKCkuaXNPcnBoYW4oKSkKQEAgLTMyNjQsOSAr
MzI2MCw5IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyB3b3JrIHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xk
IHNlbGVjdGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNl
bGVjdGlvbiBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCiAgICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NzI5MzE1PiBTb21lIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2UgY29u
dGFpbiBSYW5nZXMgZm9yIHNlbGVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkCi0gICAg
Ym9vbCBzZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb25EaWROb3RD
aGFuZ2VET01Qb3NpdGlvbiB8fCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIGJvb2wgc2VsZWN0aW9uRGlkTm90Q2hh
bmdlRE9NUG9zaXRpb24gPSBuZXdTZWxlY3Rpb24gPT0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRpb24gfHwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBvcHRpb25zKTsKIAogICAgIC8vIFNvbWUgZWRpdGluZyBvcGVyYXRpb25zIGNoYW5nZSB0
aGUgc2VsZWN0aW9uIHZpc3VhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGl0cyBwb3NpdGlvbiB3aXRo
aW4gdGhlIERPTS4KICAgICAvLyBGb3IgZXhhbXBsZSB3aGVuIHlvdSBwcmVzcyByZXR1cm4gaW4g
dGhlIGZvbGxvd2luZyAodGhlIGNhcmV0IGlzIG1hcmtlZCBieSBeKToKQEAgLTMyODEsMTMgKzMy
NzcsMTMgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgaWYgKHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uICYmIGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiB9CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7CiAgICAg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3I7Ci0gICAgaWYgKG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3Vu
ZGFyaWVzRW5hYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4
dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRyZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhh
dmlvcik7CiB9CkBAIC0zMjk1LDcgKzMyOTEsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkg
Y29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
ckVtaXRzSW1hZ2VBbHRUZXh0OwotICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZXR0
aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCiAgICAgICAg
IGJlaGF2aW9yIHw9IFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlOwogICAgIHJldHVybiBz
ZWxlY3RlZFRleHQoYmVoYXZpb3IpOwogfQpAQCAtMzMwMyw3ICszMjk5LDcgQEAgU3RyaW5nIEVk
aXRvcjo6c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgY29uc3QKIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKICAg
ICAvLyBXZSByZW1vdmUgJ1wwJyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IHZpc2li
bHkgcmVuZGVyZWQgdG8gdGhlIHVzZXIuCi0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gc3RhcnQgPSBzZWxlY3Rpb24uc3Rh
cnQoKTsKICAgICBhdXRvIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoc3RhcnQuaXNO
dWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFu
KCkpCkBAIC0zMzEzLDcgKzMzMDksNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBSZWY8RG9jdW1lbnQ+IGRvY3VtZW50IHsgdGhpcy0+ZG9jdW1lbnQoKSB9OwpAQCAt
MzMyMSw3ICszMzE3LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTog
V3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0
ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTMzMjksNyArMzMyNSw3IEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNl
aG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07Ci0g
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNl
bGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAg
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVT
ZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKIAog
ICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KQEAgLTMzNDksOCArMzM0NSw4IEBAIHZvaWQgRWRp
dG9yOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoVGV4dFBsYWNlaG9sZGVyRWxlbWVudCYgcGxhY2Vo
b2xkZXIpCiAgICAgcGxhY2Vob2xkZXIucmVtb3ZlKCk7CiAKICAgICAvLyBUbyBtYXRjaCB0aGUg
TGVnYWN5IFdlYktpdCBpbXBsZW1lbnRhdGlvbiwgc2V0IHRoZSB0ZXh0IGluc2VydGlvbiBwb2lu
dCB0byBiZSBiZWZvcmUgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIHVzZSB0byBiZS4KLSAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSAmJiBkb2N1bWVudC0+Zm9j
dXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVsZW1lbnQpCi0gICAgICAgIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0
aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxUX0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0
aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgaWYg
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgJiYgZG9jdW1lbnQt
PmZvY3VzZWRFbGVtZW50KCkgPT0gc2F2ZWRSb290RWRpdGFibGVFbGVtZW50KQorICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uIHsgc2F2
ZWRQb3NpdGlvbkJlZm9yZVBsYWNlaG9sZGVyLCBTRUxfREVGQVVMVF9BRkZJTklUWSB9LCBGcmFt
ZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VDYXJldFdpZHRoKEludFJlY3QmIHJlY3Qp
CkBAIC0zNDAyLDcgKzMzOTgsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2Uo
UmFuZ2UqIHJhbmdlKSBjb25zdAogYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFt
ZSgpICYmIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9s
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5l
d1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2Vs
ZWN0aW5nKTsKQEAgLTM0MTEsMTcgKzM0MDcsMTcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5n
ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYK
IHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIGlmIChzdHlsZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CisgICAg
ICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHls
ZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZTsKLSAgICBpZiAoYXV0byBl
eGlzdGluZ1R5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKQor
ICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpCiAgICAgICAgIHR5cGluZ1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHls
ZS0+Y29weSgpOwogICAgIGVsc2UKICAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZSgpOwotICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxlQXQoc3R5bGUs
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKSk7CisgICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwg
bV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0
aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxv
Y2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
CkBAIC0zNDI5LDcgKzM0MjUsNyBAQCB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgICAgICBB
cHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVk
aXRpbmdBY3Rpb24pLT5hcHBseSgpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUg
YXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0
eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
dFR5cGluZ1N0eWxlKFdURk1vdmUodHlwaW5nU3R5bGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNv
bXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0ODgsMTggKzM0ODQsMTggQEAgdm9pZCBFZGl0b3I6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewot
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHBy
b3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAog
ICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKICAgICBpZiAoIXJl
c3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgRE9XTlNUUkVB
TSkpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oKnJlc3VsdFJhbmdlLCBET1dOU1RSRUFNKSk7CiAKICAgICBpZiAoIShvcHRpb25zLmNv
bnRhaW5zKERvTm90UmV2ZWFsU2VsZWN0aW9uKSkpCi0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkucmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM1OTYsNyArMzU5Miw3
IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRh
cmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGlm
ICgmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSkKICAgICAgICAgICAgIHNl
YXJjaFJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1lSW5SYW5nZShtX2Zy
YW1lLCAqcmFuZ2UpKQorICAgICAgICBlbHNlIGlmICghaXNGcmFtZUluUmFuZ2UoKm1fZG9jdW1l
bnQuZnJhbWUoKSwgKnJhbmdlKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBp
ZiAoIXNlYXJjaFJhbmdlKQpAQCAtMzY2Niw3ICszNjYyLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxG
cmFtZVMKICNlbmRpZgogCiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgICAgIGNsaWVudCgpLT5yZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKICNpZiBFTkFCTEUo
VEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmIChzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkpCkBAIC0zNjg5LDcgKzM2ODUsNyBA
QCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogCiBib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVs
ZXBob25lTnVtYmVycygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhv
bmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5p
c1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0
b3I6OmlzU3VwcG9ydGVkKCk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8U2ltcGxlUmFuZ2U+IHNjYW5G
b3JUZWxlcGhvbmVOdW1iZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKQEAgLTM3MzIsNyAr
MzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygp
CiAKICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CiAKLSAgICBh
dXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcg
Y2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVj
dGVkIHBob25lIG51bWJlcnMuCkBAIC0zNzQ5LDcgKzM3NDUsNyBAQCB2b2lkIEVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoYXV0byogcGFnZSA9IG1f
ZG9jdW1lbnQucGFnZSgpKQogICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
KCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9CiAKQEAgLTM3NzQs
OSArMzc3MCw5IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAg
IGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkgewogICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld0FkamFjZW50V29yZHM7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0ZWRTZW50ZW5jZTsKLSAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5z
ZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2lu
ZykgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOworICAgICAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAg
ICAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
bmV3U3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBuZXdBZGphY2VudFdv
cmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwog
I2Vsc2UKQEAgLTM4MjksNyArMzgyNSw3IEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRp
bWVyRmlyZWQoKQogICAgIGlmICghbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2FzVHJpZ2dlcmVkQnlE
aWN0YXRpb24pCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogCi0gICAgbV9vbGRTZWxlY3Rpb25Gb3JF
ZGl0b3JVSVVwZGF0ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9v
bGRTZWxlY3Rpb25Gb3JFZGl0b3JVSVVwZGF0ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgIG5vdGlmeUNs
aWVudE9mQXR0YWNobWVudFVwZGF0ZXMoKTsKQEAgLTM4NTYsNyArMzg1Miw3IEBAIHN0YXRpYyBO
b2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBub2RlKQogCiBib29sIEVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRG
aXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTM0LDcgKzM5MzAs
NyBAQCBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpIGNvbnN0CiB7Ci0gICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgp
CiAgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQogICAg
ICAgICA6IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CkBA
IC0zOTQ3LDcgKzM5NDMsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogfQog
CkBAIC00MDE0LDcgKzQwMTAsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgRm9udEF0dHJpYnV0ZXMgYXR0cmli
dXRlczsKICAgICBOb2RlKiBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIGF1dG8qIHN0eWxl
ID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKKyAgICBh
dXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgaWYgKG5vZGVUb1JlbW92
ZSkKICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CkBAIC00MDU1LDcgKzQwNTEs
NyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF0dHJpYnV0ZXMudGV4dExp
c3RzID0gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBhdHRyaWJ1dGVzLnRleHRM
aXN0cyA9IGVkaXRhYmxlVGV4dExpc3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBzd2l0Y2ggKHN0
eWxlLT50ZXh0QWxpZ24oKSkgewogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CkBAIC00
MDgxLDcgKzQwNzcsNyBAQCBGb250QXR0cmlidXRlcyBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzQXRT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8g
dHlwaW5nU3R5bGUgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUo
KSk7CisgICAgYXV0byB0eXBpbmdTdHlsZSA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5zZWxlY3Rp
b24oKS50eXBpbmdTdHlsZSgpKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUt
PnN0eWxlKCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QpOwogICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTQx
NjksMTIgKzQxNjUsOCBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBk
YXRlcygpCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogcmVtb3ZlZEF0dGFjaG1lbnRJZGVu
dGlmaWVycykKICAgICAgICAgY2xpZW50KCktPmRpZFJlbW92ZUF0dGFjaG1lbnRXaXRoSWRlbnRp
ZmllcihpZGVudGlmaWVyKTsKIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvciAoYXV0
byYgaWRlbnRpZmllciA6IGluc2VydGVkQXR0YWNobWVudElkZW50aWZpZXJzKSB7Ci0gICAgICAg
IGlmIChhdXRvIGF0dGFjaG1lbnQgPSBkb2N1bWVudC0+YXR0YWNobWVudEZvcklkZW50aWZpZXIo
aWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnQgPSBtX2RvY3VtZW50LmF0
dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgY2xpZW50KCkt
PmRpZEluc2VydEF0dGFjaG1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyLCBhdHRhY2htZW50
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciksIGF0
dGFjaG1lbnQtPmhhc0VuY2xvc2luZ0ltYWdlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQxOTcsNyArNDE4OSw3IEBAIHZvaWQgRWRpdG9y
OjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgT3B0aW9uYWw8dWlu
dDY0X3Q+JiYgZmlsCiAKIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0
Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSB0
cnVlOwogCkBAIC00MjE2LDcgKzQyMDgsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiBib29sIEVk
aXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoJm1fZnJhbWUpOworICAgIHJldHVybiBX
ZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2Vy
KGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCkBAIC00MjMyLDEzICs0MjI0LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmVsdGVybmF0aXZlKGNvbnN0IFN0cmlu
ZyYgYWx0ZXJuYXRpdmVTdHJpbmcKIHZvaWQgRWRpdG9yOjp0b2dnbGVPdmVyd3JpdGVNb2RlRW5h
YmxlZCgpCiB7CiAgICAgbV9vdmVyd3JpdGVNb2RlRW5hYmxlZCA9ICFtX292ZXJ3cml0ZU1vZGVF
bmFibGVkOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29y
KG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQpOwotfQotCi1Eb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVu
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJu
ICptX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTaG91
bGRTaG93QmxvY2tDdXJzb3IobV9vdmVyd3JpdGVNb2RlRW5hYmxlZCk7CiB9CiAKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKQEAgLTQyOTEsOSArNDI3Nyw5
IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBs
ZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAotICAgIGlm
ICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAg
ICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2Rl
VG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5mcmFtZSgpLCBub2RlVG9SZW1vdmUpOyAv
LyBzZXRzIG5vZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRy
OwogICAgICAgICBpZiAoc3R5bGUpIHsKQEAgLTQzMDUsMTIgKzQyOTEsMTIgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8v
IEZJWE1FOiBBZGp1c3RpbmcgdGhlIHN0YXJ0IG1heSBtb3ZlIGl0IHBhc3QgdGhlIGVuZC4gSW4g
dGhhdCBjYXNlIHRoZSBpdGVyYXRvciBiZWxvdyB3aWxsIGdvIG9uIHRvIHRoZSBlbmQgb2YgdGhl
IGRvY3VtZW50LgotICAgIGF1dG8gYWRqdXN0ZWRTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGFk
anVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpKTsKKyAgICBhdXRvIGFkanVzdGVkU3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CiAgICAgaWYgKCFhZGp1c3RlZFN0YXJ0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByYW5nZS0+c3RhcnQgPSAqYWRqdXN0ZWRTdGFydDsK
QEAgLTQzMzksNyArNDMyNSw3IEBAIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBFZGl0b3I6Omlu
c2VydEVkaXRhYmxlSW1hZ2UoKQogCiBib29sIEVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5k
YWxvbmVJbWFnZXMoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAm
JiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCmluZGV4IDIzZjVkZTEzMDQwNDk4ZTU4MGNlMWQxZDQxY2U0NzBkN2RhZTQ5YTMuLjU2ZjVl
ZTNjYWY5ZGUzMGI3NjEyMTIzNDk4YzYwOGRhNjA4ZTdhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1
ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCkBAIC0xMTks
MTMgKzEyMCwxMyBAQCBlbnVtIGNsYXNzIFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbiA6IHVpbnQ4
X3QgewogCiBjbGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UgewogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShGcmFtZSYsIE9wdGlvbmFsPFZp
c2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uPiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGVtcG9yYXJ5U2VsZWN0aW9u
Q2hhbmdlKERvY3VtZW50JiwgT3B0aW9uYWw8VmlzaWJsZVNlbGVjdGlvbj4gPSBXVEY6Om51bGxv
cHQsIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+ID0geyB9KTsKICAgICBXRUJD
T1JFX0VYUE9SVCB+VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCk7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAgUmVmPEZy
YW1lPiBtX2ZyYW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBPcHRp
b25TZXQ8VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiBtX29wdGlvbnM7CiAgICAgYm9vbCBtX3dh
c0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlczsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
MTM3LDcgKzEzOCw3IEBAIHByaXZhdGU6CiBjbGFzcyBJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JT
Y29wZSB7CiBwdWJsaWM6CiAgICAgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUoRnJhbWUm
IGZyYW1lKQotICAgICAgICA6IG1fc2VsZWN0aW9uQ2hhbmdlKGZyYW1lLCBXVEY6Om51bGxvcHQs
IFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcykKKyAgICAg
ICAgOiBtX3NlbGVjdGlvbkNoYW5nZSgqZnJhbWUuZG9jdW1lbnQoKSwgV1RGOjpudWxsb3B0LCBU
ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCiAgICAgewog
ICAgIH0KIApAQCAtMTUwLDcgKzE1MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBFZGl0b3IgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEVkaXRvcihG
cmFtZSYpOworICAgIGV4cGxpY2l0IEVkaXRvcihEb2N1bWVudCYpOwogICAgIH5FZGl0b3IoKTsK
IAogICAgIGVudW0gY2xhc3MgUGFzdGVPcHRpb24gOiB1aW50OF90IHsKQEAgLTI3MSw3ICsyNzIs
NyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgQ29tbWFuZCB7CiAgICAgcHVibGljOgogICAgICAgICBX
RUJDT1JFX0VYUE9SVCBDb21tYW5kKCk7Ci0gICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50
ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRnJhbWUmKTsKKyAgICAgICAgQ29t
bWFuZChjb25zdCBFZGl0b3JJbnRlcm5hbENvbW1hbmQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBE
b2N1bWVudCYpOwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShjb25zdCBT
dHJpbmcmIHBhcmFtZXRlciA9IFN0cmluZygpLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50ID0gbnVs
bHB0cikgY29uc3Q7CiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhlY3V0ZShFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KSBjb25zdDsKQEAgLTI4OCw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBtX2NvbW1hbmQg
eyBudWxscHRyIH07CiAgICAgICAgIEVkaXRvckNvbW1hbmRTb3VyY2UgbV9zb3VyY2U7CisgICAg
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBt
X2ZyYW1lOwogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFuZCBjb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZE5hbWUpOyAvLyBDb21tYW5kIHNvdXJjZSBpcyBDb21tYW5kRnJvbU1l
bnVPcktleUJpbmRpbmcuCkBAIC01NjgsNyArNTcwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlVGV4dFBsYWNlaG9sZGVyKFRleHRQbGFjZWhvbGRlckVsZW1lbnQm
KTsKIAogcHJpdmF0ZToKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdDsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKICAgICBib29s
IGNhbkRlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2VX
aXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkJik7CkBAIC02MTksNyArNjIxLDcgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckN1dChjb25zdCBT
dHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBGcmFtZSYgbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1h
bmQ+IG1fbGFzdEVkaXRDb21tYW5kOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9k
ZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCAxM2YyYmVkNDllNDZiYmExYTlkNjA1ODY2YWQxMzFh
NTU4MDExZDA5Li5lMWZiM2NkMDc5MDNmZWMzYzc4ZTI1OGI3NzI1MTY4ZjQxMTlhMjEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTExMDcsNiArMTEwNyw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTdXBlcnNjcmlwdChGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0
aE1hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7CisgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0aW9uKGZyYW1lLmRvY3VtZW50
KCkpOwogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpOwogICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpA
QCAtMTgzNCwxMiArMTgzNSwxMiBAQCBzdGF0aWMgY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5k
KiBpbnRlcm5hbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIAogRWRpdG9yOjpD
b21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAg
IHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIENvbW1hbmRGcm9t
TWVudU9yS2V5QmluZGluZywgbV9mcmFtZSk7CisgICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxD
b21tYW5kKGNvbW1hbmROYW1lKSwgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBtX2RvY3Vt
ZW50KTsKIH0KIAogRWRpdG9yOjpDb21tYW5kIEVkaXRvcjo6Y29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSkKIHsKLSAgICByZXR1cm4g
Q29tbWFuZChpbnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZnJhbWUpOwor
ICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSksIHNvdXJjZSwg
bV9kb2N1bWVudCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjb21tYW5kSXNTdXBwb3J0ZWRGcm9tTWVu
dU9yS2V5QmluZGluZyhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtMTg1MSwxMiArMTg1
MiwxMyBAQCBFZGl0b3I6OkNvbW1hbmQ6OkNvbW1hbmQoKQogewogfQogCi1FZGl0b3I6OkNvbW1h
bmQ6OkNvbW1hbmQoY29uc3QgRWRpdG9ySW50ZXJuYWxDb21tYW5kKiBjb21tYW5kLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgRnJhbWUmIGZyYW1lKQorRWRpdG9yOjpDb21tYW5kOjpDb21t
YW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNv
dXJjZSBzb3VyY2UsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fY29tbWFuZChjb21tYW5k
KQogICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9mcmFtZShjb21tYW5kID8gJmZyYW1l
IDogbnVsbHB0cikKKyAgICAsIG1fZG9jdW1lbnQoY29tbWFuZCA/ICZkb2N1bWVudCA6IG51bGxw
dHIpCisgICAgLCBtX2ZyYW1lKGNvbW1hbmQgPyBkb2N1bWVudC5mcmFtZSgpIDogbnVsbHB0cikK
IHsKLSAgICBBU1NFUlQoY29tbWFuZCB8fCAhbV9mcmFtZSk7CisgICAgQVNTRVJUKGNvbW1hbmQg
fHwgIW1fZG9jdW1lbnQpOwogfQogCiBib29sIEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25z
dCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29uc3QKQEAgLTE4
NjYsOSArMTg2OCw5IEBAIGJvb2wgRWRpdG9yOjpDb21tYW5kOjpleGVjdXRlKGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyLCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50KSBjCiAgICAgICAgIGlmICghYWxs
b3dFeGVjdXRpb25XaGVuRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgZG9jdW1l
bnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpICE9IGRvY3VtZW50KQorCisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1l
KCkgIT0gbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIG1fY29t
bWFuZC0+ZXhlY3V0ZSgqbV9mcmFtZSwgdHJpZ2dlcmluZ0V2ZW50LCBtX3NvdXJjZSwgcGFyYW1l
dGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggYTBj
MDkwOWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJjNDMzMy4uMTYxZTg4YTM3NGJmNGM0ZDJh
MDQ3MWY0YzBkODViOTRjZDNkNDAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5LDEzIEBAIEludFJlY3QgRHJhZ0NhcmV0Q29udHJv
bGxlcjo6ZWRpdGFibGVFbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpIGNvbnN0CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURp
cmVjdGlvbmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgcmV0dXJuICFmcmFtZSB8fCBmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDb25z
aWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZWRpdG9y
KCkuYmVoYXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKIH0K
IAotRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1f
ZnJhbWUoZnJhbWUpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1feFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAg
ICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhU
X0NBUkVUKQpAQCAtMTU2LDcgKzE1Niw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlv
bihGcmFtZSogZnJhbWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAs
IG1fY2FyZXRQYWludCh0cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFs
c2UpCi0gICAgLCBtX2ZvY3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1f
Zm9jdXNlZChkb2N1bWVudC5mcmFtZSgpICYmIGRvY3VtZW50LnBhZ2UoKSAmJiBkb2N1bWVudC5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LmZyYW1l
KCkpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVuZGlu
Z1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9s
bFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0xNjUsMTQgKzE2NSwyNCBAQCBGcmFt
ZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9jYXJldEJs
aW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNl
bGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25h
bCh0cnVlKTsKKworICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2
ZSgpOworICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9t
Tm9uZSgpOworI2lmIFVTRShVSUtJVF9FRElUSU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChi
bGlua3MgfCBkb2VzIG5vdCBibGluaykKKyAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9j
dXNlZCk7CisjZWxzZQorICAgIHNldENhcmV0VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8g
VmlzaWJsZSA6IEhpZGRlbik7CisjZW5kaWYKIH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxl
bWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
LSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNl
bGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJp
Z2dlcmVkIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0yODQs
NyArMjk0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlm
ZmVyZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3Rt
ZW50TW9kZSBlbmRwb2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbiA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9u
YWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBuZXdT
ZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNob3Vs
ZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IG5ld1NlbGVjdGlv
bi5pc0RpcmVjdGlvbmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9IG1fb3JpZ2lu
YWxCYXNlLmlzTm90TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rpb24udmlzaWJs
ZUJhc2UoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBAIC0zMjIsMTAg
KzMzMiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGJvb2wgc2hvdWxkQ2xlYXJU
eXBpbmdTdHlsZSA9IG9wdGlvbnMuY29udGFpbnMoQ2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvblBvc3NpYmx5V2l0aG91
dERpcmVjdGlvbjsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24o
bV9mcmFtZSkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1f
ZG9jdW1lbnQpKQogICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsK
IAotICAgIGlmICghbV9mcmFtZSkgeworICAgIGlmICghbV9kb2N1bWVudC5mcmFtZSgpKSB7CiAg
ICAgICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMzM0LDcgKzM0NCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
Ly8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5m
aW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdT
ZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4g
bmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAg
ICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9u
RG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKG5ld1Nl
bGVjdGlvbkZyYW1lICE9IG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVu
dCAhPSAmbV9kb2N1bWVudCkgewogICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8v
IEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMg
RnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNl
bGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKQEAgLTM0OSw3ICszNTksNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNv
bnN0IFZpc2libGVTZWxlY3RpbwogICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKIAog
ICAgIGlmIChjbG9zZVR5cGluZykKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmco
bV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQp
OwogCiAgICAgaWYgKHNob3VsZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5n
U3R5bGUoKTsKQEAgLTM1Nyw3ICszNjcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBk
aWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlm
IChkaWRNdXRhdGVTZWxlY3Rpb24pCi0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlv
bldpbGxDaGFuZ2UoKTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zZWxlY3Rpb25XaWxs
Q2hhbmdlKCk7CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzcxLDM1
ICszODEsMzEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVk
c1VwZGF0ZSgpOwogCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25z
ICYgRG9Ob3RTZXRGb2N1cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRG
b2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICAgICAgc2V0
Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBi
ZSBuZWVkZWQuCi0gICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVu
dCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5mb2N1c2Vk
RWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC51
cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4
IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCiAgICAgLy8gSXQg
d2lsbCBiZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlm
IG5lY2Vzc2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC5l
ZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7
CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlvbi1hcGkvI3NlbGVjdGlvbmNo
YW5nZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qgc3BlY2lmeSB3aGljaCB0YXNr
IHNvdXJjZSB0byB1c2UuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cXVldWVUYXNrVG9EaXNw
YXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVu
dDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9jdW1lbnQucXVldWVUYXNrVG9EaXNwYXRj
aEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQogewotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFt
ZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFz
ZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywg
YWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJh
bWUpCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6
OlJldmVhbFVwVG9NYWluRnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVj
dGlvbikKQEAgLTQxMSwyNyArNDE3LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAg
bV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9u
VXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxj
KCkpCisgICAgaWYgKG1fZG9jdW1lbnQuaGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmIChm
cmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQp
OwogCiAgICAgaWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNsaWVudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0
byogY2xpZW50ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNs
aWVudC0+ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZyYW1l
JiBmcmFtZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBm
cmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICNl
bHNlCi0gICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRv
Y3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyArNDQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBSZXZl
YWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJldmVh
bE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0
aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC5y
ZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7
CiB9CiAKQEAgLTQ1Nyw3ICs0NjMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRS
ZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludAogICAgIGlm
IChtX3NlbGVjdGlvblJldmVhbE1vZGUgIT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZl
YWwpIHsKICAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWdubWVudDsKIAotICAgICAgICBpZiAo
bV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rp
b25Jc1JldmVhbGVkKCkpCisgICAgICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9y
KCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxlZCgpKQogICAgICAgICAg
ICAgYWxpZ25tZW50ID0gbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1Nl
bGVjdGlvbiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFs
aWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rp
b24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvRWRnZUlmTmVlZGVkOwpAQCAtNDcxLDcgKzQ3Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dCYgaW50CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0
aW9uKCkKIHsKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIG1fZnJhbWUtPmVkaXRvcigpLnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCk7CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zY2FuU2VsZWN0aW9u
Rm9yVGVsZXBob25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MDksNyBAQCBW
aXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBp
c0dldFN0YXJ0KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUg
c2FtZSBub2RlcyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0byB3aGlj
aCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBj
aGFuZ2VkCiAgICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAgaWYgKG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRT
ZWxlY3Rpb25Gcm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRFbmRwb2lu
dCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0
aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogCiAgICAgcmV0
dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2VsZWN0aW9u
LnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MjksNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVT
ZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRp
bwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0
V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0gICAgaWYgKG1fZnJhbWUgJiYgbV9m
cmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KSkgeworICAgIGlmIChtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNw
YWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFj
ZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25lCiAgICAgICAgIC8vIHdvcmQgZnVy
dGhlciBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIEdpdmVuIHRoZQogICAgICAgICAvLyBz
ZW1hbnRpY3Mgb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSB0aGlzIHdpbGwgcHV0IHVzIGF0IHRo
ZQpAQCAtODU1LDcgKzg2MSw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBiCiAgICAgICAgICAg
ICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpLnJpZ2h0KHRydWUsIHJlYWNoZWRCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAgICAgIGJvb2wgc2tpcHNTcGFjZVdo
ZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5z
aG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNl
V2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVu
dFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsK
ICAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1Nw
YWNlV2hlbk1vdmluZ1JpZ2h0KTsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEw
NzYsNyArMTA4Miw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92
aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpLmxlZnQodHJ1ZSwgcmVhY2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmlu
Z1JpZ2h0ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNr
aXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92
aW5nUmlnaHQgPSBtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNl
V2hlbk1vdmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAg
ICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5N
b3ZpbmdSaWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMzE3LDcgKzEz
MjMsNyBAQCBzdGF0aWMgQVhUZXh0U2VsZWN0aW9uIHRleHRTZWxlY3Rpb25XaXRoRGlyZWN0aW9u
QW5kR3JhbnVsYXJpdHkoU2VsZWN0aW9uRGlyZWN0aQogYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7
CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCkgewotICAgICAgICBGcmFt
ZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uOworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0
cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQpOwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0
aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rp
b24ubW9kaWZ5KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBOb3RVc2VyVHJpZ2dlcmVk
KTsKIApAQCAtMTM2Miw3ICsxMzY4LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVB
bHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgp
ICYmIHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBtX2ZyYW1lICYmIEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICBpZiAocmVhY2hlZEJvdW5kYXJ5
ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkICYmIEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgbm90aWZ5QWNjZXNz
aWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSh7IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlv
bkJvdW5kYXJ5LCB0ZXh0U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0x
MzcwLDEyICsxMzc2LDEzIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlv
biBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNTcGF0aWFs
TmF2aWdhdGlvbkVuYWJsZWQobV9mcmFtZSkpCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKG1fZG9jdW1lbnQuZnJhbWUoKSkpIHsKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBh
bHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRp
b24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgaWYgKG1fZnJhbWUg
JiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBpZiAo
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2Jq
ZWN0Q2FjaGUoKSkKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkgeworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldFRleHRTZWxlY3Rpb25J
bnRlbnQodGV4dFNlbGVjdGlvbkludGVudChhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSkp
OwogICAgIH0KIApAQCAtMTM4NCw3ICsxMzkxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgK
ICAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkgYmVjYXVz
ZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBwb3NpdGlv
biB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uIHNl
dC4KICAgICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hv
dWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0
ZXJhdGlvbkV4dGVuZCk7CisgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRl
cmF0aW9uRXh0ZW5kKTsKIAogICAgIHN3aXRjaCAoYWx0ZXIpIHsKICAgICBjYXNlIEFsdGVyYXRp
b25Nb3ZlOgpAQCAtMTM5NCw3ICsxNDAxLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAog
ICAgICAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKQogICAgICAgICAgICAgJiYgKGdyYW51
bGFyaXR5ID09IFdvcmRHcmFudWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFu
dWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBMaW5lR3JhbnVsYXJpdHkpCi0gICAgICAgICAgICAm
JiBtX2ZyYW1lICYmICFtX2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEV4dGVuZFNl
bGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkpIHsKKyAgICAgICAgICAgICYmICFtX2Rv
Y3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkRXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JM
aW5lQWNyb3NzQ2FyZXQoKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IHRoZSBzZWxlY3Rp
b24gZ28gYWNyb3NzIHRoZSBiYXNlIHBvc2l0aW9uIGRpcmVjdGx5LiBOZWVkZWQgdG8gbWF0Y2gg
bWFjCiAgICAgICAgICAgICAvLyBiZWhhdmlvciB3aGVuLCBmb3IgaW5zdGFuY2UsIHdvcmQtc2Vs
ZWN0aW5nIGJhY2t3YXJkcyBzdGFydGluZyB3aXRoIHRoZSBjYXJldCBpbgogICAgICAgICAgICAg
Ly8gdGhlIG1pZGRsZSBvZiBhIHdvcmQgYW5kIHRoZW4gd29yZC1zZWxlY3RpbmcgZm9yd2FyZCwg
bGVhdmluZyB0aGUgY2FyZXQgaW4gdGhlCkBAIC0xNDA3LDcgKzE0MTQsNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFRleAogCiAgICAgICAgIC8vIFN0YW5kYXJkIE1hYyBiZWhhdmlvciB3aGVuIGV4
dGVuZGluZyB0byBhIGJvdW5kYXJ5IGlzIGdyb3cgdGhlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBs
ZWF2aW5nIHRoZQogICAgICAgICAvLyBiYXNlIGluIHBsYWNlIGFuZCBtb3ZpbmcgdGhlIGV4dGVu
dC4gTWF0Y2hlcyBOU1RleHRWaWV3LgotICAgICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUt
PmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRp
bmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdy
YW51bGFyaXR5KSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCku
c2hvdWxkQWx3YXlzR3Jvd1NlbGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpIHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAg
ICAgIHNldEV4dGVudChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jaygpOwpAQCAtMTQ0Niw3ICsxNDUzLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0
aWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNl
clRyaWdnZXJlZCkgewotICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9u
OworICAgICAgICBGcmFtZVNlbGVjdGlvbiB0cmlhbEZyYW1lU2VsZWN0aW9uKG1fZG9jdW1lbnQp
OwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7
CiAgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyLCB2ZXJ0aWNhbERpc3Rh
bmNlLCBkaXJlY3Rpb24sIE5vdFVzZXJUcmlnZ2VyZWQpOwogCkBAIC0xNTE3LDcgKzE1MjQsNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIHVuc2lnbmVk
IHZlcnRpY2FsRGlzdGFuY2UsIFZlcnRpYwogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJU
cmlnZ2VyZWQpCiAgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsK
IAotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7Cisg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25h
bFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU2Nyw3ICsxNTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Y2xlYXIoKQogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCkpOwogfQog
Ci12b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQordm9pZCBGcmFt
ZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiB7CiAgICAgbV9ncmFudWxhcml0
eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwogCkBAIC0xNTc1LDcgKzE1ODIsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogICAgIG1fY2FyZXRCbGlua1Rp
bWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmll
dygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAg
c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCks
IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY1NSw5ICsxNjYyLDcgQEAgc3RhdGljIGJv
b2wgaXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikK
IAogSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNp
ZGVGaXhlZCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwor
ICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKG1fZG9jdW1lbnQpOwog
ICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAgICAg
Kmluc2lkZUZpeGVkID0gbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjc1LDEwICsx
NjgwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICBp
ZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lVmlldyog
diA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2Rv
Y3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTY5MCw3ICsxNjkyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2ZyYW1lLT5kb2N1bWVu
dCgpLCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KCZt
X2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0g
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
MTcxNSw3ICsxNzE3LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0
KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkp
IHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpKSB7
CiAgICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0g
bV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAm
JiBtX3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYg
KHNob3VsZFJlcGFpbnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50
RWRpdGFibGUpKSB7CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKQEAgLTE4
OTMsMTMgKzE4OTUsOSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9u
IGxpa2Ugbm8gc2VsZWN0aW9uLgogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgYXV0byogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwot
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKLSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0
UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQuaGl0VGVzdChIaXRUZXN0UmVxdWVz
dCgpLCByZXN1bHQpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsK
ICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTI2LDEwICsxOTI0LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAg
ICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCkucGFy
ZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dHJlZSgpLnBh
cmVudCgpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5NDIsNyArMTk0MCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNl
bGVjdGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRvIHRoZSA8aWZyYW1lPiBv
ciA8ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZnJhbWUu
Ci0gICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7Cisg
ICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKTsKICAg
ICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRhaW5lck5vZGUq
IG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFyZW50Tm9kZSgpOwpAQCAtMTk2
OCw5ICsxOTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAg
ICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgp
OwogICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4oZm9jdXNlZEVsZW1lbnQpKSB7CiAgICAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3RFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVj
dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LmNh
blNlbGVjdEFsbCgpKSB7CkBAIC0yMDAwLDggKzE5OTYsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3RBbGwoKQogICAgICAgICBpZiAocm9vdCkKICAgICAgICAgICAgIHNlbGVjdFN0YXJ0
VGFyZ2V0ID0gcm9vdC0+c2hhZG93SG9zdCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RT
dGFydFRhcmdldCA9IGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOworICAgICAgICAgICAgcm9v
dCA9IG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgICAgICBzZWxlY3RTdGFy
dFRhcmdldCA9IG1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIXJvb3QpCkBAIC0yMDQxLDggKzIwMzcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9u
OjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91
bGRDbAogICAgICAgICBzZWxlY3Rpb25PcHRpb25zLmFkZChDbG9zZVR5cGluZyk7CiAKICAgICBp
ZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKSB7Ci0gICAgICAgIEZyYW1lU2VsZWN0
aW9uIHRyaWFsRnJhbWVTZWxlY3Rpb247Ci0KKyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxG
cmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBzZWxlY3Rpb25PcHRpb25zKTsKIAogICAgICAgICBp
ZiAoIXNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbEZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigp
KSkKQEAgLTIwNTgsOSArMjA1Myw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNob3VsZENsCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotICAgIFJlZjxEb2N1bWVu
dD4gZG9jdW1lbnQoKm1fZnJhbWUtPmRvY3VtZW50KCkpOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX2RvY3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
IAogI2lmIFVTRShVSUtJVF9FRElUSU5HKQogICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3Mg
fCBkb2VzIG5vdCBibGluaykKQEAgLTIwNzEsNyArMjA2NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBSZW5kZXJP
YmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAgIC8vIFJlbmRlck9iamVj
dDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2
ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFp
bnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkp
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFy
cyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDc2LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFN0
eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8vIFJlbmRlclRoZW1l
Ojppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3ZSBoYXZlIHRvCiAg
ICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVuZGVkIG9uIHRob3Nl
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkp
IHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQo
KSkgewogICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAg
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAg
ICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCkBAIC0yMTA3LDEzICsyMTAxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3Vz
ZWQoYm9vbCBmbGFnKQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUo
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1f
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4g
bV9mb2N1c2VkICYmIG1fZG9jdW1lbnQucGFnZSgpICYmIG1fZG9jdW1lbnQucGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1p
bmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKEZy
YW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5
cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBmcmFtZS0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigpLmxhc3RFZGl0Q29tbWFu
ZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2VuZGlmCiAKQEAgLTIxMzIs
MTIgKzIxMjYsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAg
ICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgJiYgbV9z
ZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUobV9zZWxlY3Rpb24udmlz
aWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1
dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRp
bmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNo
b3VsZEJsaW5rID0gIXBhaW50QmxvY2tDdXJzb3IgJiYgY2FyZXRJc1Zpc2libGUoKSAmJiBpc0Nh
cmV0KCkgJiYgKG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGlu
ayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9mcmFtZSkpCisgICAg
aWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0
b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZCgmbV9kb2N1bWVudCkpCiAgICAgICAgIG1fY2Fy
ZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5raW5nIHdpdGggYSBibGFj
ayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpAQCAtMjE1Myw3ICsyMTQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7
CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpOwogICAgIGlm
ICghdmlldykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjAyLDggKzIxOTYsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxp
dHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dl
ciBhIHN5bmNocm9ub3VzIGxheW91dCBoZXJlLgotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICB1
cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFtZSk7CisgICAgdXBk
YXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUobV9kb2N1bWVudCk7CiAKICNpZiBF
TkFCTEUoVEVYVF9DQVJFVCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsy
MjQwLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQo
KQogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAg
ICAgICBpZiAoRWxlbWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChtX3NlbGVj
dGlvbi5iYXNlKCkpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZnJhbWUpOworICAgICAgICAgICAg
bV9kb2N1bWVudC5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFu
Y2hvciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMjYyLDE2ICsyMjU1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNl
dEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNG
cmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8g
bWFrZSB0aGlzCiAgICAgICAgICAgICAvLyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlz
IGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQt
PmlzTW91c2VGb2N1c2FibGUoKSAmJiAhaXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVs
ZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZG9jdW1l
bnQuZnJhbWUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAg
ICAgICAgIH0KLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQo
bnVsbHB0cik7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7
CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUp
OworICAgICAgICBtX2RvY3VtZW50LnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQobnVsbHB0ciwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIHZvaWQgRHJhZ0Nh
cmV0Q29udHJvbGxlcjo6cGFpbnREcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0NvbnRl
eHQmIHAsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYg
Y2xpcFJlY3QpIGNvbnN0CkBAIC0yMjk3LDE5ICsyMjkwLDE2IEBAIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBGcmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIGJv
b2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxl
Q29udGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7Ci0KLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5
b3V0T3JTdHlsZSgqbV9mcmFtZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0
eWxlKG1fZG9jdW1lbnQpOworICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LnJlbmRl
clZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKQEAgLTIzMjUsMTQgKzIzMTUsMTQgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnQKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0UmVjdEhl
aWdodCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAg
IGlmICghbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9m
cmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9k
b2N1bWVudC52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdC
b3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWln
aHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAg
YXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50
UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY0
LDcgKzIzNTQsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50
KiBzdGFydCkKIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkg
Y29uc3QKIHsKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJz
dCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVu
dCogc3RhcnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVs
ZW1lbnQqIHN0YXJ0ID0gbV9kb2N1bWVudC5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3Rh
cnQpCiAgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAg
aWYgKCFzdGFydCkKQEAgLTI0MDcsOCArMjM5Nyw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJl
dmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9s
CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRl
Rml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRh
dGVBcHBlYXJhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3Rp
ZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAg
ICAgICAgIGlmIChtX2RvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlT
Y3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogI2Vsc2UKQEAgLTI0MjYsMjcgKzI0MTYsMjYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9k
eSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50
aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1
bWVudCkuCiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJh
bWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoIWlzTm9uZSgp
IHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LnNldHRpbmdzKCkuY2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC5oYXNFZGl0YWJs
ZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAg
aWYgKCFkb2N1bWVudCB8fCAhKGlzTm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8
ICFkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmICghKGlzTm9uZSgpIHx8IGlz
U3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50Lmhhc0VkaXRhYmxlU3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogYm9keSA9IGRvY3VtZW50
LT5ib2R5KCkpCisgICAgaWYgKGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LmJvZHkoKSkKICAgICAg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNv
bnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5mcmFtZSgp
LT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgp
CkBAIC0yNDY0LDcgKzI0NTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93
QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRT
aG93QmxvY2tDdXJzb3IgPSBzaG91bGRTaG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBt
X2RvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAg
dXBkYXRlQXBwZWFyYW5jZSgpOwogfQpAQCAtMjQ4MiwxMyArMjQ3MSwxMyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCkKIAog
dm9pZCBGcmFtZVNlbGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQoKQogewotICAg
IFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKm1fZnJhbWUpOworICAgIFJlZjxEb2N1bWVudD4g
cHJvdGVjdG9yKG1fZG9jdW1lbnQpOwogICAgIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9y
U3R5bGVDaGFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5j
ZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNsaWVudCA9IG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpKQorICAgIGlmIChhdXRvKiBjbGllbnQgPSBtX2RvY3Vt
ZW50LmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRvclN0YXRl
QWZ0ZXJMYXlvdXRJZkVkaXRhYmlsaXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRSZWN0TmVl
ZHNVcGRhdGUoKTsKQEAgLTI1MzksMTQgKzI1MjgsMTQgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEZyYW1lU2VsZWN0aW9uOjplbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBj
b24KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKCkKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbih3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKSk7ICAgICAgICAK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbih3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKG1fZG9jdW1lbnQsIG1fc2VsZWN0aW9uKSk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc0NhcmV0T3JSYW5nZSgpKQogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIH0K
IAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKQogewotICAgIHJldHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJl
dHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fZG9jdW1lbnQsIG1f
c2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkK
QEAgLTI1NTcsNyArMjU0Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlv
blRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogICAgIFZpc2libGVQb3Np
dGlvbiBzMShtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZTEobV9z
ZWxlY3Rpb24uZW5kKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBleHBhbmRlZCh3b3JkU2Vs
ZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKSk7CisgICAgVmlzaWJs
ZVNlbGVjdGlvbiBleHBhbmRlZCh3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KG1fZG9jdW1lbnQsIG1fc2VsZWN0aW9uKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHMyKGV4cGFu
ZGVkLnN0YXJ0KCkpOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIHN0YXJ0IHRvIGJlY29tZSBn
cmVhdGVyIGFmdGVyIHRoZSBleHBhbnNpb24uCkBAIC0yNzA4LDcgKzI2OTcsNyBAQCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2Vs
ZWN0aW9uKGludCBhbW91bgogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxl
bWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVh
dGVSYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2RvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KG5vZGUsIGxvY2F0aW9uKTsK
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoKTsKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdl
LCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CkBAIC0yNzE2LDEzICsyNzA1LDEzIEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgsIE5vCiAgICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyBGaXJlU2VsZWN0
RXZlbnQgfSk7CiB9CiAKLVZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxlY3Rpb246OndvcmRTZWxl
Y3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQorVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOwogCiAgICAgQVNTRVJUKHNlbGVjdGlvbi5p
c0NhcmV0T3JSYW5nZSgpKTsKLSAgICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKKyAg
ICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihkb2N1bWVudCk7CiAgICAgZnJhbWVTZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CiAKICAgICBQb3NpdGlvbiBzdGFydFBvc0Jl
Zm9yZUV4cGFuc2lvbihzZWxlY3Rpb24uc3RhcnQoKSk7CkBAIC0yODcxLDcgKzI4NjAsNyBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJl
bnRTZWxlY3Rpb24oRUFsdGVyYXRpbwogICAgIGlmICghYW1vdW50KQogICAgICAgICByZXR1cm4g
bV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAotICAgIEZyYW1lU2VsZWN0aW9uIGZy
YW1lU2VsZWN0aW9uOworICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uKG1fZG9jdW1l
bnQpOwogICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyBEaXJlY3Rpb25Gb3J3
YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoYW1v
dW50KTsgaSsrKQpAQCAtMjg4OSw3ICsyODc4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcykKICAgICBpZiAobV9jYXJldEJsaW5rcyA9PSBj
YXJldEJsaW5rcykKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOyAKKyAgICBtX2RvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogICAgIGlmIChtX2NhcmV0UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50ID0gZmFs
c2U7IAogICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGFiMjg5MDUxMTlkNTFkNTQzYjUzMGU3MjI4ZmQxOTY0
ZWFhMDkzYjIuLmQzZjRhNTExZDJmNmZhZjFjNjdkMzA4MGYyNDBiMDBjMzE2OTEyNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAgIFdFQkNP
UkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKERvY3VtZW50Jik7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQo
KSBjb25zdDsKICAgICAgCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgU2hvdWxkQ2xv
c2VUeXBpbmcsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFy
KCk7Ci0gICAgdm9pZCBwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICB2b2lkIHdpbGxCZVJl
bW92ZWRGcm9tRnJhbWUoKTsKIAogICAgIHZvaWQgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0
KCk7CiAgICAgdm9pZCBzY2hlZHVsZUFwcGVhcmFuY2VVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKCk7
CkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0
QmxpbmtzID0gdHJ1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYXJldENvbG9yKGNv
bnN0IENvbG9yJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpc2libGVTZWxlY3Rpb24g
d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpc2libGVTZWxlY3Rpb24gd29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihEb2N1bWVudCYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKTsKICAgICBib29sIGlzVXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRVcGRhdGVB
cHBlYXJhbmNlRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV91cGRhdGVBcHBlYXJhbmNlRW5hYmxl
ZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHN1cHByZXNzU2Nyb2xsaW5nKCkgeyArK21fc2Nyb2xs
aW5nU3VwcHJlc3NDb3VudDsgfQpAQCAtMzM2LDcgKzMzNiw3IEBAIHByaXZhdGU6CiAgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVy
YXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBGcmFtZSogbV9mcmFtZTsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCmluZGV4IDczMDc2ZGUxYjc5YjlmMDlmZjlm
MzEyN2E4M2U1YjA4M2Q1Nzg1OTMuLjY2MDFkYjhmY2I0ZTM3ZjRhZGIyMGFmMTc4MmUyMjEyNGNm
MTNiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcApAQCAtNTAsNyArNTAsNyBAQCBJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVk
CiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgYm9v
bCBwYXNzd29yZEVjaG9FbmFibGVkID0gZnJhbWUoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0Vu
YWJsZWQoKTsKKyAgICBib29sIHBhc3N3b3JkRWNob0VuYWJsZWQgPSBkb2N1bWVudCgpLnNldHRp
bmdzKCkucGFzc3dvcmRFY2hvRW5hYmxlZCgpOwogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVk
KQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVh
a0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcAppbmRleCAxNzZkOGYwODlhZjUwMjY2ZGQ4OThmYTk3NzRmOTc0MWRiMzk5ZGZiLi4y
NzM1NWU2NmZiODlkNTU0MmNkNmE5YmVhODhlMmMyNjJmNTA3ODNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTE0Miw3ICsx
NDIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8g
SGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogCi0gICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGlu
Z1N0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAKICAgICBpZiAodHlwaW5nU3R5bGUgJiYg
IXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIHR5cGluZyBz
dHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywgc28gdGhhdCBpZiB0aGUgc2VsZWN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGU5
MTMxZjZmYmYzMmQ4NjMwNTBhYTFlZjIwOGU1YjRmNDQwNDliNmEuLjFiYjBkMDUyODcwYzQ1MTM2
OTk0NzE5ZDBlYzA2NWIzZWQwOTZkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gTm9TZWxlY3Rp
b24uIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSByZWFsIGVuZGluZ1NlbGVj
dGlvbiwgc28gYmFpbCBvdXQuCiAgICAgICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGZyYW1lKCkuZWRpdG9yKCku
aXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKSB7CisgICAgfSBlbHNlIGlmIChkb2N1bWVudCgpLmVk
aXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgewogICAgICAgICBpZiAocGVyZm9ybU92
ZXJ3cml0ZShtX3RleHQsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJl
IGlzIGEgdHlwaW5nIHN0eWxlLgotICAgIGlmIChSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdT
dHlsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgeworICAgIGlmIChSZWZQ
dHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCkuc2VsZWN0aW9uKCkudHlw
aW5nU3R5bGUoKSkgewogICAgICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRQ
b3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24pOwogICAgICAg
ICBpZiAoIXR5cGluZ1N0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhcHBseVN0eWxlKHR5
cGluZ1N0eWxlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCA1NDYwYjc1Y2FiZDIzZGQ1NWFkOTM5
ZDAxNGI1ODI5MmVkOWQ0ZWEyLi42OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQxM2Yw
NTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VX
aXRoVGV4dENvbW1hbmQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2VsZWN0aW9uKCku
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghY2hhcmFjdGVyQ291bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAxYzgx
OTg0MGYwNTQzOWQyZWQyZjFkOGM1MmFjMjdmZTgxMmJlZjE4Li43Mzg2M2JlZmMzYjg5ODI3MzJm
NTYwYTFkMGEzNTk1NjI5MTIzZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTE4MSw3ICsxMTgxLDcgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gRklYTUU6IENh
biB0aGlzIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQ/
ICBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKICAgICAvLyBhbnkgd29yayBwZXJmb3JtZWQgYWZ0
ZXIgdGhpcyB0aGF0IHF1ZXJpZXMgb3IgdXNlcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIGZyYW1l
KCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgIGRvY3VtZW50KCkuc2VsZWN0
aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgZGVz
dGluYXRpb24gdG8gZW5kIHVwIGluc2lkZSBub2RlcyB0aGF0IHdlcmVuJ3Qgc2VsZWN0ZWQuICBU
byBhdm9pZCB0aGF0LCB3ZSBtb3ZlIHRoZQogICAgIC8vIHBvc2l0aW9uIGZvcndhcmQgd2l0aG91
dCBjaGFuZ2luZyB0aGUgdmlzaWJsZSBwb3NpdGlvbiBzbyB3ZSdyZSBzdGlsbCBhdCB0aGUgc2Ft
ZSB2aXNpYmxlIGxvY2F0aW9uLCBidXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGMwNjVjMDJjYTEzZmQyNTE3MGQ2YjIxYjFmODk4ZTli
YTc5YmU2MzguLjBkZDI2YTgxZTkwYjY3ODc0YzMzNWNlZjEyMTA3ZTIxNGJkZmQ4NmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDAs
NyArNDAsNyBAQCBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aQogCiB2b2lkIFNldFNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFt
ZSgpLnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVu
dCgpLnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rp
b24obV9zZWxlY3Rpb25Ub1NldCkgJiYgIW1fc2VsZWN0aW9uVG9TZXQuaXNOb25lT3JPcnBoYW5l
ZCgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCwg
bV9vcHRpb25zKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KCkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBwbHkoKQogewotICAg
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLnNlbGVjdGlvbigpOworICAgIEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLnNlbGVjdGlvbigpOwogCiAgICAg
aWYgKHNlbGVjdGlvbi5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSkg
JiYgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICBzZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCksIG1fb3B0aW9ucyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggMTcyZDg1ZmQ0NjZmMjgzNjZi
NTU4MDZkMDliZjYwMWZlMWM1ZjgxOS4uNTBjMTc1M2YxNmQ5NjhmYTk2YmMyYmM2YjYxMWI0OThm
ZjI0OTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtOTgs
OCArOTgsOCBAQCB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQoKQog
ICAgIG1fY2hlY2tlciA9IG51bGxwdHI7CiB9CiAKLVNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2Vy
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCitTcGVsbENoZWNrZXI6OlNwZWxs
Q2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQog
ICAgICwgbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKnRoaXMsICZTcGVsbENoZWNrZXI6
OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQpAQCAtMTE0LDcgKzExNCw3
IEBAIFNwZWxsQ2hlY2tlcjo6flNwZWxsQ2hlY2tlcigpCiAKIFRleHRDaGVja2VyQ2xpZW50KiBT
cGVsbENoZWNrZXI6OmNsaWVudCgpIGNvbnN0CiB7Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwYWdlLT5lZGl0b3JDbGll
bnQoKS50ZXh0Q2hlY2tlcigpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU3BlbGxDaGVja2Vy
Ojp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdCgpCiAKIGJvb2wgU3BlbGxDaGVja2Vy
Ojppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNl
dHRpbmdzKCkuYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudC5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7
CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlJiBy
YW5nZSkgY29uc3QKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6aW52b2tl
UmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+JiYgcmVxdWVzdCkKICAgICBpZiAoIWNsaWVu
dCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IFdURk1vdmUo
cmVxdWVzdCk7Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCptX3Byb2Nl
c3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGll
bnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6
ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCkBAIC0xOTks
NyArMTk5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRleHRDaGVja2luZ1JlcXVl
c3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FuZFJlcGxhY2VGb3IoKm1fcHJvY2Vzc2lu
Z1JlcXVlc3QsIHJlc3VsdHMpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkubWFya0FuZFJlcGxh
Y2VGb3IoKm1fcHJvY2Vzc2luZ1JlcXVlc3QsIHJlc3VsdHMpOwogCiAgICAgaWYgKG1fbGFzdFBy
b2Nlc3NlZElkZW50aWZpZXIudG9VSW50NjQoKSA8IGlkZW50aWZpZXIudG9VSW50NjQoKSkKICAg
ICAgICAgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC0yMTksNyAr
MjE5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb24KICAgICAgICAgaWYgKHJlcXVlc3REYXRh
LmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkKICAg
ICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAg
ICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1
bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVj
a2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBt
YXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggYzM2YWUyYzMwZmU5ZmI1
YmVmNjcwNzMyMjJlYzQzZTQ0YWQ3ZjJjMC4uZDE5ZmNmZGUzODQxNWIwMTE1Y2Y4Y2RhYTQ4YTg2
NjA4YTgxMTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC03Niw3
ICs3Niw3IEBAIGNsYXNzIFNwZWxsQ2hlY2tlciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IFNwZWxsQ2hlY2tSZXF1ZXN0OwogCi0gICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKEZyYW1lJik7
CisgICAgZXhwbGljaXQgU3BlbGxDaGVja2VyKERvY3VtZW50Jik7CiAgICAgflNwZWxsQ2hlY2tl
cigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKQEAgLTEwNiw3
ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hlY2tDYW5jZWwoVGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAKLSAgICBG
cmFtZSYgbV9mcmFtZTsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAgICBUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKICAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cAppbmRleCA5OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0NmJjMzc5Li41OTIwODQ1
MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTY1LDcgKzY1
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlCiAgICAgewogICAg
ICAgICBpZiAoIW1faGFzQmVlblVuZG9uZSkgewotICAgICAgICAgICAgZnJhbWUoKS5lZGl0b3Io
KS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9jb3JyZWN0
ZWQsIG1fY29ycmVjdGlvbik7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnVuYXBw
bGllZFNwZWxsQ29ycmVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX2NvcnJlY3RlZCwgbV9j
b3JyZWN0aW9uKTsKICAgICAgICAgICAgIG1faGFzQmVlblVuZG9uZSA9IHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCisgICAgaWYgKCFkb2N1bWVudCgpLnNl
bGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQp
KQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXRTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkLCBGcmFtZVNlbGVj
dGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVs
bENvcnJlY3Rpb25UcmlnZ2VyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IDI2NmQyM2JlMWIzZDM1Y2QyNTlkNjIxY2Q3NzMwNzIxNGNkODcyN2MuLmI1
OTFiMTU5YTNlMzBiODZhMzY1Zjk5ODkyNjQ2YWJmNjcxMTJiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMTYzLDEzICsxNjMsMTAgQEAgVHlwaW5nQ29t
bWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNv
bW1hbmRUeXBlLCBjb24KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29t
cG9zaXRpb25UeXBlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0g
ICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkKKyAgICBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7
CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9zaXRp
b25UeXBlKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVs
bENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xODMsOCArMTgw
LDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3Vt
ZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb20KIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
S2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJH
cmFudWxhcml0eSkgewotICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZG9jdW1l
bnQuZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50LmZyYW1l
KCkpOworICAgICAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5k
ID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAg
ICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
bGFzdFR5cGluZ0NvbW1hbmQuZ2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBp
bmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9u
KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4
dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hv
dWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsK
QEAgLTE5OSwxMCArMTk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3IKIHZvaWQgVHlwaW5n
Q29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRp
b25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICAvLyBGSVhN
RTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVuIGFuZCBjbG9zZSBh
IG5ldyB0eXBpbmcgY29tbWFuZC4KLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgp
OwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSkgewotICAgICAg
ICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGlu
Z0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZygqZnJhbWUpKSB7Ci0gICAgICAgICAgICB1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21t
YW5kLmdldCgpLCBmcmFtZSk7CisgICAgICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFz
dFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRv
Y3VtZW50KSkgeworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3Vy
cmVudFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZG9jdW1lbnQpOwogICAgICAg
ICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0aW9ucyAmIElz
QXV0b2NvbXBsZXRpb24pOwogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBv
c2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNw
ZWxsQ2hlY2tpbmcpOwpAQCAtMjE0LDEwICsyMTAsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25z
LAogICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtleSwg
ZW1wdHlTdHJpbmcoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12b2lk
IFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxl
Y3Rpb24oVHlwaW5nQ29tbWFuZCogdHlwaW5nQ29tbWFuZCwgRnJhbWUqIGZyYW1lKQordm9pZCBU
eXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0
aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIERvY3VtZW50JiBkb2N1bWVudCkKIHsK
LSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSB0eXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjcsMzEgKzIyMiwyNSBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OnVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlw
aW5nQ29tbWFuZAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0
aW9uVHlwZSBjb21wb3NpdGlvbikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigp
LnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUo
dGV4dFswXSkpOwogICAgIAotICAgIGluc2VydFRleHQoZG9jdW1lbnQsIHRleHQsIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOworICAgIGluc2Vy
dFRleHQoZG9jdW1lbnQsIHRleHQsIGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBv
cHRpb25zLCBjb21wb3NpdGlvbik7CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVlZCB0
byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBG
cmFtZVNlbGVjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLgogdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMgb3B0aW9ucywg
VGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7Ci0gICAgUmVmUHRyPEZyYW1l
PiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQogICAgIExP
RyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCAodGV4dCAlcykiLCB0ZXh0LnV0
ZjgoKS5kYXRhKCkpOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3Vy
cmVudFNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCiAgICAg
U3RyaW5nIG5ld1RleHQgPSBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRleHQsIHNl
bGVjdGlvbkZvckluc2VydGlvbiwgY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvblBl
bmRpbmcpOwogICAgIAogICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBzZWxlY3Rp
b24gYXBwcm9wcmlhdGVseSBpZiB3ZSBhcmUgdXNpbmcgYSBzZWxlY3Rpb24KICAgICAvLyB0aGF0
IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gIEluIHRoZSBmdXR1cmUs
IHdlIHNob3VsZCBjaGFuZ2UgRWRpdENvbW1hbmQKICAgICAvLyB0byBkZWFsIHdpdGggY3VzdG9t
IHNlbGVjdGlvbnMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCBvZiB0
aGUgY29tbWFuZHMuCi0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29t
bWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgewor
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBpZiAo
bGFzdFR5cGluZ0NvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpICE9IHNlbGVjdGlvbkZvckluc2Vy
dGlvbikgewogICAgICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFN0YXJ0aW5nU2VsZWN0
aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0yNjYsMTIg
KzI1NSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogICAgIH0KIAogICAgIGF1dG8gY21k
ID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBv
cHRpb25zLCBjb21wb3NpdGlvblR5cGUpOwotICAgIGFwcGx5VGV4dEluc2VydGlvbkNvbW1hbmQo
ZnJhbWUuZ2V0KCksIGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2Vs
ZWN0aW9uKTsKKyAgICBhcHBseVRleHRJbnNlcnRpb25Db21tYW5kKGRvY3VtZW50LmZyYW1lKCks
IGNtZC5nZXQoKSwgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBjdXJyZW50U2VsZWN0aW9uKTsKIH0K
IAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50
LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRv
Y3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlw
aW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1l
bnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKG9w
dGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMg
JiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0yODQsNyArMjczLDcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRp
b25zIG9wdGlvbnMpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0
aWxsT3BlbkZvclR5cGluZygqZG9jdW1lbnQuZnJhbWUoKSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNl
dElzQXV0b2NvbXBsZXRpb24oZmFsc2UpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5
QWNjZXNzaWJpbGl0eSgpOwpAQCAtMjk2LDcgKzI4NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1l
bnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21t
YW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JU
eXBpbmcoZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9j
b21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgbGFzdFR5cGlu
Z0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25Ob25lKTsKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CkBAIC0zMDcsOSAr
Mjk2LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMKICAgICBUeXBpbmdDb21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwgb3B0
aW9ucyktPmFwcGx5KCk7CiB9CiAKLVJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5k
OjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkKK1Jl
ZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3Rp
bGxPcGVuRm9yVHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBSZWZQdHI8Q29tcG9z
aXRlRWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLmVkaXRvcigpLmxhc3RFZGl0
Q29tbWFuZCgpOworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21t
YW5kID0gZG9jdW1lbnQuZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFsYXN0
RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwgIXN0
YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5pc09wZW5G
b3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0zMjEsMTYgKzMx
MCwxNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OnNob3VsZERlZmVyV2lsbEFwcGx5Q29tbWFuZFVu
dGlsQWRkaW5nVHlwaW5nQ29tbWFuZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX2lzSGFuZGxpbmdJ
bml0aWFsVHlwaW5nQ29tbWFuZCB8fCBlZGl0QWN0aW9uSXNEZWxldGVCeVR5cGluZyhlZGl0aW5n
QWN0aW9uKCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKEZyYW1lKiBm
cmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRG9jdW1lbnQmIGRvY3VtZW50
KQogewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBs
YXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpmcmFtZSkpCisgICAgaWYgKFJl
ZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5k
SWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKQogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFR5
cGluZ0NvbW1hbmQ6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9w
ZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3
U2VsZWN0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXND
dXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKLSAgICBpZiAoUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxs
T3BlbkZvclR5cGluZygqZnJhbWUpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBs
YXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmco
ZG9jdW1lbnQpKSB7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rp
b24obmV3U2VsZWN0aW9uKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1Nl
bGVjdGlvbk9uTGFzdEluc2VydENvbW1hbmQobmV3U2VsZWN0aW9uKTsKICAgICB9CkBAIC00MzYs
MTkgKzQyNSwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRpZEFwcGx5Q29tbWFuZCgpCiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21t
YW5kIGNvbW1hbmRUeXBlKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0K
ICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3Io
KS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVk
aXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAmJiAh
ZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCisgICAg
aWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9t
YXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRvY3VtZW50KCkuZWRpdG9y
KCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1
bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0
ZWRDYW5kaWRhdGUoKSkKKyAgICBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuOwogI2Vsc2UKLSAgICBpZiAoIWZyYW1l
LmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKCFk
b2N1bWVudCgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIC8vIFRha2UgYSBsb29rIGF0IHRoZSBzZWxlY3Rp
b24gdGhhdCByZXN1bHRzIGFmdGVyIHR5cGluZyBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVl
ZCB0byBzcGVsbGNoZWNrLiAKQEAgLTQ2Niw5ICs0NTMsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkK
ICAgICAgICAgICAgIFN0cmluZyBzdHJpcHBlZFByZXZpb3VzV29yZDsKICAgICAgICAgICAgIGlm
IChyYW5nZSAmJiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCB8fCBj
b21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRMaW5lQnJlYWsgfHwgY29tbWFuZFR5
cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yIHx8IGNvbW1hbmRU
eXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29u
dGVudCkpCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQo
KnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFz
dHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVj
dGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBlbHNl
IGlmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwog
I2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbW1hbmRUeXBlKTsKICAgICAgICAgLy8gSWYg
dGhpcyBidWcgZ2V0cyBmaXhlZCwgdGhpcyBQTEFURk9STShJT1NfRkFNSUxZKSBjb2RlIGNvdWxk
IGJlIHJlbW92ZWQ6CkBAIC00ODMsNyArNDcwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBzdGFydFdvcmRT
aWRlKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIHN0
YXJ0V29yZFNpZGUpOwogICAgICAgICBpZiAocDEgIT0gcDIpCi0gICAgICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVj
dGlvbigpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsK
ICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9CiB9CkBAIC00OTcsMjYgKzQ4
NCwyNiBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVU
eXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0RwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmICghcmFuZ2UgfHwgaXNFZGl0aW5nVGV4dEFyZWFPclRleHRJbnB1dCgpKQotICAgICAg
ICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSk7CisgICAgICAgIHJldHVy
biBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpKTsKIAotICAgIHJldHVybiBmcmFt
ZSgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNy
ZWF0ZSgqcmFuZ2UpIH0pOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBs
eUVkaXRpbmcoKnRoaXMsIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqcmFuZ2UpIH0pOwogfQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29t
bWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKQogewotICAgIEZyYW1lJiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IoZG9jdW1lbnQoKS5mcmFt
ZSgpKTsKIAogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKGNvbW1hbmRUeXBlRm9yQWRk
ZWRUeXBpbmcpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZnJhbWUuZWRpdG9yKCkuYXBw
bGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGllZEVkaXRp
bmcoKnRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFsc28g
cGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQgaGFw
cGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KICAgICBpZiAoIW1fc2hvdWxkUHJldmVudFNw
ZWxsQ2hlY2tpbmcpCiAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5k
VHlwZUZvckFkZGVkVHlwaW5nKTsKICNlbHNlCiAgICAgLy8gVGhlIG9sZCBzcGVsbGNoZWNraW5n
IGNvZGUgcmVxdWlyZXMgdGhhdCBjaGVja2luZyBiZSBkb25lIGZpcnN0LCB0byBwcmV2ZW50IGlz
c3VlcyBsaWtlIHRoYXQgaW4gNjg2NDA3Miwgd2hlcmUgPGRvZXNuJ3Q+IGlzIG1hcmtlZCBhcyBt
aXNzcGVsbGVkLgogICAgIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhjb21tYW5kVHlwZUZv
ckFkZGVkVHlwaW5nKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7
CisgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiAjZW5kaWYK
IH0KIApAQCAtNTM1LDkgKzUyMiw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dEFu
ZE5vdGlmeUFjY2Vzc2liaWxpdHkoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlCiB7CiAgICAg
TE9HKEVkaXRpbmcsICJUeXBpbmdDb21tYW5kICVwIGluc2VydFRleHRBbmROb3RpZnlBY2Nlc3Np
YmlsaXR5ICh0ZXh0ICVzLCBzZWxlY3RJbnNlcnRlZFRleHQgJWQpIiwgdGhpcywgdGV4dC51dGY4
KCkuZGF0YSgpLCBzZWxlY3RJbnNlcnRlZFRleHQpOwogCi0gICAgQWNjZXNzaWJpbGl0eVJlcGxh
Y2VkVGV4dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNlcnRl
ZFRleHQpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlVHlwaW5n
LCB0ZXh0LCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICByZXBsYWNlZFRl
eHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZG9jdW1lbnQoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFuZ2VEZWxldGVk
QnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBAIC01NTAsOSAr
NTM3LDYgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVz
KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QKICAgICAgICAgbV9jb21wb3NpdGlvblR5
cGUgPT0gVGV4dENvbXBvc2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VM
ZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFu
Y2VBbGxXaGl0ZXNwYWNlcywgRWRpdEFjdGlvbjo6VHlwaW5nSW5zZXJ0VGV4dCk7CiAKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNvbW1hbmQpLCBlbmRpbmdTZWxlY3Rpb24o
KSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0VGV4
dCk7CiB9CiAKQEAgLTU2NSwxNyArNTQ5LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
TGluZUJyZWFrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLQotICAgIEZy
YW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJh
bWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRMaW5lQnJlYWspOwogfQog
CiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVha0FuZE5vdGlmeUFjY2Vzc2liaWxp
dHkoKQogewotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1l
KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRl
eHQgcmVwbGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAg
IGluc2VydExpbmVCcmVhaygpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVk
aXRUeXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgp
LmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9j
dW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0
UmFuZ2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQog
CkBAIC01ODgsMTcgKzU2OSwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFw
aFNlcGFyYXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBm
YWxzZSwgZmFsc2UsIEVkaXRBY3Rpb246OlR5cGluZ0luc2VydFBhcmFncmFwaCkpOwotCi0gICAg
RnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3Rvcihm
cmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFncmFwaFNlcGFy
YXRvcik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4
dCByZXBsYWNlZFRleHQoZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNj
ZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CiAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0gICAgcmVw
bGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlz
dGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFY
VGV4dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFj
ZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTYxNSwxNyArNTkzLDE0IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCkK
ICAgICB9CiAgICAgICAgIAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBp
bmdBZGRlZFRvT3BlbkNvbW1hbmQoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250
ZW50KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmls
aXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRF
ZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Cisg
ICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQo
KS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRv
Y3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBvc2l0aW9uKCktPnNl
dFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRSYW5nZSgpKTsKIH0K
IApAQCAtNjUyLDEwICs2MjcsOSBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJv
b3RFbXB0eSgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAgICBG
cmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZy
YW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkpOwog
Ci0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRp
bmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRz
QWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKQEAg
LTY3NCw3ICs2NDgsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogCiAgICAgICAgIG1fc21h
cnREZWxldGUgPSBmYWxzZTsKIAotICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247Cisg
ICAgICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbihkb2N1bWVudCgpKTsKICAgICAgICAgc2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAgIHNlbGVjdGlv
bi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3
YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nICYmIHNl
bGVjdGlvbi5pc0NhcmV0KCkgJiYgZ3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
CkBAIC03NDgsMjAgKzcyMiwyMCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3Vs
ZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBj
bG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQo
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50
KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVj
dGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRl
U2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUu
aXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlv
bihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoIXdp
bGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVk
aXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVs
ZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxs
UmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOwog
CiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxs
IHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91
bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9LaWxsUmluZykKIHsKLSAg
ICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1bWVudCgpLmZyYW1lKCkp
OwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
QEAgLTc5OCw3ICs3NzEsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgICAgICAvLyBI
YW5kbGUgZGVsZXRlIGF0IGJlZ2lubmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAvLyBEbyBu
b3RoaW5nIGluIHRoZSBjYXNlIHRoYXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiBhCiAg
ICAgICAgIC8vIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1
bWVudC4KLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOworICAgICAgICBGcmFtZVNl
bGVjdGlvbiBzZWxlY3Rpb24oZG9jdW1lbnQoKSk7CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBncmFudWxhcml0
eSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCkBAIC04NTcsMTMgKzgzMCwxMyBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
ICAgIC8vIFdvcmthcm91bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vNDY1Mzc1NT4gVUlLaXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcg
QVBJIHRvIG1hbmlwdWxhdGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOwor
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CisgICAgICAgIGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQo
KSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRv
RGVsZXRlKSkKKyAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVu
dCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQo
Rm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQpAQCAtODczLDcgKzg0Niw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBib29sIHNoCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRl
bGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5n
KQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxs
UmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9k
ZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVk
CiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3Nt
YXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSov
IGZhbHNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKaW5kZXggNzZlNWY5OWJmOTI1
Mzg1NzVjYWEzODc2YmI5YjZiNTU0YjlmYjc1Yy4uODk2YmYwYmQxNWRiZTNkNDgxODQ4OTVmNjQz
ZjFjODY5ZDU4ZWI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAg
LTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc2VydExpbmVCcmVhayhE
b2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFy
YXRvcihEb2N1bWVudCYsIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFw
aFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGNs
b3NlVHlwaW5nKEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRG9jdW1lbnQm
KTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RF
ZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKEZyYW1lKiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZUxhc3RFZGl0
Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKERvY3VtZW50Jiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGluc2VydFRleHQo
Y29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCk7CkBAIC0xMDMsNyAr
MTAzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7
IHJldHVybiBtX29wZW5Gb3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygpIHsg
bV9vcGVuRm9yTW9yZVR5cGluZyA9IGZhbHNlOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoRnJhbWUmKTsK
KyAgICBzdGF0aWMgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kSWZTdGls
bE9wZW5Gb3JUeXBpbmcoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIGZpbmFsOwog
ICAgIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3QgZmluYWw7CkBAIC0xMjIsNyArMTIyLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5z
ZmVyKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc0JlZm9yZUlucHV0RXZlbnRDYW5jZWxhYmxl
KCkgY29uc3QgZmluYWw7CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZl
cmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOworICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZCosIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5
cGluZ1N0eWxlKEVUeXBpbmdDb21tYW5kKTsKICAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5D
b21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBl
bXB0eVN0cmluZygpLCBSZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAppbmRleCAyNzJlMzRiZWI3
OTI2NGViNjcxZGM5YTg2ZDdhZGE4NzU2YmU3MmI0Li4wNjVlZWE5YmE0NWQ3MmFiY2I5NzY5OWEz
NTZlNDU5ZDAwYjEwYjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9G
cmFtZVNlbGVjdGlvbkF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJh
bWVTZWxlY3Rpb25BdGsuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVD
aGFuCiAgICAgaWYgKCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVhPYmpl
Y3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCA3ZmUzMGUwYTBlYTJl
N2ViZTMzYTEyN2MzMWY3N2I0ZTMyZjA1Y2EzLi4xNGIzNWMyODhiMzZjNmYwYmNkZjMwMWY5NjQ5
YzhmOWJmNWYwZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW0KQEAgLTgwLDggKzgwLDggQEAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGFyY2hp
dmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICoKIAogU3RyaW5n
IEVkaXRvcjo6c2VsZWN0aW9uSW5IVE1MRm9ybWF0KCkKIHsKLSAgICByZXR1cm4gc2VyaWFsaXpl
UHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAg
ICAgICBtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0Vu
YWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRU
cmVlOjpObyk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNl
KG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNs
dWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5zZXR0aW5n
cygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVD
b21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogfQogCiAjaWYg
RU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKQEAgLTEwNSwxOCArMTA1LDE4IEBAIHZvaWQgRWRp
dG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChFbGVtZW50JiBlbGVt
ZW50LCBWZWN0b3I8U3RyCiAKICNlbmRpZgogCi1zdGF0aWMgUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IEZyYW1lJiBmcmFtZSkK
K3N0YXRpYyBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzZWxlY3Rpb25Bc0F0dHJpYnV0
ZWRTdHJpbmcoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGF1dG8gcmFuZ2UgPSBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byByYW5n
ZSA9IGRvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBy
ZXR1cm4gcmFuZ2UgPyBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkuc3RyaW5nIDogYWRvcHROUyhb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwogfQogCiB2b2lkIEVkaXRvcjo6d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKLSAgICBh
dXRvIHN0cmluZyA9IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKKyAgICBh
dXRvIHN0cmluZyA9IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2RvY3VtZW50KTsKIAog
ICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0gICAgY29udGVudC5jb250ZW50T3Jp
Z2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgp
OworICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2luSWRlbnRpZmll
ckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2Fu
U21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQg
PSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblJURkRG
b3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChz
dHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKQEAgLTEzMSwxMCArMTMxLDEwIEBAIHZvaWQgRWRpdG9y
Ojp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogCiB2
b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9h
cmRXcml0ZXJEYXRhKQogewotICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVk
U3RyaW5nKG1fZnJhbWUpOworICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVk
U3RyaW5nKG1fZG9jdW1lbnQpOwogCiAgICAgUGFzdGVib2FyZFdyaXRlckRhdGE6OldlYkNvbnRl
bnQgd2ViQ29udGVudDsKLSAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgd2ViQ29udGVu
dC5jb250ZW50T3JpZ2luID0gbV9kb2N1bWVudC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2Fy
ZCgpOwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVj
dGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1h
dCA9IFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmlu
Zy5nZXQoKSkgOiBudWxscHRyOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRWRpdG9yOjp3cml0
ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiAK
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0
KCkKIHsKLSAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2Vs
ZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGVGcm9tU2VsZWN0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgaWYgKCFhcmNoaXZl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkpOwpAQCAtMTc3LDExICsx
NzcsMTEgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJ
bWFnZUFsdFRleHQoKQogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1
dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZywgTWFpbEJsb2Nr
cXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQogewotICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRv
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMobV9mcmFtZSwgYXR0cmli
dXRlZFN0cmluZykpIHsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoKm1fZG9jdW1lbnQuZnJhbWUoKSwgYXR0
cmlidXRlZFN0cmluZykpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgq
ZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKQogICAgICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9u
TnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpOwogICAgICAgICB9
CkBAIC0yMjcsNyArMjI3LDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhSW5S
VEZGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCiAvLyBPciByZWZhY3RvciBzbyBp
dCBkb2VzIG5vdCBkbyB0aGF0LgogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2Vi
Q29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNvbnN0IFNpbXBs
ZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4
dCkKIHsKLSAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCBjb250ZXh0LCBhbGxv
d1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJh
bWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQpOwogICAgIHBhc3RlYm9hcmQucmVhZChyZWFk
ZXIpOwogICAgIGNob3NlUGxhaW5UZXh0ID0gcmVhZGVyLm1hZGVGcmFnbWVudEZyb21QbGFpblRl
eHQ7CiAgICAgcmV0dXJuIFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKQEAgLTI0MCw3ICsyNDAs
NyBAQCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlvbiA9IG1fZnJhbWUu
ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNm
ZXIoKSk7CisgICAgYXV0byBzdHJpbmdGcm9tU2VsZWN0aW9uID0gbV9kb2N1bWVudC5mcmFtZSgp
LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkVGV4dEZvckRhdGFUcmFu
c2ZlcigpKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAg
ICAgdHlwZXMuYXBwZW5kKFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCBlOWRmZGZjYmVkYTRh
ZGMzNjg2MDJjOTFjMDIwZTYzNmIxMDA0ODNkLi5kNDFlNGI5MzAyNzYxMjU2OGRhZTRmOWJlOThl
MDE0MjNhZGYxODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0
b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAK
QEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJk
LCBtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxh
aW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAq
bV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246
OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYm
IG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVv
dGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZv
aWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJv
YXJkKQogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250ZW50OwogICAgIHBh
c3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxl
dGUoKTsKICAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRy
YW5zZmVyKCk7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVz
b2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBt
X2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zp
c3VhbEFwcGVhcmFuY2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2
ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2Rv
Y3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQo
KSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpO
byk7CiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0
ZWJvYXJkJiBwYXN0ZWJvYXJkLCBjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZy
YWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsIG1fZnJhbWUsIGNvbnRleHQsIGFs
bG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50
RnJvbVBhc3RlYm9hcmREYXRhKHBhc3RlYm9hcmQsICptX2RvY3VtZW50LmZyYW1lKCksIGNvbnRl
eHQsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCAzZjI5
YzRlMjNlMmY2Y2RmNWQ0NjQyZjJkYzE4ODQ2YzU3ZTMyZDg2Li42NzI0ZGI4NTBkYTc1OTlmODBh
NjYyNjY0ZTY1MDhhMzZlNTJmMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9y
Q2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgLy8g
SWYgdGhlIHRleHQgaGFzIGxlZnQgb3IgcmlnaHQgYWxpZ25tZW50LCBmbGlwIGxlZnQtPnJpZ2h0
IGFuZCByaWdodC0+bGVmdC4gCiAgICAgLy8gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLgogCi0gICAg
YXV0byBzZWxlY3Rpb25TdHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rp
b25TdHlsZS0+c3R5bGUoKSkKICAgICAgICAgIHJldHVybjsKIApAQCAtMTI2LDE0ICsxMjYsMTQg
QEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJl
Y3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXIKICAgICBpZiAoIW5ld1ZhbHVlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQo
KS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9j
dW1lbnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgJiYgKGlzPEhU
TUxUZXh0QXJlYUVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkgfHwgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KCpmb2N1c2VkRWxlbWVudCkKICAgICAgICAgJiYgKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCpmb2N1c2VkRWxlbWVudCkuaXNUZXh0RmllbGQoKQogICAgICAgICAgICAgfHwgZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKmZvY3VzZWRFbGVtZW50KS5pc1NlYXJjaEZpZWxkKCkpKSkp
IHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmZvY3Vz
ZWRFbGVtZW50KS5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsaWduQXR0ciwg
bmV3VmFsdWUpOwotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKKyAgICAgICAgbV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEVkaXRvcjo6cmVtb3Zl
VW5jaGFuZ2VhYmxlU3R5bGVzKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgc3R5
bGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IG1vZGlmeSBieSBhcHBseWluZyB0aGVpciBkZWZhdWx0
IHZhbHVlcy4KICAgICAKLSAgICBhdXRvIGVkaXRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3Jl
YXRlKG1fZnJhbWUuZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgYXV0byBlZGl0
aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0
KCkpOwogICAgIGF1dG8gZGVmYXVsdFN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHlsZSgpLT5tdXRh
YmxlQ29weSgpOwogICAgIAogICAgIC8vIFRleHQgd2lkZ2V0cyBpbXBsZW1lbnQgYmFja2dyb3Vu
ZCBjb2xvciB2aWEgdGhlIFVJVmlldyBwcm9wZXJ0eS4gVGhlaXIgYm9keSBlbGVtZW50IHdpbGwg
bm90IGhhdmUgb25lLgpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4K
IHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGJvb2wg
YWxsb3dQbGFpblRleHQgPSBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWlu
VGV4dCk7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgKnJhbmdlLCBhbGxv
d1BsYWluVGV4dCk7CisgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIoKm1fZG9jdW1lbnQuZnJh
bWUoKSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCk7CiAgICAgaW50IG51bWJlck9mUGFzdGVib2Fy
ZEl0ZW1zID0gY2xpZW50KCktPmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCk7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtczsgKytpKSB7CiAgICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNsaWVudCgpLT5kb2N1bWVudEZyYWdt
ZW50RnJvbURlbGVnYXRlKGkpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9w
dGlvbj4KIAogdm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3Rv
cjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewotICAgIGlmICht
X2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlv
bigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoZGljdGF0aW9uUGhyYXNl
cy5pc0VtcHR5KCkpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlv
blBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQK
ICAgICAvLyBTb21lIGRheSB3ZSBjb3VsZCBtYWtlIHRoZW0gVW5kb2FibGUsIGFuZCBsZXQgY2Fs
bGVycyBjbGVhciB0aGUgVW5kbyBzdGFjayBleHBsaWNpdGx5IGlmIHRoZXkgd2lzaC4KICAgICBj
bGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVh
cigpOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGVsZW1lbnQu
cmVtb3ZlQ2hpbGRyZW4oKTsKIApAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgRWRpdG9yOjpzZXRU
ZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVsZW1lbnQp
CiAKICAgICAvLyBBcyBhIHNpZGUgZWZmZWN0IHRoaXMgZnVuY3Rpb24gc2V0cyBhIGNhcmV0IHNl
bGVjdGlvbiBhZnRlciB0aGUgaW5zZXJ0ZWQgY29udGVudC4gTXVjaCBvZiB3aGF0CiAgICAgLy8g
Zm9sbG93cyBpcyBtb3JlIGV4cGVuc2l2ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgc28gY2xl
YXIgaXQgc2luY2UgaXQncyBnb2luZyB0byBjaGFuZ2UgYW55d2F5LgotICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNsZWFyKCk7CiAK
ICAgICAvLyBjbGVhciBvdXQgYWxsIGN1cnJlbnQgY2hpbGRyZW4gb2YgZWxlbWVudAogICAgIGVs
ZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEVkaXRvcjo6
c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVt
ZW50KQogICAgIHNlbGVjdGlvbi5zZXRCYXNlKHZpc2libGVQb3MpOwogICAgIHNlbGVjdGlvbi5z
ZXRFeHRlbnQodmlzaWJsZVBvcyk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihzZWxlY3Rpb24pOworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHNlbGVjdGlvbik7CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7
CiB9CkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVt
ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKIC8vIGhhdmUgYSBzdGFs
ZSBzZWxlY3Rpb24uCiB2b2lkIEVkaXRvcjo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoKQogewotICAgIFR5cGluZ0NvbW1hbmQ6OmVu
c3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5n
KCZtX2ZyYW1lLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBUeXBpbmdD
b21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9y
TW9yZVR5cGluZyhtX2RvY3VtZW50LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKaW5kZXggNWQxNWE2NDYxYzU2OWI2M2FjYzYxNTc5
NWUzNDQ3NzA4YTRkNTU3Ny4uMTJmZDZhNDNlYTA1YTJhMGU3MmI3NGJhNzJkOTYyODY0NzA1YmFl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9saWJ3cGUvRWRpdG9yTGliV1BF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3Bw
CkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBh
c3RlYm9hcmRDb250ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRl
eHRGb3JEYXRhVHJhbnNmZXIoKTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJp
YWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ks
Ci0gICAgICAgIG1fZnJhbWUuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFy
aWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21w
b3NlZFRyZWU6Ok5vKTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQ
cmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisg
ICAgICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFy
aWVzRW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21w
b3NlZFRyZWU6Ok5vKTsKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsK
IH0KIApAQCAtODQsNyArODQsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3Rl
Ym9hcmQsIG1fZnJhbWUsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxs
b3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEoKnBhc3RlYm9h
cmQsICptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9w
dGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21l
bnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAg
ICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDkzMWEyMzAwZjA5NjY0MjQzZDg2NmFjODY0MGE5NzFk
NmM1OTIxNGQuLjNhY2Q5OTc4MzY3YTZmY2FkNDUyZTEwZDc1ZjVlMzA3N2NkYTdmYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTEwMiw3ICsxMDIsNyBAQCB2
b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBP
cHRpb25TZXQ8UGFzdGVPcHRpb24+CiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZCBw
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAg
ICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQoJnBhc3RlYm9hcmQsIHsgUGFzdGVPcHRpb246OkFsbG93
UGxhaW5UZXh0IH0pOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKHBhc3RlYm9hcmQpOwpAQCAtMTM2LDE3ICsxMzYsMTYgQEAgdm9pZCBFZGl0b3I6OnJl
cGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBpZiAoJm5vZGUtPmRvY3VtZW50
KCkgIT0gbV9mcmFtZS5kb2N1bWVudCgpKQorICAgIGlmIChub2RlLT5kb2N1bWVudCgpICE9IG1f
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1f
ZnJhbWUpOwotCisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAg
YXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9kZSk7Ci0gICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZSks
IEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlKSwgRnJhbWVTZWxlY3Rpb246
OkRvTm90U2V0Rm9jdXMpOwogCiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKTsKIAotICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgcGFzdGVBc1Bs
YWluVGV4dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMjIwLDcgKzIxOSw3IEBAIHN0YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQmIGltYWdl
RWxlbWVudCwgUmVmUHRyPEltYWdlPiYgaW1hZ2UsIENhY2hlZEltYWdlKiYKIAogdm9pZCBFZGl0
b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UoKQogewotICAgIGlmICghaGFzQ29tcG9zaXRpb24oKSB8
fCBpZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUo
KSkKKyAgICBpZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygp
IHx8IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhbmNlbENvbXBvc2l0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmluZGV4IDgzNGNjMzZiYThhNjdhMmJlOGE3YjdiNDhjZWEz
ZTFmOTVjNzFjYjcuLjgyMzkzZDk3ODQxNTEyMTliNDdjMmExZTgzMzkzMjUzOGZlMDVlMzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCkBA
IC0zNCwxMCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3Rh
dGVDaGFuZ2VJbnRlbnQmIGludGVudCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpOwotCiAgICAgaWYgKG1fc2VsZWN0aW9uLnN0YXJ0KCkuaXNOb3ROdWxs
KCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAg
ICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LmV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgaW50ZW50LCBtX3NlbGVjdGlvbik7CiAgICAgfQog
CkBAIC00NiwxMCArNDQsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJp
bGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW4KICAgICBpZiAoIVVB
Wm9vbUVuYWJsZWQoKSB8fCAhbV9zZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsK
KyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gbV9kb2N1bWVudC5yZW5kZXJWaWV3KCk7CiAg
ICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2Rv
Y3VtZW50LnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAppbmRleCA1ZTg2ODdmODk0YmVj
NjA0Y2M2MjFiZDRlMGQ5MTI4Mjk1YzM0ZjU5Li5jNzk2YmZhYWY2NmVlOTRhODVjNTVmMzkyMzQ5
MTU1ZDI3NGE4NjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0
b3JXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAK
QEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQobV9mcmFtZSwgKnJhbmdl
LCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxh
aW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBwYXN0ZWJv
YXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7
CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNR
dW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpA
QCAtNjksOSArNjksOSBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZy
YWdtZW50RnJvbVBsYXRmb3JtRGF0YShQbGF0Zm9ybURyYWdEYXRhJgogUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBh
c3RlYm9hcmQsIGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCAvKmFsbG93UGxhaW5UZXh0Ki8sIGJv
b2wmIC8qY2hvc2VQbGFpblRleHQqLykKIHsKICAgICBpZiAoQ09NUHRyPElEYXRhT2JqZWN0PiBw
bGF0Zm9ybURyYWdEYXRhID0gcGFzdGVib2FyZC5kYXRhT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEsIG1fZnJh
bWUpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0
Zm9ybURyYWdEYXRhLCAqbV9kb2N1bWVudC5mcmFtZSgpKTsKIAotICAgIHJldHVybiBjcmVhdGVG
cmFnbWVudEZyb21QbGF0Zm9ybURhdGEocGFzdGVib2FyZC5kcmFnRGF0YU1hcCgpLCBtX2ZyYW1l
KTsKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKHBhc3RlYm9hcmQu
ZHJhZ0RhdGFNYXAoKSwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKaW5kZXggNTVlNDFi
N2FmNWRjNWI5ZjcxZWU3ZjlhZWQ2Y2Y2M2ZjYTMwYTIxMS4uZDNkNjY1ZmI3MTIyYjZjZjdhYWEz
YzMxNDVjMjBjMjAwYWM5N2UwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9D
YWNoZWRGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHAKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIENhY2hlZEZyYW1lOjpkZXN0cm95KCkKICAgICBt
X2RvY3VtZW50LT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCiAgICAgbV9kb2N1bWVudC0+
c2V0QmFja0ZvcndhcmRDYWNoZVN0YXRlKERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
OwotICAgIG1fZG9jdW1lbnQtPnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOworICAgIG1fZG9jdW1l
bnQtPndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKIAogICAgIGNsZWFyKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA4YjA1ZjgzNzUxNGY1MGFlMDhiMmFmNGQ4
NGUzYjFlZDU3MjRhZWM3Li41OTEyOGJlYjg3NTY4ZDFmNzlmODg0NTY2NDJjNTU5MWNlYjEyMjU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTU0OCwxMSArNTQ4LDE0
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogdm9pZCBGcmFtZUxvYWRlcjo6d2lsbFRyYW5z
aXRpb25Ub0NvbW1pdHRlZCgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl
biBhIGZyYW1lIGlzIHN0aWxsIGZ1bGx5IGluIHBsYWNlIChub3QgY2FjaGVkLCBub3QgZGV0YWNo
ZWQpLCBidXQgd2lsbCBiZSByZXBsYWNlZC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgeworICAgIGlmIChkb2N1
bWVudC0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAvLyBUaGUgdGV4dCB3
YXMgYWxyZWFkeSBwcmVzZW50IGluIERPTSwgc28gaXQncyBiZXR0ZXIgdG8gY29uZmlybSB0aGFu
IHRvIGNhbmNlbCB0aGUgY29tcG9zaXRpb24uCi0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkuY29u
ZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVu
dCA9IG1fZnJhbWUuZWRpdG9yKCkuY2xpZW50KCkpIHsKKyAgICAgICAgZG9jdW1lbnQtPmVkaXRv
cigpLmNvbmZpcm1Db21wb3NpdGlvbigpOworICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0
b3JDbGllbnQgPSBkb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpIHsKICAgICAgICAgICAgIGVk
aXRvckNsaWVudC0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CiAgICAgICAg
ICAgICBlZGl0b3JDbGllbnQtPmRpc2NhcmRlZENvbXBvc2l0aW9uKCZtX2ZyYW1lKTsKICAgICAg
ICAgfQpAQCAtNTYzLDcgKzU2Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsb3NlVVJMKCkKIHsK
ICAgICBoaXN0b3J5KCkuc2F2ZURvY3VtZW50U3RhdGUoKTsKIAotICAgIERvY3VtZW50KiBjdXJy
ZW50RG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CisgICAgUmVmUHRyPERvY3VtZW50PiBj
dXJyZW50RG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CiAgICAgVW5sb2FkRXZlbnRQb2xp
Y3kgdW5sb2FkRXZlbnRQb2xpY3k7CiAgICAgaWYgKG1fZnJhbWUucGFnZSgpICYmIG1fZnJhbWUu
cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5pc1NWR0ltYWdlQ2hyb21lQ2xpZW50KCkpIHsKICAg
ICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgU1ZHRG9jdW1lbnQgb2YgYW4gU1ZHSW1hZ2UsIG5vIG5l
ZWQgdG8gZGlzcGF0Y2ggZXZlbnRzIG9yIHJlY2FsY1N0eWxlLgpAQCAtNTc1LDcgKzU3OCw4IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmNsb3NlVVJMKCkKIAogICAgIHN0b3BMb2FkaW5nKHVubG9hZEV2
ZW50UG9saWN5KTsKICAgICAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyVW5kb1JlZG9PcGVy
YXRpb25zKCk7CisgICAgaWYgKGN1cnJlbnREb2N1bWVudCkKKyAgICAgICAgY3VycmVudERvY3Vt
ZW50LT5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogfQogCiBib29sIEZyYW1l
TG9hZGVyOjpkaWRPcGVuVVJMKCkKQEAgLTU4Nyw3ICs1OTEsNiBAQCBib29sIEZyYW1lTG9hZGVy
OjpkaWRPcGVuVVJMKCkKICAgICB9CiAKICAgICBtX2ZyYW1lLm5hdmlnYXRpb25TY2hlZHVsZXIo
KS5jYW5jZWwoKTsKLSAgICBtX2ZyYW1lLmVkaXRvcigpLmNsZWFyTGFzdEVkaXRDb21tYW5kKCk7
CiAKICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3Nl
ID0gZmFsc2U7CkBAIC02NTAsOCArNjUzLDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZENs
ZWFyV2luZG93TmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IERvY3VtZW50JiBuZXcKIAog
dm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFy
V2luZG93UHJvcGVydGllcywgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMsIGJvb2wgY2xlYXJGcmFt
ZVZpZXcsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZURPTVdpbmRvd0NyZWF0aW9uKQog
ewotICAgIG1fZnJhbWUuZWRpdG9yKCkuY2xlYXIoKTsKLQogICAgIGJvb2wgbmVlZGVkQ2xlYXIg
PSBtX25lZWRzQ2xlYXI7CiAgICAgbV9uZWVkc0NsZWFyID0gZmFsc2U7CiAKQEAgLTY1OSw3ICs2
NjAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGVhcihEb2N1bWVudCogbmV3RG9jdW1lbnQsIGJv
b2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sCiAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQo
KS0+Y2FuY2VsUGFyc2luZygpOwogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnN0b3BBY3Rp
dmVET01PYmplY3RzKCk7CiAgICAgICAgIGJvb2wgaGFkTGl2aW5nUmVuZGVyVHJlZSA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+aGFzTGl2aW5nUmVuZGVyVHJlZSgpOwotICAgICAgICBtX2ZyYW1lLmRv
Y3VtZW50KCktPnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOworICAgICAgICBtX2ZyYW1lLmRvY3Vt
ZW50KCktPndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKICAgICAgICAgaWYgKGhhZExpdmluZ1Jl
bmRlclRyZWUpCiAgICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPmFkanVzdEZvY3VzZWRO
b2RlT25Ob2RlUmVtb3ZhbCgqbV9mcmFtZS5kb2N1bWVudCgpKTsKICAgICB9CkBAIC02ODAsNyAr
NjgxLDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBi
b29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbAogICAgICAgICAgICAgbV9mcmFtZS50cmVl
KCkuc2V0TmFtZShudWxsQXRvbSgpKTsKICAgICB9CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOwogICAgIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuY2xl
YXIoKTsKIAogICAgIGlmIChjbGVhckZyYW1lVmlldyAmJiBtX2ZyYW1lLnZpZXcoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKaW5kZXggMWE2MDg5NjYzNDZkMTM2ODJiOTNiOTBkMjZjNzc5YzIyZGZiY2Yx
OC4uMzlkZWE0ZDVlMjVhN2M2M2Q5YmZkYjAzYWE1ZTc1NTU0YmIxYmM2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKQEAgLTE1Niw4ICsxNTYsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAg
ICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxl
cj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9z
Y3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2Vk
aXRvcihtYWtlVW5pcXVlUmVmPEVkaXRvcj4oKnRoaXMpKQotICAgICwgbV9zZWxlY3Rpb24obWFr
ZVVuaXF1ZVJlZjxGcmFtZVNlbGVjdGlvbj4odGhpcykpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRy
b2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigqdGhpcykpCiAgICAg
LCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV90
ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKQEAgLTIzNCw3ICsyMzIs
NyBAQCB2b2lkIEZyYW1lOjpzZXRWaWV3KFJlZlB0cjxGcmFtZVZpZXc+JiYgdmlldykKICAgICAv
LyBub3RpZmllZC4gSWYgd2Ugd2FpdCB1bnRpbCB0aGUgdmlldyBpcyBkZXN0cm95ZWQsIHRoZW4g
dGhpbmdzIHdvbid0IGJlIGhvb2tlZCB1cCBlbm91Z2ggZm9yCiAgICAgLy8gdGhlc2UgY2FsbHMg
dG8gd29yay4KICAgICBpZiAoIXZpZXcgJiYgbV9kb2MgJiYgbV9kb2MtPmJhY2tGb3J3YXJkQ2Fj
aGVTdGF0ZSgpICE9IERvY3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpCi0gICAgICAgIG1fZG9j
LT5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICAgICAgbV9kb2MtPndpbGxCZVJlbW92ZWRG
cm9tRnJhbWUoKTsKICAgICAKICAgICBpZiAobV92aWV3KQogICAgICAgICBtX3ZpZXctPmxheW91
dENvbnRleHQoKS51bnNjaGVkdWxlTGF5b3V0KCk7CkBAIC0yNzksNyArMjc3LDcgQEAgdm9pZCBG
cmFtZTo6c2V0RG9jdW1lbnQoUmVmUHRyPERvY3VtZW50PiYmIG5ld0RvY3VtZW50KQogI2VuZGlm
CiAKICAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERv
Y3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpCi0gICAgICAgIG1fZG9jLT5wcmVwYXJlRm9yRGVz
dHJ1Y3Rpb24oKTsKKyAgICAgICAgbV9kb2MtPndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKIAog
ICAgIG1fZG9jID0gbmV3RG9jdW1lbnQuY29weVJlZigpOwogICAgIEFTU0VSVCghbV9kb2MgfHwg
bV9kb2MtPmRvbVdpbmRvdygpKTsKQEAgLTU1NCw3ICs1NTIsNyBAQCBib29sIEZyYW1lOjpyZXF1
ZXN0RE9NUGFzdGVBY2Nlc3MoKQogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6OkRlbmll
ZDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRE9NUGFzdGVBY2Nlc3NQb2xpY3k6
Ok5vdFJlcXVlc3RlZFlldDogewotICAgICAgICBhdXRvKiBjbGllbnQgPSBtX2VkaXRvci0+Y2xp
ZW50KCk7CisgICAgICAgIGF1dG8qIGNsaWVudCA9IGVkaXRvcigpLmNsaWVudCgpOwogICAgICAg
ICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTM3LDcgKzkz
NSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpv
b21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9lZGl0b3ItPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9y
ZWQoKTsKKyAgICBlZGl0b3IoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAK
ICAgICAvLyBSZXNwZWN0IFNWR3Mgem9vbUFuZFBhbj0iZGlzYWJsZWQiIHByb3BlcnR5IGluIHN0
YW5kYWxvbmUgU1ZHIGRvY3VtZW50cy4KICAgICAvLyBGSVhNRTogSG93IHRvIGhhbmRsZSBjb21w
b3VuZCBkb2N1bWVudHMgKyB6b29tQW5kUGFuPSJkaXNhYmxlZCI/IE5lZWRzIFNWRyBXRyBjbGFy
aWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IGU5Y2FiM2NjMGY5ZWNiZGExYzExODJlM2Fh
NzVkNGM1YzZhMmViMDAuLjQ1NDQwYWMxYWFmMDczNzFjMzUyZjE4ZGI0MTY5NjFmOGYxNDFiNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0
RnJhbWUuaCIKICNpbmNsdWRlICJBZGp1c3RWaWV3U2l6ZU9yTm90LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKICNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgpAQCAtMTYzLDE0ICsxNjQsMTQgQEAg
cHVibGljOgogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwogICAgIEZyYW1lVmlldyog
dmlldygpIGNvbnN0OwogCi0gICAgRWRpdG9yJiBlZGl0b3IoKSB7IHJldHVybiBtX2VkaXRvcjsg
fQotICAgIGNvbnN0IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3I7IH0K
KyAgICBFZGl0b3ImIGVkaXRvcigpIHsgcmV0dXJuIGRvY3VtZW50KCktPmVkaXRvcigpOyB9Cisg
ICAgY29uc3QgRWRpdG9yJiBlZGl0b3IoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0
b3IoKTsgfQogICAgIEV2ZW50SGFuZGxlciYgZXZlbnRIYW5kbGVyKCkgeyByZXR1cm4gbV9ldmVu
dEhhbmRsZXI7IH0KICAgICBjb25zdCBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9CiAgICAgRnJhbWVMb2FkZXImIGxvYWRlcigpIGNv
bnN0OwogICAgIE5hdmlnYXRpb25TY2hlZHVsZXImIG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25z
dDsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247
IH0KLSAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb247IH0KKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4g
ZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KKyAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBG
cmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKICAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdh
Y3lBbmltYXRpb24oKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KICAgICBjb25z
dCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdhY3lBbmltYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KQEAgLTMzOCw4ICszMzksNiBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29udHJv
bGxlcj4gbV9zY3JpcHQ7Ci0gICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7Ci0gICAgVW5p
cXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKICAgICBVbmlxdWVSZWY8Q1NTQW5p
bWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMmQ2
Y2U4MDhiZWQ2OTNjMWY3MDMzZmZjN2U3YWQ1NDZjNTBhYTNmYy4uOTY2YmE2ZDk5YTJlNjY2ZWVl
YmNjOWQ5NDZjODJmYWRjMmNmYjI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9U
ZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCkBAIC02OCwxMSArNjgsOSBAQCBSZWY8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6
Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQogCiBSZWZQdHI8VGV4dEluZGlj
YXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikK
IHsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cihyYW5nZS5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgUmVmPERvY3VtZW50PiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKTsKIAotICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9IHJhbmdl
ID09IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9IHJhbmdlID09IGRvY3VtZW50LT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgT3B0aW9u
U2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uczsK
ICAgICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRp
b246OkRvTm90U2V0Rm9jdXMpOwpAQCAtODAsMTQgKzc4LDE0IEBAIFJlZlB0cjxUZXh0SW5kaWNh
dG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBUCiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKTsKICAgICB0ZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246OkVuYWJsZUFwcGVhcmFuY2VV
cGRhdGVzKTsKICNlbmRpZgotICAgIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25D
aGFuZ2UoKmZyYW1lLCB7IHJhbmdlIH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOworICAg
IFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoZG9jdW1lbnQsIHsgcmFu
Z2UgfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0
YSBkYXRhOwogCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9u
VHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgaWYgKCFpbml0
aWFsaXplSW5kaWNhdG9yKGRhdGEsICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3Vy
cmVudFNlbGVjdGlvbikpCisgICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsICpkb2N1
bWVudC0+ZnJhbWUoKSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbikp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZShkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQppbmRleCA1NDMyNWFkODBjM2EzYTQ4
N2Y5MGMyZjE5MTY3ODZhZjhkYjlmNmViLi5lYjFlOWYzMWZhMWNmZDNiNzQ5Njc2NzUyMWNiMzdh
NjdlYTkwOWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCkBAIC00NjcsNyArNDY3LDcgQEAg
LSAoV2ViVmlzaWJsZVBvc2l0aW9uICopZW5kUG9zaXRpb24KIC0gKERPTVJhbmdlICopZW5jbG9z
aW5nV29yZFJhbmdlCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oW3NlbGYuc3Rh
cnRQb3NpdGlvbiBfdmlzaWJsZVBvc2l0aW9uXSwgW3NlbGYuZW5kUG9zaXRpb24gX3Zpc2libGVQ
b3NpdGlvbl0pOwotICAgIHNlbGVjdGlvbiA9IEZyYW1lU2VsZWN0aW9uOjp3b3JkU2VsZWN0aW9u
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgc2VsZWN0aW9uID0gRnJh
bWVTZWxlY3Rpb246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29yZShz
ZWxmKS0+b3duZXJEb2N1bWVudCgpLCBzZWxlY3Rpb24pOwogICAgIFdlYlZpc2libGVQb3NpdGlv
biAqc3RhcnQgPSBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOnNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKV07CiAgICAgV2ViVmlzaWJsZVBvc2l0aW9uICplbmQgPSBbV2Vi
VmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOnNlbGVjdGlvbi52aXNpYmxlRW5k
KCldOwogICAgIHJldHVybiBbRE9NUmFuZ2UgcmFuZ2VGb3JGaXJzdFBvc2l0aW9uOnN0YXJ0IHNl
Y29uZDplbmRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJ
S2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4
dGVuc2lvbnMubW0KaW5kZXggM2IwOWYzYzYyNTZiMDBkNzYzMGVjYTZlYTE2ZDNjYzYyNGQ3Zjhj
Mi4uMmZjMzYxN2Y1YmQ4YjYyMmI3Njc5ODhiM2Q0Mzg2MWI5MDliMmZlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCkBAIC03OSw3
ICs3OSw3IEBAIEBpbXBsZW1lbnRhdGlvbiBET01SYW5nZSAoVUlLaXRFeHRlbnNpb25zKQogLSAo
dm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERp
cmVjdGlvbilkaXJlY3Rpb24KIHsKICAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNlbGYpOwotICAg
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOworICAgIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uKHJhbmdlLT5vd25lckRvY3VtZW50KCkpOwogICAg
IGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhyYW5nZSk7CiAgICAgCiAgICAgV2ViQ29yZTo6VGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk7CkBA
IC0xMDcsNyArMTA3LDcgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9u
OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KIC0gKHZvaWQpZXh0ZW5kOihV
SW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJl
Y3Rpb24KIHsKICAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOworICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
IGZyYW1lU2VsZWN0aW9uKHJhbmdlLT5vd25lckRvY3VtZW50KCkpOwogICAgIGZyYW1lU2VsZWN0
aW9uLm1vdmVUbyhyYW5nZSk7CiAgICAgCiAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91
bnQ7IGkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmlu
ZGV4IDFkMmIzZjgwOTIwNmQzN2QwNWRmYjJhYTlhYjA4OGZmNjYyNDRjYmIuLjEzNmNkOGY3MzI2
ZDM2M2Y1NTVlZTc2OTdjNTRkNzdkZDZhYWRjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNzgwLDExICs3ODAsMTUgQEAgLSAoQk9PTClfbmVl
ZHNMYXlvdXQKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIC0gKERPTVJhbmdlICopX3Jhbmdl
QnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0
ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9u
KWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KWdyYW51bGFy
aXR5CiB7Ci0gICAgaWYgKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgp
KQorICAgIGF1dG8qIGRvY3VtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKGRvY3Vt
ZW50LT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsKLSAgICBzZWxlY3Rpb24uc2V0U2VsZWN0
aW9uKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb24oKmRvY3VtZW50KTsKKyAgICBzZWxlY3Rp
b24uc2V0U2VsZWN0aW9uKGRvY3VtZW50LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAg
c2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKICAg
ICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVjMGI3ZDdiMjc3YzJlM2U2YzE3MDJk
YzY5OGY4Y2MxZTBmY2NhNjMuLmRjOGJiMTZmNDZjZDI1NzE0NTc3NTYxM2JkOWVjN2QzY2ZlZDU1
N2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNC0yNyAgSmFjayBMZWUgIDxzaGloY2hp
ZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5k
OjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYwMAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBjcmFz
aC4KKworICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1j
b21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9pbnNl
cnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbDogQWRkZWQuCisK
KyAgICAgICAgTW9kaWZ5IHRoZSB0ZXN0IHJlc3VsdC4gRnJhbWVTZWxlY3Rpb24gaXMgYmVpbmcg
ZGVzdHJ1Y3RlZCBhbG9uZyB3aXRoCisgICAgICAgIGRvY3VtZW50IHNvIGFuIGFkZGl0aW9uYWwg
c2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRpb24gaXMgZXhwZWN0ZWQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVj
dGVkLnR4dDoKKwogMjAyMC0wNC0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29t
PgogCiAgICAgICAgIFsgaU9TIF0gUkVHUkVTU0lPTjogYW5pbWF0aW9ucy9jaGFuZ2Uta2V5ZnJh
bWVzLW5hbWUuaHRtbCBpcyBhIGZsYWt5IGZhaWx1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRo
ZW4tZWRpdC1jb21tYW5kLWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDQwMzQyM2U1
OTA5NTAyNjVmMDhhMzI5MjZlNjYxN2QwMThhN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jh
c2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGluc2VydGluZyBsaXN0IGZvbGxv
d2VkIGJ5IGFuIGVkaXQgY29tbWFuZC4gVGhlIHRlc3QgcGFzc2VzIGlmIFdlYktpdCBkb2Vzbid0
IGNyYXNoIG9yIGhpdCBhbiBhc3NlcnRpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sIGIv
TGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1h
bmQtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWYzODFkOWVmNWEzZmQ5NGViMjEwOTBjMmEyMmZi
YzA3NTEyYWFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRp
bmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApAQCAtMCwwICsxLDE5
IEBACis8Ym9keT48aW1hZ2U+PC9pbWFnZT48Zm9ybSBpZD1mb3JtIGNvbnRlbnRFZGl0YWJsZT10
cnVlPjxvYmplY3QgZGF0YT0/IG9ubG9hZD1vYmplY3RPbkxvYWQoKT48L29iamVjdD48L2Zvcm0+
PGRpYWxvZyBvcGVuPSJ0cnVlIj5hPC9kaWFsb2c+Cis8c2NyaXB0PgorICAgIGRvY3VtZW50Lmdl
dFNlbGVjdGlvbigpLmVtcHR5KCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdEFs
bCIsIGZhbHNlKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIG9iamVjdE9uTG9hZCgpIHsKKyAgICAgICAgZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoImluc2VydFVub3JkZXJlZExpc3QiLCBmYWxzZSk7CisgICAgICAgIGRvY3Vt
ZW50LmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxzZSk7CisgICAgICAgIHJlcXVlc3RBbmltYXRp
b25GcmFtZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRN
TCA9ICI8cD4gVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93ZWQgYnkgYW4gZWRpdCBjb21tYW5k
LiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2Vy
dGlvbi48L3A+IjsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSk7CisgICAgfQorPC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0
ZWJvYXJkL2RyYWctZHJvcC1kZWFkLWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0
ZWQudHh0CmluZGV4IGQ2YmM3YjFlNmYwM2UzYjQ4YWYwNDE4YzY1NTA0YTRkMjEzN2MxYWMuLmU1
YmRkMmEwYmZkODk1MmQ5NzY2YTQzN2NhY2VhNDY2NDg5Nzc4NjYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJh
bWUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bh
c3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC00LDYgKzQsNyBA
QCBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpbwogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMCBvZiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBv
ZiAjdGV4dCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDUgb2YgI3RleHQgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBz
dGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJl
bmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397809</attachid>
            <date>2020-04-27 22:45:07 -0700</date>
            <delta_ts>2020-05-01 13:04:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200427224505.patch</filename>
            <type>text/plain</type>
            <size>221345</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q1ZjQzNWMzMzYyMGNk
YTRkOTgyYWI0MmRjZWM5YTgyMDgxOTMyZC4uNWU1OWRkMmMyMjA2YWQzOTNhMzE1OTk4ODJiY2I1
ZjgyMThkOGI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAyMC0wNC0yMyAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5Njk0NTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBGcmFtZVNlbGVjdGlvbiBh
bmQgRWRpdG9yIG9iamVjdHMgZnJvbSBGcmFtZSB0byBEb2N1bWVudCBzbyB3aGVuIGEgZG9jdW1l
bnQgaXMgZGV0YWNoZWQKKyAgICAgICAgaW4gbmVzdGVkIGNvbW1hbmQgZXhlY3V0aW9ucywgdGhl
IG5leHQgRWRpdENvbW1hbmQgd291bGQgbm90IGZhaWwgaW4gY29uc3RydWN0b3IuCisKKyAgICAg
ICAgVGVzdDogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1fc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFuYWdlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
ZWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBw
bGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjplZGl0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9NYXJrZXJBdEVuZE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3RhdGVk
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eURpY3RhdGlvbkFsdGVybmF0aXZlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6cmVhcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6d2lsbEFwcGx5Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGlkQXBwbHlDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5n
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0
eWxlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVy
Z2VQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5w
dXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmZyYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpmcmFtZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWZhdWx0UGFyYWdy
YXBoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGVhclRleHRDb21tYW5kOjpDcmVhdGVB
bmRBcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRl
bXBvcmFyeVNlbGVjdGlvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2U6On5UZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YmVoYXZpb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGllbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5FZGl0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2Fu
REhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhblBhc3RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y2FuRGVsZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2hvdWxkU21hcnREZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVXaXRo
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0
aFNtYXJ0RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZEluc2VydFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVu
dFRhcmdldEZyb21TZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0VGV4dEZvckNvbmZpcm1lZENvbXBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBh
c3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbmRlckxheWVyRGlkU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0Q29tcG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2V0Q29tcG9zaXRpb25TY29wZTo6U2V0Q29tcG9zaXRpb25TY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXRDb21wb3NpdGlvblNjb3BlOjp+U2V0Q29tcG9zaXRpb25TY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpsZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRB
dENhcmV0T3JSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0
aW9uVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRp
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJhbmdlRm9yUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cmFuc3Bvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzZWxlY3RlZFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVj
dGlvblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bm90aWZ5Q2xpZW50
T2ZBdHRhY2htZW50VXBkYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRvZ2dsZU92
ZXJ3cml0ZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRp
bmdTdGFuZGFsb25lSW1hZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZG9j
dW1lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2U6OlRlbXBvcmFyeVNlbGVjdGlv
bkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VGb3JTY29w
ZTo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpkb2N1bWVudCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmspOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Q29tbWFu
ZDo6Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUg
Y29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkJ5
TW91c2VJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNl
bGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9y
UGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmlzRm9jdXNlZEFuZEFjdGl2ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmN1cnJlbnRGb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNldFNob3VsZFNob3dCbG9ja0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YXBwZWFyYW5jZVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25Db21tYW5kOjpkb1VuYXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlcjo6Y2xpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6
aXNBc3luY2hyb25vdXNFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRp
ZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVk
KToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNl
bGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlR5
cGluZ0NvbW1hbmQ6OndpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5l
d2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVh
a0FuZE5vdGlmeUFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQW5kTm90aWZ5QWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1
b3RlZENvbnRlbnRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKiBlZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdp
dGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBh
c3RlYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0Rp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0
eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRT
ZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2xpYndwZS9F
ZGl0b3JMaWJXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNlbGVjdGlvbldpbGxDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvd2lu
L0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmRpZE9wZW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6CisKIDIwMjAt
MDQtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBUaW1lc3RhbXBzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIHJlbmRlcmluZyB1cGRh
dGUgc3RlcHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDBlMThjYzg1YWFiMGU5ZmI5NmNl
NjFjZGNlZWMzYTAwZTM3NzRiMjUuLjY5MDc4NjI4ZGQ3MzQ4NTkxY2FiMmEwM2YxNzg5MGY5NTE0
YzY0NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTgyLDYgKzU4Miw4IEBAIERvY3Vt
ZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCB1bnNpZ25lZCBkb2N1
bWVudENsYXNzZXMsIHVuc2lnCiAgICAgLCBtX29yaWVudGF0aW9uTm90aWZpZXIoY3VycmVudE9y
aWVudGF0aW9uKGZyYW1lKSkKICAgICAsIG1faWRlbnRpZmllcihEb2N1bWVudElkZW50aWZpZXI6
OmdlbmVyYXRlKCkpCiAgICAgLCBtX3VuZG9NYW5hZ2VyKFVuZG9NYW5hZ2VyOjpjcmVhdGUoKnRo
aXMpKQorICAgICwgbV9lZGl0b3IobWFrZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKKyAgICAs
IG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rpb24+KHRoaXMpKQogewogICAg
IGF1dG8gYWRkUmVzdWx0ID0gYWxsRG9jdW1lbnRzTWFwKCkuYWRkKG1faWRlbnRpZmllciwgdGhp
cyk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
QEAgLTI0OTksNyArMjUwMSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRlc3Ryb3lSZW5kZXJUcmVlKCkK
ICAgICAgICAgdmlldygpLT5kaWREZXN0cm95UmVuZGVyVHJlZSgpOwogfQogCi12b2lkIERvY3Vt
ZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQordm9pZCBEb2N1bWVudDo6d2lsbEJlUmVtb3Zl
ZEZyb21GcmFtZSgpCiB7CiAgICAgaWYgKG1faGFzUHJlcGFyZWRGb3JEZXN0cnVjdGlvbikKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjU5Miw2ICsyNTk0LDggQEAgdm9pZCBEb2N1bWVudDo6cHJlcGFy
ZUZvckRlc3RydWN0aW9uKCkKICAgICAgICAgcGFnZSgpLT51cGRhdGVJc1BsYXlpbmdNZWRpYShI
VE1MTWVkaWFFbGVtZW50SW52YWxpZElEKTsKICAgICB9CiAKKyAgICBlZGl0b3IoKS5jbGVhcigp
OworICAgIHNlbGVjdGlvbigpLndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKTsKICAgICBkZXRhY2hG
cm9tRnJhbWUoKTsKIAogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAppbmRleCAyMTgyYzQzNDBhNDJjY2U0Y2RlOWI5MjgzYmVjYzk2MTViNTAxYWIwLi4xODY5
ZTI4NzcwODExMGUxYjg1ZWNlNDkyNDQ2YWEzZWVjZDM5YzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aApAQCAtMTIwLDYgKzEyMCw3IEBAIGNsYXNzIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDsKIGNs
YXNzIERvY3VtZW50VGltZWxpbmU7CiBjbGFzcyBEb2N1bWVudFR5cGU7CiBjbGFzcyBFZGl0aW5n
QmVoYXZpb3I7CitjbGFzcyBFZGl0b3I7CiBjbGFzcyBFdmVudExvb3A7CiBjbGFzcyBFdmVudExv
b3BUYXNrR3JvdXA7CiBjbGFzcyBFeHRlbnNpb25TdHlsZVNoZWV0czsKQEAgLTEyOCw2ICsxMjks
NyBAQCBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGb250RmFjZVNldDsKIGNsYXNzIEZvcm1Db250
cm9sbGVyOwogY2xhc3MgRnJhbWU7CitjbGFzcyBGcmFtZVNlbGVjdGlvbjsKIGNsYXNzIEZyYW1l
VmlldzsKIGNsYXNzIEZ1bGxzY3JlZW5NYW5hZ2VyOwogY2xhc3MgR1BVQ2FudmFzQ29udGV4dDsK
QEAgLTYyNiw3ICs2MjgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZEJlY29tZUN1cnJlbnRE
b2N1bWVudEluRnJhbWUoKTsKICAgICB2b2lkIGRlc3Ryb3lSZW5kZXJUcmVlKCk7Ci0gICAgdm9p
ZCBwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tRnJh
bWUoKTsKIAogICAgIC8vIE92ZXJyaWRlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgbWV0aG9kcyB0
byBkbyBhZGRpdGlvbmFsIHdvcmsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSgpIGNvbnN0IGZpbmFsOwpAQCAtMTU3OCw2
ICsxNTgwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0
b21Db250ZW50KCkgeyBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50ID0gdHJ1ZTsg
fQogICAgIGJvb2wgaGFzVmlzdWFsbHlOb25FbXB0eUN1c3RvbUNvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2hhc1Zpc3VhbGx5Tm9uRW1wdHlDdXN0b21Db250ZW50OyB9CiAKKyAgICBFZGl0b3Im
IGVkaXRvcigpIHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgY29uc3QgRWRpdG9yJiBlZGl0b3Io
KSBjb25zdCB7IHJldHVybiBtX2VkaXRvcjsgfQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rp
b24oKSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQ
bGFjZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwg
dW5zaWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxh
Z3MgPSAwKTsKQEAgLTIxMTMsNiArMjEyMCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOwogCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRp
ZmllZEVsZW1lbnRzTWFwOworCisgICAgVW5pcXVlUmVmPEVkaXRvcj4gbV9lZGl0b3I7CisgICAg
VW5pcXVlUmVmPEZyYW1lU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKIEVsZW1lbnQqIGV2
ZW50VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzYmQ2
NThkZjY0NDAxZDIyYjA2MWQ2Y2M0MzBmZWVjYjQxZmViMDA2Li5hZWY0YmM1YTdkOGY2ZDZkNWFk
NjZlNjYwYjdmNGU4ZWVlMTg4YTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgc3RhdGlj
IGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcioKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCitBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKERvY3VtZW50
JiBkb2N1bWVudCkKICAgICA6IG1fdGltZXIoKnRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjp0aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCiB7CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5k
aW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFyKCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gY3Vy
cmVudFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBp
ZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTQ5LDcgKzE0OSw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVu
ZGluZ0NvcnJlY3Rpb24oKSBjb25zdAogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFJhbmdlJiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuaGFzTWFya2Vycyht
aXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7
CisgICAgcmV0dXJuICFtX2RvY3VtZW50Lm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5n
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAogdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCkKICAgICBpZiAobV90eXBlICE9IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0
aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9u
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCk7CiAKICAgICBpZiAobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBj
YXJldFBvc2l0aW9uKSB7CiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRp
c21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOwpA
QCAtMjIwLDE0ICsyMjAsMTQgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBpZiAoYXV0
byBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5yZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVk
LCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9m
cmFtZSk7Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBSZWZQ
dHI8RnJhbWU+IHByb3RlY3RvcihtX2RvY3VtZW50LmZyYW1lKCkpOworICAgIG1fZG9jdW1lbnQu
dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihz
ZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25P
cHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAg
ICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZD
b3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwg
RnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgYXV0byByYW5n
ZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQu
bWFya2VycygpOwogICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygqcmFuZ2UsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIG1hcmtlcnMuYWRkTWFya2Vy
KCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKICAgICBtYXJrZXJzLmFkZE1h
cmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKQEAg
LTIzOCwxMiArMjM4LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJG
aXJlZCgpCiAgICAgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZyA9IGZhbHNlOwogICAgIHN3aXRjaCAo
bV90eXBlKSB7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbjogewotICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChz
ZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBWaXNpYmxl
UG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAg
ICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24o
cCwgc3RhcnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNo
b3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwg
Y3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgbnVsbHB0cik7CisgICAgICAgIG1f
ZG9jdW1lbnQuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNl
bWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZl
UmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFu
Z2UpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRp
dmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBo
KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpKTsKICAgICAgICAgVmVj
dG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNz
ZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CisgICAgICAgIHRleHRDaGVja2VyKCktPmdl
dEd1ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdn
ZXN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUg
PSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5n
JiByZXN1bHQpCiB7CiAgICAgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZlID0gbV9yYW5nZVdp
dGhBbHRlcm5hdGl2ZS5nZXQoKTsKLSAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1f
ZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQo
KSkKKyAgICBpZiAoIXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZG9jdW1lbnQgIT0gcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
U3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CkBA
IC0zNDIsNyArMzQyLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9t
YXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogCiBGbG9hdFJlY3QgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsKKyAgICBhdXRv
KiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAg
ICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcodW5p
dGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKSkp
OwpAQCAtMzUwLDcgKzM1MCw3IEBAIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuCiAKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBj
dXJyZW50U2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIFZp
c2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKICAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBh
dXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKICAgICAvLyBj
b250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBj
YW4gcXVpY2tseSByZXZlcnQgdGhlCiAgICAgLy8gdW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBI
ZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0
CkBAIC0zODUsNyArMzg1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24KIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRp
dENvbW1hbmQqIGNvbW1hbmQpCiB7CiAgICAgaWYgKGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5k
KCkgJiYgIWNvbW1hbmQtPnNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0g
ICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1l
bnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBtX2RvY3VtZW50Lm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsK
IAogICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0
ZXJDb21tYW5kKGNvbW1hbmQpOwogICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7CkBAIC00MDAsMTQgKzQwMCwxNCBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1h
bmRDb21wb3NpdGlvbgogICAgIGF1dG8gcmFuZ2UgPSBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAg
YXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8m
IG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBtYXJrZXJzLmFkZE1hcmtlcigq
cmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiAgICAgbWFya2Vycy5hZGRNYXJr
ZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAK
IEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRpdG9yQ2xpZW50KCkK
IHsKLSAgICByZXR1cm4gbV9mcmFtZS5wYWdlKCkgPyAmbV9mcmFtZS5wYWdlKCktPmVkaXRvckNs
aWVudCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9kb2N1bWVudC5wYWdlKCkgPyAmbV9kb2N1
bWVudC5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogbnVsbHB0cjsKIH0KIAogVGV4dENoZWNrZXJD
bGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKQEAgLTQ4Mywx
MiArNDgzLDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGlu
Z1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgLy8gTWFyayB0aGlzIHdo
aXRlc3BhY2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZv
bGxvd2luZyB0aGlzCiAgICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhl
IHNhbWUgb3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQogICAgIC8vIHdv
bid0IGF1dG9jb3JyZWN0IGl0IGFnYWluLgotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2Vy
cygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRl
bGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2Nv
cnJlY3Rpb24pOworICAgIG1fZG9jdW1lbnQubWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdD
aGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9v
cmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOwogfQogCiBib29sIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2Vk
QnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIFJhbmdlJiByYW5nZVdp
dGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCiB7Ci0gICAg
YXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIGF1dG8m
IG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMoKTsKICAgICBpZiAobWFya2Vycy5oYXNNYXJr
ZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7
CiAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9u
KQogICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJl
Y3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LnJl
cGxhY2VtZW50KTsKQEAgLTUyNCw3ICs1MjQsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgog
ICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUq
IG5vZGUgPSBlbmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgYXV0byB3b3Jk
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5z
dGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIGF1dG8gd29yZFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQo
KSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBw
bGFpblRleHQod29yZFJhbmdlKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjIsNyArNTYyLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1h
cmtlciYKIAogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjphbHRlcm5hdGl2ZVRleHRDbGllbnQoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnBhZ2UoKSA/
IG1fZnJhbWUucGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CisgICAg
cmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBtX2RvY3VtZW50LnBhZ2UoKSA/IG1fZG9jdW1l
bnQucGFnZSgpLT5hbHRlcm5hdGl2ZVRleHRDbGllbnQoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmlu
ZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRB
bHRlcm5hdGl2ZVRleHQoQWx0ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVRleHRUeXBlLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTk5LDcgKzU5OSw3IEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1Jh
bmdlKGNvbnN0IFJhbmdlJiByYW5nZSwKIAogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBt
b2RpZmllZCB0aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVn
emlsbGE6IDg5NTI2CiAgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29y
cmVjdGlvbiA9IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHModHJlZVNjb3BlUm9vdCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlKTsKLSAg
ICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbiA9IG1ha2VCb3Vu
ZGFyeVBvaW50KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAg
YXV0byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRh
cnlQb2ludChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAg
IGlmICghdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAgICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KHsgdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFy
YWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlv
bk9mZnNldEluUGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwpAQCAtNjIxLDExICs2
MjEsMTEgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRl
eHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAodHJpZ2dlcmluZ0V2ZW50
KQogICAgICAgICB0YXJnZXQgPSB0cmlnZ2VyaW5nRXZlbnQtPnRhcmdldCgpOwogICAgIGVsc2UK
LSAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQobV9mcmFtZS5k
b2N1bWVudCgpKTsKKyAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1l
bnQoJm1fZG9jdW1lbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZnJh
bWUud2luZG93UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRv
IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24oJm1fZG9jdW1lbnQuZnJhbWUo
KS0+d2luZG93UHJveHkoKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVu
dC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7CiAKICAgICB0YXJnZXQtPmRp
c3BhdGNoRXZlbnQoZXZlbnQpOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIFZlY3RvcjxTdHJpbmc+IEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihj
b25zdCBECiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0
ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBhdXRvJiBlZGl0b3IgPSBtX2ZyYW1lLmVkaXRvcigp
OworICAgIGF1dG8mIGVkaXRvciA9IG1fZG9jdW1lbnQuZWRpdG9yKCk7CiAgICAgYXV0byBzZWxl
Y3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFl
ZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXgg
OTQ3NzRhNzZiMjA3ZWU4NzEwMWQ4M2EyM2JkOTNjZmRmNmRlNjQyOS4uZTNkZjliNTc2ZmMzMDg4
ZGMyNzdiM2Y3OTFjZjgyMzFiOTA2MzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTM1LDExICszNSwxMSBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIERv
Y3VtZW50OwogY2xhc3MgRWRpdENvbW1hbmQ7CiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
OwogY2xhc3MgRWRpdG9yQ2xpZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGcmFtZTsKIGNsYXNz
IFJhbmdlOwogY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyKEZyYW1lJiBmcmFtZSkgVU5MRVNTX0VOQUJMRUQoIDogbV9mcmFtZShm
cmFtZSkgeyB9KQorICAgIGV4cGxpY2l0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRG9jdW1l
bnQmIGRvY3VtZW50KSBVTkxFU1NfRU5BQkxFRCg6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfSkK
ICAgICB+QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAog
ICAgIHZvaWQgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUp
IFVOTEVTU19FTkFCTEVEKHsgfSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIEFs
dGVybmF0aXZlVGV4dENsaWVudCogYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCk7CiAjZW5kaWYKIAot
ICAgIEZyYW1lJiBtX2ZyYW1lOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAogI3Vu
ZGVmIFVOTEVTU19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCmluZGV4IDM1MGZkNmY1MzFlNGM2M2YwYWI1MTIwYzcxNjNlYTcyMjdm
ZTE3NGIuLjgwN2VlN2I4OGIzYjExZWJlYWY4YWMzZTE3NjQ0MmQ0NjgzOTkwYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0yMjgs
MTcgKzIyOCwxNyBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnVuYXBwbHkoKQogICAg
IC8vIHVwIHRoZSBjb21wb3NpdGlvbiB3aWxsIGxlYXZlIGEgc3RhbGUsIGludmFsaWQgY29tcG9z
aXRpb24sIGFzIGluIDxyZGFyOi8vcHJvYmxlbS82ODMxNjM3Pi4KICAgICAvLyBEZXNrdG9wIGhh
bmRsZXMgdGhpcyBpbiAtW1dlYkhUTUxWaWV3IF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFn
ZXJdLCBidXQgdGhlIHBob25lCiAgICAgLy8gZ29lcyBhbm90aGVyIHJvdXRlLgotICAgIGZyYW1l
LT5lZGl0b3IoKS5jYW5jZWxDb21wb3NpdGlvbigpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigp
LmNhbmNlbENvbXBvc2l0aW9uKCk7CiAjZW5kaWYKIAotICAgIGlmICghZnJhbWUtPmVkaXRvcigp
LndpbGxVbmFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5lZGl0b3Io
KS53aWxsVW5hcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXpl
X3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBp
OyAtLWkpCiAgICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1VuYXBwbHkoKTsKIAotICAgIGZy
YW1lLT5lZGl0b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBtX2RvY3VtZW50LT5l
ZGl0b3IoKS51bmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hl
OjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3JlcGxhY2VkVGV4dC5wb3N0VGV4
dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yVW5hcHBseShtX2RvY3VtZW50LT5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSk7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQCB2b2lkIEVkaXRDb21tYW5kQ29t
cG9zaXRpb246OnJlYXBwbHkoKQogICAgIC8vIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9y
IHRoZSBjcmVhdGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBtX2RvY3VtZW50LT51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGlmICghZnJhbWUtPmVk
aXRvcigpLndpbGxSZWFwcGx5RWRpdGluZygqdGhpcykpCisgICAgaWYgKCFtX2RvY3VtZW50LT5l
ZGl0b3IoKS53aWxsUmVhcHBseUVkaXRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBmb3IgKGF1dG8mIGNvbW1hbmQgOiBtX2NvbW1hbmRzKQogICAgICAgICBjb21tYW5kLT5kb1Jl
YXBwbHkoKTsKIAotICAgIGZyYW1lLT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsK
KyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5yZWFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKIAogICAg
IGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBtX3Jl
cGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yUmVhcHBseShtX2Rv
Y3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6On5Db21wb3NpdGVFZGl0Q29tbWFuZCgpCiAKIGJvb2wgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIHJldHVybiBmcmFtZSgp
LmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRoaXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdz
KCkpOworICAgIHJldHVybiBkb2N1bWVudCgpLmVkaXRvcigpLndpbGxBcHBseUVkaXRpbmcoKnRo
aXMsIHRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjphcHBseSgpCkBAIC0zNzgsMTMgKzM3OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjphcHBseSgpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRpZEFwcGx5Q29t
bWFuZCgpCiB7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7Cisg
ICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hcHBsaWVkRWRpdGluZygqdGhpcyk7CiB9CiAKIFZlY3Rv
cjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2Vz
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzRWRpdGluZ1RleHRBcmVhT3JUZXh0SW5wdXQoKSk7
Ci0gICAgYXV0byBmaXJzdFJhbmdlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CisgICAgYXV0byBmaXJzdFJhbmdlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAg
ICByZXR1cm4geyB9OwogCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJh
Z3JhcAogICAgIC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQg
YWN0aW9uICJXZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZy
YWdtZW50IGhlcmUuCiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihz
dGFydCwgZW5kLCBET1dOU1RSRUFNKSk7Ci0gICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRvY3VtZW50KCku
ZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigp
KTsKICAgICBkZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCiAg
ICAgQVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pc0Nv
bm5lY3RlZCgpKTsKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFw
CiAgICAgICAgIG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxl
KTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7CiAKLSAgICBm
cmFtZSgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVj
dGlvbigpKTsKKyAgICBkb2N1bWVudCgpLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMg
aW4gYW4gZW1wdHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkg
cGFyYWdyYXBoIHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9u
SXNFbXB0eVBhcmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0
T2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQ
YXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggY2E1NmYz
MDExYTAwNDRlMzg0MTI5NjQyOGExMGZkZjg3MDVjYjY0Zi4uZTIwYThkOGRhNmU0OGIzOTZiYTY0
OGU5YWMyNDA4MWMxNzMxNzkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAgICAgLy8gSG93ZXZlciwg
aWYgdHlwaW5nIHN0eWxlIHdhcyBwcmV2aW91c2x5IHNldCBmcm9tIGFub3RoZXIgdGV4dCBub2Rl
IGF0IHRoZSBwcmV2aW91cwogICAgIC8vIHBvc2l0aW9uIChub3cgZGVsZXRlZCksIHdlIG5lZWQg
dG8gY2xlYXIgdGhhdCBzdHlsZSBhcyB3ZWxsLgogICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBtX3Vw
c3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGZy
YW1lKCkuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICBkb2N1bWVudCgp
LnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNzQ0LDcgKzc0NCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQ
YXJhZ3JhcGhzKCkKICAgICAKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVu
dCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCksIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIGF1dG8gcmFuZ2VUb0JlUmVwbGFjZWQgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWZyYW1lKCkuZWRp
dG9yKCkuY2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKHJhbmdlLnB0cigpLCBy
YW5nZVRvQmVSZXBsYWNlZC5wdHIoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5wdHIoKSwgcmFuZ2VUb0Jl
UmVwbGFjZWQucHRyKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gbW92ZVBhcmFn
cmFwaHMgd2lsbCBpbnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQg
d291bGQgcmVxdWlyZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODE4LDcgKzgxOCw3
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRl
ckRlbGV0ZSgpCiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5l
dyBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0
ZWQgb25lcywKICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJh
Y2sgYW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUg
CiAgICAgLy8gcHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGZyYW1lKCkuc2VsZWN0
aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkpOworICAgIGRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZS5jb3B5UmVmKCkp
OwogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNsZWFyVHJhbnNpZW50U3RhdGUo
KQpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgaWYgKCFtX3JlcGxhY2UpIHsKICAgICAgICAgRWxlbWVudCogdGV4dENvbnRyb2wg
PSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsK
ICAgICAgICAgaWYgKHRleHRDb250cm9sICYmIHRleHRDb250cm9sLT5mb2N1c2VkKCkpCi0gICAg
ICAgICAgICBmcmFtZSgpLmVkaXRvcigpLnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQodGV4
dENvbnRyb2wpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVs
ZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9sKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMg
dG8gbGF0ZXIgbWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKQEAgLTk0NCw3ICs5NDQsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIH0KIAogICAgIGJvb2wgc2hv
dWxkUmViYWxhY2VXaGl0ZVNwYWNlID0gdHJ1ZTsKLSAgICBpZiAoIWZyYW1lKCkuZWRpdG9yKCku
YmVoYXZpb3IoKS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgewor
ICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFJlYmFsYW5jZVdo
aXRlU3BhY2VzSW5TZWN1cmVGaWVsZCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2VuZGlu
Z1Bvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pihub2RlKSkg
ewogICAgICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CkBA
IC05NTgsNyArOTU4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkK
ICAgICBjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAKICAgICBpZiAoIW9yaWdp
bmFsU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUoKS5lZGl0b3IoKS5kZWxldGVkQXV0
b2NvcnJlY3Rpb25BdFBvc2l0aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsK
KyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0
aW9uKG1fZW5kaW5nUG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIAogICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5LCBlbmRp
bmdTZWxlY3Rpb24oKS5pc0RpcmVjdGlvbmFsKCkpKTsKICAgICBjbGVhclRyYW5zaWVudFN0YXRl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCmluZGV4IGRmMDk4YzNmN2Rh
MTdjNzg5NGUyY2Y3ODU1NTliYzg3NmM4ODQ2MTIuLjFmNWI2YWNiOWRiMTg4ZWE2OTBmNjAwNTZj
NzczNzcwMGUyYjhmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkVkaXRvci5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgpAQCAtMTI3LDMzICsxMjYsMTkgQEAgRWRpdENvbW1hbmQ6
OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0
aW5nQWN0aW9uKQogewotICAgIEFTU0VSVChkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBzZXRTdGFy
dGluZ1NlbGVjdGlvbihtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CisgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9uKTsK
IH0KIAogRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbikKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7Ci0gICAg
QVNTRVJUKGRvY3VtZW50LmZyYW1lKCkpOwogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHN0YXJ0
aW5nU2VsZWN0aW9uKTsKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsK
IH0KIAogRWRpdENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpID0gZGVmYXVsdDsKIAotRnJhbWUmIEVk
aXRDb21tYW5kOjpmcmFtZSgpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0g
ICAgcmV0dXJuICpkb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLWNvbnN0IEZyYW1lJiBFZGl0Q29t
bWFuZDo6ZnJhbWUoKSBjb25zdAotewotICAgIEFTU0VSVChkb2N1bWVudCgpLmZyYW1lKCkpOwot
ICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCiBFZGl0QWN0aW9uIEVkaXRDb21t
YW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9lZGl0aW5nQWN0aW9u
OwpAQCAtMTY4LDExICsxNTMsNyBAQCBzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRp
b24qIGNvbXBvc2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZAogCiBib29sIEVk
aXRDb21tYW5kOjppc0VkaXRpbmdUZXh0QXJlYU9yVGV4dElucHV0KCkgY29uc3QKIHsKLSAgICBh
dXRvKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byogY29udGFpbmVyID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8qIGNvbnRh
aW5lciA9IG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuY29udGFp
bmVyTm9kZSgpOwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTIxNyw3ICsxOTgsNyBAQCB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cgogewogICAgIGlmICgh
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24odHlwZSwgdGV4dCwgZnJhbWUoKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKHR5cGUsIHRleHQsIG1fZG9jdW1lbnQtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCkpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKEFYVGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuaAppbmRleCBkZWJjZmYwMjQ1ZWRmMGRlZTdkZmJlZmVkNWY2NDA4MWI1MTJhMzY3Li4yZjY3
Y2Q3MzM0YzJjOGJkNTY5MGYxMTM1YzEwZDAwMGRjMzA0M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oCkBAIC0zOCw3ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50
OwotY2xhc3MgRnJhbWU7CiAKIFN0cmluZyBpbnB1dFR5cGVOYW1lRm9yRWRpdGluZ0FjdGlvbihF
ZGl0QWN0aW9uKTsKIApAQCAtNjQsOCArNjMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
RWRpdENvbW1hbmQoRG9jdW1lbnQmLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZp
ZWQpOwogICAgIEVkaXRDb21tYW5kKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIGNvbnN0IEZyYW1lJiBmcmFtZSgpIGNv
bnN0OwotICAgIEZyYW1lJiBmcmFtZSgpOwogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSB7
IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHBhcmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApp
bmRleCBjMTEzYzAxM2QwMDQ4ZWZhOTUyMzNhYmQ2NGYwNGU0YTk1NTVjNzJkLi40YmI0NDY2ODg0
MmU0YmVhMmVkODM0NDdkM2JhNjJkOTA3M2ZlZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5jcHAKQEAgLTg5OCw3ICs4OTgsNyBAQCBib29sIGlzRW1wdHlUYWJsZUNlbGwoY29uc3QgTm9k
ZSogbm9kZSkKIAogUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVu
dChEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgc3dpdGNoIChkb2N1bWVudC5mcmFtZSgpLT5l
ZGl0b3IoKS5kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKCkpIHsKKyAgICBzd2l0Y2ggKGRvY3Vt
ZW50LmVkaXRvcigpLmRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkgewogICAgIGNhc2UgRWRp
dG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXY6CiAgICAgICAgIHJldHVybiBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBjYXNlIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklz
UDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBkNTQyNGFjN2Qy
MTkyOGQ1MjY3MzQ1OTVmNWZmNjZlZTc3MzMwYWFkLi4yZjYzNTRhNWQyZjMwYTM2YjkwM2YxMGI5
MzczZmZhMjNhMGM4NmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
CkBAIC0xNjg2LDcgKzE2ODYsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0
eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICBnZXRQcm9wZXJ0
aWVzTm90SW4oKnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVTdHlsZVBy
b3BlcnRpZXM6OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0
aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgYm9vbCBzaG91bGRTdHlsZVdpdGhDU1MgPSBk
b2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7CisgICAgYm9v
bCBzaG91bGRTdHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRo
Q1NTKCk7CiAgICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0
U3R5bGVzKCpkb2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZv
bnREZWZhdWx0U2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDJiMTA2
MDY4OTkwYjcyMjgyNGNkODZkMTdmZGNjMmU1ZjFjYzM4ZDUuLjYzY2NlMzkxODE2OWNlNDZhMzM5
OGE1ODBhMDEyMTVmMjA3M2ZmMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3
Myw4ICsxNzMsOCBAQCBzdGF0aWMgU3RyaW5nIGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxl
QW5kQWN0aW9uKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBYwogY2xhc3MgQ2xlYXJUZXh0Q29t
bWFuZCA6IHB1YmxpYyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIHsKIHB1YmxpYzoKICAgICBDbGVh
clRleHRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCk7Ci0gICAgc3RhdGljIHZvaWQgQ3JlYXRl
QW5kQXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSk7Ci0gICAgCisgICAgc3RhdGljIHZv
aWQgQ3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBFZGl0QWN0aW9u
IGVkaXRpbmdBY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIH07CkBAIC0xODksMTcgKzE4OSwxNyBA
QCBFZGl0QWN0aW9uIENsZWFyVGV4dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdAogICAg
IHJldHVybiBFZGl0QWN0aW9uOjpEZWxldGU7CiB9CiAKLXZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6
Q3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFtZSkKK3ZvaWQgQ2xlYXJUZXh0
Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChm
cmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbigp
LmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBsZWF2ZSBhcm91bmQg
c3RhbGUgY29tcG9zaXRpb24gc3RhdGUuCi0gICAgZnJhbWUtPmVkaXRvcigpLmNsZWFyKCk7Cisg
ICAgZG9jdW1lbnQuZWRpdG9yKCkuY2xlYXIoKTsKICAgICAKLSAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7Ci0gICAgYXV0byBjbGVhckNvbW1hbmQg
PSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgpKSk7Cisg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3RBbGwoKTsK
KyAgICBhdXRvIGNsZWFyQ29tbWFuZCA9IGFkb3B0UmVmKCpuZXcgQ2xlYXJUZXh0Q29tbWFuZChk
b2N1bWVudCkpOwogICAgIGNsZWFyQ29tbWFuZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKICAgICBjbGVhckNvbW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0yMDcsMjQgKzIwNywy
NCBAQCB2b2lkIENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KGNvbnN0IFJlZlB0cjxG
cmFtZT4gZnJhbWUpCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNl
IFdURjo6VW5pY29kZTsKIAotVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1wb3JhcnlTZWxl
Y3Rpb25DaGFuZ2UoRnJhbWUmIGZyYW1lLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiB0ZW1w
b3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IG9wdGlv
bnMpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjpUZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBPcHRpb25hbDxWaXNpYmxl
U2VsZWN0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb24sIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb24+IG9wdGlvbnMpCisgICAgOiBtX2RvY3VtZW50KFJlZlB0cigmZG9jdW1lbnQpKQog
ICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3dhc0lnbm9yaW5nU2VsZWN0aW9uQ2hh
bmdlcyhmcmFtZS5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkpCisgICAgLCBtX3dh
c0lnbm9yaW5nU2VsZWN0aW9uQ2hhbmdlcyhkb2N1bWVudC5lZGl0b3IoKS5pZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKCkpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAsIG1fYXBwZWFyYW5j
ZVVwZGF0ZXNXZXJlRW5hYmxlZChmcmFtZS5zZWxlY3Rpb24oKS5pc1VwZGF0ZUFwcGVhcmFuY2VF
bmFibGVkKCkpCisgICAgLCBtX2FwcGVhcmFuY2VVcGRhdGVzV2VyZUVuYWJsZWQoZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCgpKQogI2VuZGlmCiB7CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucyAmIFRlbXBvcmFyeVNlbGVjdGlv
bk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKHRydWUpOworICAgICAgICBkb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAg
ICAgaWYgKG9wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlv
bkNoYW5nZXMpCi0gICAgICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5n
ZXModHJ1ZSk7CisgICAgICAgIGRvY3VtZW50LmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXModHJ1ZSk7CiAKICAgICBpZiAodGVtcG9yYXJ5U2VsZWN0aW9uKSB7Ci0gICAgICAgIG1f
c2VsZWN0aW9uVG9SZXN0b3JlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
ICAgIG1fc2VsZWN0aW9uVG9SZXN0b3JlID0gZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgICAgIHNldFNlbGVjdGlvbih0ZW1wb3JhcnlTZWxlY3Rpb24udmFsdWUoKSk7CiAg
ICAgfQogfQpAQCAtMjM2LDEyICsyMzYsMTIgQEAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlOjp+
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlKCkKIAogICAgIGlmIChtX29wdGlvbnMgJiBUZW1wb3Jh
cnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpIHsKICAgICAgICAgYXV0
byByZXZlYWxTZWxlY3Rpb24gPSBtX29wdGlvbnMgJiBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246
OlJldmVhbFNlbGVjdGlvbiA/IEVkaXRvcjo6UmV2ZWFsU2VsZWN0aW9uOjpZZXMgOiBFZGl0b3I6
OlJldmVhbFNlbGVjdGlvbjo6Tm87Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9y
ZVNlbGVjdGlvbkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNl
bGVjdGlvbik7CisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMobV93YXNJZ25vcmluZ1NlbGVjdGlvbkNoYW5nZXMsIHJldmVhbFNlbGVjdGlvbik7
CiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9vcHRpb25zICYg
VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcykKLSAgICAg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBl
YXJhbmNlVXBkYXRlc1dlcmVFbmFibGVkKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9u
KCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQobV9hcHBlYXJhbmNlVXBkYXRlc1dlcmVFbmFi
bGVkKTsKICNlbmRpZgogfQogCkBAIC0yNTAsMTQgKzI1MCwxNCBAQCB2b2lkIFRlbXBvcmFyeVNl
bGVjdGlvbkNoYW5nZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikKICAgICBhdXRvIG9wdGlvbnMgPSBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVj
dGlvbk9wdGlvbnMoKTsKICAgICBpZiAobV9vcHRpb25zICYgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpEb05vdFNldEZvY3VzKQogICAgICAgICBvcHRpb25zLmFkZChGcmFtZVNlbGVjdGlvbjo6
RG9Ob3RTZXRGb2N1cyk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNl
bGVjdGlvbiwgb3B0aW9ucyk7CisgICAgbV9kb2N1bWVudC0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CiB9CiAKIC8vIFdoZW4gYW4gZXZlbnQgaGFuZGxlciBo
YXMgbW92ZWQgdGhlIHNlbGVjdGlvbiBvdXRzaWRlIG9mIGEgdGV4dCBjb250cm9sCiAvLyB3ZSBz
aG91bGQgdXNlIHRoZSB0YXJnZXQgY29udHJvbCdzIHNlbGVjdGlvbiBmb3IgdGhpcyBlZGl0aW5n
IG9wZXJhdGlvbi4KIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5k
KEV2ZW50KiBldmVudCkKIHsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rp
b247CiAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyBhIHRleHQgY29udHJvbCwgYW5kIHRoZSBjdXJy
ZW50IHNlbGVjdGlvbiBpcyBvdXRzaWRlIG9mIGl0cyBzaGFkb3cgdHJlZSwKQEAgLTI3NiwxMiAr
Mjc2LDEyIEBAIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKEV2
ZW50KiBldmVudCkKIC8vIEZ1bmN0aW9uIGNvbnNpZGVycyBNYWMgZWRpdGluZyBiZWhhdmlvciBh
IGZhbGxiYWNrIHdoZW4gUGFnZSBvciBTZXR0aW5ncyBpcyBub3QgYXZhaWxhYmxlLgogRWRpdGlu
Z0JlaGF2aW9yIEVkaXRvcjo6YmVoYXZpb3IoKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5n
QmVoYXZpb3IobV9mcmFtZS5zZXR0aW5ncygpLmVkaXRpbmdCZWhhdmlvclR5cGUoKSk7CisgICAg
cmV0dXJuIEVkaXRpbmdCZWhhdmlvcihtX2RvY3VtZW50LnNldHRpbmdzKCkuZWRpdGluZ0JlaGF2
aW9yVHlwZSgpKTsKIH0KIAogRWRpdG9yQ2xpZW50KiBFZGl0b3I6OmNsaWVudCgpIGNvbnN0CiB7
Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKKyAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fZG9jdW1lbnQucGFnZSgpKQogICAgICAgICByZXR1cm4gJnBhZ2UtPmVkaXRvckNsaWVu
dCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMzQ0LDEyICszNDQsMTIgQEAgYm9vbCBF
ZGl0b3I6OmhhbmRsZVRleHRFdmVudChUZXh0RXZlbnQmIGV2ZW50KQogCiBib29sIEVkaXRvcjo6
Y2FuRWRpdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogYm9vbCBFZGl0
b3I6OmNhbkVkaXRSaWNobHkoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUo
KTsKIH0KIAogZW51bSBjbGFzcyBDbGlwYm9hcmRFdmVudEtpbmQgewpAQCAtNDQyLDcgKzQ0Miw3
IEBAIHN0YXRpYyBib29sIGRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoUmVmUHRyPEVsZW1lbnQ+JiYg
dGFyZ2V0LCBDbGlwYm9hcmRFdmVudEtpbmQKIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ3V0KCkK
IHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRG
aWVsZCgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5Q
YXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhZGlz
cGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCksIENsaXBi
b2FyZEV2ZW50S2luZDo6QmVmb3JlQ3V0KTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIEVkaXRv
cjo6Y2FuREhUTUxDdXQoKQogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDb3B5KCkKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJv
YXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtp
bmQ6OkJlZm9yZUNvcHkpOwogfQpAQCAtNDg0LDEzICs0ODQsMTMgQEAgYm9vbCBFZGl0b3I6OmNh
bkNvcHkoKSBjb25zdAogewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChk
b2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29u
c3QKIHsKLSAgICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBwcmVz
c1RleHRJbnB1dEZyb21FZGl0aW5nKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFp
bkZyYW1lKCkubG9hZGVyKCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY2FuRWRpdCgpOwpAQCAtNDk4LDcg
KzQ5OCw3IEBAIGJvb2wgRWRpdG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpj
YW5EZWxldGUoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
ICAgICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpOwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZFNt
YXJ0RGVsZXRlKCkKIHsKICAgICBpZiAoYmVoYXZpb3IoKS5zaG91bGRBbHdheXNTbWFydERlbGV0
ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24o
KS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAogYm9v
bCBFZGl0b3I6OnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCkBAIC01NDcsNyArNTQ3LDcgQEAg
Ym9vbCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiwgVGV4dEdyYW51bGFyaXR5IGcKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Cisg
ICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIGlmIChp
c1R5cGluZ0FjdGlvbikgewogICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJl
c3NlZChkb2N1bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6
U21hcnREZWxldGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rp
b25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIEVkaXRv
cjo6ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0
R3JhbnVsYXJpdHkgZwogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVs
ZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCB0cnVlLCBmYWxzZSwgZmFs
c2UsIHRydWUsIGVkaXRpbmdBY3Rpb24pLT5hcHBseSgpOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZv
aWQgRWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAKIHZvaWQgRWRpdG9yOjpjbGVhclRleHQoKQogewotICAg
IENsZWFyVGV4dENvbW1hbmQ6OkNyZWF0ZUFuZEFwcGx5KCZtX2ZyYW1lKTsKKyAgICBDbGVhclRl
eHRDb21tYW5kOjpDcmVhdGVBbmRBcHBseShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6
OnBhc3RlQXNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJl
cGxhY2UpCkBAIC02NjEsNyArNjYxLDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEluc2VydEZyYWdt
ZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBSYW5nZSogcmVwbGFjaW5nRE8KIAogdm9p
ZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCYg
ZnJhZ21lbnQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGVjdFJlcGxhY2VtZW50LCBTbWFydFJlcGxh
Y2Ugc21hcnRSZXBsYWNlLCBNYXRjaFN0eWxlIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbiwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQog
ewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAh
c2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg5
LDE5ICs2ODksMTkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQo
RG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdFJlcGwKICAgICBpZiAobV9pbWFnZUVs
ZW1lbnRzVG9Mb2FkQmVmb3JlUmV2ZWFsaW5nU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAg
cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKLSAgICBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbiA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0luUGFz
c3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6
YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb246OlBh
c3RlKSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5n
Rm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29tbWFuZC0+dmlzaWJsZVNlbGVjdGlvbkZvckluc2Vy
dGVkVGV4dCgpKTsKLSAgICAgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5
cGVQYXN0ZSwgdGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAg
IHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCku
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlUGFzdGUsIHRleHQsIG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3Np
dGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFu
Z2UoKSk7CiAgICAgfQogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkgJiYgZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uOjpJbnNlcnQpIHsKICAgICAgICAg
U3RyaW5nIHRleHQgPSBjb21tYW5kLT5kb2N1bWVudEZyYWdtZW50UGxhaW5UZXh0KCk7Ci0gICAg
ICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGRvY3VtZW50
KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCB0ZXh0LCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgcmVwbGFjZWRUZXh0LnBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVJbnNlcnQsIHRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBjb21tYW5kLT5jb21wb3NpdGlvbigpLT5zZXRSYW5n
ZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRUZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiAgICAgfQog
CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBjcmVhdGVMaXZlUmFu
Z2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsK
KyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxl
dGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBAIC03NDQsNyArNzQ0LDcgQEAgYm9vbCBFZGl0
b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKIAogYm9vbCBFZGl0b3I6
OnRyeURIVE1MQ29weSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ2xpcGJvYXJkRXZlbnQoZmluZEV2ZW50VGFyZ2V0RnJv
bVNlbGVjdGlvbigpLCBDbGlwYm9hcmRFdmVudEtpbmQ6OkNvcHkpOwpAQCAtNzUyLDcgKzc1Miw3
IEBAIGJvb2wgRWRpdG9yOjp0cnlESFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxD
dXQoKQogewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNz
d29yZEZpZWxkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJl
dHVybiAhZGlzcGF0Y2hDbGlwYm9hcmRFdmVudChmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9u
KCksIENsaXBib2FyZEV2ZW50S2luZDo6Q3V0KTsKQEAgLTc2MCw3ICs3NjAsNyBAQCBib29sIEVk
aXRvcjo6dHJ5REhUTUxDdXQoKQogCiBib29sIEVkaXRvcjo6c2hvdWxkSW5zZXJ0VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIFJhbmdlKiByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikg
Y29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5zaG91bGRTdXBw
cmVzc1RleHRJbnB1dEZyb21FZGl0aW5nKCkgJiYgYWN0aW9uID09IEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+bWFpbkZyYW1lKCkubG9hZGVy
KCkuc2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZygpICYmIGFjdGlvbiA9PSBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UsIGFj
dGlvbik7CkBAIC03ODIsMTcgKzc4MiwxNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdl
ZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKIAogYm9v
bCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBzdGFydE5vZGU7Ci0gICAg
aWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVw
cmVjYXRlZE5vZGUoKTsKLSAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgIGlm
IChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBzdGFydE5vZGUg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICAgICAgaWYgKGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSkgIT0gZW5jbG9zaW5nQmxvY2so
ZW5kTm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlCi0gICAgICAg
IHN0YXJ0Tm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBzdGFydE5vZGUg
PSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIGlmICghc3RhcnROb2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC04MTIsMTIgKzgxMiwxMiBAQCBib29sIEVkaXRvcjo6aGFz
QmlkaVNlbGVjdGlvbigpIGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRl
cmVkTGlzdFN0YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0Nh
cmV0KCkpIHsKLSAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgdWxUYWcpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLmlzQ2FyZXQoKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nRWxlbWVudFdp
dGhUYWcobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCB1bFRhZykp
CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIH0gZWxzZSBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgYXV0byogc3RhcnROb2RlID0gZW5j
bG9zaW5nRWxlbWVudFdpdGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpLCB1bFRhZyk7Ci0gICAgICAgIGF1dG8qIGVuZE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0
aFRhZyhtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCB1bFRhZyk7CisgICAg
fSBlbHNlIGlmIChtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBh
dXRvKiBzdGFydE5vZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHVsVGFnKTsKKyAgICAgICAgYXV0byogZW5kTm9k
ZSA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCksIHVsVGFnKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBlbmROb2RlICYm
IHN0YXJ0Tm9kZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsK
ICAgICB9CkBAIC04MjcsMTIgKzgyNywxMiBAQCBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvblVu
b3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiAKIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uT3Jk
ZXJlZExpc3RTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXND
YXJldCgpKSB7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG9sVGFnKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpIHsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgb2xUYWcp
KQogICAgICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICB9IGVsc2UgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGVu
Y2xvc2luZ0VsZW1lbnRXaXRoVGFnKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSwgb2xUYWcpOwotICAgICAgICBhdXRvKiBlbmROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdp
dGhUYWcobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSwgb2xUYWcpOworICAg
IH0gZWxzZSBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAg
YXV0byogc3RhcnROb2RlID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBvbFRhZyk7CisgICAgICAgIGF1dG8qIGVuZE5v
ZGUgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmVuZCgpLCBvbFRhZyk7CiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgZW5kTm9kZSAm
JiBzdGFydE5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7
CiAgICAgfQpAQCAtODcyLDcgKzg3Miw3IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbCgpCiAKIFJlZlB0cjxOb2RlPiBFZGl0b3I6OmluY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsKCkKIHsKLSAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzTm9uZSgpKQorICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
OjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7CkBAIC04ODIsNyArODgy
LDcgQEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQog
CiBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQo
KQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVmUHRyPE5v
ZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgmZG9jdW1lbnQoKSk7CkBAIC04OTIsNyArODkyLDcg
QEAgUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVk
KCkKIAogUmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9y
ZGVyZWQoKQogewotICAgIGlmICghY2FuRWRpdFJpY2hseSgpIHx8IG1fZnJhbWUuc2VsZWN0aW9u
KCkuaXNOb25lKCkpCisgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgUmVm
UHRyPE5vZGU+IG5ld0xpc3QgPSBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omlu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKCZkb2N1bWVudCgpKTsKQEAgLTkwMiw3
ICs5MDIsNyBAQCBSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bFVub3JkZXJlZCgpCiAKIHZvaWQgRWRpdG9yOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgp
CiB7Ci0gICAgaWYgKCFjYW5FZGl0UmljaGx5KCkgfHwgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc05v
bmUoKSkKKyAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgRGVjcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxDb21tYW5kOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgmZG9jdW1lbnQoKSk7
CkBAIC05MzIsNyArOTMyLDcgQEAgRWxlbWVudCogRWRpdG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9t
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIAogRWxlbWVudCogRWRp
dG9yOjpmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZmluZEV2ZW50VGFyZ2V0RnJvbShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICByZXR1cm4gZmluZEV2ZW50VGFyZ2V0RnJvbShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBz
dHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtOTQ2LDEzICs5NDYsMTMgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uLAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uVHlwZSgpOworICAgIGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOwogICAgIGlmIChzZWxlY3Rpb25U
eXBlID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAK
ICAgICBTdHJpbmcgaW5wdXRUeXBlTmFtZSA9IGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9u
KGVkaXRpbmdBY3Rpb24pOwogICAgIFN0cmluZyBpbnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnRE
YXRhRm9yRWRpdGluZ1N0eWxlQW5kQWN0aW9uKCpzdHlsZSwgZWRpdGluZ0FjdGlvbik7Ci0gICAg
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1f
ZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
ICAgIGlmIChlbGVtZW50ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlu
cHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05Njks
NyArOTY5LDggQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4m
JiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLAogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBjbGllbnQoKS0+ZGlkQXBwbHlTdHlsZSgpOworICAgIGlmIChjbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50KCktPmRpZEFwcGx5U3R5bGUoKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAg
ICAgZGlzcGF0Y2hJbnB1dEV2ZW50KCplbGVtZW50LCBpbnB1dFR5cGVOYW1lLCBpbnB1dEV2ZW50
RGF0YSk7CiB9CkBAIC05ODQsMTMgKzk4NSwxMyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3Jh
cGhTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpbwog
ICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2VsZWN0aW9uVHlw
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpOworICAg
IGF1dG8gc2VsZWN0aW9uVHlwZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uVHlwZSgpOwogICAgIGlmIChzZWxlY3Rpb25UeXBlID09IFZpc2libGVTZWxlY3Rp
b246Ok5vU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgaW5wdXRUeXBl
TmFtZSA9IGlucHV0VHlwZU5hbWVGb3JFZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pOwogICAg
IFN0cmluZyBpbnB1dEV2ZW50RGF0YSA9IGlucHV0RXZlbnREYXRhRm9yRWRpdGluZ1N0eWxlQW5k
QWN0aW9uKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVu
dCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
OworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKGVsZW1lbnQgJiYgIWRp
c3BhdGNoQmVmb3JlSW5wdXRFdmVudCgqZWxlbWVudCwgaW5wdXRUeXBlTmFtZSwgaW5wdXRFdmVu
dERhdGEpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwMDUsNyArMTAwNiw3IEBAIHZvaWQgRWRp
dG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFj
YW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2xpZW50KCkgfHwg
IWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCisg
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNy
ZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUoc3R5
bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAxNiw3ICsxMDE3LDcgQEAgdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0
aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jv
bmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCi0g
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0
eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZSht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgp
KSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHls
ZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgY3JlYXRlTGl2ZVJh
bmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5
bGUpLCBlZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNywyNSArMTAyOCwy
NSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJv
cGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlz
RW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
aWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVM
aXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0
eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBo
U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9u
U3RhcnRIYXNTdHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFs
dWUpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpz
dHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgcHJv
cGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpCisgICAgaWYgKGF1dG8gZWRp
dGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcikpCiAgICAgICAgIHJldHVybiBlZGl0aW5nU3R5bGUtPmhhc1N0eWxlKHByb3Bl
cnR5SUQsIHZhbHVlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIFRyaVN0YXRlIEVkaXRvcjo6
c2VsZWN0aW9uSGFzU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlKSBjb25zdAogewotICAgIHJldHVybiBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0
eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZTdHlsZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKKyAgICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUp
LT50cmlTdGF0ZU9mU3R5bGUobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9
CiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NTUHJvcGVydHlWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9u
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLAorICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0
eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSwKICAgICAgICAgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcik7CiAgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5
bGUtPnN0eWxlKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTExMzYsNyArMTEzNyw3
IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCYgY29t
bWFuZCkKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBs
aWVkRWRpdGluZygmY29tbWFuZCk7CiAKICAgICAgICAgaWYgKCFjb21tYW5kLnByZXNlcnZlc1R5
cGluZ1N0eWxlKCkpCi0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5n
U3R5bGUoKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdT
dHlsZSgpOwogCiAgICAgICAgIC8vIENvbW1hbmQgd2lsbCBiZSBlcXVhbCB0byBsYXN0IGVkaXQg
Y29tbWFuZCBvbmx5IGluIHRoZSBjYXNlIG9mIHR5cGluZwogICAgICAgICBpZiAobV9sYXN0RWRp
dENvbW1hbmQuZ2V0KCkgPT0gJmNvbW1hbmQpCkBAIC0xMjAwLDExICsxMjAxLDExIEBAIHZvaWQg
RWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24mIGNvbXBvc2l0
aW9uKQogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCi1F
ZGl0b3I6OkVkaXRvcihGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorRWRpdG9y
OjpFZGl0b3IoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkK
ICAgICAsIG1fa2lsbFJpbmcobWFrZVVuaXF1ZTxQQUw6OktpbGxSaW5nPigpKQotICAgICwgbV9z
cGVsbENoZWNrZXIobWFrZVVuaXF1ZTxTcGVsbENoZWNrZXI+KGZyYW1lKSkKLSAgICAsIG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihtYWtlVW5pcXVlPEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI+KGZyYW1lKSkKKyAgICAsIG1fc3BlbGxDaGVja2VyKG1ha2VVbmlxdWU8U3BlbGxDaGVja2Vy
Pihkb2N1bWVudCkpCisgICAgLCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIobWFrZVVuaXF1
ZTxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPihkb2N1bWVudCkpCiAgICAgLCBtX2VkaXRvclVJ
VXBkYXRlVGltZXIoKnRoaXMsICZFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCkKICNp
ZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFN
SUxZKQogICAgICwgbV90ZWxlcGhvbmVOdW1iZXJEZXRlY3Rpb25VcGRhdGVUaW1lcigqdGhpcywg
JkVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpCkBAIC0xMjIwLDcgKzEy
MjEsNyBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogICAgIGlmIChtX2NvbXBvc2l0aW9uTm9kZSkg
ewogICAgICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChFZGl0
b3JDbGllbnQqIGNsaWVudCA9IHRoaXMtPmNsaWVudCgpKQotICAgICAgICAgICAgY2xpZW50LT5k
aXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CisgICAgICAgICAgICBjbGllbnQtPmRpc2Nh
cmRlZENvbXBvc2l0aW9uKG1fZG9jdW1lbnQuZnJhbWUoKSk7CiAgICAgfQogICAgIG1fY3VzdG9t
Q29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhp
Z2hsaWdodHMuY2xlYXIoKTsKQEAgLTEyMjksNiArMTIzMCw3IEBAIHZvaWQgRWRpdG9yOjpjbGVh
cigpCiAgICAgbV9tYXJrID0geyB9OwogICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRh
dGUgPSB7IH07CiAgICAgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAKICNp
ZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXIuc3RvcCgpOwpA
QCAtMTIzOCwxMiArMTI0MCwxMiBAQCB2b2lkIEVkaXRvcjo6Y2xlYXIoKQogCiBib29sIEVkaXRv
cjo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQs
IFRleHRFdmVudElucHV0VHlwZSBpbnB1dFR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZl
bnRIYW5kbGVyKCkuaGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50LCBp
bnB1dFR5cGUpOworICAgIHJldHVybiBtX2RvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LmhhbmRsZVRleHRJbnB1dEV2ZW50KHRleHQsIHRyaWdnZXJpbmdFdmVudCwgaW5wdXRUeXBlKTsK
IH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JDb25maXJtZWRDb21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFu
ZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7Cisg
ICAgcmV0dXJuIG1fZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuaGFuZGxlVGV4dElu
cHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbik7CiB9CiAKIGJvb2wg
RWRpdG9yOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0
cmlnZ2VyaW5nRXZlbnQpCkBAIC0xMzAyLDEwICsxMzA0LDggQEAgYm9vbCBFZGl0b3I6Omluc2Vy
dFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2Vs
ZWN0SW4KICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjb25kaXRpb25hbGl6
ZSByZXZlYWxpbmcgc2VsZWN0aW9uIG9uIHdoZXRoZXIgdGhlIGlnbm9yZVNlbGVjdGlvbkNoYW5n
ZXMoKSBiaXQKICAgICAgICAgICAgIC8vIGlzIHNldCBmb3IgdGhlIG5ld2x5IGZvY3VzZWQgZnJh
bWUuCiAgICAgICAgICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFJldmVhbEN1
cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1
dG8qIGVkaXRlZEZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHBhZ2UgPSBlZGl0ZWRGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFnZS0+cmV2ZWFsQ3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpCisg
ICAgICAgICAgICAgICAgICAgIHBhZ2UtPnJldmVhbEN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMTgsMTAgKzEzMTgsMTAgQEAgYm9vbCBF
ZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZl
UmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNl
cnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5
cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQg
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOworICAgIFZp
c2libGVQb3NpdGlvbiBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCk7CiAgICAgYm9vbCBhbGlnblRvRWRnZSA9IGlzRW5kT2ZFZGl0YWJsZU9y
Tm9uRWRpdGFibGVDb250ZW50KGNhcmV0KTsKICAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBs
aWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVm
b3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVhayhkb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6
OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CkBAIC0xMzM3LDExICsxMzM3LDEx
IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogCiAgICAgaWYgKCFj
YW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNlcnRMaW5lQnJlYWsoKTsKLQotICAg
IGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIs
IGNyZWF0ZUxpdmVSYW5nZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQb3NpdGlv
biBjYXJldCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCk7CiAgICAgYm9vbCBhbGlnblRvRWRnZSA9IGlzRW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVD
b250ZW50KGNhcmV0KTsKICAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZB
cHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cihkb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2
b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9u
KQogICAgICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyh0cnVlKTsK
ICAgICB9CiAKLSAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29u
dHJvbChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKQogICAgICAg
ICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRleHQoc2Vs
ZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCkgPyBQYXN0
ZWJvYXJkOjpDYW5TbWFydFJlcGxhY2UgOiBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2Up
OwogICAgIGVsc2UgewogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBu
dWxscHRyOwpAQCAtMTQyNCw3ICsxNDI0LDcgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1DdXRPckNv
cHkoRWRpdG9yQWN0aW9uU3BlY2lmaWVyIGFjdGlvbikKICAgICAgICAgICAgIHdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSk7CiAj
ZWxzZQogICAgICAgICAgICAgLy8gRklYTUU6IERlbGV0ZSBhZnRlciA8aHR0cDovL3dlYmtpdC5v
cmcvYi8xNzc2MTg+IGxhbmRzLgotICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29w
eUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVs
ZXRlKCksIG1fZnJhbWUsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOworICAg
ICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0
aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksICptX2RvY3VtZW50LmZyYW1l
KCksIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOwogI2VuZGlmCiAgICAgICAg
IH0KICAgICB9CkBAIC0xNDMzLDEwICsxNDMzLDEwIEBAIHZvaWQgRWRpdG9yOjpwZXJmb3JtQ3V0
T3JDb3B5KEVkaXRvckFjdGlvblNwZWNpZmllciBhY3Rpb24pCiAgICAgaWYgKGFjdGlvbiA9PSBD
dXRBY3Rpb24pIHsKICAgICAgICAgU3RyaW5nIHRleHQ7CiAgICAgICAgIGlmIChBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICAgICAgdGV4dCA9IEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdGV4dCA9IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogICAgICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoY2Fu
U21hcnRDb3B5T3JEZWxldGUoKSwgRWRpdEFjdGlvbjo6Q3V0KTsKICAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICBwb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KHRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOworICAgICAgICAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZv
ckN1dCh0ZXh0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICB9CiB9
CiAKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZShQYXN0ZWJvYXJkJiBw
YXN0ZWJvYXJkKQogICAgICAgICByZXR1cm47CiAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZm
ZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJl
c3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVy
KCkpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2Fy
ZCgmcGFzdGVib2FyZCwgeyBQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQgfSk7CiAgICAgZWxz
ZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7CkBA
IC0xNDc4LDcgKzE0NzgsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVBc1F1b3RhdGlvbigpCiAgICAg
dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogICAgIFJlc291
cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVu
dCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgIGF1dG8gcGFzdGVib2FyZCA9IFBhc3Rl
Ym9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkK
ICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkLmdldCgpLCB7IFBhc3RlT3B0
aW9uOjpBbGxvd1BsYWluVGV4dCwgUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uIH0pOwogICAgIGVs
c2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKTsK
QEAgLTE2MTYsNyArMTYxNiw3IEBAIHZvaWQgRWRpdG9yOjpyZW5kZXJMYXllckRpZFNjcm9sbChj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKG1faW1hZ2VFbGVtZW50c1RvTG9hZEJl
Zm9yZVJldmVhbGluZ1NlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gc3RhcnRDb250YWluZXIgPSBtYWtlUmVmUHRyKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKS5jb250YWluZXJOb2RlKCkpOworICAgIGF1dG8gc3RhcnRDb250YWlu
ZXIgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQo
KS5jb250YWluZXJOb2RlKCkpOwogICAgIGlmICghc3RhcnRDb250YWluZXIpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTg1MCw4ICsxODUwLDggQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZVVuZGVybGlu
ZSgpCiB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoaW5TYW1l
UGFyYWdyYXBoKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCks
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSAmJiAKLSAgICAg
ICAgYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpID09IGRpcmVjdGlvbikK
KyAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCksIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZUVuZCgpKQorICAgICAgICAmJiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0
YXJ0KCkgPT0gZGlyZWN0aW9uKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAgICAgCkBA
IC0xODgxLDcgKzE4ODEsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6YmFzZVdyaXRpbmdE
aXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgYXV0byByZXN1bHQgPSBX
cml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9SaWdodDsKIAotICAgIFBvc2l0aW9uIHBvcyA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KTsKKyAgICBQb3NpdGlvbiBwb3MgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgTm9kZSogbm9kZSA9IHBvcy5k
ZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE5MTYsNyArMTkxNiw3IEBAIHZvaWQgRWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbigpCiAg
ICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4MT4K
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0V2l0aG91
dFZhbGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCkp
OwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyB9KTsK
KyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHsgfSk7
CiB9CiAKIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oKQpAQCAtMTk1MSwyOCArMTk1
MSwyOCBAQCB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4
dCkKIAogY2xhc3MgU2V0Q29tcG9zaXRpb25TY29wZSB7CiBwdWJsaWM6Ci0gICAgU2V0Q29tcG9z
aXRpb25TY29wZShGcmFtZSYgZnJhbWUpCi0gICAgICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAg
ICAgLCBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3IoZnJhbWUpCisgICAgU2V0Q29tcG9zaXRpb25T
Y29wZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgICAgIDogbV9kb2N1bWVudChSZWZQdHIoJmRv
Y3VtZW50KSkKKyAgICAgICAgLCBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3IoKmRvY3VtZW50LmZy
YW1lKCkpCiAgICAgewotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rp
b25DaGFuZ2VzKHRydWUpOworICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zZXRJZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKHRydWUpOwogICAgIH0KIAogICAgIH5TZXRDb21wb3NpdGlvblNjb3Bl
KCkKICAgICB7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXMoZmFsc2UpOwotICAgICAgICBpZiAoYXV0byogZWRpdG9yQ2xpZW50ID0gbV9mcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNldElnbm9y
ZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOworICAgICAgICBpZiAoYXV0byogZWRpdG9yQ2xpZW50
ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgICAgICBlZGl0b3JDbGll
bnQtPmRpZFVwZGF0ZUNvbXBvc2l0aW9uKCk7CiAgICAgfQogCi0gICAgUmVmPEZyYW1lPiBtX2Zy
YW1lOworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBVc2VyVHlwaW5nR2Vz
dHVyZUluZGljYXRvciBtX3R5cGluZ0dlc3R1cmVJbmRpY2F0b3I7CiB9OwogCiB2b2lkIEVkaXRv
cjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUg
bW9kZSkKIHsKICAgICBBU1NFUlQobW9kZSA9PSBDb25maXJtQ29tcG9zaXRpb24gfHwgbW9kZSA9
PSBDYW5jZWxDb21wb3NpdGlvbik7Ci0gICAgU2V0Q29tcG9zaXRpb25TY29wZSBzZXRDb21wb3Np
dGlvblNjb3BlKG1fZnJhbWUpOworICAgIFNldENvbXBvc2l0aW9uU2NvcGUgc2V0Q29tcG9zaXRp
b25TY29wZShtX2RvY3VtZW50KTsKIAogICAgIGlmIChtb2RlID09IENhbmNlbENvbXBvc2l0aW9u
KQogICAgICAgICBBU1NFUlQodGV4dCA9PSBlbXB0eVN0cmluZygpKTsKQEAgLTE5ODMsNyArMTk4
Myw3IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNl
dENvbXBvc2l0aW9uTW9kZSBtb2RlKQogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVz
LmNsZWFyKCk7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMuY2xlYXIoKTsKIAot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChtX2RvY3VtZW50
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBbHdheXMg
ZGVsZXRlIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGJlZm9yZSBpbnNlcnRpbmcgdGhlIGZpbmFs
aXplZCBjb21wb3NpdGlvbiB0ZXh0IGlmIHdlJ3JlIGNvbmZpcm1pbmcgb3VyIGNvbXBvc2l0aW9u
LgpAQCAtMTk5OSwxMyArMTk5OSwxMyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9kZSkKIAogICAgIGlmIChtb2Rl
ID09IENhbmNlbENvbXBvc2l0aW9uKSB7CiAgICAgICAgIC8vIEFuIG9wZW4gdHlwaW5nIGNvbW1h
bmQgdGhhdCBkaXNhZ3JlZXMgYWJvdXQgY3VycmVudCBzZWxlY3Rpb24gd291bGQgY2F1c2UgaXNz
dWVzIHdpdGggdHlwaW5nIGxhdGVyIG9uLgotICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5
cGluZygmbV9mcmFtZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9j
dW1lbnQpOwogICAgIH0KIH0KIAogdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5l
cywgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uSGlnaGxpZ2h0PiYgaGlnaGxpZ2h0cywgdW5zaWdu
ZWQgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCkKIHsKLSAgICBTZXRDb21w
b3NpdGlvblNjb3BlIHNldENvbXBvc2l0aW9uU2NvcGUobV9mcmFtZSk7CisgICAgU2V0Q29tcG9z
aXRpb25TY29wZSBzZXRDb21wb3NpdGlvblNjb3BlKG1fZG9jdW1lbnQpOwogCiAgICAgLy8gVXBk
YXRlcyBzdHlsZXMgYmVmb3JlIHNldHRpbmcgc2VsZWN0aW9uIGZvciBjb21wb3NpdGlvbiB0byBw
cmV2ZW50CiAgICAgLy8gaW5zZXJ0aW5nIHRoZSBwcmV2aW91cyBjb21wb3NpdGlvbiB0ZXh0IGlu
dG8gdGV4dCBub2RlcyBvZGRseS4KQEAgLTIwMTQsNyArMjAxNCw3IEBAIHZvaWQgRWRpdG9yOjpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluCiAKICAgICBzZWxlY3RDb21wb3NpdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBvcmlnaW5hbFRleHQgPSBzZWxl
Y3RlZFRleHQoKTsKQEAgLTIwMjIsMTAgKzIwMjIsMTAgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJs
aW4KICAgICBpZiAoaXNTdGFydGluZ1RvUmVjb21wb3NlRXhpc3RpbmdSYW5nZSkgewogICAgICAg
ICAvLyBXZSBwYXNzIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkZpbmFsIGhlcmUgdG8g
aW5kaWNhdGUgdGhhdCB3ZSBhcmUgcmVtb3ZpbmcgY29tcG9zaXRpb24gdGV4dCB0aGF0IGhhcyBi
ZWVuIGZpbmFsaXplZC4KICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGRv
Y3VtZW50KCksIDAsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvbkZpbmFsKTsKLSAgICAg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
ICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgICAgIC8vIElm
IGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWQsIHRoZW4gd2UgbmVlZCB0byBjb2xsYXBzZSB0aGUgc2Vs
ZWN0aW9uIHRvIHRoZSBlbmQgc28gdGhhdCB0aGUgb3JpZ2luYWwgdGV4dCB3aWxsIG5vdCBiZSBy
ZWNvbXBvc2VkLgotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
eyBjdXJyZW50U2VsZWN0aW9uLmVuZCgpLCBjdXJyZW50U2VsZWN0aW9uLmVuZCgpIH0pOworICAg
ICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBjdXJyZW50U2Vs
ZWN0aW9uLmVuZCgpLCBjdXJyZW50U2VsZWN0aW9uLmVuZCgpIH0pOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yMDgxLDggKzIwODEsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgICAg
ICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGRvY3VtZW50KCksIHRleHQsIFR5cGluZ0NvbW1h
bmQ6OlNlbGVjdEluc2VydGVkVGV4dCB8IFR5cGluZ0NvbW1hbmQ6OlByZXZlbnRTcGVsbENoZWNr
aW5nLCBUeXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25QZW5kaW5nKTsKIAogICAgICAgICAv
LyBGaW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBjb21wb3NpdGlvbiBub3cuCi0gICAgICAgIFBv
c2l0aW9uIGJhc2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2UoKS5kb3du
c3RyZWFtKCk7Ci0gICAgICAgIFBvc2l0aW9uIGV4dGVudCA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZXh0ZW50KCk7CisgICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2UoKS5kb3duc3RyZWFtKCk7CisgICAgICAgIFBv
c2l0aW9uIGV4dGVudCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZXh0ZW50
KCk7CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5kZXByZWNhdGVkTm9kZSgpOwogICAg
ICAgICB1bnNpZ25lZCBiYXNlT2Zmc2V0ID0gYmFzZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
OwogICAgICAgICBOb2RlKiBleHRlbnROb2RlID0gZXh0ZW50LmRlcHJlY2F0ZWROb2RlKCk7CkBA
IC0yMTA4LDcgKzIxMDgsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgICAgICAgICAg
dW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uU3RhcnQsIGV4
dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1pbihzdGQ6Om1h
eChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCksIGV4dGVudE9mZnNldCk7CiAgICAg
ICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJhc2VOb2RlLT5kb2N1
bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOwotICAgICAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UucHRyKCksIERP
V05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6Tm8pOworICAgICAg
ICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFu
Z2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6
Tm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTIyLDcgKzIxMjIsNyBAQCB2b2lkIEVkaXRv
cjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICBpZiAoYXV0byBzZWxlY3Rl
ZFJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxl
Y3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQg
PSBzZWxlY3RlZFRleHQoKTsKQEAgLTIxMzcsNyArMjEzNyw3IEBAIHZvaWQgRWRpdG9yOjpsZWFy
blNwZWxsaW5nKCkKICAgICAgICAgCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVz
ZSAibGVhcm4iIGJ1dHRvbiBvbiAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24n
dCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2Vy
cyBhcm91bmQgdGhlIGxlYXJuZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4K
IAotICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkK
ICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0
ZWRUZXh0KCk7CkBAIC0yMTQ5LDE0ICsyMTQ5LDE0IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxs
aW5nKCkKIAogdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGlvbihtX2ZyYW1lKTsK
KyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwogCiAgICAg
Ly8gVGhlIGJhc2ljIGFwcHJvYWNoIGlzIHRvIHNlYXJjaCBpbiB0d28gcGhhc2VzIC0gZnJvbSB0
aGUgc2VsZWN0aW9uIGVuZCB0byB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZAogICAgIC8vIHRoZW4g
d2Ugd3JhcCBhbmQgc2VhcmNoIGZyb20gdGhlIGRvYyBzdGFydCB0byAoYXBwcm94aW1hdGVseSkg
d2hlcmUgd2Ugc3RhcnRlZC4KICAgICAKICAgICAvLyBTdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBz
ZWxlY3Rpb24sIHNlYXJjaCB0byBlZGdlIG9mIGRvY3VtZW50LiAgU3RhcnRpbmcgYXQgdGhlIHNl
bGVjdGlvbiBlbmQgbWFrZXMKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNvbW1h
bmRzIHdvcmsuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgUmVmPFJhbmdlPiBzcGVsbGluZ1Nl
YXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwogCiAgICAgYm9vbCBzdGFy
dGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwpAQCAtMjMwNSw4ICsyMzA1LDggQEAgdm9pZCBFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQog
ICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdp
dGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAg
IGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpncmFtbWFyU2Vh
cmNoUmFuZ2UsIHsgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwucmFuZ2UubG9j
YXRpb24sIGdyYW1tYXJEZXRhaWwucmFuZ2UubGVuZ3RoIH0pOwotICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwg
U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZl
YWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZ
KSk7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAg
ICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3Ry
aW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3Jh
bW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24pOwpAQCAtMjMxNyw4ICsyMzE3LDgg
QEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3Jl
U2VsZWN0aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSByZWQgc3F1aWdn
bGUgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSByZXNv
bHZlQ2hhcmFjdGVyUmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZSwgeyBtaXNzcGVsbGluZ09mZnNl
dCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZSwgRE9XTlNU
UkVBTSkpOwotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwor
ICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKG1pc3NwZWxsaW5nUmFuZ2UsIERPV05TVFJFQU0pKTsKKyAgICAgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgp
LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAg
ICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yMzMyLDcgKzIzMzIsNyBAQCBTdHJpbmcgRWRp
dG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25z
dAogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8fCAhY2xpY2tl
ZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODYsNyArMjM4Niw3IEBAIFN0cmluZyBFZGl0b3I6
Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6OmlzU2VsZWN0
aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgYXV0
byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50
KCksICpyYW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDAxLDcgKzI0MDEsNyBAQCBWZWN0
b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
IHdvcmQpIGNvbnN0CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChjbGll
bnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3Ry
aW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIGd1ZXNzZXMpOworICAgICAg
ICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNz
ZXM7CiB9CiAKQEAgLTI0MDksNyArMjQwOSw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vCiB7
CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2U7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
ICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3Bl
bGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFz
ZSgpKTsKICAgICAgICAgICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShX
b3JkR3JhbnVsYXJpdHkpOwpAQCAtMjQ2OSw3ICsyNDY5LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1Nl
bGVjdGkKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCkKIHsKLSAgICBSZWY8RnJh
bWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0ZWREb2N1
bWVudChtX2RvY3VtZW50KTsKIAogICAgIGlmIChwbGF0Zm9ybURyaXZlblRleHRDaGVja2VyRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNTkxLDE5ICsyNTkxLDE5IEBAIHZvaWQgRWRp
dG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZ3b3JkU3RhcnQsCiAgICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0
eSwgcmVwbGFjZSB0aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KICAgICBpZiAoIWF1
dG9jb3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
bmV3U2VsZWN0aW9uKCptaXNzcGVsbGluZ1JhbmdlLCBET1dOU1RSRUFNKTsKLSAgICAgICAgaWYg
KG5ld1NlbGVjdGlvbiAhPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5l
d1NlbGVjdGlvbikpCisgICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9kb2N1bWVudC5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVj
dGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KG5ld1NlbGVjdGlvbik7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2ZyYW1l
LmVkaXRvcigpLnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxp
bmdSYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgICAgIGlmICgh
bV9kb2N1bWVudC5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcs
IG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNt
YXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CisgICAgICAgIG1fZG9jdW1lbnQu
ZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIFNl
bGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0
KTsKIAogICAgICAgICAvLyBSZXNldCB0aGUgY2hhcmV0IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4K
LSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOworICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgfQogCiAgICAgaWYgKCFp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKQEAgLTI2NzUsNyArMjY3NSw3IEBAIGJvb2wgRWRp
dG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqIG5vZGUpIGNvbnN0CiAKIGJvb2wg
RWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIHJldHVybiBpc1NwZWxs
Q2hlY2tpbmdFbmFibGVkRm9yKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2UpCkBAIC0yNzIzLDcgKzI3MjMsNyBAQCB2b2lkIEVkaXRvcjo6bWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZQogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bDsKKyAgICBib29sIGFzeW5jaHJvbm91cyA9IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3luY2hy
b25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVs
OwogCiAgICAgLy8gSW4gYXN5bmNocm9ub3VzIG1vZGUsIHdlIGludGVudGlvbmFsbHkgY2hlY2sg
cGFyYWdyYXBoLXdpZGUgc2VudGVuY2UuCiAgICAgY29uc3QgYXV0byByZXNvbHZlZE9wdGlvbnMg
PSByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soZWRpdGFibGVOb2RlLCB0ZXh0Q2hlY2tpbmdP
cHRpb25zKTsKQEAgLTI3MzgsNyArMjczOCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAg
ICAgfQogCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVj
a1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCks
IHJlc29sdmVkT3B0aW9ucywgcmVzdWx0cywgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyKCksIHBhcmFncmFwaFRv
Q2hlY2sudGV4dCgpLCByZXNvbHZlZE9wdGlvbnMsIHJlc3VsdHMsIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIG1hcmtBbmRSZXBsYWNlRm9yKHJlcXVlc3QucmVsZWFz
ZU5vbk51bGwoKSwgcmVzdWx0cyk7CiB9CiAKQEAgLTI3ODQsNyArMjc4NCw3IEBAIHN0YXRpYyB2
b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChU
ZXh0Q2hlY2tpbmdQYXJhCiAKIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBT
cGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4mIHJlc3VsdHMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKICAgICBhdXRv
IHRleHRDaGVja2luZ09wdGlvbnMgPSByZXF1ZXN0LmRhdGEoKS5jaGVja2luZ1R5cGVzKCk7CiAg
ICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChyZXF1ZXN0LmNoZWNraW5nUmFuZ2Uo
KSwgcmVxdWVzdC5hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKCksICZyZXF1ZXN0LnBhcmFncmFw
aFJhbmdlKCkpOwpAQCAtMjgwOCw5ICsyODA4LDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBs
YWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUK
ICAgICBib29sIGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMgPSBmYWxzZTsK
IAogICAgIGlmIChzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxkTWFya1NwZWxsaW5n
IHx8IHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbikgewotICAgICAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6
Q2FyZXRTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0
aW9uKSB7CiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHNhdmUgdGhlIGNhcmV0IHBvc2l0aW9u
IHNvIHdlIGNhbiByZXN0b3JlIGl0IGxhdGVyIGlmIG5lZWRlZAotICAgICAgICAgICAgUG9zaXRp
b24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7
CisgICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCA9IHBh
cmFncmFwaC5vZmZzZXRUbyhjYXJldFBvc2l0aW9uKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAg
ICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IHRydWU7CiAgICAgICAgICAg
ICBpZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiAoc2VsZWN0aW9uT2Zmc2V0ID4gcGFyYWdyYXBo
LnRleHQoKS5sZW5ndGgoKSB8fCBwYXJhZ3JhcGgudGV4dCgpW3NlbGVjdGlvbk9mZnNldCAtIDFd
ID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjg5MiwxMyArMjg5MiwxMyBAQCB2b2lkIEVkaXRv
cjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvblRvUmVwbGFjZShyYW5nZVRvUmVwbGFjZSwgRE9XTlNUUkVBTSk7Ci0gICAg
ICAgICAgICBpZiAoc2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpCisgICAgICAgICAgICBpZiAo
c2VsZWN0aW9uVG9SZXBsYWNlICE9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSkpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSB7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKTsKKyAgICAgICAgICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOwog
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlm
IChjYW5FZGl0UmljaGx5KCkpCkBAIC0yOTA3LDcgKzI5MDcsNyBAQCB2b2lkIEVkaXRvcjo6bWFy
a0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZl
Y3RvcjxUZQogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1Rl
eHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVu
dCwgeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0pOwogCiAgICAgICAgICAgICAgICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoRWxlbWVudCogcm9vdCA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoRWxlbWVudCogcm9vdCA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y2FjaGUtPnBvc3ROb3RpZmljYXRpb24ocm9vdCwgQVhPYmplY3RDYWNoZTo6QVhBdXRvY29ycmVj
dGlvbk9jY3VyZWQpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjkzNywxMyArMjkzNywxMyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICBleHRlbmRlZFBhcmFncmFwaC5leHBh
bmRSYW5nZVRvTmV4dEVuZCgpOwogICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hh
bmdlICYmIHNlbGVjdGlvbk9mZnNldCA8PSBleHRlbmRlZFBhcmFncmFwaC5yYW5nZUxlbmd0aCgp
KSB7CiAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gZXh0ZW5kZWRQYXJhZ3JhcGgu
c3VicmFuZ2UoeyAwLCBzZWxlY3Rpb25PZmZzZXQgfSk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNl
bGVjdGlvbigpLm1vdmVUbyhzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVB
TSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vdmVUbyhzZWxlY3Rpb25S
YW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoYWRqdXN0
U2VsZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcykKLSAgICAgICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVj
dGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAgICBtX2Rv
Y3VtZW50LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUs
IERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMgZm9yIGFueSByZWFzb24sIHRoZSBmYWxs
YmFjayBpcyB0byBnbyBvbmUgcG9zaXRpb24gYmV5b25kIHRoZSBsYXN0IHJlcGxhY2VtZW50Ci0g
ICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpKTsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9k
aWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hh
cmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5t
b3ZlVG8obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgICAg
ICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTMwMjAsOCArMzAyMCw4IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVN
YXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rp
b25BCiAgICAgLy8gT2YgY291cnNlLCBpZiBjdXJyZW50IHNlbGVjdGlvbiBpcyBhIHJhbmdlLCB3
ZSBwb3RlbnRpYWxseSB3aWxsIGVkaXQgdHdvIHdvcmRzIHRoYXQgZmFsbCBvbiB0aGUgYm91bmRh
cmllcyBvZgogICAgIC8vIHNlbGVjdGlvbiwgYW5kIHJlbW92ZSB3b3JkcyBiZXR3ZWVuIHRoZSBz
ZWxlY3Rpb24gYm91bmRhcmllcy4KICAgICAvLwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
U2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwotICAg
IFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZW5kKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKTsKICAgICBpZiAoc3RhcnRPZlNlbGVjdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIC8vIEZpcnN0IHdvcmQgaXMgdGhlIHdvcmQgdGhhdCBlbmRzIGFmdGVyIG9yIG9u
IHRoZSBzdGFydCBvZiBzZWxlY3Rpb24uCkBAIC0zMDkzLDE0ICszMDkzLDE0IEBAIHZvaWQgRWRp
dG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNv
bnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBhdXRvIGRvY3VtZW50ID0gbV9mcmFt
ZS5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOworICAgIGF1dG8gZG9jdW1lbnQgPSBtX2Rv
Y3VtZW50LmZyYW1lKCktPmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYgKCFk
b2N1bWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KKyAgICAKICAgICBhdXRvIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KKyAgICAKICAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAg
aWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzExNiw3ICszMTE2
LDcgQEAgdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWUKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2Vs
ZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFs
OwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKHJldmVhbE1vZGUsIGFs
aWdubWVudCwgcmV2ZWFsRXh0ZW50T3B0aW9uKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnJldmVhbFNlbGVjdGlvbihyZXZlYWxNb2RlLCBhbGlnbm1lbnQsIHJldmVhbEV4dGVudE9wdGlv
bik7CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGJvb2wgaWdu
b3JlLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsRXhpc3RpbmdTZWxlY3Rpb24pCkBAIC0z
MTI4LDcgKzMxMjgsNyBAQCB2b2lkIEVkaXRvcjo6c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhi
b29sIGlnbm9yZSwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgLy8gRklYTUU6IFNob3VsZCBzdXBwcmVzcyBzZWxlY3Rpb24gY2hhbmdl
IG5vdGlmaWNhdGlvbnMgZHVyaW5nIGEgY29tcG9zaXRpb24gY2hhbmdlIDxodHRwczovL3dlYmtp
dC5vcmcvYi8zODgzMD4gCiAgICAgaWYgKCFpZ25vcmUpCi0gICAgICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgeyB9KTsKKyAgICAg
ICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLCB7IH0pOwogI2VuZGlmCiAgICAgaWYgKCFpZ25vcmUgJiYgc2hvdWxkUmV2ZWFsRXhp
c3RpbmdTZWxlY3Rpb24gPT0gUmV2ZWFsU2VsZWN0aW9uOjpZZXMpCiAgICAgICAgIHJldmVhbFNl
bGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdl
SWZOZWVkZWQsIFJldmVhbEV4dGVudCk7CkBAIC0zMTUxLDcgKzMxNTEsNyBAQCBib29sIEVkaXRv
cjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0YXJ0LCB1bnNp
Z25lZCYgc2VsZWN0aQogewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgUG9z
aXRpb24gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzE3NCw3ICszMTc0LDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAgaWYgKCFjYW5F
ZGl0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYg
KCFzZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTMxOTksMTAgKzMx
OTksMTAgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAgICAgU3RyaW5nIHRyYW5zcG9zZWQg
PSB0ZXh0LnJpZ2h0KDEpICsgdGV4dC5sZWZ0KDEpOwogCiAgICAgLy8gU2VsZWN0IHRoZSB0d28g
Y2hhcmFjdGVycy4KLSAgICBpZiAobmV3U2VsZWN0aW9uICE9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpIHsKLSAgICAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkgeworICAgICAgICBpZiAoIW1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KG5ld1NlbGVjdGlvbik7CisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgfQogCiAgICAgLy8gSW5zZXJ0IHRoZSB0cmFuc3Bvc2Vk
IGNoYXJhY3RlcnMuCkBAIC0zMjU0LDcgKzMyNTQsNyBAQCB2b2lkIEVkaXRvcjo6ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpCiAKIHZvaWQgRWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25B
ZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBPcHRpb25T
ZXQ8RnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbj4gb3B0aW9ucykKIHsKLSAgICBS
ZWY8RnJhbWU+IHByb3RlY3Rpb24obV9mcmFtZSk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0
ZWREb2N1bWVudChtX2RvY3VtZW50KTsKIAogICAgIC8vIElmIHRoZSBuZXcgc2VsZWN0aW9uIGlz
IG9ycGhhbmVkLCB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChuZXdT
ZWxlY3Rpb24uc3RhcnQoKS5pc09ycGhhbigpIHx8IG5ld1NlbGVjdGlvbi5lbmQoKS5pc09ycGhh
bigpKQpAQCAtMzI2NCw5ICszMjY0LDkgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFm
dGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIE8KICAgICAv
LyBiZWNhdXNlIHRoZXJlIGlzIHdvcmsgdGhhdCBpdCBtdXN0IGRvIGluIHRoaXMgc2l0dWF0aW9u
LgogICAgIC8vIFRoZSBvbGQgc2VsZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhlcmUgYW5kIGNhbGxp
bmcgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3RyYW5nZSBjYWxscy4K
ICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU3MjkzMTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZSBjb250YWluIFJhbmdlcyBmb3Igc2VsZWN0aW9ucyB0aGF0IGFyZSBubyBs
b25nZXIgdmFsaWQKLSAgICBib29sIHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uID0g
bmV3U2VsZWN0aW9uID09IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYg
KHNlbGVjdGlvbkRpZE5vdENoYW5nZURPTVBvc2l0aW9uIHx8IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCi0gICAgICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgYm9vbCBz
ZWxlY3Rpb25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbiA9IG5ld1NlbGVjdGlvbiA9PSBtX2RvY3Vt
ZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb25EaWROb3RDaGFu
Z2VET01Qb3NpdGlvbiB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOwogCiAgICAgLy8gU29tZSBlZGl0aW5nIG9w
ZXJhdGlvbnMgY2hhbmdlIHRoZSBzZWxlY3Rpb24gdmlzdWFsbHkgd2l0aG91dCBhZmZlY3Rpbmcg
aXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgRE9NLgogICAgIC8vIEZvciBleGFtcGxlIHdoZW4geW91
IHByZXNzIHJldHVybiBpbiB0aGUgZm9sbG93aW5nICh0aGUgY2FyZXQgaXMgbWFya2VkIGJ5IF4p
OgpAQCAtMzI4MSwxMyArMzI4MSwxMyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlU2VsZWN0aW9uQWZ0
ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgTwogICAgICAg
ICByZXR1cm47CiAjZW5kaWYKICAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRp
b24gJiYgY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKCZtX2ZyYW1lKTsKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24obV9kb2N1bWVudC5mcmFtZSgpKTsKIH0KIAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0
KCkgY29uc3QKIHsKICAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvcjsKLSAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlv
bkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuc2V0
dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQogICAgICAg
ICBiZWhhdmlvciB8PSBUZXh0SXRlcmF0b3JUcmF2ZXJzZXNGbGF0VHJlZTsKICAgICByZXR1cm4g
c2VsZWN0ZWRUZXh0KGJlaGF2aW9yKTsKIH0KQEAgLTMyOTUsNyArMzI5NSw3IEBAIFN0cmluZyBF
ZGl0b3I6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRG
b3JEYXRhVHJhbnNmZXIoKSBjb25zdAogewogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2
aW9yID0gVGV4dEl0ZXJhdG9yRW1pdHNJbWFnZUFsdFRleHQ7Ci0gICAgaWYgKG1fZnJhbWUuc2V0
dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCgpKQorICAgIGlm
IChtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0Vu
YWJsZWQoKSkKICAgICAgICAgYmVoYXZpb3IgfD0gVGV4dEl0ZXJhdG9yVHJhdmVyc2VzRmxhdFRy
ZWU7CiAgICAgcmV0dXJuIHNlbGVjdGVkVGV4dChiZWhhdmlvcik7CiB9CkBAIC0zMzAzLDcgKzMz
MDMsNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSBjb25z
dAogU3RyaW5nIEVkaXRvcjo6c2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2
aW9yKSBjb25zdAogewogICAgIC8vIFdlIHJlbW92ZSAnXDAnIGNoYXJhY3RlcnMgYmVjYXVzZSB0
aGV5IGFyZSBub3QgdmlzaWJseSByZW5kZXJlZCB0byB0aGUgdXNlci4KLSAgICBhdXRvJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVj
dGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgYXV0byBzdGFy
dCA9IHNlbGVjdGlvbi5zdGFydCgpOwogICAgIGF1dG8gZW5kID0gc2VsZWN0aW9uLmVuZCgpOwog
ICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwo
KSB8fCBlbmQuaXNPcnBoYW4oKSkKQEAgLTMzMTMsNyArMzMxMyw3IEBAIFN0cmluZyBFZGl0b3I6
OnNlbGVjdGVkVGV4dChUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIAogUmVm
UHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVy
KGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNO
b25lKCkgfHwgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFi
bGUoKSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9kb2N1
bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZjxEb2N1bWVudD4gZG9jdW1lbnQgeyB0aGlzLT5k
b2N1bWVudCgpIH07CkBAIC0zMzIxLDcgKzMzMjEsNyBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVy
RWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZQogICAgIC8vIEZJWE1FOiBXcml0ZSBpbiB0ZXJtcyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50KCkuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
ODc0ND4uCiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAg
IGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApAQCAtMzMyOSw3ICszMzI5LDcgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRl
ckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNp
emUKICAgICBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5j
b3B5UmVmKCkpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24geyBwb3NpdGlv
bkJlZm9yZU5vZGUocGxhY2Vob2xkZXIucHRyKCkpLCBwb3NpdGlvbkFmdGVyTm9kZShwbGFjZWhv
bGRlci5wdHIoKSkgfTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2Vy
VHJpZ2dlcmVkKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNl
clRyaWdnZXJlZCkpOwogCiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyOwogfQpAQCAtMzM0OSw4ICsz
MzQ5LDggQEAgdm9pZCBFZGl0b3I6OnJlbW92ZVRleHRQbGFjZWhvbGRlcihUZXh0UGxhY2Vob2xk
ZXJFbGVtZW50JiBwbGFjZWhvbGRlcikKICAgICBwbGFjZWhvbGRlci5yZW1vdmUoKTsKIAogICAg
IC8vIFRvIG1hdGNoIHRoZSBMZWdhY3kgV2ViS2l0IGltcGxlbWVudGF0aW9uLCBzZXQgdGhlIHRl
eHQgaW5zZXJ0aW9uIHBvaW50IHRvIGJlIGJlZm9yZSB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgdXNl
IHRvIGJlLgotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgp
ICYmIGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IHNhdmVkUm9vdEVkaXRhYmxlRWxlbWVu
dCkKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbiB7IHNhdmVkUG9zaXRpb25CZWZvcmVQbGFjZWhvbGRlciwgU0VMX0RFRkFVTFRfQUZGSU5J
VFkgfSwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmln
Z2VyZWQpKTsKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3Rp
dmUoKSAmJiBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSA9PSBzYXZlZFJvb3RFZGl0YWJsZUVs
ZW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24geyBzYXZlZFBvc2l0aW9uQmVmb3JlUGxhY2Vob2xkZXIsIFNFTF9ERUZBVUxU
X0FGRklOSVRZIH0sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhV
c2VyVHJpZ2dlcmVkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsYXBzZUNhcmV0V2lk
dGgoSW50UmVjdCYgcmVjdCkKQEAgLTM0MDIsNyArMzQwMiw3IEBAIEludFJlY3QgRWRpdG9yOjpm
aXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CiBib29sIEVkaXRvcjo6c2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQorICAgIGlm
IChtX2RvY3VtZW50LmZyYW1lKCkgJiYgbV9kb2N1bWVudC5mcmFtZSgpLT5zZWxlY3Rpb25DaGFu
Z2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAg
IHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShj
cmVhdGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBj
cmVhdGVMaXZlUmFuZ2UobmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBh
ZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwpAQCAtMzQxMSwxNyArMzQxMSwxNyBAQCBib29sIEVk
aXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgY29uc3QgVgogdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShF
ZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYg
KHN0eWxlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlw
aW5nU3R5bGUoKTsKKyAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0
eWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1
cnJlbnQgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxl
OwotICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnR5cGluZ1N0eWxlKCkpCisgICAgaWYgKGF1dG8gZXhpc3RpbmdUeXBpbmdTdHlsZSA9IG1fZG9j
dW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKICAgICAgICAgdHlwaW5nU3R5bGUgPSBl
eGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CiAgICAgZWxzZQogICAgICAgICB0eXBpbmdTdHls
ZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgdHlwaW5nU3R5bGUtPm92ZXJyaWRlVHlw
aW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVUeXBp
bmdTdHlsZUF0KHN0eWxlLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkpOwogCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxl
cywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8
RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gdHlwaW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVC
bG9ja1Byb3BlcnRpZXMoKTsKQEAgLTM0MjksNyArMzQyOSw3IEBAIHZvaWQgRWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0CiAgICAgICAgIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgYmxv
Y2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CiAKICAgICAvLyBTZXQgdGhl
IHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOworICAgIG1fZG9jdW1l
bnQuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUoV1RGTW92ZSh0eXBpbmdTdHlsZSkpOwogfQog
CiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYg
cHJvcGVydGllcywgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ4OCwxOCArMzQ4OCwx
OCBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3QK
IAogYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0aW9uKG1fZnJhbWUpOworICAg
IFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKLSAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogCiAgICAgYXV0byByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFy
Z2V0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCksIG9wdGlv
bnMpOwogICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlc3Vs
dFJhbmdlLCBET1dOU1RSRUFNKSk7CisgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIERPV05TVFJFQU0pKTsKIAogICAg
IGlmICghKG9wdGlvbnMuY29udGFpbnMoRG9Ob3RSZXZlYWxTZWxlY3Rpb24pKSkKLSAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMzU5Niw3ICszNTk2LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICBpZiAocmFu
Z2UpIHsKICAgICAgICAgaWYgKCZyYW5nZS0+b3duZXJEb2N1bWVudCgpID09ICZkb2N1bWVudCgp
KQogICAgICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgZWxzZSBpZiAoIWlz
RnJhbWVJblJhbmdlKG1fZnJhbWUsICpyYW5nZSkpCisgICAgICAgIGVsc2UgaWYgKCFpc0ZyYW1l
SW5SYW5nZSgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIGlmICghc2VhcmNoUmFuZ2UpCkBAIC0zNjY2LDcgKzM2NjYsNyBAQCB2
b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogI2VuZGlmCiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAg
ICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1lKTsKKyAgICAg
ICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9kb2N1bWVudC5mcmFtZSgp
KTsKIAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgaWYgKHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSkKQEAg
LTM2ODksNyArMzY4OSw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVTCiAKIGJvb2wgRWRpdG9y
OjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9m
cmFtZS5kb2N1bWVudCgpICYmIGRvY3VtZW50KCkuaXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5h
YmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1cHBvcnRlZCgpOworICAgIHJl
dHVybiBtX2RvY3VtZW50LmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxl
cGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsKIH0KIAogc3RhdGljIFZlY3RvcjxT
aW1wbGVSYW5nZT4gc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQpAQCAtMzczMiw3ICszNzMyLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKCkKIAogICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMu
Y2xlYXIoKTsKIAotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7Cisg
ICAgYXV0byYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2Vs
ZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICAgICAgLy8gRXh0ZW5k
IHRoZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBp
bmNvbXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KQEAgLTM3NDksNyArMzc0OSw3IEBA
IHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQorICAgIGlm
IChhdXRvKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCkpCiAgICAgICAgIHBhZ2UtPnNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQo
KTsKIH0KIApAQCAtMzc3NCw5ICszNzc0LDkgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRl
VGltZXJGaXJlZCgpCiAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7
CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRXb3JkczsKICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOwotICAgICAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICAg
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUo
KSB8fCBjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3Rh
cnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CisgICAg
ICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOworICAgICAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKKyAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAg
ICAgIG5ld0FkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG5ld1N0
YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSk7CiAjZWxzZQpAQCAtMzgyOSw3ICszODI5LDcgQEAgdm9pZCBFZGl0b3I6
OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2VkaXRvclVJVXBkYXRlVGlt
ZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbikKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAKLSAgICBt
X29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBtX29sZFNlbGVjdGlvbkZvckVkaXRvclVJVXBkYXRlID0gbV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCiAgICAgbm90aWZ5Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygpOwpAQCAtMzg1Niw3ICsz
ODU2LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZGUpCiAKIGJv
b2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSBtYXJrZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKIHsKLSAgICBO
b2RlKiBub2RlID0gZmluZEZpcnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgIE5vZGUqIG5vZGUgPSBmaW5kRmly
c3RNYXJrYWJsZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTM5MzQsMTAgKzM5MzQsMTAgQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNl
VGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIFN0cmluZyBFZGl0b3I6
OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGF1dG8mIHNlbGVjdGlv
biA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9u
ID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBhdXRvIHJhbmdlID0g
c2VsZWN0aW9uLmlzQ2FyZXQoKQotICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxl
Y3Rpb24uc3RhcnQoKSkKLSAgICAgICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkpOworICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5z
dGFydCgpKQorICAgIDogY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogICAgIGlmICghY2Fu
ZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAg
U3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiAKIFJlZlB0
cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QK
IHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIG1ha2VS
YW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKIH0KIApAQCAtNDAxNCw3ICs0MDE0LDcg
QEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQo
KSBjb25zdAogewogICAgIEZvbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgTm9kZSogbm9k
ZVRvUmVtb3ZlID0gbnVsbHB0cjsKLSAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9u
U3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZv
clNlbGVjdGlvblN0YXJ0KG1fZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVtb3ZlKTsKICAgICBp
ZiAoIXN0eWxlKSB7CiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2Rl
VG9SZW1vdmUtPnJlbW92ZSgpOwpAQCAtNDA1NSw3ICs0MDU1LDcgQEAgRm9udEF0dHJpYnV0ZXMg
RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBhdHRyaWJ1dGVzLnRleHRMaXN0cyA9IGVkaXRhYmxlVGV4dExp
c3RzQXRQb3NpdGlvbkluRGVzY2VuZGluZ09yZGVyKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSk7CisgICAgYXR0cmlidXRlcy50ZXh0TGlzdHMgPSBlZGl0YWJsZVRleHRM
aXN0c0F0UG9zaXRpb25JbkRlc2NlbmRpbmdPcmRlcihtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpOwogCiAgICAgc3dpdGNoIChzdHlsZS0+dGV4dEFsaWduKCkpIHsK
ICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgpAQCAtNDA4MSw3ICs0MDgxLDcgQEAgRm9u
dEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKSBjb25z
dAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdXRvIHR5cGluZ1N0eWxlID0gbWFrZVJl
ZlB0cihtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpOworICAgIGF1dG8gdHlwaW5n
U3R5bGUgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSk7
CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5zdHlsZSgpKSB7CiAgICAgICAg
IGF1dG8gdmFsdWUgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKICAgICAgICAgaWYgKHZh
bHVlICYmIHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC00MTY5LDEyICs0MTY5LDggQEAgdm9p
ZCBFZGl0b3I6Om5vdGlmeUNsaWVudE9mQXR0YWNobWVudFVwZGF0ZXMoKQogICAgIGZvciAoYXV0
byYgaWRlbnRpZmllciA6IHJlbW92ZWRBdHRhY2htZW50SWRlbnRpZmllcnMpCiAgICAgICAgIGNs
aWVudCgpLT5kaWRSZW1vdmVBdHRhY2htZW50V2l0aElkZW50aWZpZXIoaWRlbnRpZmllcik7CiAK
LSAgICBhdXRvKiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3Vt
ZW50KQotICAgICAgICByZXR1cm47Ci0KICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBpbnNl
cnRlZEF0dGFjaG1lbnRJZGVudGlmaWVycykgewotICAgICAgICBpZiAoYXV0byBhdHRhY2htZW50
ID0gZG9jdW1lbnQtPmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQorICAgICAg
ICBpZiAoYXV0byBhdHRhY2htZW50ID0gbV9kb2N1bWVudC5hdHRhY2htZW50Rm9ySWRlbnRpZmll
cihpZGVudGlmaWVyKSkKICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRJbnNlcnRBdHRhY2htZW50
V2l0aElkZW50aWZpZXIoaWRlbnRpZmllciwgYXR0YWNobWVudC0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0dHIpLCBhdHRhY2htZW50LT5oYXNFbmNsb3Np
bmdJbWFnZSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC00MTk3LDcgKzQxOTMsNyBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudChj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIE9wdGlvbmFsPHVpbnQ2NF90PiYmIGZpbAogCiB2b2lk
IEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2Vw
dGVkQ2FuZGlkYXRlKQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAog
ICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gdHJ1ZTsKIApAQCAtNDIxNiw3ICs0
MjEyLDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2lu
Z1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIAogYm9vbCBFZGl0b3I6OnVuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKCZtX2ZyYW1lKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZChtX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBF
ZGl0b3I6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtl
ciYgbWFya2VyKQpAQCAtNDIzMiwxMyArNDIyOCw3IEBAIHZvaWQgRWRpdG9yOjphcHBseURpY3Rh
dGlvbkFsdGVybmF0aXZlbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlU3RyaW5n
CiB2b2lkIEVkaXRvcjo6dG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKQogewogICAgIG1fb3Zl
cndyaXRlTW9kZUVuYWJsZWQgPSAhbV9vdmVyd3JpdGVNb2RlRW5hYmxlZDsKLSAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNob3VsZFNob3dCbG9ja0N1cnNvcihtX292ZXJ3cml0ZU1vZGVFbmFi
bGVkKTsKLX0KLQotRG9jdW1lbnQmIEVkaXRvcjo6ZG9jdW1lbnQoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2ZyYW1lLmRvY3VtZW50KCkpOwotICAgIHJldHVybiAqbV9mcmFtZS5kb2N1bWVudCgp
OworICAgIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKG1f
b3ZlcndyaXRlTW9kZUVuYWJsZWQpOwogfQogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0
ZWRTZWxlY3Rpb25SYW5nZSgpCkBAIC00MjkxLDkgKzQyODEsOSBAQCBjb25zdCBGb250KiBFZGl0
b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKIHsKICAg
ICBoYXNNdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAKLSAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpKSB7CisgICAgaWYgKCFtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIGF1dG8qIHN0eWxlID0g
c3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBu
b2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KG1fZG9jdW1lbnQuZnJhbWUoKSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUK
IAogICAgICAgICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxl
KSB7CkBAIC00MzA1LDEyICs0Mjk1LDEyIEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogICAgICAgICByZXR1cm4gZm9u
dDsKICAgICB9CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogQWRqdXN0aW5nIHRo
ZSBzdGFydCBtYXkgbW92ZSBpdCBwYXN0IHRoZSBlbmQuIEluIHRoYXQgY2FzZSB0aGUgaXRlcmF0
b3IgYmVsb3cgd2lsbCBnbyBvbiB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KLSAgICBhdXRv
IGFkanVzdGVkU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0
Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7Cisg
ICAgYXV0byBhZGp1c3RlZFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoYWRqdXN0ZWRTZWxlY3Rp
b25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkpOwogICAgIGlmICghYWRqdXN0ZWRTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgcmFuZ2UtPnN0YXJ0ID0gKmFkanVzdGVkU3RhcnQ7CkBAIC00MzM5LDcgKzQzMjksNyBA
QCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gRWRpdG9yOjppbnNlcnRFZGl0YWJsZUltYWdlKCkK
IAogYm9vbCBFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKCkgY29uc3QK
IHsKLSAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIXNlbGVjdGlvbi5pc0luUGFz
c3dvcmRGaWVsZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAyM2Y1ZGUxMzA0
MDQ5OGU1ODBjZTFkMWQ0MWNlNDcwZDdkYWU0OWEzLi41NmY1ZWUzY2FmOWRlMzBiNzYxMjEyMzQ5
OGM2MDhkYTYwOGU3YTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rp
b24uaCIKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkV3JpdGVyRGF0YS5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgpAQCAtMTE5LDEzICsxMjAsMTMgQEAgZW51bSBj
bGFzcyBUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24gOiB1aW50OF90IHsKIAogY2xhc3MgVGVtcG9y
YXJ5U2VsZWN0aW9uQ2hhbmdlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBUZW1wb3Jh
cnlTZWxlY3Rpb25DaGFuZ2UoRnJhbWUmLCBPcHRpb25hbDxWaXNpYmxlU2VsZWN0aW9uPiA9IFdU
Rjo6bnVsbG9wdCwgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gPSB7IH0pOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFRlbXBvcmFyeVNlbGVjdGlvbkNoYW5nZShEb2N1bWVudCYsIE9w
dGlvbmFsPFZpc2libGVTZWxlY3Rpb24+ID0gV1RGOjpudWxsb3B0LCBPcHRpb25TZXQ8VGVtcG9y
YXJ5U2VsZWN0aW9uT3B0aW9uPiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgflRlbXBvcmFy
eVNlbGVjdGlvbkNoYW5nZSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIFJlZjxGcmFtZT4gbV9mcmFtZTsKKyAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgT3B0aW9uU2V0PFRlbXBvcmFyeVNlbGVj
dGlvbk9wdGlvbj4gbV9vcHRpb25zOwogICAgIGJvb2wgbV93YXNJZ25vcmluZ1NlbGVjdGlvbkNo
YW5nZXM7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEzNyw3ICsxMzgsNyBAQCBwcml2
YXRlOgogY2xhc3MgSWdub3JlU2VsZWN0aW9uQ2hhbmdlRm9yU2NvcGUgewogcHVibGljOgogICAg
IElnbm9yZVNlbGVjdGlvbkNoYW5nZUZvclNjb3BlKEZyYW1lJiBmcmFtZSkKLSAgICAgICAgOiBt
X3NlbGVjdGlvbkNoYW5nZShmcmFtZSwgV1RGOjpudWxsb3B0LCBUZW1wb3JhcnlTZWxlY3Rpb25P
cHRpb246Oklnbm9yZVNlbGVjdGlvbkNoYW5nZXMpCisgICAgICAgIDogbV9zZWxlY3Rpb25DaGFu
Z2UoKmZyYW1lLmRvY3VtZW50KCksIFdURjo6bnVsbG9wdCwgVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKQogICAgIHsKICAgICB9CiAKQEAgLTE1MCw3ICsx
NTEsNyBAQCBwcml2YXRlOgogY2xhc3MgRWRpdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFZGl0b3IoRnJhbWUmKTsKKyAgICBleHBsaWNp
dCBFZGl0b3IoRG9jdW1lbnQmKTsKICAgICB+RWRpdG9yKCk7CiAKICAgICBlbnVtIGNsYXNzIFBh
c3RlT3B0aW9uIDogdWludDhfdCB7CkBAIC0yNzEsNyArMjcyLDcgQEAgcHVibGljOgogICAgIGNs
YXNzIENvbW1hbmQgewogICAgIHB1YmxpYzoKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgQ29tbWFu
ZCgpOwotICAgICAgICBDb21tYW5kKGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIEZyYW1lJik7CisgICAgICAgIENvbW1hbmQoY29uc3QgRWRpdG9ySW50
ZXJuYWxDb21tYW5kKiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgRG9jdW1lbnQmKTsKIAogICAgICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIgPSBT
dHJpbmcoKSwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCA9IG51bGxwdHIpIGNvbnN0OwogICAgICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGV4ZWN1dGUoRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkgY29u
c3Q7CkBAIC0yODgsNiArMjg5LDcgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIGNv
bnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogbV9jb21tYW5kIHsgbnVsbHB0ciB9OwogICAgICAg
ICBFZGl0b3JDb21tYW5kU291cmNlIG1fc291cmNlOworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+
IG1fZG9jdW1lbnQ7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICB9OwogICAg
IFdFQkNPUkVfRVhQT1JUIENvbW1hbmQgY29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
KTsgLy8gQ29tbWFuZCBzb3VyY2UgaXMgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLgpAQCAt
NTY4LDcgKzU3MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVRl
eHRQbGFjZWhvbGRlcihUZXh0UGxhY2Vob2xkZXJFbGVtZW50Jik7CiAKIHByaXZhdGU6Ci0gICAg
RG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Q7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCiAgICAgYm9vbCBjYW5EZWxldGVSYW5nZShSYW5n
ZSopIGNvbnN0OwogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCYpOwpAQCAtNjE5LDcgKzYyMSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JDdXQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpOwogCi0gICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1lbnQmIG1fZG9j
dW1lbnQ7CiAgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBtX2xhc3RFZGl0Q29tbWFu
ZDsKICAgICBSZWZQdHI8VGV4dD4gbV9jb21wb3NpdGlvbk5vZGU7CiAgICAgdW5zaWduZWQgbV9j
b21wb3NpdGlvblN0YXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAK
aW5kZXggMTNmMmJlZDQ5ZTQ2YmJhMWE5ZDYwNTg2NmFkMTMxYTU1ODAxMWQwOS4uZTFmYjNjZDA3
OTAzZmVjM2M3OGUyNThiNzcyNTE2OGY0MTE5YTIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xMTA3LDYgKzExMDcsNyBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlU3VwZXJzY3JpcHQoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ug
c291cmNlLAogCiBzdGF0aWMgYm9vbCBleGVjdXRlU3dhcFdpdGhNYXJrKEZyYW1lJiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogeworICAgIFJlZlB0
cjxEb2N1bWVudD4gcHJvdGVjdGlvbihmcmFtZS5kb2N1bWVudCgpKTsKICAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcihmcmFtZSk7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyayA9IGZy
YW1lLmVkaXRvcigpLm1hcmsoKTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKQEAgLTE4MzQsMTIgKzE4MzUsMTIg
QEAgc3RhdGljIGNvbnN0IEVkaXRvckludGVybmFsQ29tbWFuZCogaW50ZXJuYWxDb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiAKIEVkaXRvcjo6Q29tbWFuZCBFZGl0b3I6OmNvbW1h
bmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIHsKLSAgICByZXR1cm4gQ29tbWFuZChpbnRl
cm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIG1f
ZnJhbWUpOworICAgIHJldHVybiBDb21tYW5kKGludGVybmFsQ29tbWFuZChjb21tYW5kTmFtZSks
IENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZywgbV9kb2N1bWVudCk7CiB9CiAKIEVkaXRvcjo6
Q29tbWFuZCBFZGl0b3I6OmNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgRWRpdG9y
Q29tbWFuZFNvdXJjZSBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIENvbW1hbmQoaW50ZXJuYWxDb21t
YW5kKGNvbW1hbmROYW1lKSwgc291cmNlLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gQ29tbWFuZChp
bnRlcm5hbENvbW1hbmQoY29tbWFuZE5hbWUpLCBzb3VyY2UsIG1fZG9jdW1lbnQpOwogfQogCiBi
b29sIEVkaXRvcjo6Y29tbWFuZElzU3VwcG9ydGVkRnJvbU1lbnVPcktleUJpbmRpbmcoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSkKQEAgLTE4NTEsMTIgKzE4NTIsMTMgQEAgRWRpdG9yOjpDb21t
YW5kOjpDb21tYW5kKCkKIHsKIH0KIAotRWRpdG9yOjpDb21tYW5kOjpDb21tYW5kKGNvbnN0IEVk
aXRvckludGVybmFsQ29tbWFuZCogY29tbWFuZCwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2Us
IEZyYW1lJiBmcmFtZSkKK0VkaXRvcjo6Q29tbWFuZDo6Q29tbWFuZChjb25zdCBFZGl0b3JJbnRl
cm5hbENvbW1hbmQqIGNvbW1hbmQsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBEb2N1bWVu
dCYgZG9jdW1lbnQpCiAgICAgOiBtX2NvbW1hbmQoY29tbWFuZCkKICAgICAsIG1fc291cmNlKHNv
dXJjZSkKLSAgICAsIG1fZnJhbWUoY29tbWFuZCA/ICZmcmFtZSA6IG51bGxwdHIpCisgICAgLCBt
X2RvY3VtZW50KGNvbW1hbmQgPyAmZG9jdW1lbnQgOiBudWxscHRyKQorICAgICwgbV9mcmFtZShj
b21tYW5kID8gZG9jdW1lbnQuZnJhbWUoKSA6IG51bGxwdHIpCiB7Ci0gICAgQVNTRVJUKGNvbW1h
bmQgfHwgIW1fZnJhbWUpOworICAgIEFTU0VSVChjb21tYW5kIHx8ICFtX2RvY3VtZW50KTsKIH0K
IAogYm9vbCBFZGl0b3I6OkNvbW1hbmQ6OmV4ZWN1dGUoY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXIs
IEV2ZW50KiB0cmlnZ2VyaW5nRXZlbnQpIGNvbnN0CkBAIC0xODY2LDkgKzE4NjgsOSBAQCBib29s
IEVkaXRvcjo6Q29tbWFuZDo6ZXhlY3V0ZShjb25zdCBTdHJpbmcmIHBhcmFtZXRlciwgRXZlbnQq
IHRyaWdnZXJpbmdFdmVudCkgYwogICAgICAgICBpZiAoIWFsbG93RXhlY3V0aW9uV2hlbkRpc2Fi
bGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGF1dG8gZG9jdW1l
bnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSBk
b2N1bWVudCkKKworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOworICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpICE9IG1fZnJhbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBtX2NvbW1hbmQtPmV4ZWN1dGUoKm1fZnJh
bWUsIHRyaWdnZXJpbmdFdmVudCwgbV9zb3VyY2UsIHBhcmFtZXRlcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGEwYzA5MDliMmM3M2RlNzE5MzA4ZjQ1
MTQ0ZTUxOWEzMGYyYzQzMzMuLjA0OGVkMDYxYjVlODQwYTYwOGE4ZTdmOWY4NmEzN2EwNTdhYTc5
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xMzks
MTMgKzEzOSwxNCBAQCBJbnRSZWN0IERyYWdDYXJldENvbnRyb2xsZXI6OmVkaXRhYmxlRWxlbWVu
dFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKSBjb25zdAogICAgIHJldHVybiB7IH07CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihG
cmFtZSogZnJhbWUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9u
YWxTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiAhZnJhbWUgfHwg
ZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVj
dGlvbmFsKCk7CisgICAgcmV0dXJuICFkb2N1bWVudCB8fCBkb2N1bWVudC0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKTsKIH0KIAotRnJh
bWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUo
ZnJhbWUpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50
KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fZnJhbWUoZG9jdW1lbnQ/IGRv
Y3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cikKICAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dO
YXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAgICAgLCBtX2dy
YW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhUX0NBUkVUKQpA
QCAtMTU2LDcgKzE1Nyw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSog
ZnJhbWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAsIG1fY2FyZXRQ
YWludCh0cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCi0gICAg
LCBtX2ZvY3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBmcmFtZSkKKyAgICAsIG1fZm9jdXNlZCht
X2ZyYW1lICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRGcmFtZSgpID09IG1fZnJhbWUpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9j
a0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAg
ICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFs
c2UpCkBAIC0xNjUsMTQgKzE2NiwyNCBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24o
RnJhbWUqIGZyYW1lKQogICAgICwgbV9jYXJldEJsaW5rcyh0cnVlKQogI2VuZGlmCiB7Ci0gICAg
aWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpKQorICAgIGlm
IChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKKworICAgIGJvb2wgYWN0aXZl
QW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOworICAgIGlmIChhY3RpdmVBbmRGb2N1
c2VkKQorICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworI2lmIFVTRShVSUtJVF9FRElU
SU5HKQorICAgIC8vIENhcmV0IGJsaW5raW5nIChibGlua3MgfCBkb2VzIG5vdCBibGluaykKKyAg
ICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9jdXNlZCk7CisjZWxzZQorICAgIHNldENhcmV0
VmlzaWJpbGl0eShhY3RpdmVBbmRGb2N1c2VkID8gVmlzaWJsZSA6IEhpZGRlbik7CisjZW5kaWYK
IH0KIAogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3Vt
ZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2Vs
ZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/
IHNlbGVjdGlvblJvb3QgOiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsK
KyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkLCBDdXJz
b3JBbGlnbk9uU2Nyb2xsIGFsaWduKQpAQCAtMjg0LDcgKzI5NSw3IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBwYXNzCiAgICAgRW5kUG9pbnRzQWRqdXN0bWVudE1vZGUgZW5kcG9pbnRzQWRqdXN0bWVu
dE1vZGUpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBwYXNzZWROZXdT
ZWxlY3Rpb247Ci0gICAgYm9vbCBpc0RpcmVjdGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24obV9mcmFtZSkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsK
KyAgICBib29sIGlzRGlyZWN0aW9uYWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVj
dGlvbihtX2RvY3VtZW50KSB8fCBuZXdTZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOwogCiAgICAg
VmlzaWJsZVBvc2l0aW9uIGJhc2UgPSBtX29yaWdpbmFsQmFzZS5pc05vdE51bGwoKSA/IG1fb3Jp
Z2luYWxCYXNlIDogbmV3U2VsZWN0aW9uLnZpc2libGVCYXNlKCk7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIG5ld0Jhc2UgPSBiYXNlOwpAQCAtMzIyLDcgKzMzMyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rp
b246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNl
bGVjdGlvCiAgICAgYm9vbCBzaG91bGRDbGVhclR5cGluZ1N0eWxlID0gb3B0aW9ucy5jb250YWlu
cyhDbGVhclR5cGluZ1N0eWxlKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
ID0gbmV3U2VsZWN0aW9uUG9zc2libHlXaXRob3V0RGlyZWN0aW9uOwotICAgIGlmIChzaG91bGRB
bHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSkKKyAgICBpZiAoc2hvdWxkQWx3
YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG5ld1NlbGVj
dGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogCiAgICAgaWYgKCFtX2ZyYW1lKSB7CkBAIC0z
MzQsNyArMzQ1LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVw
ZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICAvLyBpZiBkb2N1bWVu
dC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCiAg
ICAgaWYgKERvY3VtZW50KiBuZXdTZWxlY3Rpb25Eb2N1bWVudCA9IG5ld1NlbGVjdGlvbi5iYXNl
KCkuZG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoUmVmUHRyPEZyYW1lPiBuZXdTZWxlY3Rpb25G
cmFtZSA9IG5ld1NlbGVjdGlvbkRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
bmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBt
X2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUg
IT0gbV9mcmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2RvY3VtZW50KSB7CiAgICAg
ICAgICAgICAgICAgbmV3U2VsZWN0aW9uRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24sIG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBn
cmFudWxhcml0eSk7CiAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGR1cmlu
ZyB0aGUgYWJvdmUgc2V0IHNlbGVjdGlvbiwgdGhpcyBGcmFtZVNlbGVjdGlvbiBoYXMgYmVlbiBt
b2RpZmllZCBieQogICAgICAgICAgICAgICAgIC8vIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50
SWZGdWxseVNlbGVjdGVkLCBidXQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxp
ZCBzaW5jZQpAQCAtMzQ5LDcgKzM2MCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
bV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5OwogCiAgICAgaWYgKGNsb3NlVHlwaW5nKQotICAg
ICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhtX2ZyYW1lKTsKKyAgICAgICAgVHlwaW5n
Q29tbWFuZDo6Y2xvc2VUeXBpbmcoKm1fZG9jdW1lbnQpOwogCiAgICAgaWYgKHNob3VsZENsZWFy
VHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsKQEAgLTM1Nyw3ICszNjgs
NyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBl
YXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2Vs
ZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBkaWRNdXRhdGVTZWxlY3Rpb24gPSBvbGRT
ZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlmIChkaWRNdXRhdGVTZWxlY3Rpb24pCi0g
ICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2UoKTsKKyAgICAgICAg
bV9kb2N1bWVudC0+ZWRpdG9yKCkuc2VsZWN0aW9uV2lsbENoYW5nZSgpOwogCiAgICAgbV9zZWxl
Y3Rpb24gPSBuZXdTZWxlY3Rpb247CiAKQEAgLTM3MSwzNSArMzgyLDMxIEBAIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlz
aWJsZVNlbGVjdGlvCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKIAogICAgIGlmICgh
bmV3U2VsZWN0aW9uLmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERvTm90U2V0Rm9jdXMpKSB7Ci0g
ICAgICAgIGF1dG8qIG9sZEZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9j
dXNlZEVsZW1lbnQoKTsKKyAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2RvY3Vt
ZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgICAgICBzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVk
KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGJlIG5lZWRlZC4KLSAgICAgICAgaWYg
KG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkgIT0gb2xkRm9jdXNlZEVsZW1l
bnQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CisgICAgICAgIGlmIChtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3Vz
ZWRFbGVtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwogICAgIH0KIAogICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2
ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgogICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkg
dGhlIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCiAgICAgbV94
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbigpOwogICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVk
KCk7Ci0gICAgbV9mcmFtZS0+ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRT
ZWxlY3Rpb24sIG9wdGlvbnMpOworICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvc2VsZWN0aW9uLWFwaS8jc2VsZWN0aW9uY2hhbmdlLWV2ZW50CiAgICAgLy8g
RklYTUU6IFNwZWMgZG9lc24ndCBzcGVjaWZ5IHdoaWNoIHRhc2sgc291cmNlIHRvIHVzZS4KLSAg
ICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoVGFza1NvdXJj
ZTo6VXNlckludGVyYWN0aW9uLCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25j
aGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5v
KSk7CisgICAgbV9kb2N1bWVudC0+cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6
OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hh
bmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTZXRTZWxl
Y3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50IGludGVudCwgQ3Vy
c29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewot
ICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CisgICAgUmVmUHRyPERv
Y3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7CiAgICAgaWYgKCFzZXRTZWxlY3Rpb25XaXRo
b3V0VXBkYXRpbmdBcHBlYXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywgYWxpZ24sIGdyYW51bGFy
aXR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KICAg
ICBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvblVwVG9NYWluRnJhbWUpCiAgICAgICAgIG1f
c2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbFVwVG9NYWlu
RnJhbWU7CiAgICAgZWxzZSBpZiAob3B0aW9ucyAmIFJldmVhbFNlbGVjdGlvbikKQEAgLTQxMSwy
NyArNDE4LDI3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9wdGlvblNldDxTCiAgICAgbV9zZWxlY3Rpb25SZXZl
YWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsK
IAotICAgIGlmIChkb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxlUmVjYWxjKCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7CisgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKGZyYW1lVmlldyAmJiBm
cmFtZVZpZXctPmxheW91dENvbnRleHQoKS5pc0xheW91dFBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgdXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGludGVudCk7CiAKICAgICBpZiAo
b3B0aW9ucyAmIElzVXNlclRyaWdnZXJlZCkgewotICAgICAgICBpZiAoYXV0byogY2xpZW50ID0g
bV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCkpCisgICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBt
X2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNsaWVudC0+ZGlkRW5k
VXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lk
IHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKEZyYW1lJiBmcmFtZSkKK3N0
YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKLSAgICBmcmFtZS5kb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBkb2N1bWVu
dC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICNlbHNlCi0gICAgZnJh
bWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGRvY3VtZW50LnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKICNlbmRpZgogfQogCkBAIC00NDEsNyArNDQ4LDcgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUoUmV2ZWFsU2VsZWN0aW9uQWZ0
ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9PSBSZXZlYWxTZWxlY3Rpb25B
ZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlvblJldmVhbE1vZGUgPSBTZWxl
Y3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0g
dHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJl
cigpKQorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygp
KQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogfQogCkBAIC00
NTcsNyArNDY0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0
aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKICAgICBpZiAobV9zZWxlY3Rp
b25SZXZlYWxNb2RlICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90UmV2ZWFsKSB7CiAgICAg
ICAgIFNjcm9sbEFsaWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAgICAgaWYgKG1fZnJhbWUtPmVk
aXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVuU2VsZWN0aW9uSXNSZXZlYWxl
ZCgpKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRD
ZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCiAgICAgICAgICAgICBhbGlnbm1l
bnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2VsZWN0aW9uID8g
U2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxp
Z25DZW50ZXJJZk5lZWRlZDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWxpZ25tZW50ID0g
bV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVjdGlvbiA/IFNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdl
SWZOZWVkZWQ7CkBAIC00NzEsNyArNDc4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24oKQogewog
I2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgbV9mcmFtZS0+ZWRpdG9yKCkuc2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51
bWJlcnMoKTsKKyAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zY2FuU2VsZWN0aW9uRm9yVGVsZXBo
b25lTnVtYmVycygpOwogI2VuZGlmCiB9CiAKQEAgLTcwMyw3ICs3MTAsNyBAQCBWaXNpYmxlUG9z
aXRpb24gRnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBpc0dldFN0YXJ0
KSBjb25zdAogICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUgc2FtZSBub2Rl
cyBhcyBzdGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKICAgICAvLyB0byB3aGljaCBkZXBlbmRz
IG9uIHRoZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBjaGFuZ2VkCiAg
ICAgLy8gdG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCi0gICAgaWYgKG1fZnJhbWUgJiYg
bV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRTZWxlY3Rpb25G
cm9tRXh0ZW50RW5kcG9pbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5l
ZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0V4dGVuZFNlbGVjdGlvbkZyb21FeHRlbnRF
bmRwb2ludCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1f
c2VsZWN0aW9uLnZpc2libGVFbmQoKSA6IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogCiAg
ICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKTsKQEAgLTcyMyw3ICs3MzAsNyBAQCBWaXNpYmxlUG9zaXRpb24g
RnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShjb25zdCBWaXNpYmxl
UG9zaXRpbwogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQg
PSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwogCi0gICAgaWYgKG1fZnJhbWUg
JiYgbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5n
UmlnaHQoKSkgeworICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJl
aGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKICAgICAgICAgLy8g
SW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25l
CiAgICAgICAgIC8vIHdvcmQgZnVydGhlciBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIEdp
dmVuIHRoZQogICAgICAgICAvLyBzZW1hbnRpY3Mgb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSB0
aGlzIHdpbGwgcHV0IHVzIGF0IHRoZQpAQCAtODU1LDcgKzg2Miw3IEBAIFZpc2libGVQb3NpdGlv
biBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBiCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24u
ZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnJpZ2h0KHRydWUsIHJlYWNoZWRCb3Vu
ZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAg
ICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+
ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKKyAg
ICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudCAmJiBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKG1fc2VsZWN0aW9u
LmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgcG9zID0gcmlnaHRX
b3JkUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsK
ICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKQEAgLTEwNzYsNyArMTA4Myw3IEBAIFZpc2li
bGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVmdChUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGJvCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9z
ZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLmxlZnQodHJ1ZSwgcmVh
Y2hlZEJvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6
IHsKLSAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9mcmFtZSAmJiBt
X2ZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCgpOworICAgICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2RvY3VtZW50
ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1v
dmluZ1JpZ2h0KCk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24obV9z
ZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBwb3Mg
PSBsZWZ0V29yZFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdS
aWdodCk7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMzYyLDcgKzEzNjksNyBA
QCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBp
ZiAocmVhY2hlZEJvdW5kYXJ5ICYmICFpc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCA9PSBVc2Vy
VHJpZ2dlcmVkICYmIG1fZnJhbWUgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKSkgeworICAgIGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJp
Z2dlcmVkID09IFVzZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVudCAmJiBBWE9iamVjdENhY2hlOjph
Y2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JT
ZWxlY3Rpb25DaGFuZ2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Cb3VuZGFyeSwg
dGV4dFNlbGVjdGlvbldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0eShkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTM3NCw4ICsxMzgx
LDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBh
bHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRp
b24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9mcmFtZSAmJiBBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChBWE9iamVj
dENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4aXN0aW5nQVhPYmplY3RDYWNo
ZSgpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVu
dC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+c2V0VGV4dFNl
bGVjdGlvbkludGVudCh0ZXh0U2VsZWN0aW9uSW50ZW50KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KSk7CiAgICAgfQogCkBAIC0xMzg0LDcgKzEzOTEsNyBAQCBib29sIEZyYW1lU2VsZWN0
aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24sIFRleAogICAgIC8vIE5vdGU6IHRoZSBTVEFSVCBwb3NpdGlvbiB0eXBlIGlzIGFyYml0cmFy
eSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQgd291bGQgYmUKICAgICAvLyB0aGUgcmVxdWVzdGVk
IHBvc2l0aW9uIHR5cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb24gc2V0LgogICAgIExheW91dFVuaXQgeCA9IGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2Nr
RGlyZWN0aW9uTmF2aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rp
b25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2ZyYW1lKSB8fCBhbHRl
ciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFs
KHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQpIHx8IGFsdGVy
ID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAgc3dpdGNoIChhbHRlcikgewogICAgIGNhc2Ug
QWx0ZXJhdGlvbk1vdmU6CkBAIC0xMzk0LDcgKzE0MDEsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9u
Ojptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24s
IFRleAogCiAgICAgICAgIGlmICghbV9zZWxlY3Rpb24uaXNDYXJldCgpCiAgICAgICAgICAgICAm
JiAoZ3JhbnVsYXJpdHkgPT0gV29yZEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IFBhcmFn
cmFwaEdyYW51bGFyaXR5IHx8IGdyYW51bGFyaXR5ID09IExpbmVHcmFudWxhcml0eSkKLSAgICAg
ICAgICAgICYmIG1fZnJhbWUgJiYgIW1fZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxk
RXh0ZW5kU2VsZWN0aW9uQnlXb3JkT3JMaW5lQWNyb3NzQ2FyZXQoKSkgeworICAgICAgICAgICAg
JiYgbV9kb2N1bWVudCAmJiAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRF
eHRlbmRTZWxlY3Rpb25CeVdvcmRPckxpbmVBY3Jvc3NDYXJldCgpKSB7CiAgICAgICAgICAgICAv
LyBEb24ndCBsZXQgdGhlIHNlbGVjdGlvbiBnbyBhY3Jvc3MgdGhlIGJhc2UgcG9zaXRpb24gZGly
ZWN0bHkuIE5lZWRlZCB0byBtYXRjaCBtYWMKICAgICAgICAgICAgIC8vIGJlaGF2aW9yIHdoZW4s
IGZvciBpbnN0YW5jZSwgd29yZC1zZWxlY3RpbmcgYmFja3dhcmRzIHN0YXJ0aW5nIHdpdGggdGhl
IGNhcmV0IGluCiAgICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEgd29yZCBhbmQgdGhlbiB3
b3JkLXNlbGVjdGluZyBmb3J3YXJkLCBsZWF2aW5nIHRoZSBjYXJldCBpbiB0aGUKQEAgLTE0MDcs
NyArMTQxNCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRl
ciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAgICAgICAgLy8gU3RhbmRh
cmQgTWFjIGJlaGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91bmRhcnkgaXMgZ3JvdyB0aGUg
c2VsZWN0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCiAgICAgICAgIC8vIGJhc2UgaW4gcGxh
Y2UgYW5kIG1vdmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4dFZpZXcuCi0gICAgICAgIGlm
ICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNH
cm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0Nh
cmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAgICAgICBpZiAoIW1fZG9jdW1l
bnQgfHwgIW1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1Nl
bGVjdGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgp
IHx8ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKICAgICAgICAgICAgIHNldEV4dGVudChwb3Np
dGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOwpAQCAt
MTUxNyw3ICsxNTI0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9u
IGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0aWMKICAgICBpZiAodXNlclRy
aWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFj
dGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3Vs
ZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZnJhbWUpIHx8IGFsdGVyID09IEFsdGVy
YXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3
YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0gQWx0ZXJh
dGlvbkV4dGVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE1NjcsNyArMTU3NCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyKCkKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbigpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0
aW9uKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQogewog
ICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKIApAQCAtMTU3NSw3ICsx
NTgyLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAg
ICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIGlmIChhdXRvKiB2aWV3
ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2Rv
Y3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2Vs
ZWN0aW9uKCk7CiAKICAgICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKFZp
c2libGVTZWxlY3Rpb24oKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSwgQWxpZ25DdXJz
b3JPblNjcm9sbElmTmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CkBAIC0xNjU1LDkgKzE2
NjIsOSBAQCBzdGF0aWMgYm9vbCBpc05vbk9ycGhhbmVkQ2FyZXQoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQogCiBJbnRSZWN0IEZyYW1lU2VsZWN0aW9uOjphYnNvbHV0ZUNhcmV0
Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKQogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAo
IW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgdXBkYXRlU2VsZWN0
aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOworICAgIHVwZGF0ZVNlbGVjdGlv
bkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsKICAgICByZWNvbXB1dGVDYXJl
dFJlY3QoKTsKICAgICBpZiAoaW5zaWRlRml4ZWQpCiAgICAgICAgICppbnNpZGVGaXhlZCA9IG1f
Y2FyZXRJbnNpZGVQb3NpdGlvbkZpeGVkOwpAQCAtMTY3NSwxMCArMTY4MiwxMCBAQCBib29sIEZy
YW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoKQogICAgIGlmICghc2hvdWxkVXBkYXRl
Q2FyZXRSZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9mcmFtZSkK
KyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZyYW1l
VmlldyogdiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYg
PSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTE2OTAsNyArMTY5Nyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNh
cmV0UmVjdCgpCiAgICAgICAgICAgICBjbGVhckNhcmV0UmVjdCgpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBtX3NlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgICAgIGlmICh1cGRhdGVDYXJldFJlY3QobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgdmlzaWJsZVN0YXJ0KSkgeworICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0
UmVjdChtX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXRO
b2RlID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICAgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAg
fQpAQCAtMTcxNSw3ICsxNzIyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2Fy
ZXRSZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
Ci0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJW
aWV3KCkpIHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZp
ZXcoKSkgewogICAgICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0
YWJsZSA9IG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJl
dE5vZGUgJiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CiAgICAg
ICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmlldywgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlz
Q29udGVudEVkaXRhYmxlKSkgewogICAgICAgICAgICAgaWYgKG1fcHJldmlvdXNDYXJldE5vZGUp
CkBAIC0xODk0LDEyICsxOTAxLDExIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNv
bnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKICAgICBpZiAoIWlzUmFuZ2UoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9kb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsK
LSAgICBkb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCgpLCByZXN1bHQpOworICAgIG1f
ZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoKSwgcmVzdWx0KTsKICAgICBOb2RlKiBp
bm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYgKCFpbm5lck5vZGUgfHwgIWlu
bmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2OCw5ICsx
OTc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJ
ZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQogewot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAgICBFbGVt
ZW50KiBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVs
ZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAg
ICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkgewogICAgICAgICBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVt
ZW50PigqZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5jYW5TZWxl
Y3RBbGwoKSkgewpAQCAtMjAwMCw4ICsyMDA0LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2Vs
ZWN0QWxsKCkKICAgICAgICAgaWYgKHJvb3QpCiAgICAgICAgICAgICBzZWxlY3RTdGFydFRhcmdl
dCA9IHJvb3QtPnNoYWRvd0hvc3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByb290
ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgICAgICAgICAgc2VsZWN0U3RhcnRU
YXJnZXQgPSBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKKyAgICAgICAgICAgIHJvb3QgPSBt
X2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFy
Z2V0ID0gbV9kb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBpZiAoIXJvb3QpCkBAIC0yMDU4LDkgKzIwNjIsOCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpz
ZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBTaG91bGRD
bAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsK
ICAgICBib29sIGFjdGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsKLSAgICBS
ZWY8RG9jdW1lbnQ+IGRvY3VtZW50KCptX2ZyYW1lLT5kb2N1bWVudCgpKTsKIAotICAgIGRvY3Vt
ZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOwogCiAjaWYgVVNFKFVJS0lUX0VESVRJTkcpCiAgICAgLy8gQ2FyZXQgYmxpbmtp
bmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQpAQCAtMjA3MSw3ICsyMDc0LDcgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNh
dXNlIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgYW5kCiAgICAgLy8g
UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJh
bWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xv
cnMgd2VyZSBwYWludGVkLgotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJl
bmRlclZpZXcoKSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRl
clZpZXcoKSkKICAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgpOwogCiAgICAgLy8g
Q2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgpAQCAtMjA4Miw3ICsyMDg1LDcgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAv
LyBCZWNhdXNlIFN0eWxlOjpSZXNvbHZlcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAgIC8v
IFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLCB3
ZSBoYXZlIHRvCiAgICAgLy8gdXBkYXRlIHN0eWxlIGFuZCB0aGVtZSBzdGF0ZSB0aGF0IGRlcGVu
ZGVkIG9uIHRob3NlLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmZvY3Vz
ZWRFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmZv
Y3VzZWRFbGVtZW50KCkpIHsKICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3Vi
dHJlZSgpOwogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJl
bmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCku
aGFzQXBwZWFyYW5jZSgpKQpAQCAtMjEwNywxMyArMjExMCwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpzZXRGb2N1c2VkKGJvb2wgZmxhZykKIAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6aXNGb2N1
c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUt
PnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7
CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2RvY3VtZW50LT5wYWdlKCkgJiYgbV9kb2N1bWVu
dC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxF
KFRFWFRfQ0FSRVQpCi1pbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9U
eXBpbmdDb21tYW5kKEZyYW1lKiBmcmFtZSkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9w
QmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJl
dHVybiBmcmFtZS0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZnJhbWUtPmVkaXRvcigp
Lmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVy
biBkb2N1bWVudC0+ZWRpdG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRv
cigpLmxhc3RFZGl0Q29tbWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogfQogI2Vu
ZGlmCiAKQEAgLTIxMzIsMTIgKzIxMzUsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QXBwZWFyYW5jZSgpCiAgICAgYm9vbCBwYWludEJsb2NrQ3Vyc29yID0gbV9zaG91bGRTaG93Qmxv
Y2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpICYmICFpc0xvZ2ljYWxFbmRPZkxpbmUo
bV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNs
ZWFyZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsKIAotICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIGNh
cmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVk
KCk7CiAgICAgYm9vbCBzaG91bGRCbGluayA9ICFwYWludEJsb2NrQ3Vyc29yICYmIGNhcmV0SXNW
aXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUo
KSB8fCBjYXJldEJyb3dzaW5nKTsKIAogICAgIC8vIElmIHRoZSBjYXJldCBtb3ZlZCwgc3RvcCB0
aGUgYmxpbmsgdGltZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCiAgICAgLy8gYmxhY2sgY2Fy
ZXQgaW4gdGhlIG5ldyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJl
ZCB8fCAhc2hvdWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5k
KG1fZnJhbWUpKQorICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRC
bGluayB8fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9kb2N1bWVudCkp
CiAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5r
aW5nIHdpdGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpA
QCAtMjE1Myw3ICsyMTU2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5j
ZSgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRl
clZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIwMiw4ICsy
MjA1LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0Vmlz
aWJpbGl0eSB2aXNpYmlsaXR5KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KLSAgICBpZiAobV9m
cmFtZSkKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1f
ZnJhbWUpOworICAgIGlmIChtX2RvY3VtZW50KQorICAgICAgICB1cGRhdGVTZWxlY3Rpb25CeVVw
ZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9kb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoVEVYVF9DQVJF
VCkKICAgICBpZiAobV9jYXJldFBhaW50KSB7CkBAIC0yMjQ3LDEwICsyMjUwLDEwIEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKQogICAgIGlmIChpc05v
bmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgY2FyZXRC
cm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3Np
bmdFbmFibGVkKCk7CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1l
bnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkg
ewotICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1
c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFt
ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjYyLDE2ICsy
MjY1LDE2IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQo
KQogICAgICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4g
VGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCiAgICAgICAgICAgICAv
LyB3b3JrIGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0IHRo
aXMgdGltZS4KICAgICAgICAgICAgIGlmICh0YXJnZXQtPmlzTW91c2VGb2N1c2FibGUoKSAmJiAh
aXNGcmFtZUVsZW1lbnQodGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9mcmFtZSk7
CisgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE9y
U2hhZG93SG9zdEVsZW1lbnQoKTsKICAgICAgICAgfQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbV9kb2N1bWVudC0+c2V0
Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3Npbmcp
Ci0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVs
ZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZv
Y3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKIH0K
IAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFtZSogZnJhbWUs
IEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25z
dCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsMTYgKzIzMDMsMTYgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2Fs
bGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1
cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxp
dmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVy
biBtX2RvY3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIEZs
b2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250
ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogewotICAgIGlmICghbV9mcmFtZS0+ZG9j
dW1lbnQoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKLSAgICB1cGRhdGVTZWxlY3Rpb25CeVVwZGF0aW5nTGF5b3V0T3JTdHlsZSgqbV9mcmFt
ZSk7Ci0gICAgYXV0byogcmVuZGVyVmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwor
ICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2RvY3VtZW50KTsK
KyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlm
ICghcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIApAQCAtMjMyNSwx
NCArMjMyOCwxNCBAQCBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhD
bGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udAogCiB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0IHRleHRSZWN0SGVpZ2h0KSBjb25zdAogewot
ICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKCFtX2RvY3VtZW50
LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9kb2N1bWVudC0+dmlldygp
LT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpOwogICAgIGZvciAoYXV0byYgcmVjdCA6IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UsIHRleHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0
YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkpKSB7CiAgICAgICAgIGF1dG8gaW50ZXJzZWN0
aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2aXNpYmxlQ29udGVudFJlY3QpOwogICAgICAg
ICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKQpAQCAtMjM2NCw3ICsyMzY3LDcgQEAg
c3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiBIVE1M
Rm9ybUVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSgpIGNvbnN0CiB7CiAgICAg
Ly8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBu
b2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzLgotICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzdGFydCA9
IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAg
c3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQpA
QCAtMjQwNyw4ICsyNDEwLDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9u
KFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICAgICAgICAgICAg
ICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZl
YWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9s
bGluZzo6WWVzIH0pOwogICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2Uo
KTsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2Vs
ZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKG1f
ZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJh
bWUoKm1fZnJhbWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQpAQCAtMjQyNiwx
NyArMjQyOSwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgp
CiAgICAgLy8gUHV0IGEgY2FyZXQgaW5zaWRlIHRoZSBib2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUg
aXMgZWRpdGFibGUgKGVpdGhlciB0aGUKICAgICAvLyBlbnRpcmUgV2ViVmlldyBpcyBlZGl0YWJs
ZSBvciBkZXNpZ25Nb2RlIGlzIG9uIGZvciB0aGlzIGRvY3VtZW50KS4KIAotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJy
b3dzaW5nRW5hYmxlZCgpOwotICAgIGlmICghaXNOb25lKCkgfHwgIShkb2N1bWVudC0+aGFzRWRp
dGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQorICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBpZiAo
IWlzTm9uZSgpIHx8ICEobV9kb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJv
d3NpbmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZG9jdW1lbnQgfHwgIShp
c05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24u
c3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRh
YmxlU3R5bGUoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0
T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rp
b24uYWZmaW5pdHkoKSkpKSB8fCAhbV9kb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAg
ICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIGlmIChhdXRvKiBib2R5ID0gZG9jdW1lbnQtPmJv
ZHkoKSkKKyAgICBpZiAoYXV0byogYm9keSA9IG1fZG9jdW1lbnQtPmJvZHkoKSkKICAgICAgICAg
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KGJvZHkpLCBET1dOU1RSRUFNKSk7CiB9CiAKQEAgLTI0NDYsNyArMjQ0OCw3IEBAIGJvb2wgRnJh
bWVTZWxlY3Rpb246OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBuZXdTZWxlY3Rpb24pCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNr
c0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1f
ZnJhbWUtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2Vs
ZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOworICAgIHJldHVybiBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1Nl
bGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZhbHNlKTsKIH0KIAogYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6ZGlzcGF0Y2hTZWxlY3RTdGFydCgpCkBAIC0yNDY0LDcgKzI0NjYsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IoYm9vbCBzaG91bGRT
aG93QmxvY2tDdXJzb3IpCiB7CiAgICAgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IgPSBzaG91bGRT
aG93QmxvY2tDdXJzb3I7CiAKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKIH0K
QEAgLTI0ODIsMTMgKzI0ODQsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2NoZWR1bGVBcHBl
YXJhbmNlVXBkYXRlQWZ0ZXJTdHlsZUNoYW5nZSgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmFw
cGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKCkKIHsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZy
YW1lKCptX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RvcigqbV9kb2N1bWVudCk7
CiAgICAgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpOwogfQogCiB2
b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hh
bmdlKCkKIHsKLSAgICBpZiAoYXV0byogY2xpZW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50
KCkpCisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgp
KQogICAgICAgICBjbGllbnQtPnVwZGF0ZUVkaXRvclN0YXRlQWZ0ZXJMYXlvdXRJZkVkaXRhYmls
aXR5Q2hhbmdlZCgpOwogCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKQEAgLTI3MDgs
NyArMjcxMCw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VC
eUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VuCiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5n
dGgsIE5vZGUmIG5vZGUpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRS
YW5nZSA9IG1fZG9jdW1lbnQtPmNyZWF0ZVJhbmdlKCk7CiAgICAgcmVzdWx0UmFuZ2UtPnNldFN0
YXJ0KG5vZGUsIGxvY2F0aW9uKTsKICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKG5vZGUsIGxvY2F0
aW9uICsgbGVuZ3RoKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVT
ZWxlY3Rpb24oKnJlc3VsdFJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CkBAIC0yODg5LDcg
KzI4OTEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0
QmxpbmtzKQogICAgIGlmIChtX2NhcmV0QmxpbmtzID09IGNhcmV0QmxpbmtzKQogICAgICAgICBy
ZXR1cm47CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7IAorICAgIG1fZG9jdW1lbnQt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIGlmIChtX2NhcmV0
UGFpbnQpIHsKICAgICAgICAgbV9jYXJldFBhaW50ID0gZmFsc2U7IAogICAgICAgICBpbnZhbGlk
YXRlQ2FyZXRSZWN0KCk7IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmlu
ZGV4IGFiMjg5MDUxMTlkNTFkNTQzYjUzMGU3MjI4ZmQxOTY0ZWFhMDkzYjIuLjNhN2IwODVmN2Nm
NTE1ODgzMzM4ODQxMGIwMmFiZTg1NjY1YzQ4YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBvcHRpb25zOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2Vs
ZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZy
YW1lU2VsZWN0aW9uKERvY3VtZW50KiA9IG51bGxwdHIpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
RWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAg
ICAgIApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIFNob3VsZENsb3NlVHlwaW5nLCBF
VXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2VsZWN0QWxsKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwotICAgIHZv
aWQgcHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbUZy
YW1lKCk7CiAKICAgICB2b2lkIHVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dCgpOwogICAgIHZv
aWQgc2NoZWR1bGVBcHBlYXJhbmNlVXBkYXRlQWZ0ZXJTdHlsZUNoYW5nZSgpOwpAQCAtMzM2LDYg
KzMzNiw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2Vu
ZGlmCiAKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBGcmFtZSogbV9mcmFtZTsKIAog
ICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcApp
bmRleCA3MzA3NmRlMWI3OWI5ZjA5ZmY5ZjMxMjdhODNlNWIwODNkNTc4NTkzLi42NjAxZGI4ZmNi
NGUzN2Y0YWRiMjBhZjE3ODJlMjIxMjRjZjEzYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChS
ZWY8VGV4dD4mJiBub2RlLCB1bnNpZ25lZAogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQ6OmRvQXBwbHkoKQogewotICAgIGJvb2wgcGFzc3dvcmRFY2hvRW5hYmxlZCA9IGZyYW1lKCku
c2V0dGluZ3MoKS5wYXNzd29yZEVjaG9FbmFibGVkKCk7CisgICAgYm9vbCBwYXNzd29yZEVjaG9F
bmFibGVkID0gZG9jdW1lbnQoKS5zZXR0aW5ncygpLnBhc3N3b3JkRWNob0VuYWJsZWQoKTsKICAg
ICBpZiAocGFzc3dvcmRFY2hvRW5hYmxlZCkKICAgICAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXggMTc2ZDhmMDg5YWY1MDI2NmRk
ODk4ZmE5Nzc0Zjk3NDFkYjM5OWRmYi4uMjczNTVlNjZmYjg5ZDU1NDJjZDZhOWJlYTg4ZTJjMjYy
ZjUwNzgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJl
YWtDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVh
a0NvbW1hbmQuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21t
YW5kOjpkb0FwcGx5KCkKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBh
IHR5cGluZyBzdHlsZS4KIAotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0g
ZnJhbWUoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5
bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpOwog
CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmICF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIEFwcGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGluc2VydGVkIGxpbmUgYnJlYWss
IHNvIHRoYXQgaWYgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcAppbmRleCBlOTEzMWY2ZmJmMzJkODYzMDUwYWExZWYyMDhlNWI0ZjQ0
MDQ5YjZhLi4xYmIwZDA1Mjg3MGM0NTEzNjk5NDcxOWQwZWMwNjViM2VkMDk2ZDQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMTQ2LDcgKzE0
Niw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBhbnl0
aGluZyBvdGhlciB0aGFuIE5vU2VsZWN0aW9uLiBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHJl
cXVpcmVzIGEgcmVhbCBlbmRpbmdTZWxlY3Rpb24sIHNvIGJhaWwgb3V0LgogICAgICAgICBpZiAo
ZW5kaW5nU2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBl
bHNlIGlmIChmcmFtZSgpLmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkgeworICAg
IH0gZWxzZSBpZiAoZG9jdW1lbnQoKS5lZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkp
IHsKICAgICAgICAgaWYgKHBlcmZvcm1PdmVyd3JpdGUobV90ZXh0LCBtX3NlbGVjdEluc2VydGVk
VGV4dCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZv
aWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIHNldEVuZGluZ1NlbGVjdGlvbldp
dGhvdXRWYWxpZGF0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAogICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KLSAgICBpZiAoUmVm
UHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnR5cGlu
Z1N0eWxlKCkpIHsKKyAgICBpZiAoUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBk
b2N1bWVudCgpLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpIHsKICAgICAgICAgdHlwaW5nU3R5
bGUtPnByZXBhcmVUb0FwcGx5QXQoZW5kUG9zaXRpb24sIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVX
cml0aW5nRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCF0eXBpbmdTdHlsZS0+aXNFbXB0eSgpKQog
ICAgICAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5k
ZXggNTQ2MGI3NWNhYmQyM2RkNTVhZDkzOWQwMTRiNTgyOTJlZDlkNGVhMi4uNjhlMDgzNTJhNGMx
MGQ4NjhiZjFlNDY5YmY3NWM5NTZkMTNmMDU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAtNjAsNyArNjAs
NyBAQCB2b2lkIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYg
KCFtX3JhbmdlVG9CZVJlcGxhY2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZyYW1l
KCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCisgICAgaWYg
KCFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24p
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWNoYXJhY3RlckNvdW50KCptX3JhbmdlVG9C
ZVJlcGxhY2VkKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKaW5kZXggMWM4MTk4NDBmMDU0MzlkMmVkMmYxZDhjNTJhYzI3ZmU4MTJi
ZWYxOC4uNzM4NjNiZWZjM2I4OTgyNzMyZjU2MGExZDBhMzU5NTYyOTEyM2ZmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAg
LTExODEsNyArMTE4MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogICAgIAogICAgIC8vIEZJWE1FOiBDYW4gdGhpcyB3YWl0IHVudGlsIGFmdGVyIHRoZSBvcGVy
YXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkPyAgVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCiAgICAg
Ly8gYW55IHdvcmsgcGVyZm9ybWVkIGFmdGVyIHRoaXMgdGhhdCBxdWVyaWVzIG9yIHVzZXMgdGhl
IHR5cGluZyBzdHlsZS4KLSAgICBmcmFtZSgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUo
KTsKKyAgICBkb2N1bWVudCgpLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKIAogICAg
IC8vIFdlIGRvbid0IHdhbnQgdGhlIGRlc3RpbmF0aW9uIHRvIGVuZCB1cCBpbnNpZGUgbm9kZXMg
dGhhdCB3ZXJlbid0IHNlbGVjdGVkLiAgVG8gYXZvaWQgdGhhdCwgd2UgbW92ZSB0aGUKICAgICAv
LyBwb3NpdGlvbiBmb3J3YXJkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZpc2libGUgcG9zaXRpb24g
c28gd2UncmUgc3RpbGwgYXQgdGhlIHNhbWUgdmlzaWJsZSBsb2NhdGlvbiwgYnV0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBjMDY1YzAy
Y2ExM2ZkMjUxNzBkNmIyMWIxZjg5OGU5YmE3OWJlNjM4Li4wZGQyNmE4MWU5MGI2Nzg3NGMzMzVj
ZWYxMjEwN2UyMTRiZGZkODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
dFNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgU2V0U2VsZWN0aW9uQ29tbWFuZDo6
U2V0U2VsZWN0aW9uQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9w
dGkKIAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBGcmFtZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUoKS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gZG9jdW1lbnQoKS5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxl
Y3Rpb24uc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQpICYmICFtX3NlbGVj
dGlvblRvU2V0LmlzTm9uZU9yT3JwaGFuZWQoKSkgewogICAgICAgICBzZWxlY3Rpb24uc2V0U2Vs
ZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CkBAIC01MCw3ICs1MCw3IEBAIHZv
aWQgU2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU2V0U2VsZWN0aW9uQ29t
bWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJh
bWUoKS5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rpb24uc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCkpICYmICFzdGFydGluZ1NlbGVjdGlvbigpLmlzTm9uZU9y
T3JwaGFuZWQoKSkKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihzdGFydGluZ1NlbGVj
dGlvbigpLCBtX29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
CmluZGV4IDE3MmQ4NWZkNDY2ZjI4MzY2YjU1ODA2ZDA5YmY2MDFmZTFjNWY4MTkuLjUwYzE3NTNm
MTZkOTY4ZmE5NmJjMmJjNmI2MTFiNDk4ZmYyNDk0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKQEAgLTk4LDggKzk4LDggQEAgdm9pZCBTcGVsbENoZWNrUmVxdWVz
dDo6cmVxdWVzdGVyRGVzdHJveWVkKCkKICAgICBtX2NoZWNrZXIgPSBudWxscHRyOwogfQogCi1T
cGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tlcihGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZy
YW1lKQorU3BlbGxDaGVja2VyOjpTcGVsbENoZWNrZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAg
IDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1
ZXN0KCp0aGlzLCAmU3BlbGxDaGVja2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVz
dCkKIHsKIH0KQEAgLTExNCw3ICsxMTQsNyBAQCBTcGVsbENoZWNrZXI6On5TcGVsbENoZWNrZXIo
KQogCiBUZXh0Q2hlY2tlckNsaWVudCogU3BlbGxDaGVja2VyOjpjbGllbnQoKSBjb25zdAogewot
ICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1
bWVudC5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICByZXR1cm4gcGFnZS0+ZWRpdG9yQ2xpZW50KCkudGV4dENoZWNrZXIoKTsKQEAgLTEzMSw3ICsx
MzEsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVl
c3QoKQogCiBib29sIFNwZWxsQ2hlY2tlcjo6aXNBc3luY2hyb25vdXNFbmFibGVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hc3luY2hyb25v
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwogfQogCiBib29sIFNwZWxsQ2hlY2tlcjo6Y2FuQ2hl
Y2tBc3luY2hyb25vdXNseShSYW5nZSYgcmFuZ2UpIGNvbnN0CkBAIC0xNzQsNyArMTc0LDcgQEAg
dm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYm
IHJlcXVlc3QpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcHJv
Y2Vzc2luZ1JlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpOwotICAgIGNsaWVudCgpLT5yZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZygqbV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKCpt
X3Byb2Nlc3NpbmdSZXF1ZXN0LCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
IH0KIAogdm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFJlZjxTcGVsbENoZWNrUmVx
dWVzdD4mJiByZXF1ZXN0KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpk
aWRDaGVjayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBW
ZWN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtB
bmRSZXBsYWNlRm9yKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCByZXN1bHRzKTsKKyAgICBtX2RvY3Vt
ZW50LmVkaXRvcigpLm1hcmtBbmRSZXBsYWNlRm9yKCptX3Byb2Nlc3NpbmdSZXF1ZXN0LCByZXN1
bHRzKTsKIAogICAgIGlmIChtX2xhc3RQcm9jZXNzZWRJZGVudGlmaWVyLnRvVUludDY0KCkgPCBp
ZGVudGlmaWVyLnRvVUludDY0KCkpCiAgICAgICAgIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXIg
PSBpZGVudGlmaWVyOwpAQCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRD
aGVja1N1Y2NlZWQoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29u
CiAgICAgICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2luZ1R5cGVzKCkuY29udGFpbnMoVGV4dENo
ZWNraW5nVHlwZTo6R3JhbW1hcikpCiAgICAgICAgICAgICBtYXJrZXJUeXBlcy5hZGQoRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMo
bV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CisgICAg
ICAgICAgICBtX2RvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1Jl
cXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOwogICAgIH0KICAgICBkaWRDaGVj
ayhpZGVudGlmaWVyLCByZXN1bHRzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tl
ci5oCmluZGV4IGMzNmFlMmMzMGZlOWZiNWJlZjY3MDczMjIyZWM0M2U0NGFkN2YyYzAuLmQxOWZj
ZmRlMzg0MTViMDExNWNmOGNkYWE0OGE4NjYwOGE4MTE5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbENoZWNrZXIuaApAQCAtNzYsNyArNzYsNyBAQCBjbGFzcyBTcGVsbENoZWNrZXIgewog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKIAotICAgIGV4cGxp
Y2l0IFNwZWxsQ2hlY2tlcihGcmFtZSYpOworICAgIGV4cGxpY2l0IFNwZWxsQ2hlY2tlcihEb2N1
bWVudCYpOwogICAgIH5TcGVsbENoZWNrZXIoKTsKIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXNF
bmFibGVkKCkgY29uc3Q7CkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRp
ZENoZWNrQ2FuY2VsKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyKTsKICAgICB2b2lkIGRp
ZENoZWNrKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiYpOwogCi0gICAgRnJhbWUmIG1fZnJhbWU7CisgICAgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CiAgICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0UmVxdWVz
dElkZW50aWZpZXI7CiAgICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0UHJv
Y2Vzc2VkSWRlbnRpZmllcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggOTllOGYxNTg4OGVhZTkzZjNkNjhlMDRk
ODllZmY1NzU2NDZiYzM3OS4uNTkyMDg0NTM1MWVhNDAzYjhjODczNDNhZGE3NmI3NDM2M2RmMDVk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkb1VuYXBw
bHkoKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2hhc0JlZW5VbmRvbmUpIHsKLSAg
ICAgICAgICAgIGZyYW1lKCkuZWRpdG9yKCkudW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHN0YXJ0
aW5nU2VsZWN0aW9uKCksIG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOworICAgICAgICAgICAg
ZG9jdW1lbnQoKS5lZGl0b3IoKS51bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc3RhcnRpbmdTZWxl
Y3Rpb24oKSwgbV9jb3JyZWN0ZWQsIG1fY29ycmVjdGlvbik7CiAgICAgICAgICAgICBtX2hhc0Jl
ZW5VbmRvbmUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTAzLDcgKzEwMyw3IEBA
IHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFtX2Nv
cnJlY3RlZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmcmFtZSgpLnNl
bGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQp
KQorICAgIGlmICghZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
bV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9u
VG9CZUNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25z
KCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCAyNjZkMjNiZTFiM2QzNWNkMjU5
ZDYyMWNkNzczMDcyMTRjZDg3MjdjLi44YjllN2QwYzMyNThhM2UwNzViYjk3NjY5MTIyNzg5Zjhk
YThhNjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTE2
MywxMyArMTYzLDEwIEBAIFR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uCiAKIHZvaWQgVHlwaW5nQ29t
bWFuZDo6ZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25z
LCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKIHsKLSAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBpZiAoIWZy
YW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCisgICAgaWYgKCFkb2N1bWVudC5zZWxlY3Rpb24o
KS5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9y
VHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBp
bmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVu
dCkpIHsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldElzQXV0b2NvbXBsZXRpb24ob3B0
aW9ucyAmIElzQXV0b2NvbXBsZXRpb24pOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0
Q29tcG9zaXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxs
Q2hlY2tpbmcpOwpAQCAtMTgzLDggKzE4MCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
U2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tCiB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBP
cHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBpZiAo
Z3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0
cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZT
dGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1lKCkpKSB7Ci0gICAgICAgICAgICB1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21t
YW5kLmdldCgpLCBkb2N1bWVudC5mcmFtZSgpKTsKKyAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdD
b21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5G
b3JUeXBpbmcoZG9jdW1lbnQpKSB7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZl
cmVudEZyb21DdXJyZW50U2VsZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLmdldCgpLCBkb2N1bWVu
dCk7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihv
cHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0Q29tcG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgICAgICAgICAg
bGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMg
JiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CkBAIC0xOTksMTAgKzE5Niw5IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYgZG9jdW1lbnQsIE9wdGlvbnMgb3B0
aW9ucywgVGV4dEdyCiB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2Vk
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCiB7CiAgICAgLy8gRklYTUU6IEZvcndhcmQgZGVsZXRlIGluIFRleHRFZGl0IGFw
cGVhcnMgdG8gb3BlbiBhbmQgY2xvc2UgYSBuZXcgdHlwaW5nIGNvbW1hbmQuCi0gICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0
VHlwaW5nQ29tbWFuZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZy
YW1lKSkgewotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVu
dFNlbGVjdGlvbihsYXN0VHlwaW5nQ29tbWFuZC5nZXQoKSwgZnJhbWUpOworICAgICAgICBpZiAo
UmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1h
bmRJZlN0aWxsT3BlbkZvclR5cGluZyhkb2N1bWVudCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZVNl
bGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQu
Z2V0KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1
dG9jb21wbGV0aW9uKG9wdGlvbnMgJiBJc0F1dG9jb21wbGV0aW9uKTsKICAgICAgICAgICAgIGxh
c3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uTm9uZSk7
CiAgICAgICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hl
Y2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKQEAgLTIxNCwxMCArMjEwLDkg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCYg
ZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywKICAgICBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9j
dW1lbnQsIEZvcndhcmREZWxldGVLZXksIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMsIGdyYW51bGFy
aXR5KS0+YXBwbHkoKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25J
ZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1h
bmQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6dXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiB0eXBpbmdDb21tYW5k
LCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uID0gZG9jdW1lbnQuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gdHlwaW5n
Q29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI3LDMx
ICsyMjIsMjUgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVu
dEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQKIAogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRp
b25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb24pCiB7Ci0gICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCiAgICAg
aWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLnVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOwor
ICAgICAgICBkb2N1bWVudC5lZGl0b3IoKS51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKICAgICAKLSAgICBpbnNlcnRUZXh0
KGRvY3VtZW50LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIG9wdGlvbnMs
IGNvbXBvc2l0aW9uKTsKKyAgICBpbnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBkb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQogCiAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IG5lZWQgdG8gdGFrZSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uIEl0
IHNob3VsZCBiZSBpZGVudGljYWwgdG8gRnJhbWVTZWxlY3Rpb24ncyBjdXJyZW50IHNlbGVjdGlv
bi4KIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5z
ZXJ0aW9uLCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25U
eXBlKQogewotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAg
IEFTU0VSVChmcmFtZSk7Ci0KICAgICBMT0coRWRpdGluZywgIlR5cGluZ0NvbW1hbmQ6Omluc2Vy
dFRleHQgKHRleHQgJXMpIiwgdGV4dC51dGY4KCkuZGF0YSgpKTsKIAotICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKIAogICAgIFN0cmluZyBuZXdUZXh0ID0gZGlzcGF0Y2hCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCh0ZXh0LCBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIGNvbXBvc2l0aW9u
VHlwZSA9PSBUZXh0Q29tcG9zaXRpb25QZW5kaW5nKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHN0
YXJ0aW5nIGFuZCBlbmRpbmcgc2VsZWN0aW9uIGFwcHJvcHJpYXRlbHkgaWYgd2UgYXJlIHVzaW5n
IGEgc2VsZWN0aW9uCiAgICAgLy8gdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBz
ZWxlY3Rpb24uICBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgY2hhbmdlIEVkaXRDb21tYW5kCiAg
ICAgLy8gdG8gZGVhbCB3aXRoIGN1c3RvbSBzZWxlY3Rpb25zIGluIGEgZ2VuZXJhbCB3YXkgdGhh
dCBjYW4gYmUgdXNlZCBieSBhbGwgb2YgdGhlIGNvbW1hbmRzLgotICAgIGlmIChSZWZQdHI8VHlw
aW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxP
cGVuRm9yVHlwaW5nKCpmcmFtZSkpIHsKKyAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGxh
c3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhk
b2N1bWVudCkpIHsKICAgICAgICAgaWYgKGxhc3RUeXBpbmdDb21tYW5kLT5lbmRpbmdTZWxlY3Rp
b24oKSAhPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24pIHsKICAgICAgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25Gb3JJbnNlcnRpb24pOwogICAg
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25G
b3JJbnNlcnRpb24pOwpAQCAtMjY2LDEyICsyNTUsMTIgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBW
aXMKICAgICB9CiAKICAgICBhdXRvIGNtZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVu
dCwgSW5zZXJ0VGV4dCwgbmV3VGV4dCwgb3B0aW9ucywgY29tcG9zaXRpb25UeXBlKTsKLSAgICBh
cHBseVRleHRJbnNlcnRpb25Db21tYW5kKGZyYW1lLmdldCgpLCBjbWQuZ2V0KCksIHNlbGVjdGlv
bkZvckluc2VydGlvbiwgY3VycmVudFNlbGVjdGlvbik7CisgICAgYXBwbHlUZXh0SW5zZXJ0aW9u
Q29tbWFuZChkb2N1bWVudC5mcmFtZSgpLCBjbWQuZ2V0KCksIHNlbGVjdGlvbkZvckluc2VydGlv
biwgY3VycmVudFNlbGVjdGlvbik7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGlu
ZUJyZWFrKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewotICAgIGlmIChS
ZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFu
ZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgeworICAgIGlmIChSZWZQ
dHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElm
U3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5nQ29tbWFu
ZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxldGlvbik7CiAgICAg
ICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9u
Tm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29y
cmVjdGlvbkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Ip
OwpAQCAtMjg0LDcgKzI3Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFr
KERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogCiB2b2lkIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCYgZG9j
dW1lbnQpCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFu
ZCA9IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmRvY3VtZW50LmZyYW1l
KCkpKSB7CisgICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoZG9jdW1lbnQpKSB7CiAgICAg
ICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRJc0F1dG9jb21wbGV0aW9uKGZhbHNlKTsKICAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25O
b25lKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckluUXVvdGVkQ29udGVudEFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKTsKQEAgLTI5Niw3ICsyODUs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQog
ewotICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0
VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKCpkb2N1bWVudC5mcmFtZSgpKSkgewor
ICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlw
aW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0
VHlwaW5nQ29tbWFuZC0+c2V0SXNBdXRvY29tcGxldGlvbihvcHRpb25zICYgSXNBdXRvY29tcGxl
dGlvbik7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRDb21wb3NpdGlvblR5cGUoVGV4
dENvbXBvc2l0aW9uTm9uZSk7CiAgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRS
ZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2NvcnJlY3Rp
b25JbmRpY2F0b3IpOwpAQCAtMzA3LDkgKzI5Niw5IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25z
CiAgICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3IsIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMpLT5hcHBseSgpOwogfQogCi1SZWZQdHI8VHlw
aW5nQ29tbWFuZD4gVHlwaW5nQ29tbWFuZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZv
clR5cGluZyhGcmFtZSYgZnJhbWUpCitSZWZQdHI8VHlwaW5nQ29tbWFuZD4gVHlwaW5nQ29tbWFu
ZDo6bGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYgZG9jdW1l
bnQpCiB7Ci0gICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBsYXN0RWRpdENvbW1hbmQg
PSBmcmFtZS5lZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKTsKKyAgICBSZWZQdHI8Q29tcG9zaXRl
RWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCA9IGRvY3VtZW50LmVkaXRvcigpLmxhc3RFZGl0
Q29tbWFuZCgpOwogICAgIGlmICghbGFzdEVkaXRDb21tYW5kIHx8ICFsYXN0RWRpdENvbW1hbmQt
PmlzVHlwaW5nQ29tbWFuZCgpIHx8ICFzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVk
aXRDb21tYW5kLmdldCgpKS0+aXNPcGVuRm9yTW9yZVR5cGluZygpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMzIxLDE2ICszMTAsMTYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjpzaG91
bGREZWZlcldpbGxBcHBseUNvbW1hbmRVbnRpbEFkZGluZ1R5cGluZ0NvbW1hbmQoKSBjb25zdAog
ICAgIHJldHVybiAhbV9pc0hhbmRsaW5nSW5pdGlhbFR5cGluZ0NvbW1hbmQgfHwgZWRpdEFjdGlv
bklzRGVsZXRlQnlUeXBpbmcoZWRpdGluZ0FjdGlvbigpKTsKIH0KIAotdm9pZCBUeXBpbmdDb21t
YW5kOjpjbG9zZVR5cGluZyhGcmFtZSogZnJhbWUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmNsb3Nl
VHlwaW5nKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IGxhc3RUeXBpbmdDb21tYW5kID0gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5
cGluZygqZnJhbWUpKQorICAgIGlmIChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0Nv
bW1hbmQgPSBsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkK
ICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmNsb3NlVHlwaW5nKCk7CiB9CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotdm9pZCBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1h
bmRIYXNDdXJyZW50U2VsZWN0aW9uSWZPcGVuRm9yTW9yZVR5cGluZyhGcmFtZSogZnJhbWUsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6
ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBp
bmcoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24pCiB7Ci0gICAgaWYgKFJlZlB0cjxUeXBpbmdDb21tYW5kPiBsYXN0VHlwaW5nQ29tbWFuZCA9
IGxhc3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcoKmZyYW1lKSkgeworICAgIGlm
IChSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmQgPSBsYXN0VHlwaW5nQ29t
bWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKGRvY3VtZW50KSkgewogICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0RW5kaW5nU2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb25Pbkxhc3RJbnNlcnRDb21tYW5kKG5ld1Nl
bGVjdGlvbik7CiAgICAgfQpAQCAtNDM2LDE5ICs0MjUsMTcgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkaWRBcHBseUNvbW1hbmQoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSkKIHsKLSAgICBGcmFtZSYg
ZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlmICghZnJh
bWUuZWRpdG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQotICAgICAgICAm
JiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQot
ICAgICAgICAmJiAhZnJhbWUuZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxl
ZCgpCi0gICAgICAgICYmICFmcmFtZS5lZGl0b3IoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRp
b25FbmFibGVkKCkKLSAgICAgICAgJiYgIWZyYW1lLmVkaXRvcigpLmlzQXV0b21hdGljVGV4dFJl
cGxhY2VtZW50RW5hYmxlZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCisgICAgICAgICYmICFkb2N1bWVudCgpLmVkaXRv
cigpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgJiYgIWRv
Y3VtZW50KCkuZWRpdG9yKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCisgICAg
ICAgICYmICFkb2N1bWVudCgpLmVkaXRvcigpLmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWQoKQorICAgICAgICAmJiAhZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0F1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZnJhbWUu
ZWRpdG9yKCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCisgICAgaWYgKGRvY3VtZW50
KCkuZWRpdG9yKCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVy
bjsKICNlbHNlCi0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpKQorICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAvLyBU
YWtlIGEgbG9vayBhdCB0aGUgc2VsZWN0aW9uIHRoYXQgcmVzdWx0cyBhZnRlciB0eXBpbmcgYW5k
IGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gc3BlbGxjaGVjay4gCkBAIC00NjYsOSArNDUz
LDkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5
cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2
aW91c1dvcmQ7CiAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGlu
Z0NvbW1hbmQ6Okluc2VydFRleHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5z
ZXJ0TGluZUJyZWFrIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFn
cmFwaFNlcGFyYXRvciB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpKQogICAgICAgICAgICAgICAgIHN0cmlwcGVk
UHJldmlvdXNXb3JkID0gcGxhaW5UZXh0KCpyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAg
ICAgICAgICBmcmFtZS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQo
cDEsIGVuZGluZ1NlbGVjdGlvbigpLCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlz
RW1wdHkoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFu
ZDo6SW5zZXJ0VGV4dCkKLSAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLnN0YXJ0QWx0ZXJuYXRp
dmVUZXh0VUlUaW1lcigpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5zdGFydEFs
dGVybmF0aXZlVGV4dFVJVGltZXIoKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShjb21t
YW5kVHlwZSk7CiAgICAgICAgIC8vIElmIHRoaXMgYnVnIGdldHMgZml4ZWQsIHRoaXMgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkgY29kZSBjb3VsZCBiZSByZW1vdmVkOgpAQCAtNDgzLDcgKzQ3MCw3IEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdD
b21tYW5kIGNvbW1hbmRUeXBlKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDEgPSBzdGFydE9m
V29yZChwcmV2aW91cywgc3RhcnRXb3JkU2lkZSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBw
MiA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBzdGFydFdvcmRTaWRlKTsKICAgICAgICAgaWYgKHAxICE9
IHAyKQotICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgZmFsc2UpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS5lZGl0b3IoKS5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVu
ZGluZ1NlbGVjdGlvbigpLCBmYWxzZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgfQogfQpAQCAtNDk3LDI2ICs0ODQsMjYgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxs
QWRkVHlwaW5nVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEcK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoIXJhbmdlIHx8IGlzRWRpdGluZ1RleHRB
cmVhT3JUZXh0SW5wdXQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCkuZWRpdG9yKCkud2lsbEFw
cGx5RWRpdGluZygqdGhpcywgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJp
bmRpbmdzKCkpOworICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlF
ZGl0aW5nKCp0aGlzLCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGlu
Z3MoKSk7CiAKLSAgICByZXR1cm4gZnJhbWUoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0
aGlzLCB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoKnJhbmdlKSB9KTsKKyAgICByZXR1cm4gZG9j
dW1lbnQoKS5lZGl0b3IoKS53aWxsQXBwbHlFZGl0aW5nKCp0aGlzLCB7IDEsIFN0YXRpY1Jhbmdl
OjpjcmVhdGUoKnJhbmdlKSB9KTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRl
ZFRvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZykK
IHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIFJlZlB0cjxGcmFtZT4g
cHJvdGVjdG9yKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAKICAgICB1cGRhdGVQcmVzZXJ2ZXNUeXBp
bmdTdHlsZShjb21tYW5kVHlwZUZvckFkZGVkVHlwaW5nKTsKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIGZyYW1lLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKKyAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmFwcGxpZWRFZGl0aW5nKCp0aGlzKTsKICAgICAvLyBTaW5jZSB0aGUgc3Bl
bGxjaGVja2luZyBjb2RlIG1heSBhbHNvIHBlcmZvcm0gY29ycmVjdGlvbnMgYW5kIG90aGVyIHJl
cGxhY2VtZW50cywgaXQgc2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgdHlwaW5nIGNoYW5nZXMuCiAg
ICAgaWYgKCFtX3Nob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKQogICAgICAgICBtYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAjZWxzZQogICAg
IC8vIFRoZSBvbGQgc3BlbGxjaGVja2luZyBjb2RlIHJlcXVpcmVzIHRoYXQgY2hlY2tpbmcgYmUg
ZG9uZSBmaXJzdCwgdG8gcHJldmVudCBpc3N1ZXMgbGlrZSB0aGF0IGluIDY4NjQwNzIsIHdoZXJl
IDxkb2Vzbid0PiBpcyBtYXJrZWQgYXMgbWlzc3BlbGxlZC4KICAgICBtYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7Ci0gICAgZnJhbWUuZWRpdG9y
KCkuYXBwbGllZEVkaXRpbmcoKnRoaXMpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYXBwbGll
ZEVkaXRpbmcoKnRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTUzNSw5ICs1MjIsOSBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHRBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KGNvbnN0IFN0cmlu
ZyAmdGV4dCwgYm9vbCBzZQogewogICAgIExPRyhFZGl0aW5nLCAiVHlwaW5nQ29tbWFuZCAlcCBp
bnNlcnRUZXh0QW5kTm90aWZ5QWNjZXNzaWJpbGl0eSAodGV4dCAlcywgc2VsZWN0SW5zZXJ0ZWRU
ZXh0ICVkKSIsIHRoaXMsIHRleHQudXRmOCgpLmRhdGEoKSwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsK
IAotICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVw
bGFjZWRUZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2Vy
dFRleHQodGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKLSAgICByZXBsYWNlZFRleHQucG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNo
ZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgdGV4dCwgZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRp
b24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBp
bmcsIHRleHQsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGNvbXBv
c2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRleHQucmVwbGFjZWRS
YW5nZSgpKTsKIH0KIApAQCAtNTUwLDkgKzUzNyw2IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0
CiAgICAgICAgIG1fY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvbk5vbmUgPyBJbnNl
cnRUZXh0Q29tbWFuZDo6UmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMgOiBJ
bnNlcnRUZXh0Q29tbWFuZDo6UmViYWxhbmNlQWxsV2hpdGVzcGFjZXMsIEVkaXRBY3Rpb246OlR5
cGluZ0luc2VydFRleHQpOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RGTW92ZShj
b21tYW5kKSwgZW5kaW5nU2VsZWN0aW9uKCkpOwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRk
ZWRUb09wZW5Db21tYW5kKEluc2VydFRleHQpOwogfQogCkBAIC01NjUsMTcgKzU0OSwxNCBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhaygpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpKSk7Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAg
IFJlZjxGcmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1h
bmQoSW5zZXJ0TGluZUJyZWFrKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5l
QnJlYWtBbmROb3RpZnlBY2Nlc3NpYmlsaXR5KCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5UmVwbGFj
ZWRUZXh0IHJlcGxhY2VkVGV4dChmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2VkVGV4dChkb2N1bWVudCgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBpbnNlcnRMaW5lQnJlYWsoKTsKLSAgICByZXBsYWNl
ZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZnJhbWUoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgcmVwbGFjZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0
RWRpdFR5cGVUeXBpbmcsICJcbiIsIGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
OwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyZXBsYWNlZFRl
eHQucmVwbGFjZWRSYW5nZSgpKTsKIH0KIApAQCAtNTg4LDE3ICs1NjksMTQgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uOjpUeXBpbmdJ
bnNlcnRQYXJhZ3JhcGgpKTsKLQotICAgIEZyYW1lJiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0g
ICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoZnJhbWUpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29t
bWFuZChJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6
Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckFuZE5vdGlmeUFjY2Vzc2liaWxpdHkoKQogewotICAg
IEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRUZXh0KGZyYW1lKCkuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpOworICAgIEFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQgcmVwbGFjZWRU
ZXh0KGRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpOwotICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4dEVkaXRU
eXBlVHlwaW5nLCAiXG4iLCBmcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBy
ZXBsYWNlZFRleHQucG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihkb2N1bWVudCgpLmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpLCBBWFRleHRFZGl0VHlwZVR5cGluZywgIlxuIiwgZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgY29tcG9zaXRpb24oKS0+c2V0UmFu
Z2VEZWxldGVkQnlVbmFwcGx5KHJlcGxhY2VkVGV4dC5yZXBsYWNlZFJhbmdlKCkpOwogfQogCkBA
IC02MTUsMTcgKzU5MywxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNl
cGFyYXRvckluUXVvdGVkQ29udGVudCgpCiAgICAgfQogICAgICAgICAKICAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkp
OwotCi0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBSZWY8RnJhbWU+IHBy
b3RlY3RvcihmcmFtZSk7CiAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50QW5kTm90aWZ5QWNjZXNzaWJp
bGl0eSgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQoZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCByZXBsYWNlZFRleHQoZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7Ci0gICAgcmVwbGFj
ZWRUZXh0LnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oZG9jdW1lbnQoKS5leGlzdGlu
Z0FYT2JqZWN0Q2FjaGUoKSwgQVhUZXh0RWRpdFR5cGVUeXBpbmcsICJcbiIsIGZyYW1lKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHJlcGxhY2VkVGV4dC5wb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCksIEFYVGV4
dEVkaXRUeXBlVHlwaW5nLCAiXG4iLCBkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKICAgICBjb21wb3NpdGlvbigpLT5zZXRSYW5nZURlbGV0ZWRCeVVuYXBwbHkocmVwbGFjZWRU
ZXh0LnJlcGxhY2VkUmFuZ2UoKSk7CiB9CiAKQEAgLTY1MiwxMCArNjI3LDkgQEAgYm9vbCBUeXBp
bmdDb21tYW5kOjptYWtlRWRpdGFibGVSb290RW1wdHkoKQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3Vs
ZEFkZFRvS2lsbFJpbmcpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAg
ICBSZWY8RnJhbWU+IHByb3RlY3RvcihmcmFtZSk7CisgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0
b3IoZG9jdW1lbnQoKS5mcmFtZSgpKTsKIAotICAgIGZyYW1lLmVkaXRvcigpLnVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLmVkaXRv
cigpLnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb25BZnRlclVuZG87CkBAIC03NDgsMjAgKzcyMiwyMCBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IHNob3VsZEFkZAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIC8vIFdvcmthcm91
bmQgZm9yIHRoaXMgYnVnOgogICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDY1Mzc1NT4gVUlL
aXQgdGV4dCB3aWRnZXRzIHNob3VsZCB1c2UgV2ViS2l0IGVkaXRpbmcgQVBJIHRvIG1hbmlwdWxh
dGUgdGV4dAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwotICAgICAgICBjbG9zZVR5cGluZygmZnJhbWUpOworICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAg
IGNsb3NlVHlwaW5nKGRvY3VtZW50KCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2Vs
ZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKKyAgICBp
ZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwg
Z3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJz
dFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJp
bmcpCi0gICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVk
aXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVs
ZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
UHJlcGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRp
b24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRv
RGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTc3OCwxMCArNzUyLDkgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSwgYm9vbCBzaG91bGRBZGQKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRl
S2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkVG9L
aWxsUmluZykKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKGZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvcihkb2N1
bWVudCgpLmZyYW1lKCkpOwogCi0gICAgZnJhbWUuZWRpdG9yKCkudXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOworICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoZmFsc2UpOwogCiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbkFmdGVyVW5kbzsKQEAgLTg1NywxMyArODMwLDEzIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IHNoCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3Ig
dGhpcyBidWc6CiAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NjUzNzU1PiBVSUtpdCB0ZXh0
IHdpZGdldHMgc2hvdWxkIHVzZSBXZWJLaXQgZWRpdGluZyBBUEkgdG8gbWFuaXB1bGF0ZSB0ZXh0
Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSk7Ci0gICAgICAgIGNsb3NlVHlwaW5nKCZmcmFtZSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVj
dGlvbihkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2xvc2VU
eXBpbmcoZG9jdW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24o
KS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQorICAgIGlmIChzZWxl
Y3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxk
RGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFu
dWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5n
ZSgpKSkpCkBAIC04NzMsNyArODQ2LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVs
ZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxl
dGUpOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBw
ZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSks
IEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBtYWtl
IHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihz
ZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxl
Y3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tzQWZ0
ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxFbGVt
ZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuaAppbmRleCA3NmU1Zjk5YmY5MjUzODU3NWNhYTM4NzZiYjliNmI1NTRiOWZiNzVj
Li44OTZiZjBiZDE1ZGJlM2Q0ODE4NDg5NWY2NDNmMWM4NjlkNThlYjc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaApAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERvY3VtZW50JiwgT3B0aW9ucyk7CiAgICAgc3Rh
dGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiwgT3B0aW9ucyk7CiAg
ICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERv
Y3VtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRnJhbWUqKTsKKyAgICBzdGF0
aWMgdm9pZCBjbG9zZVR5cGluZyhEb2N1bWVudCYpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlv
bklmT3BlbkZvck1vcmVUeXBpbmcoRnJhbWUqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7Cisg
ICAgc3RhdGljIHZvaWQgZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklm
T3BlbkZvck1vcmVUeXBpbmcoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAj
ZW5kaWYKIAogICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2Vs
ZWN0SW5zZXJ0ZWRUZXh0KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
aXNPcGVuRm9yTW9yZVR5cGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkZvck1vcmVUeXBpbmc7
IH0KICAgICB2b2lkIGNsb3NlVHlwaW5nKCkgeyBtX29wZW5Gb3JNb3JlVHlwaW5nID0gZmFsc2U7
IH0KIAotICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJ
ZlN0aWxsT3BlbkZvclR5cGluZyhGcmFtZSYpOworICAgIHN0YXRpYyBSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gbGFzdFR5cGluZ0NvbW1hbmRJZlN0aWxsT3BlbkZvclR5cGluZyhEb2N1bWVudCYpOwog
CiAgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAgICAgYm9vbCBpc1R5cGluZ0NvbW1hbmQoKSBj
b25zdCBmaW5hbDsKQEAgLTEyMiw3ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEYXRh
VHJhbnNmZXI+IGlucHV0RXZlbnREYXRhVHJhbnNmZXIoKSBjb25zdCBmaW5hbDsKICAgICBib29s
IGlzQmVmb3JlSW5wdXRFdmVudENhbmNlbGFibGUoKSBjb25zdCBmaW5hbDsKIAotICAgIHN0YXRp
YyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlw
aW5nQ29tbWFuZCosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwgRG9jdW1lbnQmKTsK
IAogICAgIHZvaWQgdXBkYXRlUHJlc2VydmVzVHlwaW5nU3R5bGUoRVR5cGluZ0NvbW1hbmQpOwog
ICAgIGJvb2wgd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQsIFRleHRH
cmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiA9IGVtcHR5U3RyaW5nKCksIFJlZlB0cjxSYW5nZT4m
JiA9IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2Eu
bW0KaW5kZXggN2ZlMzBlMGEwZWEyZTdlYmUzM2ExMjdjMzFmNzdiNGUzMmYwNWNhMy4uMTRiMzVj
Mjg4YjM2YzZmMGJjZGYzMDFmOTY0OWM4ZjliZjVmMGU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC04MCw4ICs4MCw4IEBAIHN0YXRpYyBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmli
dXRlZFN0cmluZyAqCiAKIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCgpCiB7
Ci0gICAgcmV0dXJuIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZp
bGVVUkxzRm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6Olll
cyA6IFNlcmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHJldHVybiBzZXJpYWxpemVQcmVz
ZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LCBSZXNvbHZlVVJMczo6WWVzRXhjbHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3ksCisgICAg
ICAgIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVz
RW5hYmxlZCgpID8gU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpZZXMgOiBTZXJpYWxpemVDb21wb3Nl
ZFRyZWU6Ok5vKTsKIH0KIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0xMDUs
MTggKzEwNSwxOCBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0
dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgogCiAjZW5kaWYKIAotc3RhdGlj
IFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmlu
Zyhjb25zdCBGcmFtZSYgZnJhbWUpCitzdGF0aWMgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmlu
Zz4gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCk7CiAgICAgcmV0dXJuIHJhbmdlID8gYXR0cmlidXRlZFN0cmluZygqcmFu
Z2UpLnN0cmluZyA6IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsK
IH0KIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQm
IHBhc3RlYm9hcmQpCiB7Ci0gICAgYXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRT
dHJpbmcobV9mcmFtZSk7CisgICAgYXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRT
dHJpbmcobV9kb2N1bWVudCk7CiAKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50Owot
ICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRl
bnRpZmllckZvclBhc3RlYm9hcmQoKTsKKyAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2Rv
Y3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5T
bWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5k
YXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAg
ICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRz
XSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CkBAIC0xMzEsMTAg
KzEzMSwxMCBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVi
b2FyZCYgcGFzdGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9h
cmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBhdXRvIHN0cmluZyA9
IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKKyAgICBhdXRvIHN0cmluZyA9
IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2RvY3VtZW50KTsKIAogICAgIFBhc3RlYm9h
cmRXcml0ZXJEYXRhOjpXZWJDb250ZW50IHdlYkNvbnRlbnQ7Ci0gICAgd2ViQ29udGVudC5jb250
ZW50T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVi
b2FyZCgpOworICAgIHdlYkNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZG9jdW1lbnQub3JpZ2lu
SWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICB3ZWJDb250ZW50LmNhblNtYXJ0Q29weU9y
RGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbldl
YkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICB3ZWJD
b250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8g
ZGF0YUluUlRGREZvcm1hdChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKQEAgLTE0OSw3ICsxNDks
NyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBh
c3RlYm9hcmRXcml0ZXJEYXRhKQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OnNlbGVj
dGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpCiB7Ci0gICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2Vi
QXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbigmbV9mcmFtZSk7CisgICAgYXV0byBhcmNoaXZl
ID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihtX2RvY3VtZW50LmZyYW1l
KCkpOwogICAgIGlmICghYXJjaGl2ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0
dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigp
LmdldCgpKTsKQEAgLTE3NywxMSArMTc3LDExIEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVj
dGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJp
YnV0ZWRTdHJpbmcsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGlu
ZykKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBpZiAobV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUo
KSkgewotICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVz
b3VyY2VzKG1fZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CisgICAgaWYgKG1fZG9jdW1lbnQu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAg
ICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKCpt
X2RvY3VtZW50LmZyYW1lKCksIGF0dHJpYnV0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21l
bnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90
ZUhhbmRsaW5nKTsKICAgICAgICAgfQpAQCAtMjI3LDcgKzIyNyw3IEBAIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IEVkaXRvcjo6ZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5n
KQogLy8gT3IgcmVmYWN0b3Igc28gaXQgZG9lcyBub3QgZG8gdGhhdC4KIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBw
YXN0ZWJvYXJkLCBjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4
dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIo
bV9mcmFtZSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIg
cmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKICAg
ICBwYXN0ZWJvYXJkLnJlYWQocmVhZGVyKTsKICAgICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5t
YWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0OwogICAgIHJldHVybiBXVEZNb3ZlKHJlYWRlci5mcmFn
bWVudCk7CkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBFZGl0b3I6OnRha2VGaW5kU3RyaW5nRnJv
bVNlbGVjdGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHN0cmluZ0Zy
b21TZWxlY3Rpb24gPSBtX2ZyYW1lLmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc2Vs
ZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkpOworICAgIGF1dG8gc3RyaW5nRnJvbVNlbGVjdGlv
biA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhz
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIHR5cGVzLmFwcGVuZChTdHJpbmcobGVnYWN5U3RyaW5n
UGFzdGVib2FyZFR5cGUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9n
dGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKaW5kZXggZTlkZmRmY2JlZGE0YWRjMzY4NjAyYzkxYzAyMGU2MzZiMTAwNDgzZC4uZDQxZTRi
OTMwMjc2MTI1NjhkYWU0ZjliZTk4ZTAxNDIzYWRmMTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9w
dGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0
ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgbV9mcmFtZSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJv
YXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsK
IAogICAgIGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1
b3RhdGlvbikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBA
IC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0
ZWJvYXJkQ29udGVudDsKICAgICBwYXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0
ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9
IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpOwotICAgIHBhc3RlYm9hcmRDb250ZW50Lm1h
cmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxz
Rm9yUHJpdmFjeSwKLSAgICAgICAgbV9mcmFtZS5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1No
YWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNl
cmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9
IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9y
UHJpdmFjeSwKKyAgICAgICAgbV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1No
YWRvd0JvdW5kYXJpZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNl
cmlhbGl6ZUNvbXBvc2VkVHJlZTo6Tm8pOwogICAgIHBhc3RlYm9hcmQud3JpdGUocGFzdGVib2Fy
ZENvbnRlbnQpOwogfQogCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250
ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgY29uc3QgU2ltcGxlUmFu
Z2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQog
ewotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShwYXN0ZWJvYXJk
LCBtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOworICAg
IHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShwYXN0ZWJvYXJkLCAqbV9k
b2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW0KaW5kZXggM2YyOWM0ZTIzZTJmNmNkZjVkNDY0MmYyZGMxODg0NmM1N2UzMmQ4
Ni4uNjcyNGRiODUwZGE3NTk5ZjgwYTY2MjY2NGU2NTA4YTM2ZTUyZjIyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtODIsNyArODIsNyBAQCB2b2lkIEVkaXRv
cjo6c2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5n
RGlyZWN0aW9uIGRpcgogICAgIC8vIElmIHRoZSB0ZXh0IGhhcyBsZWZ0IG9yIHJpZ2h0IGFsaWdu
bWVudCwgZmxpcCBsZWZ0LT5yaWdodCBhbmQgcmlnaHQtPmxlZnQuIAogICAgIC8vIE90aGVyd2lz
ZSwgZG8gbm90aGluZy4KIAotICAgIGF1dG8gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6
OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
KyAgICBhdXRvIHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9u
U3RhcnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFzZWxl
Y3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCiAgICAgICAgICByZXR1cm47
CiAKQEAgLTEyNiwxNCArMTI2LDE0IEBAIHZvaWQgRWRpdG9yOjpzZXRUZXh0QWxpZ25tZW50Rm9y
Q2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyCiAgICAgaWYg
KCFuZXdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRWxlbWVudCogZm9jdXNlZEVsZW1l
bnQgPSBtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CisgICAgRWxlbWVudCog
Zm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKGZv
Y3VzZWRFbGVtZW50ICYmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQp
IHx8IChpczxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpCiAgICAgICAgICYmIChk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpLmlzVGV4dEZpZWxkKCkK
ICAgICAgICAgICAgIHx8IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVu
dCkuaXNTZWFyY2hGaWVsZCgpKSkpKSB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gV3JpdGlu
Z0RpcmVjdGlvbjo6TmF0dXJhbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZG93bmNh
c3Q8SFRNTEVsZW1lbnQ+KCpmb2N1c2VkRWxlbWVudCkuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihhbGlnbkF0dHIsIG5ld1ZhbHVlKTsKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgICAgIG1fZG9jdW1lbnQudXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNDYsNyArMTQ2LDcg
QEAgdm9pZCBFZGl0b3I6OnJlbW92ZVVuY2hhbmdlYWJsZVN0eWxlcygpCiB7CiAgICAgLy8gVGhp
cyBmdW5jdGlvbiByZW1vdmVzIHN0eWxlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBtb2RpZnkgYnkg
YXBwbHlpbmcgdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCiAgICAgCi0gICAgYXV0byBlZGl0aW5nU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmJvZHlPckZyYW1l
c2V0KCkpOworICAgIGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUobV9k
b2N1bWVudC5ib2R5T3JGcmFtZXNldCgpKTsKICAgICBhdXRvIGRlZmF1bHRTdHlsZSA9IGVkaXRp
bmdTdHlsZS0+c3R5bGUoKS0+bXV0YWJsZUNvcHkoKTsKICAgICAKICAgICAvLyBUZXh0IHdpZGdl
dHMgaW1wbGVtZW50IGJhY2tncm91bmQgY29sb3IgdmlhIHRoZSBVSVZpZXcgcHJvcGVydHkuIFRo
ZWlyIGJvZHkgZWxlbWVudCB3aWxsIG5vdCBoYXZlIG9uZS4KQEAgLTIxOCw3ICsyMTgsNyBAQCB2
b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBP
cHRpb25TZXQ8UGFzdGVPcHRpb24+CiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKICAgICBib29sIGFsbG93UGxhaW5UZXh0ID0gb3B0aW9ucy5jb250YWlucyhQ
YXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpOwotICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVy
KG1fZnJhbWUsICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIg
cmVhZGVyKCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgYWxsb3dQbGFpblRleHQpOwogICAg
IGludCBudW1iZXJPZlBhc3RlYm9hcmRJdGVtcyA9IGNsaWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRl
bXNDb3VudCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXN0ZWJvYXJkSXRl
bXM7ICsraSkgewogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBj
bGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21EZWxlZ2F0ZShpKTsKQEAgLTI0Miw3ICsyNDIs
NyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJv
YXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAKIHZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRp
b25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBpZCBt
ZXRhZGF0YSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGRpY3RhdGlvblBocmFzZXMuaXNFbXB0eSgpKQpAQCAtMjYwLDcgKzI2MCw3IEBAIHZv
aWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0
b3I8VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgLy8gU29tZSBkYXkgd2UgY291bGQgbWFrZSB0aGVt
IFVuZG9hYmxlLCBhbmQgbGV0IGNhbGxlcnMgY2xlYXIgdGhlIFVuZG8gc3RhY2sgZXhwbGljaXRs
eSBpZiB0aGV5IHdpc2guCiAgICAgY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKIAotICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmNs
ZWFyKCk7CiAKICAgICBlbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAKQEAgLTMzOCw3ICszMzgs
NyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogCiAgICAgLy8gQXMgYSBzaWRlIGVmZmVjdCB0aGlzIGZ1
bmN0aW9uIHNldHMgYSBjYXJldCBzZWxlY3Rpb24gYWZ0ZXIgdGhlIGluc2VydGVkIGNvbnRlbnQu
IE11Y2ggb2Ygd2hhdAogICAgIC8vIGZvbGxvd3MgaXMgbW9yZSBleHBlbnNpdmUgaWYgdGhlcmUg
aXMgYSBzZWxlY3Rpb24sIHNvIGNsZWFyIGl0IHNpbmNlIGl0J3MgZ29pbmcgdG8gY2hhbmdlIGFu
eXdheS4KLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgLy8gY2xlYXIgb3V0IGFsbCBjdXJyZW50IGNoaWxk
cmVuIG9mIGVsZW1lbnQKICAgICBlbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CkBAIC0zNzksNyAr
Mzc5LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgRWxlbWVudCYgZWxlbWVudCkKICAgICBzZWxlY3Rpb24uc2V0QmFzZSh2aXNpYmxl
UG9zKTsKICAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KHZpc2libGVQb3MpOwogCi0gICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBtX2RvY3VtZW50LnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogCiAgICAgY2xpZW50KCktPnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgRWRpdG9y
OjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1lbnQmIGVs
ZW1lbnQpCiAvLyBoYXZlIGEgc3RhbGUgc2VsZWN0aW9uLgogdm9pZCBFZGl0b3I6OmVuc3VyZUxh
c3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCkKIHsK
LSAgICBUeXBpbmdDb21tYW5kOjplbnN1cmVMYXN0RWRpdENvbW1hbmRIYXNDdXJyZW50U2VsZWN0
aW9uSWZPcGVuRm9yTW9yZVR5cGluZygmbV9mcmFtZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgVHlwaW5nQ29tbWFuZDo6ZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3Vy
cmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcobV9kb2N1bWVudCwgbV9kb2N1bWVudC5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2xpYndwZS9FZGl0b3JMaWJXUEUuY3BwCmluZGV4IDVk
MTVhNjQ2MWM1NjliNjNhY2M2MTU3OTVlMzQ0NzcwOGE0ZDU1NzcuLjEyZmQ2YTQzZWEwNWEyYTBl
NzJiNzRiYTcyZDk2Mjg2NDcwNWJhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbGlid3BlL0VkaXRvckxpYldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9s
aWJ3cGUvRWRpdG9yTGliV1BFLmNwcApAQCAtNjcsOCArNjcsOCBAQCB2b2lkIEVkaXRvcjo6d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKICAgICBQ
YXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKICAgICBwYXN0ZWJvYXJkQ29u
dGVudC50ZXh0ID0gc2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCk7Ci0gICAgcGFzdGVib2Fy
ZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xv
Y2FsRmlsZVVSTHNGb3JQcml2YWN5LAotICAgICAgICBtX2ZyYW1lLnNldHRpbmdzKCkuc2VsZWN0
aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJl
ZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CisgICAgcGFzdGVib2FyZENvbnRl
bnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobV9kb2N1bWVu
dC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2Fs
RmlsZVVSTHNGb3JQcml2YWN5LAorICAgICAgICBtX2RvY3VtZW50LnNldHRpbmdzKCkuc2VsZWN0
aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQoKSA/IFNlcmlhbGl6ZUNvbXBvc2VkVHJl
ZTo6WWVzIDogU2VyaWFsaXplQ29tcG9zZWRUcmVlOjpObyk7CiAgICAgcGFzdGVib2FyZC53cml0
ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0Owot
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2ZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMuY29u
dGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBh
c3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9w
dGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRl
eHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246
OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCA5MzFhMjMwMGYw
OTY2NDI0M2Q4NjZhYzg2NDBhOTcxZDZjNTkyMTRkLi5hNzQxZTUxNDAzNTEzMzk2Nzk3YjI2Y2Nk
NzdlODZmMjJhY2M5NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFz
dGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogdm9pZCBFZGl0b3I6
OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQogewogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7Ci0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUo
KSkKKyAgICBpZiAobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpKQogICAgICAgICBwYXN0ZVdpdGhQYXN0ZWJvYXJkKCZwYXN0ZWJvYXJk
LCB7IFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCB9KTsKICAgICBlbHNlCiAgICAgICAgIHBh
c3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKQEAgLTEzNiwxNyArMTM2
LDE3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJvYXJkKE5vZGUqIG5vZGUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogCi0g
ICAgaWYgKCZub2RlLT5kb2N1bWVudCgpICE9IG1fZnJhbWUuZG9jdW1lbnQoKSkKKyAgICBpZiAo
bm9kZS0+ZG9jdW1lbnQoKSAhPSBtX2RvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3Rv
cihtX2RvY3VtZW50KTsKIAogICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoKm5vZGUpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24ocmFuZ2UpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7Cisg
ICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihy
YW5nZSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAogICAgIFBhc3RlYm9hcmQg
cGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgIGlmICghbV9k
b2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
KSB7CiAgICAgICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCBn
ZXRJbWFnZShFbGVtZW50JiBpbWFnZUVsZW1lbnQsIFJlZlB0cjxJbWFnZT4mIGltYWdlLCBDYWNo
ZWRJbWFnZSomCiAKIHZvaWQgRWRpdG9yOjpzZWxlY3Rpb25XaWxsQ2hhbmdlKCkKIHsKLSAgICBp
ZiAoIWhhc0NvbXBvc2l0aW9uKCkgfHwgaWdub3JlU2VsZWN0aW9uQ2hhbmdlcygpIHx8IG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgaWYgKCFoYXNDb21wb3NpdGlvbigpIHx8IGln
bm9yZVNlbGVjdGlvbkNoYW5nZXMoKSB8fCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLmlzTm9uZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBjYW5jZWxDb21wb3NpdGlvbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKaW5kZXggNWU4Njg3Zjg5NGJlYzYwNGNjNjIx
YmQ0ZTBkOTEyODI5NWMzNGY1OS4uYzc5NmJmYWFmNjZlZTk0YTg1YzU1ZjM5MjM0OTE1NWQyNzRh
ODYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCkBAIC00Miw3
ICs0Miw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBh
c3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ym9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdtZW50KG1fZnJhbWUsICpyYW5nZSwgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7
CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9j
dW1lbnRGcmFnbWVudCgqbV9kb2N1bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFp
bnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAg
aWYgKGZyYWdtZW50ICYmIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9u
KSkKICAgICAgICAgcXVvdGVGcmFnbWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKQEAgLTY5LDkg
KzY5LDkgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZy
b21QbGF0Zm9ybURhdGEoUGxhdGZvcm1EcmFnRGF0YSYKIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
LCBjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgLyphbGxvd1BsYWluVGV4dCovLCBib29sJiAvKmNo
b3NlUGxhaW5UZXh0Ki8pCiB7CiAgICAgaWYgKENPTVB0cjxJRGF0YU9iamVjdD4gcGxhdGZvcm1E
cmFnRGF0YSA9IHBhc3RlYm9hcmQuZGF0YU9iamVjdCgpKQotICAgICAgICByZXR1cm4gY3JlYXRl
RnJhZ21lbnRGcm9tUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURyYWdEYXRhLCBtX2ZyYW1lKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EcmFn
RGF0YSwgKm1fZG9jdW1lbnQuZnJhbWUoKSk7CiAKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRG
cm9tUGxhdGZvcm1EYXRhKHBhc3RlYm9hcmQuZHJhZ0RhdGFNYXAoKSwgbV9mcmFtZSk7CisgICAg
cmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBsYXRmb3JtRGF0YShwYXN0ZWJvYXJkLmRyYWdEYXRh
TWFwKCksICptX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmluZGV4IDU1ZTQxYjdhZjVkYzVi
OWY3MWVlN2Y5YWVkNmNmNjNmY2EzMGEyMTEuLmQzZDY2NWZiNzEyMmI2Y2Y3YWFhM2MzMTQ1YzIw
YzIwMGFjOTdlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCkBAIC0y
ODYsNyArMjg2LDcgQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAgICAgbV9kb2N1bWVu
dC0+cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAogICAgIG1fZG9jdW1lbnQtPnNldEJhY2tG
b3J3YXJkQ2FjaGVTdGF0ZShEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBt
X2RvY3VtZW50LT5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICBtX2RvY3VtZW50LT53aWxs
QmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAKICAgICBjbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKaW5kZXggOGIwNWY4Mzc1MTRmNTBhZTA4YjJhZjRkODRlM2IxZWQ1
NzI0YWVjNy4uNTkxMjhiZWI4NzU2OGQxZjc5Zjg4NDU2NjQyYzU1OTFjZWIxMjI1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC01NDgsMTEgKzU0OCwxNCBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpzdG9wKCkKIHZvaWQgRnJhbWVMb2FkZXI6OndpbGxUcmFuc2l0aW9uVG9D
b21taXR0ZWQoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBmcmFt
ZSBpcyBzdGlsbCBmdWxseSBpbiBwbGFjZSAobm90IGNhY2hlZCwgbm90IGRldGFjaGVkKSwgYnV0
IHdpbGwgYmUgcmVwbGFjZWQuCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X2ZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICBpZiAoZG9jdW1lbnQtPmVk
aXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gVGhlIHRleHQgd2FzIGFscmVh
ZHkgcHJlc2VudCBpbiBET00sIHNvIGl0J3MgYmV0dGVyIHRvIGNvbmZpcm0gdGhhbiB0byBjYW5j
ZWwgdGhlIGNvbXBvc2l0aW9uLgotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLmNvbmZpcm1Db21w
b3NpdGlvbigpOwotICAgICAgICBpZiAoRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQgPSBtX2Zy
YW1lLmVkaXRvcigpLmNsaWVudCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5lZGl0b3IoKS5jb25m
aXJtQ29tcG9zaXRpb24oKTsKKyAgICAgICAgaWYgKEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50
ID0gZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKSB7CiAgICAgICAgICAgICBlZGl0b3JDbGll
bnQtPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oJm1fZnJhbWUpOwogICAgICAgICAgICAgZWRp
dG9yQ2xpZW50LT5kaXNjYXJkZWRDb21wb3NpdGlvbigmbV9mcmFtZSk7CiAgICAgICAgIH0KQEAg
LTU2Myw3ICs1NjYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgpCiB7CiAgICAgaGlz
dG9yeSgpLnNhdmVEb2N1bWVudFN0YXRlKCk7CiAKLSAgICBEb2N1bWVudCogY3VycmVudERvY3Vt
ZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOworICAgIFJlZlB0cjxEb2N1bWVudD4gY3VycmVudERv
Y3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwogICAgIFVubG9hZEV2ZW50UG9saWN5IHVubG9h
ZEV2ZW50UG9saWN5OwogICAgIGlmIChtX2ZyYW1lLnBhZ2UoKSAmJiBtX2ZyYW1lLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkuaXNTVkdJbWFnZUNocm9tZUNsaWVudCgpKSB7CiAgICAgICAgIC8v
IElmIHRoaXMgaXMgdGhlIFNWR0RvY3VtZW50IG9mIGFuIFNWR0ltYWdlLCBubyBuZWVkIHRvIGRp
c3BhdGNoIGV2ZW50cyBvciByZWNhbGNTdHlsZS4KQEAgLTU3NSw3ICs1NzgsOCBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpjbG9zZVVSTCgpCiAKICAgICBzdG9wTG9hZGluZyh1bmxvYWRFdmVudFBvbGlj
eSk7CiAgICAgCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygp
OworICAgIGlmIChjdXJyZW50RG9jdW1lbnQpCisgICAgICAgIGN1cnJlbnREb2N1bWVudC0+ZWRp
dG9yKCkuY2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6
ZGlkT3BlblVSTCgpCkBAIC01ODcsNyArNTkxLDYgQEAgYm9vbCBGcmFtZUxvYWRlcjo6ZGlkT3Bl
blVSTCgpCiAgICAgfQogCiAgICAgbV9mcmFtZS5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuY2FuY2Vs
KCk7Ci0gICAgbV9mcmFtZS5lZGl0b3IoKS5jbGVhckxhc3RFZGl0Q29tbWFuZCgpOwogCiAgICAg
bV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9zZSA9IGZhbHNl
OwpAQCAtNjUwLDggKzY1Myw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRDbGVhcldpbmRv
d05hbWUoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBEb2N1bWVudCYgbmV3CiAKIHZvaWQgRnJh
bWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVhcldpbmRvd1By
b3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzLCBib29sIGNsZWFyRnJhbWVWaWV3LCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBoYW5kbGVET01XaW5kb3dDcmVhdGlvbikKIHsKLSAgICBt
X2ZyYW1lLmVkaXRvcigpLmNsZWFyKCk7Ci0KICAgICBib29sIG5lZWRlZENsZWFyID0gbV9uZWVk
c0NsZWFyOwogICAgIG1fbmVlZHNDbGVhciA9IGZhbHNlOwogCkBAIC02NTksNyArNjYwLDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFy
V2luZG93UHJvcGVydGllcywgYm9vbAogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPmNhbmNl
bFBhcnNpbmcoKTsKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5zdG9wQWN0aXZlRE9NT2Jq
ZWN0cygpOwogICAgICAgICBib29sIGhhZExpdmluZ1JlbmRlclRyZWUgPSBtX2ZyYW1lLmRvY3Vt
ZW50KCktPmhhc0xpdmluZ1JlbmRlclRyZWUoKTsKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT5wcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKKyAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT53
aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAgICAgICAgIGlmIChoYWRMaXZpbmdSZW5kZXJUcmVl
KQogICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5hZGp1c3RGb2N1c2VkTm9kZU9uTm9k
ZVJlbW92YWwoKm1fZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgfQpAQCAtNjgwLDcgKzY4MSw2IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2N1bWVudCwgYm9vbCBjbGVh
cldpbmRvd1Byb3BlcnRpZXMsIGJvb2wKICAgICAgICAgICAgIG1fZnJhbWUudHJlZSgpLnNldE5h
bWUobnVsbEF0b20oKSk7CiAgICAgfQogCi0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5wcmVwYXJl
Rm9yRGVzdHJ1Y3Rpb24oKTsKICAgICBtX2ZyYW1lLmV2ZW50SGFuZGxlcigpLmNsZWFyKCk7CiAK
ICAgICBpZiAoY2xlYXJGcmFtZVZpZXcgJiYgbV9mcmFtZS52aWV3KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCmluZGV4IDFhNjA4OTY2MzQ2ZDEzNjgyYjkzYjkwZDI2Yzc3OWMyMmRmYmNmMTguLjM5ZGVh
NGQ1ZTI1YTdjNjNkOWJmZGIwM2FhNWU3NTU1NGJiMWJjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CkBAIC0xNTYsOCArMTU2LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UmIHBhZ2UsIEhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBVbmlxdWVSZWY8RnJhbWVMb2EKICAgICAsIG1fbmF2
aWdhdGlvblNjaGVkdWxlcihtYWtlVW5pcXVlUmVmPE5hdmlnYXRpb25TY2hlZHVsZXI+KCp0aGlz
KSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVudCkKICAgICAsIG1fc2NyaXB0KG1h
a2VVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4oKnRoaXMpKQotICAgICwgbV9lZGl0b3IobWFr
ZVVuaXF1ZVJlZjxFZGl0b3I+KCp0aGlzKSkKLSAgICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVS
ZWY8RnJhbWVTZWxlY3Rpb24+KHRoaXMpKQogICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKG1h
a2VVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9wYWdl
Wm9vbUZhY3RvcihwYXJlbnRQYWdlWm9vbUZhY3Rvcih0aGlzKSkKICAgICAsIG1fdGV4dFpvb21G
YWN0b3IocGFyZW50VGV4dFpvb21GYWN0b3IodGhpcykpCkBAIC0yMzQsNyArMjMyLDcgQEAgdm9p
ZCBGcmFtZTo6c2V0VmlldyhSZWZQdHI8RnJhbWVWaWV3PiYmIHZpZXcpCiAgICAgLy8gbm90aWZp
ZWQuIElmIHdlIHdhaXQgdW50aWwgdGhlIHZpZXcgaXMgZGVzdHJveWVkLCB0aGVuIHRoaW5ncyB3
b24ndCBiZSBob29rZWQgdXAgZW5vdWdoIGZvcgogICAgIC8vIHRoZXNlIGNhbGxzIHRvIHdvcmsu
CiAgICAgaWYgKCF2aWV3ICYmIG1fZG9jICYmIG1fZG9jLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUo
KSAhPSBEb2N1bWVudDo6SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICBtX2RvYy0+cHJlcGFy
ZUZvckRlc3RydWN0aW9uKCk7CisgICAgICAgIG1fZG9jLT53aWxsQmVSZW1vdmVkRnJvbUZyYW1l
KCk7CiAgICAgCiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5sYXlvdXRDb250ZXh0
KCkudW5zY2hlZHVsZUxheW91dCgpOwpAQCAtMjc5LDcgKzI3Nyw3IEBAIHZvaWQgRnJhbWU6OnNl
dERvY3VtZW50KFJlZlB0cjxEb2N1bWVudD4mJiBuZXdEb2N1bWVudCkKICNlbmRpZgogCiAgICAg
aWYgKG1fZG9jICYmIG1fZG9jLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6
SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICBtX2RvYy0+cHJlcGFyZUZvckRlc3RydWN0aW9u
KCk7CisgICAgICAgIG1fZG9jLT53aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCk7CiAKICAgICBtX2Rv
YyA9IG5ld0RvY3VtZW50LmNvcHlSZWYoKTsKICAgICBBU1NFUlQoIW1fZG9jIHx8IG1fZG9jLT5k
b21XaW5kb3coKSk7CkBAIC01NTQsNyArNTUyLDcgQEAgYm9vbCBGcmFtZTo6cmVxdWVzdERPTVBh
c3RlQWNjZXNzKCkKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpEZW5pZWQ6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIERPTVBhc3RlQWNjZXNzUG9saWN5OjpOb3RSZXF1
ZXN0ZWRZZXQ6IHsKLSAgICAgICAgYXV0byogY2xpZW50ID0gbV9lZGl0b3ItPmNsaWVudCgpOwor
ICAgICAgICBhdXRvKiBjbGllbnQgPSBlZGl0b3IoKS5jbGllbnQoKTsKICAgICAgICAgaWYgKCFj
bGllbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkzNyw3ICs5MzUsNyBAQCB2
b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9y
LCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZWRpdG9yLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7Cisg
ICAgZWRpdG9yKCkuZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAgLy8g
UmVzcGVjdCBTVkdzIHpvb21BbmRQYW49ImRpc2FibGVkIiBwcm9wZXJ0eSBpbiBzdGFuZGFsb25l
IFNWRyBkb2N1bWVudHMuCiAgICAgLy8gRklYTUU6IEhvdyB0byBoYW5kbGUgY29tcG91bmQgZG9j
dW1lbnRzICsgem9vbUFuZFBhbj0iZGlzYWJsZWQiPyBOZWVkcyBTVkcgV0cgY2xhcmlmaWNhdGlv
bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuaAppbmRleCBlOWNhYjNjYzBmOWVjYmRhMWMxMTgyZTNhYTc1ZDRjNWM2
YTJlYjAwLi40NTQ0MGFjMWFhZjA3MzcxYzM1MmYxOGRiNDE2OTYxZjhmMTQxYjYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBYnN0cmFjdEZyYW1lLmgi
CiAjaW5jbHVkZSAiQWRqdXN0Vmlld1NpemVPck5vdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWVJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAj
aW5jbHVkZSAiUGFnZUlkZW50aWZpZXIuaCIKQEAgLTE2MywxNCArMTY0LDE0IEBAIHB1YmxpYzoK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKICAgICBGcmFtZVZpZXcqIHZpZXcoKSBj
b25zdDsKIAotICAgIEVkaXRvciYgZWRpdG9yKCkgeyByZXR1cm4gbV9lZGl0b3I7IH0KLSAgICBj
b25zdCBFZGl0b3ImIGVkaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yOyB9CisgICAgRWRp
dG9yJiBlZGl0b3IoKSB7IHJldHVybiBkb2N1bWVudCgpLT5lZGl0b3IoKTsgfQorICAgIGNvbnN0
IEVkaXRvciYgZWRpdG9yKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+ZWRpdG9yKCk7IH0K
ICAgICBFdmVudEhhbmRsZXImIGV2ZW50SGFuZGxlcigpIHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVy
OyB9CiAgICAgY29uc3QgRXZlbnRIYW5kbGVyJiBldmVudEhhbmRsZXIoKSBjb25zdCB7IHJldHVy
biBtX2V2ZW50SGFuZGxlcjsgfQogICAgIEZyYW1lTG9hZGVyJiBsb2FkZXIoKSBjb25zdDsKICAg
ICBOYXZpZ2F0aW9uU2NoZWR1bGVyJiBuYXZpZ2F0aW9uU2NoZWR1bGVyKCkgY29uc3Q7Ci0gICAg
RnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9Ci0gICAg
Y29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uOyB9CisgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50
KCktPnNlbGVjdGlvbigpOyB9CisgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CiAgICAgRnJhbWVUcmVl
JiB0cmVlKCkgY29uc3Q7CiAgICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5pbWF0
aW9uKCkgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CiAgICAgY29uc3QgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmlt
YXRpb25Db250cm9sbGVyOyB9CkBAIC0zMzgsOCArMzM5LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8RG9jdW1lbnQ+IG1fZG9jOwogCiAgICAgVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+IG1f
c2NyaXB0OwotICAgIFVuaXF1ZVJlZjxFZGl0b3I+IG1fZWRpdG9yOwotICAgIFVuaXF1ZVJlZjxG
cmFtZVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiAgICAgVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVD
VElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDJkNmNlODA4YmVk
NjkzYzFmNzAzM2ZmYzdlN2FkNTQ2YzUwYWEzZmMuLmFlMzRiM2I4N2Y4OGYwYjAxYTkyYmFiYTQ2
NzdmMTdhOTIyZWMzNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGlj
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAt
NzIsNyArNzIsMTEgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFQKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVj
dGlvbiA9IHJhbmdlID09IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOworICAgIGF1dG8gZG9jdW1lbnQgPSBtYWtlUmVmUHRyKGZyYW1lLT5kb2N1bWVu
dCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9IHJhbmdlID09IGRvY3VtZW50LT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgT3B0aW9uU2V0
PFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbj4gdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uczsKICAg
ICB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246
OkRvTm90U2V0Rm9jdXMpOwpAQCAtODAsNyArODQsNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4g
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
VAogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9w
dGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRl
cyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdl
KCpmcmFtZSwgeyByYW5nZSB9LCB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zKTsKKyAgICBUZW1w
b3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpkb2N1bWVudCwgeyByYW5nZSB9
LCB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zKTsKIAogICAgIFRleHRJbmRpY2F0b3JEYXRhIGRh
dGE7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA4ZDhjYzQ0ZWJlZGY1NTI1MzI3MmZhY2UwOGM1NjdiYTNlZGJhZmQwLi4w
ZWZlY2RhMjViZGQ5MTVlM2M1NmNkMGY2NTQ4YmQxZjhkM2E0MWZmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMjAtMDQtMjMgIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBsZS5jb20+CisK
KyAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQgdmlhIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc2MDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2
OTY5NDUwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgY3Jhc2guCisKKyAgICAgICAgKiBlZGl0
aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRo
ZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWw6IEFkZGVkLgorCisgICAgICAgIE1vZGlmeSB0aGUg
dGVzdCByZXN1bHQuIEZyYW1lU2VsZWN0aW9uIGlzIGJlaW5nIGRlc3RydWN0ZWQgYWxvbmcgd2l0
aAorICAgICAgICBkb2N1bWVudCBzbyBhbiBhZGRpdGlvbmFsIHNlbGVjdGlvbiBjaGFuZ2Ugbm90
aWZpY2F0aW9uIGlzIGV4cGVjdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRpbmcv
cGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDQt
MjcgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IFN0b3JhZ2U6IGNhbiBzZWUgdGhpcmQtcGFydHkgY29va2llcwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1h
bmQtY3Jhc2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5z
ZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjMwNDAzNDIzZTU5MDk1MDI2NWYwOGEzMjkyNmU2NjE3ZDAxOGE3ZjcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQt
Y29tbWFuZC1jcmFzaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorVGVzdHMgaW5zZXJ0aW5n
IGxpc3QgZm9sbG93ZWQgYnkgYW4gZWRpdCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2Vi
S2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlvbi4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNy
YXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVu
LWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhZjM4MWQ5ZWY1YTNmZDk0ZWIy
MTA5MGMyYTIyZmJjMDc1MTJhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCkBA
IC0wLDAgKzEsMTkgQEAKKzxib2R5PjxpbWFnZT48L2ltYWdlPjxmb3JtIGlkPWZvcm0gY29udGVu
dEVkaXRhYmxlPXRydWU+PG9iamVjdCBkYXRhPT8gb25sb2FkPW9iamVjdE9uTG9hZCgpPjwvb2Jq
ZWN0PjwvZm9ybT48ZGlhbG9nIG9wZW49InRydWUiPmE8L2RpYWxvZz4KKzxzY3JpcHQ+CisgICAg
ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgic2VsZWN0QWxsIiwgZmFsc2UpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
ICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gb2JqZWN0T25Mb2FkKCkgeworICAgICAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VW5vcmRlcmVkTGlzdCIsIGZhbHNlKTsKKyAg
ICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIml0YWxpYyIsIGZhbHNlKTsKKyAgICAgICAgcmVx
dWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MID0gIjxwPiBUZXN0cyBpbnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBl
ZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBo
aXQgYW4gYXNzZXJ0aW9uLjwvcD4iOworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9KTsK
KyAgICB9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWRlYWQtZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1m
cmFtZS1leHBlY3RlZC50eHQKaW5kZXggZDZiYzdiMWU2ZjAzZTNiNDhhZjA0MThjNjU1MDRhNGQy
MTM3YzFhYy4uZTViZGQyYTBiZmQ4OTUyZDk3NjZhNDM3Y2FjZWE0NjY0ODk3Nzg2NiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRy
b3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2VkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtZGVhZC1mcmFtZS1leHBlY3RlZC50eHQKQEAg
LTQsNiArNCw3IEBAIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246
V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvCiBFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byAwIG9mIEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAwIG9mICN0ZXh0ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4
dCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlE
b3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24K
IEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlm
aWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397872</attachid>
            <date>2020-04-28 12:34:31 -0700</date>
            <delta_ts>2020-04-28 13:50:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200428123430.patch</filename>
            <type>text/plain</type>
            <size>14697</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uYTgwOWNkMjY1MzhhMDc0NTBkYWQ5ZjBhYjBjZTI3
ZGZjNjU0MTg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA0LTI4ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgcGF0
Y2guIFJlbW92ZSBtX2ZyYW1lIGluIEZyYW1lU2VsZWN0aW9uIHNvIGl0IHdpbGwgbm90IGJlCisg
ICAgICAgIGluYWR2ZXJ0ZW50bHkgdXNlZCB3aGljaCBtYXkgY2F1c2UgY3Jhc2hlcy4KKyAKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAg
KiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3Qp
OgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVj
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVu
dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxl
dGVTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJl
dmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxk
Q2hhbmdlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
Lmg6CisgICAgICAgICogZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZSk6CisKIDIwMjAtMDQtMjggIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBsZS5j
b20+CiAKICAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQg
dmlhIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCkBAIC0xMywxNSArNDEsMTQgQEAK
IAogICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjptX3NlbGVj
dGlvbik6Ci0gICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToK
ICAgICAgICAgKFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCiAgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9yKToK
ICAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgogICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
c2VsZWN0aW9uIGNvbnN0KToKLSAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6Ci0g
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBjb25zdCk6CiAg
ICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKICAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIpOgogICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3Rv
cFBlbmRpbmdDb3JyZWN0aW9uKToKQEAgLTE1MSwxMSArMTc4LDEwIEBACiAgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb3Vu
dE1hdGNoZXNGb3JUZXh0KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbik6Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRl
bGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RU
ZWxlcGhvbmVOdW1iZXJzIGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNl
bGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpl
ZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxl
Y3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6Ci0gICAgICAgIChXZWJDb3JlOjpjYW5kaWRh
dGVSYW5nZUZvclNlbGVjdGlvbik6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmluZ0Zv
ckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb250
ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0IGNvbnN0KToKQEAgLTE5MSw3ICsy
MTcsNyBAQAogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1Jp
Z2h0KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgotICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CiAgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CiAgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKICAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CkBAIC0yMTQsNiAr
MjQwLDcgQEAKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJh
bmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCiAgICAgICAgICogZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5oOgogICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpk
b0FwcGx5KToKQEAgLTI2MSw2ICsyODgsNyBAQAogICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29t
bWFuZC5oOgogICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW06CiAgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCk6CisgICAgICAgIChXZWJD
b3JlOjpzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcpOgogICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OndyaXRlU2VsZWN0aW9uKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9u
SW5XZWJBcmNoaXZlRm9ybWF0KToKQEAgLTI4OSw2ICszMTcsOCBAQAogICAgICAgICAqIGVkaXRp
bmcvd2luL0VkaXRvcldpbi5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBh
c3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgogICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRpb25U
b0NvbW1pdHRlZCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwpOgpA
QCAtMjk2LDYgKzMyNiw4IEBACiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xlYXIp
OgogICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OkZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRWaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVxdWVz
dERPTVBhc3RlQWNjZXNzKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5kVGV4
dFpvb21GYWN0b3JzKToKICAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBhZWY0
YmM1YTdkOGY2ZDZkNWFkNjZlNjYwYjdmNGU4ZWVlMTg4YTFjLi5kYzY0MzJmODhlMTJiM2EzZDEz
ZjIzYWJmODVlMmVjNzA4M2ZkNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBib29s
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9u
RW5hYmxlZCgpCiAKIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmll
d1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgYXV0
byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOworICAgIGF1dG8qIHZpZXcgPSBt
X2RvY3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVzKFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDA0OGVkMDYxYjVlODQwYTYwOGE4ZTdmOWY4
NmEzN2EwNTdhYTc5ODIuLmYyZWYyNTBjZDRiYjAwYWY3OWQ1OWFhOGY2ZDg2NmZhOTJmNmYyYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xNDYsNyAr
MTQ2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2Vs
ZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIAogRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0
aW9uKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAg
LCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAgLCBt
X3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICNp
ZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Nyw3ICsxNTYsNyBAQCBGcmFtZVNlbGVjdGlvbjo6
RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hYnNDYXJldEJvdW5k
c0RpcnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJldEJs
aW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9mcmFt
ZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZy
YW1lKCkgPT0gbV9mcmFtZSkKKyAgICAsIG1fZm9jdXNlZChkb2N1bWVudC0+ZnJhbWUoKSAmJiBk
b2N1bWVudC0+ZnJhbWUoKS0+cGFnZSgpICYmIGRvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LT5mcmFtZSgpKQogICAgICwgbV9zaG91
bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUo
ZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5nU2Vs
ZWN0aW9uKGZhbHNlKQpAQCAtMzM2LDE3ICszMzUsMTcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0
aW8KICAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dCkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogCi0gICAg
aWYgKCFtX2ZyYW1lKSB7CisgICAgaWYgKCFtX2RvY3VtZW50LT5mcmFtZSgpKSB7CiAgICAgICAg
IG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDY0
PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24KLSAg
ICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBp
bmZpbml0ZSBsb29wCisgICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9kb2N1bWVudC0+
ZnJhbWUoKSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVu
dCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdTZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkp
IHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4gbmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxl
Y3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZy
YW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkgewot
ICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGln
biwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1f
ZG9jdW1lbnQtPmZyYW1lKCkgJiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkg
eworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkRvY3VtZW50LT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgp
LCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUg
dGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMgRnJhbWVTZWxlY3Rpb24g
aGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBzZWxlY3RGcmFtZUVsZW1l
bnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBubyBs
b25nZXIgdmFsaWQgc2luY2UKICAgICAgICAgICAgICAgICAvLyB0aGUgZnJhbWUgaXMgYWJvdXQg
dG8gYmUgZGVzdHJveWVkLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBjbGVhciBvdXIgc2VsZWN0aW9u
LgpAQCAtMTM3Nyw5ICsxMzc2LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0
ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQobV9mcmFtZSkpCisgICAgaWYgKGlzU3BhdGlhbE5hdmln
YXRpb25FbmFibGVkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKSB7CiAgICAgICAgIGlmICghd2FzUmFu
Z2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUgJiYgcG9zaXRpb24gPT0gb3JpZ2luYWxTdGFy
dFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIGlmICht
X2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAg
ICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9i
amVjdENhY2hlKCkpCkBAIC0xOTMyLDEwICsxOTMyLDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAg
ICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCkucGFy
ZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPnRyZWUoKS5w
YXJlbnQoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQtPnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTk0OCw3ICsxOTQ4LDcg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5
U2VsZWN0ZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBHZXQgdG8gdGhlIDxpZnJhbWU+
IG9yIDxmcmFtZT4gKG9yIGV2ZW4gPG9iamVjdD4pIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBmcmFt
ZS4KLSAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2ZyYW1lLT5vd25lckVsZW1lbnQoKTsK
KyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2RvY3VtZW50LT5vd25lckVsZW1lbnQoKTsK
ICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRhaW5lck5v
ZGUqIG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFyZW50Tm9kZSgpOwpAQCAt
MjI1Myw3ICsyMjUzLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJ
Zk5lZWRlZCgpCiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3Mo
KS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7CiAgICAg
ICAgIGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0
aW9uLmJhc2UoKSkpIHsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50
KGFuY2hvciwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjI2NSw3ICsyMjY1LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgICAgICAgICAvLyBzbyBhZGQgdGhlICFp
c0ZyYW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0
byBtYWtlIHRoaXMKICAgICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxvbmcgdGVybSwgYnV0IHRo
aXMgaXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0aW1lLgogICAgICAgICAgICAgaWYgKHRhcmdl
dC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1
c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBtX2RvY3VtZW50
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1f
ZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVu
dCgpOwpAQCAtMjI3NCw3ICsyMjc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNl
ZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAg
ICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1l
bnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2RvY3VtZW50LT5mcmFt
ZSgpKTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFt
ZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsNyArMjMwMCw3
IEBAIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBGcmFtZVNlbGVjdGlvbjo6Y29weVR5
cGluZ1N0eWxlKCkgY29uc3QKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJh
Y2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uQ2hh
bmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAg
ICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdl
KGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwpA
QCAtMjQxMSw3ICsyNDExLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9u
KFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICAgICAgICAgICAg
ICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAg
ICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1f
ZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJh
bWUoKm1fZnJhbWUpOworICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgq
bV9kb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBA
IC0yNDQ1LDcgKzI0NDUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9t
Tm9uZSgpCiBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2Fi
bGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxi
YWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgcmV0dXJu
IG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwg
bmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDNhN2IwODVmN2NmNTE1ODgzMzM4ODQx
MGIwMmFiZTg1NjY1YzQ4YzMuLjkwNzQ3NzJkM2UyZjlkZTBmZjcxYzQwNTMyODBmMWI5OTM0MDE1
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTMzNyw3ICsz
MzcsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAg
ICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Zy
YW1lU2VsZWN0aW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxl
Y3Rpb25NYWMubW0KaW5kZXggODM0Y2MzNmJhOGE2N2EyYmU4YTdiN2I0OGNlYTNlMWY5NWM3MWNi
Ny4uMzUwM2MyNmMzZmZkMGMzYWNmOTI1Mzc5Mjg4OWVkZmRlYWYwYTE3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KQEAgLTM0LDEwICsz
NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5
QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUlu
dGVudCYgaW50ZW50KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCk7Ci0KICAgICBpZiAobV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3Nl
bGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBkb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
KQogICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24obV9z
ZWxlY3Rpb24uc3RhcnQoKSwgaW50ZW50LCBtX3NlbGVjdGlvbik7CiAgICAgfQogCkBAIC00Niwx
MCArNDQsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNl
bGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW4KICAgICBpZiAoIVVBWm9vbUVuYWJs
ZWQoKSB8fCAhbV9zZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKKyAgICBSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlmICgh
cmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bV9mcmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9kb2N1bWVudC0+
dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397889</attachid>
            <date>2020-04-28 15:07:08 -0700</date>
            <delta_ts>2020-04-28 23:04:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200428150707.patch</filename>
            <type>text/plain</type>
            <size>47925</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uMTFhYzEwNWIxMTdlYmIwNDgxNDBjOGE3MDkyMGM2
NjY1MzNkZmM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTA0LTI4ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgcGF0
Y2guIFJlbW92ZSBtX2ZyYW1lIGluIEZyYW1lU2VsZWN0aW9uIHNvIGl0IHdpbGwgbm90IGJlCisg
ICAgICAgIGluYWR2ZXJ0ZW50bHkgdXNlZCB3aGljaCBtYXkgY2F1c2UgY3Jhc2hlcy4gQWxzbywg
Y2hhbmdlIHRoZSBhcmd1bWVudCBvZiAKKyAgICAgICAgY29uc3RydWN0b3IgdG8gRG9jdW1lbnQm
IHRvIGF2b2lkIG51bGwgcG9pbnRlciBhY2Nlc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBj
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lIGNvbnN0KToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bV9zZWxlY3Rpb24pOgor
ICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5n
ZSBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9u
V2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpz
ZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRWaXNpYmlsaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBl
ZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6Y3VycmVudEZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjphcHBlYXJhbmNlVXBkYXRlVGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHls
ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VP
bkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0Qmxp
bmtzKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAqIGVkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0
aW9uQXRrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9GcmFt
ZVNlbGVjdGlvbk1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3Rp
ZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKwogMjAyMC0wNC0yOCAgSmFjayBM
ZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRyIGNyYXNoIGlu
IEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92
ZU5vZGUKQEAgLTEzLDE1ICs4MSwxNCBAQAogCiAgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
ICAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKLSAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgogICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFuYWdl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcGFyZUZvckRlc3Ry
dWN0aW9uKTogRGVsZXRlZC4KICAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKICAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjplZGl0b3IpOgogICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVk
aXRvciBjb25zdCk6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uKToKICAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3Rpb24gY29uc3QpOgotICAgICAgICAqIGRv
bS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0
b3I6OmlzQ2FuZGlkYXRlIGNvbnN0KToKICAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwOgogICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6CiAgICAgICAgIChXZWJDb3JlOjpBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24pOgpAQCAtMTUxLDEx
ICsyMTgsMTAgQEAKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZFN0cmluZyk6CiAgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQpOgogICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKLSAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMgY29uc3QpOgogICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CiAg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CiAgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0KToK
LSAgICAgICAgKFdlYkNvcmU6OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKICAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CiAgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29u
c3QpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9u
U3RhcnQgY29uc3QpOgpAQCAtMTkxLDcgKzI1Nyw3IEBACiAgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246Om1vZGlmeSk6Ci0gICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJlcGFy
ZUZvckRlc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3aWxs
QmVSZW1vdmVkRnJvbUZyYW1lKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjph
YnNvbHV0ZUNhcmV0Qm91bmRzKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZWNvbXB1dGVDYXJldFJlY3QpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmNv
bnRhaW5zIGNvbnN0KToKQEAgLTIxNCw2ICsyODAsNyBAQAogICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UpOgog
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KToK
ICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKTogRGVs
ZXRlZC4KICAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CiAgICAgICAgICogZWRp
dGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcDoKICAgICAgICAgKFdlYkNvcmU6Oklu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgpAQCAtMjYxLDYgKzMyOCw3IEBACiAg
ICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmg6CiAgICAgICAgICogZWRpdGluZy9jb2Nv
YS9FZGl0b3JDb2NvYS5tbToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uSW5I
VE1MRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmlu
Zyk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb24pOgogICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQpOgpAQCAtMjg5LDYg
KzM1Nyw4IEBACiAgICAgICAgICogZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcDoKICAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZCk6CiAgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCk6CisgICAgICAgICogaGlzdG9yeS9D
YWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6ZGVzdHJveSk6
CiAgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKICAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjp3aWxsVHJhbnNpdGlvblRvQ29tbWl0dGVkKToKICAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpjbG9zZVVSTCk6CkBAIC0yOTYsNiArMzY2LDggQEAKICAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpjbGVhcik6CiAgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CiAg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6
OnNldFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKICAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MpOgogICAgICAgICAoV2Vi
Q29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgogICAgICAgICAqIHBhZ2Uv
RnJhbWUuaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5YmQ0ZGMzOTc1MGYyZjE1
YjNjZTJlODlkZGI2OTc4YWQ0ODQ2NmViLi5hNzUwZDc2NDY5ZjE5M2EyZGZlOGMyMDkxNTZhMjRi
MWE2MDI3MDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMjAtMDQtMjggIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBsZS5jb20+CisKKyAgICAg
ICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQgdmlhIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDc2MDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTY5NDUw
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlY29u
ZCBwYXJ0IG9mIHRoZSBwYXRjaC4gUmVtb3ZlIG1fZnJhbWUgaW4gRnJhbWVTZWxlY3Rpb24gc28g
aXQgd2lsbCBub3QgYmUKKyAgICAgICAgaW5hZHZlcnRlbnRseSB1c2VkIHdoaWNoIG1heSBjYXVz
ZSBjcmFzaGVzLiBBbHNvLCBjaGFuZ2UgdGhlIGFyZ3VtZW50IG9mIAorICAgICAgICBjb25zdHJ1
Y3RvciB0byBEb2N1bWVudCYgdG8gYXZvaWQgbnVsbCBwb2ludGVyIGFjY2Vzcy4KKworICAgICAg
ICAqIERPTS9ET01VSUtpdEV4dGVuc2lvbnMubW06CisgICAgICAgICgtW0RPTVJhbmdlIG1vdmU6
aW5EaXJlY3Rpb246XSk6CisgICAgICAgICgtW0RPTVJhbmdlIGV4dGVuZDppbkRpcmVjdGlvbjpd
KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBf
cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpkaXJlY3Rpb246Z3JhbnVsYXJpdHk6XSk6
CisKIDIwMjAtMDQtMjcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDbGVhbiB1cCBzb21lIHVzZWxlc3MgaW5jbHVkZXMgb2YgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAwMmM3NTcwMGE4NWIzYzcyNTY2OTc3YmEy
ZGJjMWUzYWY4MjkxNGI1Li5kNDhmYmI5ZWZkMjAwYWQ0MDIxZjQzYmY2OGU2NzNhNTVkOWRmZmRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIFZpc2libGVQb3Np
dGlvblJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdl
Rm9yTGluZSh1bnNpCiAgICAgLy8gTk9URTogaWdub3JlcyByZXN1bHRzIG9mIHNlbC5tb2RpZnkg
YmVjYXVzZSBpdCByZXR1cm5zIGZhbHNlIHdoZW4KICAgICAvLyBzdGFydGluZyBhdCBhbiBlbXB0
eSBsaW5lLiAgVGhlIHJlc3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAgLy8gd2ls
bCBiZSBhIGNhcmV0IGF0IHZpc2libGVQb3MuCi0gICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9u
OworICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbigqZG9jdW1lbnQoKSk7CiAgICAgc2VsZWN0
aW9uLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVQb3MpKTsKICAgICBzZWxl
Y3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25S
aWdodCwgTGluZUJvdW5kYXJ5KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDY5
MDc4NjI4ZGQ3MzQ4NTkxY2FiMmEwM2YxNzg5MGY5NTE0YzY0NGIuLjcxYmE2NTIyMTM3YTNjNGIz
ZmQ0ZDE0ZTNkODU1ODU1YzAyM2Y0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTgz
LDcgKzU4Myw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYg
dXJsLCB1bnNpZ25lZCBkb2N1bWVudENsYXNzZXMsIHVuc2lnCiAgICAgLCBtX2lkZW50aWZpZXIo
RG9jdW1lbnRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQogICAgICwgbV91bmRvTWFuYWdlcihVbmRv
TWFuYWdlcjo6Y3JlYXRlKCp0aGlzKSkKICAgICAsIG1fZWRpdG9yKG1ha2VVbmlxdWVSZWY8RWRp
dG9yPigqdGhpcykpCi0gICAgLCBtX3NlbGVjdGlvbihtYWtlVW5pcXVlUmVmPEZyYW1lU2VsZWN0
aW9uPih0aGlzKSkKKyAgICAsIG1fc2VsZWN0aW9uKG1ha2VVbmlxdWVSZWY8RnJhbWVTZWxlY3Rp
b24+KCp0aGlzKSkKIHsKICAgICBhdXRvIGFkZFJlc3VsdCA9IGFsbERvY3VtZW50c01hcCgpLmFk
ZChtX2lkZW50aWZpZXIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBhZWY0YmM1YTdkOGY2ZDZkNWFkNjZlNjYw
YjdmNGU4ZWVlMTg4YTFjLi5kYzY0MzJmODhlMTJiM2EzZDEzZjIzYWJmODVlMmVjNzA4M2ZkNWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiAKIEZsb2F0UmVj
dCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgYXV0byogdmlldyA9IG1fZG9jdW1lbnQu
ZnJhbWUoKS0+dmlldygpOworICAgIGF1dG8qIHZpZXcgPSBtX2RvY3VtZW50LnZpZXcoKTsKICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIHZpZXctPmNvbnRl
bnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UXVhZHMocmFuZ2UpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCmluZGV4IDA0OGVkMDYxYjVlODQwYTYwOGE4ZTdmOWY4NmEzN2EwNTdhYTc5ODIuLmYxZjFi
MGRmZjZmMzI1ZGQ1MDU2MjNmYzdiYzRlNTViNGNjYjc5N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xMzksMTQgKzEzOSwxMyBAQCBJbnRSZWN0IERy
YWdDYXJldENvbnRyb2xsZXI6OmVkaXRhYmxlRWxlbWVudFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoKSBjb25zdAogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRG9jdW1l
bnQmIGRvY3VtZW50KQogewotICAgIHJldHVybiAhZG9jdW1lbnQgfHwgZG9jdW1lbnQtPmVkaXRv
cigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxlY3Rpb25Bc0RpcmVjdGlvbmFsKCk7Cisg
ICAgcmV0dXJuIGRvY3VtZW50LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ29uc2lkZXJTZWxl
Y3Rpb25Bc0RpcmVjdGlvbmFsKCk7CiB9CiAKLUZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlv
bihEb2N1bWVudCogZG9jdW1lbnQpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9j
dW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fZnJh
bWUoZG9jdW1lbnQ/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cikKICAgICAsIG1feFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9u
KCkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJM
RShURVhUX0NBUkVUKQpAQCAtMTU3LDcgKzE1Niw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNl
bGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHko
dHJ1ZSkKICAgICAsIG1fY2FyZXRQYWludCh0cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdT
dXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdl
KCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9
PSBtX2ZyYW1lKQorICAgICwgbV9mb2N1c2VkKGRvY3VtZW50LmZyYW1lKCkgJiYgZG9jdW1lbnQu
ZnJhbWUoKS0+cGFnZSgpICYmIGRvY3VtZW50LnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZEZyYW1lKCkgPT0gZG9jdW1lbnQuZnJhbWUoKSkKICAgICAsIG1fc2hvdWxkU2hvd0Jsb2Nr
Q3Vyc29yKGZhbHNlKQogICAgICwgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlKGZhbHNlKQogICAg
ICwgbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVjdGlvbihmYWxz
ZSkKQEAgLTE4Myw3ICsxODIsNyBAQCBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9j
dW1lbnQqIGRvY3VtZW50KQogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVs
ZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2VsZWN0aW9u
Um9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICByZXR1cm4gc2Vs
ZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KTsKKyAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2RvY3VtZW50
LmRvY3VtZW50RWxlbWVudCgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQsIEN1
cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCkBAIC0zMzYsMTcgKzMzNSwxNyBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZp
c2libGVTZWxlY3RpbwogICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlv
bihtX2RvY3VtZW50KSkKICAgICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1
ZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQuZnJhbWUoKSkg
ewogICAgICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzQ2ND46IEluZmluaXRlIHJlY3Vyc2lvbiBhdCBGcmFtZVNlbGVjdGlvbjo6c2V0U2Vs
ZWN0aW9uCi0gICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0
IGludG8gYW4gaW5maW5pdGUgbG9vcAorICAgIC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1f
ZG9jdW1lbnQuZnJhbWUoKSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcAogICAgIGlm
IChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdTZWxlY3Rpb24uYmFzZSgpLmRv
Y3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4gbmV3U2VsZWN0aW9uRnJhbWUg
PSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAgICAgICAgICAgaWYgKG5ld1Nl
bGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9jdW1lbnQgIT0gbV9kb2N1
bWVudCkgewotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZy
YW1lICE9IG1fZG9jdW1lbnQuZnJhbWUoKSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSAmbV9k
b2N1bWVudCkgeworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkRvY3VtZW50LT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24sIHRoaXMgRnJhbWVT
ZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAgICAvLyBzZWxlY3RG
cmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQgdGhlIHNlbGVjdGlv
biBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKICAgICAgICAgICAgICAgICAvLyB0aGUgZnJhbWUg
aXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBjbGVhciBvdXIg
c2VsZWN0aW9uLgpAQCAtMzYwLDcgKzM1OSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAg
ICAgbV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5OwogCiAgICAgaWYgKGNsb3NlVHlwaW5nKQot
ICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZygqbV9kb2N1bWVudCk7CisgICAgICAg
IFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKG1fZG9jdW1lbnQpOwogCiAgICAgaWYgKHNob3Vs
ZENsZWFyVHlwaW5nU3R5bGUpCiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsKQEAgLTM2OCw3
ICszNjcsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIFZpc2libGVTZWxlY3Rpb24g
b2xkU2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CiAgICAgYm9vbCBkaWRNdXRhdGVTZWxlY3Rpb24g
PSBvbGRTZWxlY3Rpb24gIT0gbmV3U2VsZWN0aW9uOwogICAgIGlmIChkaWRNdXRhdGVTZWxlY3Rp
b24pCi0gICAgICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2UoKTsK
KyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CiAKICAg
ICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKIApAQCAtMzgyLDI4ICszODEsMjggQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogCiAg
ICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25zICYgRG9Ob3RTZXRGb2N1
cykpIHsKLSAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2RvY3VtZW50LT5mb2N1
c2VkRWxlbWVudCgpOworICAgICAgICBhdXRvKiBvbGRGb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1l
bnQuZm9jdXNlZEVsZW1lbnQoKTsKICAgICAgICAgc2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgp
OwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0gICAgICAgIGlmICht
X2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQotICAgICAg
ICAgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICBpZiAobV9k
b2N1bWVudC5mb2N1c2VkRWxlbWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQorICAgICAgICAg
ICAgbV9kb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgfQogCiAgICAgLy8gQWx3
YXlzIGNsZWFyIHRoZSB4IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRp
b24uCiAgICAgLy8gSXQgd2lsbCBiZSByZXN0b3JlZCBieSB0aGUgdmVydGljYWwgYXJyb3cgbmF2
aWdhdGlvbiBjb2RlIGlmIG5lY2Vzc2FyeS4KICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbiA9IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7CiAgICAgc2VsZWN0
RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLSAgICBtX2RvY3VtZW50LT5l
ZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgb3B0aW9ucyk7
CisgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNl
bGVjdGlvbiwgb3B0aW9ucyk7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdGlv
bi1hcGkvI3NlbGVjdGlvbmNoYW5nZS1ldmVudAogICAgIC8vIEZJWE1FOiBTcGVjIGRvZXNuJ3Qg
c3BlY2lmeSB3aGljaCB0YXNrIHNvdXJjZSB0byB1c2UuCi0gICAgbV9kb2N1bWVudC0+cXVldWVU
YXNrVG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6
Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIG1fZG9jdW1lbnQucXVldWVUYXNr
VG9EaXNwYXRjaEV2ZW50KFRhc2tTb3VyY2U6OlVzZXJJbnRlcmFjdGlvbiwgRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5v
LCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMsIEFYVGV4dFN0
YXRlQ2hhbmdlSW50ZW50IGludGVudCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQogewotICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVjdG9y
KG1fZG9jdW1lbnQpOworICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdG9yKG1fZG9jdW1lbnQpOwog
ICAgIGlmICghc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShzZWxlY3Rpb24s
IG9wdGlvbnMsIGFsaWduLCBncmFudWxhcml0eSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDE4
LDE3ICs0MTcsMTcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKICAgICBtX3NlbGVjdGlvblJl
dmVhbEludGVudCA9IGludGVudDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVl
OwogCi0gICAgaWYgKG1fZG9jdW1lbnQtPmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQorICAgIGlm
IChtX2RvY3VtZW50Lmhhc1BlbmRpbmdTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmIChmcmFtZVZpZXcg
JiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCkuaXNMYXlvdXRQZW5kaW5nKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihpbnRlbnQpOwogCiAgICAg
aWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVu
dCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpKQorICAgICAgICBpZiAoYXV0byogY2xp
ZW50ID0gbV9kb2N1bWVudC5lZGl0b3IoKS5jbGllbnQoKSkKICAgICAgICAgICAgIGNsaWVudC0+
ZGlkRW5kVXNlclRyaWdnZXJlZFNlbGVjdGlvbkNoYW5nZXMoKTsKICAgICB9CiB9CkBAIC00NDgs
NyArNDQ3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUo
UmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICBpZiAocmV2ZWFsTW9kZSA9
PSBSZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0ZTo6Rm9yY2VkKQogICAgICAgICBtX3NlbGVjdGlv
blJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5n
U2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9j
dW1lbnQtPnJlbmRlclZpZXcoKSkKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1l
bnQucmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlv
bigpOwogfQogCkBAIC00NjQsNyArNDYzLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QW5kUmV2ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnQKICAg
ICBpZiAobV9zZWxlY3Rpb25SZXZlYWxNb2RlICE9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90
UmV2ZWFsKSB7CiAgICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnbm1lbnQ7CiAKLSAgICAgICAg
aWYgKG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQ2VudGVyQWxpZ25XaGVu
U2VsZWN0aW9uSXNSZXZlYWxlZCgpKQorICAgICAgICBpZiAobV9kb2N1bWVudC5lZGl0b3IoKS5i
ZWhhdmlvcigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKICAg
ICAgICAgICAgIGFsaWdubWVudCA9IG1fYWx3YXlzQWxpZ25DdXJzb3JPblNjcm9sbFdoZW5SZXZl
YWxpbmdTZWxlY3Rpb24gPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Ny
b2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBhbGlnbm1lbnQgPSBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFsaW5n
U2VsZWN0aW9uID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFsd2F5cyA6IFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKQEAgLTQ3OCw3ICs0NzcsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFu
Z2VJbnRlbnQmIGludAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlRGF0YURldGVjdG9yc0Zv
clNlbGVjdGlvbigpCiB7CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAm
JiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX2RvY3VtZW50LT5lZGl0b3IoKS5zY2FuU2Vs
ZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOworICAgIG1fZG9jdW1lbnQuZWRpdG9yKCkuc2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKTsKICNlbmRpZgogfQogCkBAIC03MTAsNyAr
NzA5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpwb3NpdGlvbkZvclBsYXRm
b3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3QKICAgICAvLyBiYXNlL2V4dGVudCBhbHdheXMgcG9p
bnQgdG8gdGhlIHNhbWUgbm9kZXMgYXMgc3RhcnQvZW5kLCBidXQgd2hpY2ggcG9pbnRzCiAgICAg
Ly8gdG8gd2hpY2ggZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhp
cyBjYW4gYmUgY2hhbmdlZAogICAgIC8vIHRvIGp1c3QgcmV0dXJuIG1fc2VsLmV4dGVudCgpLgot
ICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hv
dWxkQWx3YXlzRXh0ZW5kU2VsZWN0aW9uRnJvbUV4dGVudEVuZHBvaW50KCkpCisgICAgaWYgKG1f
ZG9jdW1lbnQuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNFeHRlbmRTZWxlY3Rpb25G
cm9tRXh0ZW50RW5kcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQmFzZUZp
cnN0KCkgPyBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKTsKIAogICAgIHJldHVybiBpc0dldFN0YXJ0ID8gbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCkgOiBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCk7CkBAIC03MzAsNyArNzI5LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0oY29u
c3QgVmlzaWJsZVBvc2l0aW8KIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlckN1
cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKIAotICAgIGlm
IChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tp
cFNwYWNlV2hlbk1vdmluZ1JpZ2h0KCkpIHsKKyAgICBpZiAobV9kb2N1bWVudC5lZGl0b3IoKS5i
ZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpKSB7CiAgICAgICAgIC8v
IEluIG9yZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3ZSBhZHZhbmNlIG9u
ZQogICAgICAgICAvLyB3b3JkIGZ1cnRoZXIgYW5kIHRoZW4gbW92ZSBvbmUgd29yZCBiYWNrLiBH
aXZlbiB0aGUKICAgICAgICAgLy8gc2VtYW50aWNzIG9mIHByZXZpb3VzV29yZFBvc2l0aW9uKCkg
dGhpcyB3aWxsIHB1dCB1cyBhdCB0aGUKQEAgLTg2Miw3ICs4NjEsNyBAQCBWaXNpYmxlUG9zaXRp
b24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgYgogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9u
LmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5yaWdodCh0cnVlLCByZWFjaGVkQm91
bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eTogewotICAg
ICAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgPSBtX2RvY3VtZW50ICYmIG1fZG9j
dW1lbnQtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkU2tpcFNwYWNlV2hlbk1vdmluZ1JpZ2h0
KCk7CisgICAgICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQu
ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQoKTsKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQo
KSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIHBvcyA9IHJpZ2h0V29yZFBvc2l0
aW9uKGN1cnJlbnRQb3NpdGlvbiwgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiAgICAgICAg
IGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC0xMDgzLDcgKzEwODIsNyBAQCBWaXNpYmxlUG9zaXRp
b24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBibwogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9u
LmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5sZWZ0KHRydWUsIHJlYWNoZWRCb3Vu
ZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7Ci0gICAg
ICAgIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCA9IG1fZG9jdW1lbnQgJiYgbV9kb2N1
bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRTa2lwU3BhY2VXaGVuTW92aW5nUmlnaHQo
KTsKKyAgICAgICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ID0gbV9kb2N1bWVudC5l
ZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNraXBTcGFjZVdoZW5Nb3ZpbmdSaWdodCgpOwogICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgp
LCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpOwogICAgICAgICBp
ZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtMTMyNCw3ICsxMzIzLDcgQEAgc3RhdGljIEFYVGV4dFNl
bGVjdGlvbiB0ZXh0U2VsZWN0aW9uV2l0aERpcmVjdGlvbkFuZEdyYW51bGFyaXR5KFNlbGVjdGlv
bkRpcmVjdGkKIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGlmICh1c2VyVHJpZ2dlcmVk
ID09IFVzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNl
bGVjdGlvbjsKKyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbihtX2Rv
Y3VtZW50KTsKICAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxl
Y3Rpb24pOwogICAgICAgICB0cmlhbEZyYW1lU2VsZWN0aW9uLm1vZGlmeShhbHRlciwgZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgTm90VXNlclRyaWdnZXJlZCk7CiAKQEAgLTEzNjksNyArMTM2OCw3
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IGlmIChyZWFjaGVkQm91bmRhcnkgJiYgIWlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkID09IFVz
ZXJUcmlnZ2VyZWQgJiYgbV9kb2N1bWVudCAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKSB7CisgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSAmJiAhaXNSYW5nZSgpICYmIHVz
ZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCAmJiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25D
aGFuZ2UoeyBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Cb3VuZGFyeSwgdGV4dFNlbGVj
dGlvbldpdGhEaXJlY3Rpb25BbmRHcmFudWxhcml0eShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSB9
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTM3NywxMiArMTM3NiwxMyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKG1f
ZnJhbWUpKQorICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChtX2RvY3VtZW50LmZy
YW1lKCkpKSB7CiAgICAgICAgIGlmICghd2FzUmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1v
dmUgJiYgcG9zaXRpb24gPT0gb3JpZ2luYWxTdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KIAotICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAg
ICAgICAgIGNhY2hlLT5zZXRUZXh0U2VsZWN0aW9uSW50ZW50KHRleHRTZWxlY3Rpb25JbnRlbnQo
YWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKTsKICAgICB9CiAKQEAgLTE0MDEsNyArMTQw
MSw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAKICAgICAgICAgaWYgKCFtX3NlbGVjdGlv
bi5pc0NhcmV0KCkKICAgICAgICAgICAgICYmIChncmFudWxhcml0eSA9PSBXb3JkR3JhbnVsYXJp
dHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoR3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkg
PT0gTGluZUdyYW51bGFyaXR5KQotICAgICAgICAgICAgJiYgbV9kb2N1bWVudCAmJiAhbV9kb2N1
bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRFeHRlbmRTZWxlY3Rpb25CeVdvcmRPckxp
bmVBY3Jvc3NDYXJldCgpKSB7CisgICAgICAgICAgICAmJiAhbV9kb2N1bWVudC5lZGl0b3IoKS5i
ZWhhdmlvcigpLnNob3VsZEV4dGVuZFNlbGVjdGlvbkJ5V29yZE9yTGluZUFjcm9zc0NhcmV0KCkp
IHsKICAgICAgICAgICAgIC8vIERvbid0IGxldCB0aGUgc2VsZWN0aW9uIGdvIGFjcm9zcyB0aGUg
YmFzZSBwb3NpdGlvbiBkaXJlY3RseS4gTmVlZGVkIHRvIG1hdGNoIG1hYwogICAgICAgICAgICAg
Ly8gYmVoYXZpb3Igd2hlbiwgZm9yIGluc3RhbmNlLCB3b3JkLXNlbGVjdGluZyBiYWNrd2FyZHMg
c3RhcnRpbmcgd2l0aCB0aGUgY2FyZXQgaW4KICAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUgb2Yg
YSB3b3JkIGFuZCB0aGVuIHdvcmQtc2VsZWN0aW5nIGZvcndhcmQsIGxlYXZpbmcgdGhlIGNhcmV0
IGluIHRoZQpAQCAtMTQxNCw3ICsxNDE0LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKIAog
ICAgICAgICAvLyBTdGFuZGFyZCBNYWMgYmVoYXZpb3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3Vu
ZGFyeSBpcyBncm93IHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gbGVhdmluZyB0aGUKICAgICAg
ICAgLy8gYmFzZSBpbiBwbGFjZSBhbmQgbW92aW5nIHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0
Vmlldy4KLSAgICAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5lZGl0b3IoKS5i
ZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFy
eSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkp
CisgICAgICAgIGlmICghbV9kb2N1bWVudC5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsd2F5
c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlz
Q2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCiAgICAgICAgICAgICBzZXRFeHRl
bnQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
KTsKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0
ZXJhdGlvbiBhbHRlciwgdW5zaWduZWQgdmVydGljYWxEaXN0YW5jZSwgVmVydGljCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQp
IHsKLSAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbjsKKyAgICAgICAg
RnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKICAgICAgICAg
dHJpYWxGcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOwogICAgICAgICB0
cmlhbEZyYW1lU2VsZWN0aW9uLm1vZGlmeShhbHRlciwgdmVydGljYWxEaXN0YW5jZSwgZGlyZWN0
aW9uLCBOb3RVc2VyVHJpZ2dlcmVkKTsKIApAQCAtMTU4Miw3ICsxNTgyLDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiAgICAgbV9jYXJldEJsaW5rVGlt
ZXIuc3RvcCgpOwogI2VuZGlmCiAKLSAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQtPnJl
bmRlclZpZXcoKSkKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygp
KQogICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAgc2V0
U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRl
ZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMTY2Miw5ICsxNjYyLDcgQEAgc3RhdGljIGJvb2wg
aXNOb25PcnBoYW5lZENhcmV0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAog
SW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVG
aXhlZCkKIHsKLSAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQp
OworICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKG1fZG9jdW1lbnQp
OwogICAgIHJlY29tcHV0ZUNhcmV0UmVjdCgpOwogICAgIGlmIChpbnNpZGVGaXhlZCkKICAgICAg
ICAgKmluc2lkZUZpeGVkID0gbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQ7CkBAIC0xNjgyLDEw
ICsxNjgwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAg
ICBpZiAoIXNob3VsZFVwZGF0ZUNhcmV0UmVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1l
VmlldyogdiA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHYgPSBtX2RvY3Vt
ZW50LnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTY5
Nyw3ICsxNjkyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkK
ICAgICAgICAgICAgIGNsZWFyQ2FyZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOwotICAgICAgICAgICAgaWYgKHVwZGF0ZUNhcmV0UmVjdChtX2RvY3VtZW50LCB2aXNpYmxl
U3RhcnQpKSB7CisgICAgICAgICAgICBpZiAodXBkYXRlQ2FyZXRSZWN0KCZtX2RvY3VtZW50LCB2
aXNpYmxlU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJsZVN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBtX2Fi
c0NhcmV0Qm91bmRzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTcyMiw3ICsxNzE3
LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKFJlbmRlclZp
ZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKKyAgICBpZiAoUmVuZGVyVmll
dyogdmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpKSB7CiAgICAgICAgIGJvb2wgcHJldmlv
dXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0gbV9zZWxlY3Rpb24uaXNDb250ZW50
RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAmJiBtX3ByZXZpb3VzQ2FyZXROb2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFJlcGFpbnRDYXJldCh2
aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUpKSB7CiAgICAgICAg
ICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKQEAgLTE5MDEsMTEgKzE4OTYsOCBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0
CiAgICAgaWYgKCFpc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBp
ZiAoIW1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdChwb2ludCk7Ci0gICAgbV9kb2N1bWVudC0+aGl0VGVzdChIaXRUZXN0UmVx
dWVzdCgpLCByZXN1bHQpOworICAgIG1fZG9jdW1lbnQuaGl0VGVzdChIaXRUZXN0UmVxdWVzdCgp
LCByZXN1bHQpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKICAg
ICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xOTMyLDEwICsxOTI0LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNv
bnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAgICAv
LyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCkucGFyZW50
KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dHJlZSgpLnBhcmVu
dCgpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFnZSogcGFnZSA9
IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC5wYWdlKCk7CiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5NDgsNyArMTk0MCw3IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVj
dGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRvIHRoZSA8aWZyYW1lPiBvciA8
ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZnJhbWUuCi0g
ICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCk7CisgICAg
RWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKTsKICAgICBp
ZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRhaW5lck5vZGUqIG93
bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFyZW50Tm9kZSgpOwpAQCAtMTk3NCw3
ICsxOTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJl
bnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwoKQog
ewotICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gbV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1l
bnQoKTsKKyAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVs
ZW1lbnQoKTsKICAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KGZvY3VzZWRFbGVtZW50KSkg
ewogICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCA9IGRvd25jYXN0PEhU
TUxTZWxlY3RFbGVtZW50PigqZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpZiAoc2VsZWN0RWxl
bWVudC5jYW5TZWxlY3RBbGwoKSkgewpAQCAtMjAwNCw4ICsxOTk2LDggQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICAgICAgaWYgKHJvb3QpCiAgICAgICAgICAgICBzZWxl
Y3RTdGFydFRhcmdldCA9IHJvb3QtPnNoYWRvd0hvc3QoKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICByb290ID0gbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgICAg
ICBzZWxlY3RTdGFydFRhcmdldCA9IG1fZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CisgICAg
ICAgICAgICByb290ID0gbV9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAg
IHNlbGVjdFN0YXJ0VGFyZ2V0ID0gbV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGlmICghcm9vdCkKQEAgLTIwNDUsNyArMjAzNyw3IEBAIGJvb2wgRnJh
bWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZm
aW5pdHksIFNob3VsZENsCiAgICAgICAgIHNlbGVjdGlvbk9wdGlvbnMuYWRkKENsb3NlVHlwaW5n
KTsKIAogICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAg
RnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbjsKKyAgICAgICAgRnJhbWVTZWxlY3Rp
b24gdHJpYWxGcmFtZVNlbGVjdGlvbihtX2RvY3VtZW50KTsKIAogICAgICAgICB0cmlhbEZyYW1l
U2VsZWN0aW9uLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIHNlbGVjdGlvbk9wdGlvbnMpOwog
CkBAIC0yMDYzLDcgKzIwNTUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3Rp
dmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNl
ZEFuZEFjdGl2ZSgpOwogCi0gICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwor
ICAgIG1fZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCiAjaWYgVVNFKFVJS0lUX0VE
SVRJTkcpCiAgICAgLy8gQ2FyZXQgYmxpbmtpbmcgKGJsaW5rcyB8IGRvZXMgbm90IGJsaW5rKQpA
QCAtMjA3NCw3ICsyMDY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZl
U3RhdGVDaGFuZ2VkKCkKICAgICAvLyBCZWNhdXNlIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgYW5kCiAgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUg
dG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgotICAgIGlmIChSZW5k
ZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgIGlmIChSZW5kZXJW
aWV3KiB2aWV3ID0gbV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPnNlbGVj
dGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8vIENhcmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBm
cmFtZS4KQEAgLTIwODUsNyArMjA3Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRP
ckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gQmVjYXVzZSBTdHlsZTo6UmVzb2x2ZXI6OmNo
ZWNrT25lU2VsZWN0b3IoKSBhbmQKICAgICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkgY2hl
Y2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwgd2UgaGF2ZSB0bwogICAgIC8vIHVwZGF0ZSBzdHls
ZSBhbmQgdGhlbWUgc3RhdGUgdGhhdCBkZXBlbmRlZCBvbiB0aG9zZS4KLSAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKSkgewogICAgICAgICBl
bGVtZW50LT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGlmIChy
ZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCkBAIC0yMTEwLDEz
ICsyMTAyLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWQoYm9vbCBmbGFnKQog
CiBib29sIEZyYW1lU2VsZWN0aW9uOjppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdAogewotICAg
IHJldHVybiBtX2ZvY3VzZWQgJiYgbV9kb2N1bWVudC0+cGFnZSgpICYmIG1fZG9jdW1lbnQtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV9mb2N1c2Vk
ICYmIG1fZG9jdW1lbnQucGFnZSgpICYmIG1fZG9jdW1lbnQucGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS5pc0FjdGl2ZSgpOwogfQogCiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi1pbmxpbmUgc3Rh
dGljIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKERvY3VtZW50KiBk
b2N1bWVudCkKK2lubGluZSBzdGF0aWMgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGlu
Z0NvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHJldHVybiBkb2N1bWVudC0+ZWRp
dG9yKCkubGFzdEVkaXRDb21tYW5kKCkgJiYgZG9jdW1lbnQtPmVkaXRvcigpLmxhc3RFZGl0Q29t
bWFuZCgpLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOworICAgIHJldHVybiBkb2N1bWVudC5l
ZGl0b3IoKS5sYXN0RWRpdENvbW1hbmQoKSAmJiBkb2N1bWVudC5lZGl0b3IoKS5sYXN0RWRpdENv
bW1hbmQoKS0+c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKTsKIH0KICNlbmRpZgogCkBAIC0yMTM1
LDcgKzIxMjcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAg
ICBib29sIHBhaW50QmxvY2tDdXJzb3IgPSBtX3Nob3VsZFNob3dCbG9ja0N1cnNvciAmJiBtX3Nl
bGVjdGlvbi5pc0NhcmV0KCkgJiYgIWlzTG9naWNhbEVuZE9mTGluZShtX3NlbGVjdGlvbi52aXNp
YmxlRW5kKCkpOwogICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCA9IHJlY29tcHV0
ZUNhcmV0UmVjdCgpOwogCi0gICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGJvb2wg
c2hvdWxkQmxpbmsgPSAhcGFpbnRCbG9ja0N1cnNvciAmJiBjYXJldElzVmlzaWJsZSgpICYmIGlz
Q2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93
c2luZyk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3AgdGhlIGJsaW5rIHRpbWVy
IHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQpAQCAtMjE1Niw3ICsyMTQ4LDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBSZW5k
ZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOworICAgIFJlbmRlclZpZXcq
IHZpZXcgPSBtX2RvY3VtZW50LnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjIwNSw4ICsyMTk3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBs
YXlvdXQgaGVyZS4KLSAgICBpZiAobV9kb2N1bWVudCkKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9u
QnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZG9jdW1lbnQpOworICAgIHVwZGF0ZVNlbGVjdGlv
bkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKG1fZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKFRFWFRf
Q0FSRVQpCiAgICAgaWYgKG1fY2FyZXRQYWludCkgewpAQCAtMjI1MCwxMCArMjI0MSwxMCBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBpZiAo
aXNOb25lKCkgfHwgIWlzRm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGNh
cmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVk
KCk7CisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC5zZXR0aW5ncygpLmNhcmV0
QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYg
KEVsZW1lbnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFz
ZSgpKSkgewotICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9j
dW1lbnQucGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3Is
ICptX2RvY3VtZW50LmZyYW1lKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjI2NSwxNiArMjI1NiwxNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1
c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVF
bGVtZW50IGNoZWNrIGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2Ug
dGhpcwogICAgICAgICAgICAgLy8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0
aGUgc2FmZXN0IGZpeCBhdCB0aGlzIHRpbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01v
dXNlRm9jdXNhYmxlKCkgJiYgIWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAg
ICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVt
ZW50KHRhcmdldCwgKm1fZnJhbWUpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQucGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2RvY3VtZW50
LmZyYW1lKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwogICAg
ICAgICB9Ci0gICAgICAgIG1fZG9jdW1lbnQtPnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwor
ICAgICAgICBtX2RvY3VtZW50LnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogICAgIH0KIAog
ICAgIGlmIChjYXJldEJyb3dzaW5nKQotICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2ZyYW1lKTsKKyAgICAg
ICAgbV9kb2N1bWVudC5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50
KG51bGxwdHIsICptX2RvY3VtZW50LmZyYW1lKCkpOwogfQogCiB2b2lkIERyYWdDYXJldENvbnRy
b2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0JiBwLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0
KSBjb25zdApAQCAtMjMwMCwxOSArMjI5MSwxNiBAQCBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVy
dGllcz4gRnJhbWVTZWxlY3Rpb246OmNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0CiBib29sIEZyYW1l
U2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1f
ZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCisgICAgaWYgKG1fZG9j
dW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCku
Y2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOworICAgIHJldHVybiBtX2RvY3VtZW50LmVkaXRvcigp
LmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRl
bnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RvY3VtZW50KQotICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdCgpOwotCi0gICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1f
ZG9jdW1lbnQpOwotICAgIGF1dG8qIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3
KCk7CisgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUobV9kb2N1bWVu
dCk7CisgICAgYXV0byogcmVuZGVyVmlldyA9IG1fZG9jdW1lbnQucmVuZGVyVmlldygpOwogICAg
IGlmICghcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIApAQCAtMjMy
OCwxNCArMjMxNiwxNCBAQCBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5k
cyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udAogCiB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0IHRleHRSZWN0SGVpZ2h0KSBjb25zdAog
ewotICAgIGlmICghbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgIGlmICghbV9kb2N1bWVu
dC5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9kb2N1bWVudC0+dmlldygp
LT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9kb2N1bWVudC52aWV3
KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRW
aXNpYmxlUmVjdCk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJl
Y3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKICAgICAgICAgYXV0byBpbnRlcnNl
Y3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7CiAgICAg
ICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzY3LDcgKzIzNTUsNyBA
QCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFydCkKIEhU
TUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnRGb3JtKCkgY29uc3QKIHsKICAg
ICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIp
IG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCi0gICAgRWxlbWVudCogc3RhcnQgPSBt
X2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHN0YXJ0ID0gbV9kb2N1
bWVudC5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHN0YXJ0ID0g
bV9zZWxlY3Rpb24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKQEAgLTI0MTAs
OCArMjM5OCw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihTZWxlY3Rp
b25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAgICAgICAgICAgICAgICAgbGF5
ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwg
YWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6Olll
cyB9KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAg
bV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVj
dGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgq
bV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKQEAg
LTI0MzAsMjUgKzI0MTgsMjUgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJv
bU5vbmUoKQogICAgIC8vIGVudGlyZSBXZWJWaWV3IGlzIGVkaXRhYmxlIG9yIGRlc2lnbk1vZGUg
aXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOwotICAgIGlmICghaXNOb25lKCkgfHwgIShtX2RvY3VtZW50LT5oYXNFZGl0
YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgYm9vbCBjYXJldEJyb3dzaW5nID0g
bV9kb2N1bWVudC5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKCFp
c05vbmUoKSB8fCAhKG1fZG9jdW1lbnQuaGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghbV9kb2N1bWVudCB8fCAhKGlz
Tm9uZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5z
dGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHx8ICFtX2RvY3VtZW50LT5oYXNFZGl0
YWJsZVN0eWxlKCkpCisgICAgaWYgKCEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9jdW1lbnQoVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkp
KSkgfHwgIW1fZG9jdW1lbnQuaGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAj
ZW5kaWYKIAotICAgIGlmIChhdXRvKiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpKQorICAgIGlm
IChhdXRvKiBib2R5ID0gbV9kb2N1bWVudC5ib2R5KCkpCiAgICAgICAgIHNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShib2R5KSwgRE9XTlNU
UkVBTSkpOwogfQogCiBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAogewogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNr
c0Rpc2FibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQuZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdl
Q2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlv
bigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CisgICAg
cmV0dXJuIG1fZG9jdW1lbnQuZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlv
bigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CiB9CiAK
IGJvb2wgRnJhbWVTZWxlY3Rpb246OmRpc3BhdGNoU2VsZWN0U3RhcnQoKQpAQCAtMjQ2Niw3ICsy
NDU0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKGJv
b2wgc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKQogewogICAgIG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29y
ID0gc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yOwogCi0gICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgbV9kb2N1bWVudC51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKIH0K
QEAgLTI0ODQsMTMgKzI0NzIsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2NoZWR1bGVBcHBl
YXJhbmNlVXBkYXRlQWZ0ZXJTdHlsZUNoYW5nZSgpCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmFw
cGVhcmFuY2VVcGRhdGVUaW1lckZpcmVkKCkKIHsKLSAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3Rv
cigqbV9kb2N1bWVudCk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0b3IobV9kb2N1bWVudCk7
CiAgICAgdXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0T3JTdHlsZUNoYW5nZSgpOwogfQogCiB2
b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hh
bmdlKCkKIHsKLSAgICBpZiAoYXV0byogY2xpZW50ID0gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xp
ZW50KCkpCisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQuZWRpdG9yKCkuY2xpZW50
KCkpCiAgICAgICAgIGNsaWVudC0+dXBkYXRlRWRpdG9yU3RhdGVBZnRlckxheW91dElmRWRpdGFi
aWxpdHlDaGFuZ2VkKCk7CiAKICAgICBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwpAQCAtMjcx
MCw3ICsyNjk4LDcgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5n
ZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW4KIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCwgTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gbV9k
b2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0g
bV9kb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydChub2Rl
LCBsb2NhdGlvbik7CiAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZChub2RlLCBsb2NhdGlvbiArIGxl
bmd0aCk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9u
KCpyZXN1bHRSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOwpAQCAtMjg5MSw3ICsyODc5LDcg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcykK
ICAgICBpZiAobV9jYXJldEJsaW5rcyA9PSBjYXJldEJsaW5rcykKICAgICAgICAgcmV0dXJuOwog
I2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgaWYgKG1fY2FyZXRQYWludCkgewogICAgICAgICBt
X2NhcmV0UGFpbnQgPSBmYWxzZTsgCiAgICAgICAgIGludmFsaWRhdGVDYXJldFJlY3QoKTsgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggM2E3YjA4NWY3Y2Y1MTU4
ODMzMzg4NDEwYjAyYWJlODU2NjVjNDhjMy4uMjZmNjA5MTU2NTg2YzdkMzJhNWVmZjdkYTExNmFk
N2FjY2UyOTVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAt
MTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wdGlvbnM7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqID0g
bnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9j
dW1lbnQmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1l
bnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwogICAgICAKQEAgLTMzNiw4ICszMzYsNyBAQCBw
cml2YXRlOgogICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50
U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdDsKICNlbmRpZgogCi0gICAg
RG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgRnJhbWUqIG1fZnJhbWU7CisgICAgRG9jdW1lbnQm
IG1fZG9jdW1lbnQ7CiAKICAgICBMYXlvdXRVbml0IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA4
YjllN2QwYzMyNThhM2UwNzViYjk3NjY5MTIyNzg5ZjhkYThhNjE3Li5iYzkxYmRiNmYyODAyZGIy
NDY1MzBlMTBmNzkxODJjYzI3OWNjYTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKQEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAog
CiAgICAgICAgIG1fc21hcnREZWxldGUgPSBmYWxzZTsKIAotICAgICAgICBGcmFtZVNlbGVjdGlv
biBzZWxlY3Rpb247CisgICAgICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbihkb2N1bWVudCgp
KTsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAg
ICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQs
IERpcmVjdGlvbkJhY2t3YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChzaG91bGRBZGRU
b0tpbGxSaW5nICYmIHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgZ3JhbnVsYXJpdHkgIT0gQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpCkBAIC03NzEsNyArNzcxLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpm
b3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wg
c2gKICAgICAgICAgLy8gSGFuZGxlIGRlbGV0ZSBhdCBiZWdpbm5pbmctb2YtYmxvY2sgY2FzZS4K
ICAgICAgICAgLy8gRG8gbm90aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBjYXJldCBpcyBhdCB0
aGUgc3RhcnQgb2YgYQogICAgICAgICAvLyByb290IGVkaXRhYmxlIGVsZW1lbnQgb3IgYXQgdGhl
IHN0YXJ0IG9mIGEgZG9jdW1lbnQuCi0gICAgICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsK
KyAgICAgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uKGRvY3VtZW50KCkpOwogICAgICAgICBz
ZWxlY3Rpb24uc2V0U2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICAgICAgc2VsZWN0
aW9uLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9y
d2FyZCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3BwCmluZGV4
IDI3MmUzNGJlYjc5MjY0ZWI2NzFkYzlhODZkN2FkYTg3NTZiZTcyYjQuLjA2NWVlYTliYTQ1ZDcy
YWJjYjk3Njk5YTM1NmU0NTlkMDBiMTBiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBB
WFRleHRTdGF0ZUNoYW4KICAgICBpZiAoIWZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4aXN0aW5n
QVhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9u
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0K
aW5kZXggODM0Y2MzNmJhOGE2N2EyYmU4YTdiN2I0OGNlYTNlMWY5NWM3MWNiNy4uOTFkNTY5YjQ2
N2RlMjMzM2Q2ZjlmYWNiZjViNTYzOWQ3MjcwMGRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KQEAgLTM0LDEwICszNCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0
eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50
KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0KICAg
ICBpZiAobV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQo
KS5pc05vdE51bGwoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1
bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGlmIChBWE9iamVjdENhY2hl
KiBjYWNoZSA9bV9kb2N1bWVudC5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgICAg
IGNhY2hlLT5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0
KCksIGludGVudCwgbV9zZWxlY3Rpb24pOwogICAgIH0KIApAQCAtNDYsMTAgKzQ0LDEwIEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2Uo
Y29uc3QgQVhUZXh0U3RhdGVDaGFuCiAgICAgaWYgKCFVQVpvb21FbmFibGVkKCkgfHwgIW1fc2Vs
ZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyVmlldyogcmVu
ZGVyVmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCk7CisgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9bV9kb2N1bWVudC5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAg
ICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPW1fZG9jdW1lbnQudmlldygpOwogICAgIGlmICgh
ZnJhbWVWaWV3KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCmluZGV4IDNiMDlmM2M2MjU2YjAwZDc2MzBl
Y2E2ZWExNmQzY2M2MjRkN2Y4YzIuLjJmYzM2MTdmNWJkOGI2MjJiNzY3OTg4YjNkNDM4NjFiOTA5
YjJmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4
dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0
ZW5zaW9ucy5tbQpAQCAtNzksNyArNzksNyBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2UgKFVJ
S2l0RXh0ZW5zaW9ucykKIC0gKHZvaWQpbW92ZTooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjoo
V2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7CiAgICAgUmFuZ2UgKnJhbmdl
ID0gY29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlv
bjsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihyYW5nZS0+b3du
ZXJEb2N1bWVudCgpKTsKICAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UpOwogICAgIAog
ICAgIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9IFdlYkNvcmU6OkNoYXJh
Y3RlckdyYW51bGFyaXR5OwpAQCAtMTA3LDcgKzEwNyw3IEBAIC0gKHZvaWQpbW92ZTooVUludDMy
KWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9u
CiAtICh2b2lkKWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVz
dG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiB7CiAgICAgUmFuZ2UgKnJhbmdlID0gY29yZShzZWxm
KTsKLSAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbjsKKyAgICBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlvbihyYW5nZS0+b3duZXJEb2N1bWVudCgp
KTsKICAgICBmcmFtZVNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UpOwogICAgIAogICAgIGZvciAoVUlu
dDMyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQppbmRleCAxZDJiM2Y4MDkyMDZkMzdkMDVkZmIyYWE5YWIwODhmZjY2
MjQ0Y2JiLi4xMzZjZDhmNzMyNmQzNjNmNTU1ZWU3Njk3YzU0ZDc3ZGQ2YWFkYzBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTc4MCwxMSArNzgw
LDE1IEBAIC0gKEJPT0wpX25lZWRzTGF5b3V0CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAt
IChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6
OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6OlRleHRH
cmFudWxhcml0eSlncmFudWxhcml0eQogewotICAgIGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICBhdXRvKiBkb2N1bWVudCA9IF9wcml2YXRlLT5jb3Jl
RnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIGlmIChkb2N1bWVudC0+c2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0gICAg
c2VsZWN0aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uKCpkb2N1
bWVudCk7CisgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihkb2N1bWVudC0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOwogICAgIHNlbGVjdGlvbi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9u
LCBncmFudWxhcml0eSk7CiAgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398025</attachid>
            <date>2020-04-29 19:47:34 -0700</date>
            <delta_ts>2020-04-29 20:05:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200429194733.patch</filename>
            <type>text/plain</type>
            <size>17959</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uYTMzNWRhYmZkNjFlN2Q0NjVlNzI2ZjJmZTU3ZDRi
ZTkxNzgzMzZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIwLTA0LTI5ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgcGF0
Y2guIFJlbW92ZSBtX2ZyYW1lIGluIEZyYW1lU2VsZWN0aW9uIHNvIGl0IHdpbGwgbm90IGJlCisg
ICAgICAgIGluYWR2ZXJ0ZW50bHkgdXNlZCB3aGljaCBtYXkgY2F1c2UgY3Jhc2hlcy4gQWxzbywg
Y2hhbmdlIHRoZSBhcmd1bWVudCBvZiAKKyAgICAgICAgY29uc3RydWN0b3IgdG8gRG9jdW1lbnQm
IHRvIGF2b2lkIG51bGwgcG9pbnRlciBhY2Nlc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBj
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZy
YW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNl
bGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGlu
Zy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAq
IGVkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorCiAy
MDIwLTA0LTI4ICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgogCiAgICAgICAg
IE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQpAQCAtMTMsMTUgKzQ0LDE0IEBACiAKICAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgogICAgICAgICAoV2ViQ29yZTo6bV9zZWxlY3Rpb24pOgotICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CiAgICAgICAgIChXZWJD
b3JlOjptX3VuZG9NYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOiBEZWxldGVkLgogICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgogICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvcik6CiAgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6ZWRpdG9yIGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzZWxlY3Rpb24pOgogICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbiBjb25z
dCk6Ci0gICAgICAgICogZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwOgotICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUgY29uc3QpOgogICAgICAgICAqIGVkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKToKICAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVj
dGlvbik6CkBAIC0xNTEsMTEgKzE4MSwxMCBAQAogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpm
aW5kU3RyaW5nKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4
dCk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24p
OgotICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVy
cyBjb25zdCk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxl
cGhvbmVOdW1iZXJzKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVU
aW1lckZpcmVkKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNN
YXJrZXJGb3IgY29uc3QpOgotICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxl
Y3Rpb24pOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1
ZXN0IGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2Fu
ZGlkYXRlUmVxdWVzdCBjb25zdCk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRBdHRy
aWJ1dGVzQXRTZWxlY3Rpb25TdGFydCBjb25zdCk6CkBAIC0xOTEsNyArMjIwLDcgQEAKICAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodCk6CiAgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVmdCk6CiAgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KToKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgogICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMpOgogICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCk6CiAgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6Y29udGFpbnMgY29uc3QpOgpAQCAtMjE0LDYgKzI0Myw3IEBACiAgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZUFmdGVyTGF5b3V0
T3JTdHlsZUNoYW5nZSk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
UmFuZ2VPbkVsZW1lbnQpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENh
cmV0QmxpbmtzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24pOiBEZWxldGVkLgogICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aDoKICAgICAgICAgKiBlZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwOgogICAg
ICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSk6CkBAIC0y
NjEsNiArMjkxLDcgQEAKICAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuaDoKICAgICAg
ICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgogICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzZWxlY3Rpb25JbkhUTUxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
QXNBdHRyaWJ1dGVkU3RyaW5nKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVj
dGlvbik6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZv
cm1hdCk6CkBAIC0yODksNiArMzIwLDggQEAKICAgICAgICAgKiBlZGl0aW5nL3dpbi9FZGl0b3JX
aW4uY3BwOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKToK
ICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKToKKyAg
ICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZEZyYW1lOjpkZXN0cm95KToKICAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgogICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OndpbGxUcmFuc2l0aW9uVG9Db21taXR0ZWQpOgog
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsb3NlVVJMKToKQEAgLTI5Niw2ICszMjks
OCBAQAogICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKICAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZTo6c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0
RG9jdW1lbnQpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlcXVlc3RET01QYXN0ZUFjY2Vz
cyk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyk6
CiAgICAgICAgICogcGFnZS9GcmFtZS5oOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggYWVmNGJjNWE3ZDhmNmQ2ZDVh
ZDY2ZTY2MGI3ZjRlOGVlZTE4OGExYy4uZGM2NDMyZjg4ZTEyYjNhM2QxM2YyM2FiZjg1ZTJlYzcw
ODNmZDViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0zNDIsNyArMzQyLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogCiBG
bG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGF1dG8qIHZpZXcgPSBtX2Rv
Y3VtZW50LmZyYW1lKCktPnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC52aWV3
KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiB2aWV3
LT5jb250ZW50c1RvUm9vdFZpZXcodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFi
c29sdXRlVGV4dFF1YWRzKHJhbmdlKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAppbmRleCAwNDhlZDA2MWI1ZTg0MGE2MDhhOGU3ZjlmODZhMzdhMDU3YWE3OTgy
Li5hM2Y2MTI0MjA1OWI4NDRkNzc1NDMyNTliNDJhNzM1YWIxNjc4Mzk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTQ2LDcgKzE0Niw2IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihEb2N1bWVu
dCogZG9jdW1lbnQpCiAKIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1bWVudCog
ZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9mcmFtZShkb2N1
bWVudD8gZG9jdW1lbnQtPmZyYW1lKCkgOiBudWxscHRyKQogICAgICwgbV94UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSkKICAg
ICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAjaWYgRU5BQkxFKFRFWFRf
Q0FSRVQpCkBAIC0xNTcsNyArMTU2LDcgQEAgRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9u
KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQog
ICAgICwgbV9jYXJldFBhaW50KHRydWUpCiAgICAgLCBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRl
ZChmYWxzZSkKLSAgICAsIG1fZm9jdXNlZChtX2ZyYW1lICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBt
X2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IG1fZnJh
bWUpCisgICAgLCBtX2ZvY3VzZWQoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9j
dW1lbnQtPmZyYW1lKCktPnBhZ2UoKSAmJiBkb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAsIG1fc2hvdWxk
U2hvd0Jsb2NrQ3Vyc29yKGZhbHNlKQogICAgICwgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlKGZh
bHNlKQogICAgICwgbV9hbHdheXNBbGlnbkN1cnNvck9uU2Nyb2xsV2hlblJldmVhbGluZ1NlbGVj
dGlvbihmYWxzZSkKQEAgLTMzNiwxNyArMzM1LDE3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNl
dFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlv
CiAgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQp
KQogICAgICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKIAotICAgIGlm
ICghbV9mcmFtZSkgeworICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVudC0+ZnJhbWUo
KSkgewogICAgICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzQ2ND46IEluZmluaXRlIHJlY3Vyc2lvbiBhdCBGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0aW9uCi0gICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4g
Z2V0IGludG8gYW4gaW5maW5pdGUgbG9vcAorICAgIC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09
IG1fZG9jdW1lbnQtPmZyYW1lKCkgd2UgY2FuIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AKICAg
ICBpZiAoRG9jdW1lbnQqIG5ld1NlbGVjdGlvbkRvY3VtZW50ID0gbmV3U2VsZWN0aW9uLmJhc2Uo
KS5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8RnJhbWU+IG5ld1NlbGVjdGlvbkZy
YW1lID0gbmV3U2VsZWN0aW9uRG9jdW1lbnQtPmZyYW1lKCkpIHsKLSAgICAgICAgICAgIGlmIChu
ZXdTZWxlY3Rpb25GcmFtZSAhPSBtX2ZyYW1lICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9IG1f
ZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25GcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucywgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQoKSwgYWxpZ24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rp
b25GcmFtZSAhPSBtX2RvY3VtZW50LT5mcmFtZSgpICYmIG5ld1NlbGVjdGlvbkRvY3VtZW50ICE9
IG1fZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+c2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucywgQVhUZXh0U3RhdGVD
aGFuZ2VJbnRlbnQoKSwgYWxpZ24sIGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgICAgICAvLyBJ
dCdzIHBvc3NpYmxlIHRoYXQgZHVyaW5nIHRoZSBhYm92ZSBzZXQgc2VsZWN0aW9uLCB0aGlzIEZy
YW1lU2VsZWN0aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5CiAgICAgICAgICAgICAgICAgLy8gc2Vs
ZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQsIGJ1dCB0aGF0IHRoZSBzZWxl
Y3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkIHNpbmNlCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZy
YW1lIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgY2xlYXIg
b3VyIHNlbGVjdGlvbi4KQEAgLTEzNzcsOSArMTM3NiwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9u
Ojptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24s
IFRleAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKG1fZnJhbWUpKQorICAgIGlmICht
X2RvY3VtZW50ICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKG1fZG9jdW1lbnQtPmZyYW1l
KCkpKSB7CiAgICAgICAgIGlmICghd2FzUmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUg
JiYgcG9zaXRpb24gPT0gb3JpZ2luYWxTdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIAogICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFj
Y2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCkBAIC0xOTMyLDEwICsxOTMy
LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBw
b2ludCkgY29uc3QKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFy
ZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAgICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlm
IHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBw
YXJlbnQgPSBtX2ZyYW1lLT50cmVlKCkucGFyZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1f
ZG9jdW1lbnQtPmZyYW1lKCktPnRyZWUoKS5wYXJlbnQoKTsKICAgICBpZiAoIXBhcmVudCkKICAg
ICAgICAgcmV0dXJuOwotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgUGFn
ZSogcGFnZSA9IG1fZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTk0OCw3ICsxOTQ4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBHZXQgdG8gdGhlIDxpZnJhbWU+IG9yIDxmcmFtZT4gKG9yIGV2ZW4gPG9iamVjdD4p
IGVsZW1lbnQgaW4gdGhlIHBhcmVudCBmcmFtZS4KLSAgICBFbGVtZW50KiBvd25lckVsZW1lbnQg
PSBtX2ZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBt
X2RvY3VtZW50LT5vd25lckVsZW1lbnQoKTsKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuOwogICAgIENvbnRhaW5lck5vZGUqIG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVy
RWxlbWVudC0+cGFyZW50Tm9kZSgpOwpAQCAtMjI1Myw3ICsyMjUzLDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgYm9vbCBjYXJldEJyb3dz
aW5nID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAg
IGlmIChjYXJldEJyb3dzaW5nKSB7CiAgICAgICAgIGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNs
b3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9uLmJhc2UoKSkpIHsKLSAgICAgICAgICAgIG1f
ZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5j
aG9yLCAqbV9mcmFtZSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZG9jdW1lbnQtPmZyYW1lKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2NSw3ICsyMjY1
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAg
ICAgICAgICAgICAvLyBzbyBhZGQgdGhlICFpc0ZyYW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVy
ZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBtYWtlIHRoaXMKICAgICAgICAgICAgIC8vIHdv
cmsgaW4gdGhlIGxvbmcgdGVybSwgYnV0IHRoaXMgaXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0
aW1lLgogICAgICAgICAgICAgaWYgKHRhcmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0Zy
YW1lRWxlbWVudCh0YXJnZXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsK
KyAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNl
dEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdl
dC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwpAQCAtMjI3NCw3ICsyMjc0LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgfQogCiAg
ICAgaWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAg
ICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50
KG51bGxwdHIsICptX2RvY3VtZW50LT5mcmFtZSgpKTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250
cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVj
dCkgY29uc3QKQEAgLTIzMDAsNyArMjMwMCw3IEBAIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiBGcmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIGJvb2wgRnJhbWVT
ZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9m
cmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCku
Y2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwpAQCAtMjQxMSw3ICsyNDExLDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9k
ZSwgY29uc3QgU2Nyb2wKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNl
KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZl
YWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAgICAgICAg
ICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVk
U2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC0yNDQ1LDcgKzI0NDUsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiBib29sIEZyYW1lU2VsZWN0aW9uOjpz
aG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9u
KSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUtPnNl
bGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmZy
YW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogI2VuZGlmCiAgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZm
aW5pdHkoKSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmlu
ZGV4IDNhN2IwODVmN2NmNTE1ODgzMzM4ODQxMGIwMmFiZTg1NjY1YzQ4YzMuLjkwNzQ3NzJkM2Uy
ZjlkZTBmZjcxYzQwNTMyODBmMWI5OTM0MDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKQEAgLTMzNyw3ICszMzcsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91
dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAppbmRleCAyNzJlMzRiZWI3
OTI2NGViNjcxZGM5YTg2ZDdhZGE4NzU2YmU3MmI0Li4wNjVlZWE5YmE0NWQ3MmFiY2I5NzY5OWEz
NTZlNDU5ZDAwYjEwYjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9G
cmFtZVNlbGVjdGlvbkF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJh
bWVTZWxlY3Rpb25BdGsuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVD
aGFuCiAgICAgaWYgKCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVhPYmpl
Y3RDYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmluZGV4IDgzNGNj
MzZiYThhNjdhMmJlOGE3YjdiNDhjZWEzZTFmOTVjNzFjYjcuLjM1MDNjMjZjM2ZmZDBjM2FjZjky
NTM3OTI4ODllZGZkZWFmMGExN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0ZyYW1lU2VsZWN0aW9uTWFjLm1tCkBAIC0zNCwxMCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rp
b25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCkKIHsKLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCiAgICAgaWYgKG1fc2Vs
ZWN0aW9uLnN0YXJ0KCkuaXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxs
KCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmV4aXN0
aW5nQVhPYmplY3RDYWNoZSgpKQorICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBt
X2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5w
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIGludGVu
dCwgbV9zZWxlY3Rpb24pOwogICAgIH0KIApAQCAtNDYsMTAgKzQ0LDEwIEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhU
ZXh0U3RhdGVDaGFuCiAgICAgaWYgKCFVQVpvb21FbmFibGVkKCkgfHwgIW1fc2VsZWN0aW9uLmlz
Q2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IGRvY3VtZW50LT5yZW5kZXJWaWV3KCk7CisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IG1f
ZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJl
dHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1l
VmlldykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTg0OWJjYWIyOGU0YTc5OGQwOGQ2NTA5
MDkyYmNiNDMwODc2Njg5OC4uYWI5NmExOWVkOGFmYmVhNGY1YTYyMGQzNDhlMTQ4NzExZTRiY2E4
NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA0LTI5ICBKYWNrIExlZSAgPHNoaWhjaGll
aF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6
OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NjAwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVkdWNlIHJ1biB0aW1l
IGZvciB0aGlzIHRlc3QgY2FzZS4gCisKKyAgICAgICAgKiBlZGl0aW5nL2luc2VydGluZy9pbnNl
cnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sOgorCiAyMDIwLTA0LTI4ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0
LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcv
aW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKaW5kZXgg
M2FmMzgxZDllZjVhM2ZkOTRlYjIxMDkwYzJhMjJmYmMwNzUxMmFhZi4uOGY3ZWIwYmU5YTRlNmU0
NjExMmFjNTYzMjg0MTM3NzgwMWNmNzljYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29t
bWFuZC1jcmFzaC5odG1sCkBAIC0xLDE5ICsxLDE4IEBACi08Ym9keT48aW1hZ2U+PC9pbWFnZT48
Zm9ybSBpZD1mb3JtIGNvbnRlbnRFZGl0YWJsZT10cnVlPjxvYmplY3QgZGF0YT0/IG9ubG9hZD1v
YmplY3RPbkxvYWQoKT48L29iamVjdD48L2Zvcm0+PGRpYWxvZyBvcGVuPSJ0cnVlIj5hPC9kaWFs
b2c+Cis8ZGl2IHN0eWxlPSJ3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsiPjwvZGl2PjxkaXYgY29u
dGVudEVkaXRhYmxlPXRydWU+PG9iamVjdCBkYXRhPSI/IiBvbmxvYWQ9b2JqZWN0T25Mb2FkKCk+
PC9vYmplY3Q+PC9kaXY+PHNwYW4+dGV4dDwvc3Bhbj4KIDxzY3JpcHQ+Ci0gICAgZG9jdW1lbnQu
Z2V0U2VsZWN0aW9uKCkuZW1wdHkoKTsKLSAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgic2VsZWN0
QWxsIiwgZmFsc2UpOwogICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewogICAgICAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CiAgICAgfQogCisgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTsKKyAgICBkb2N1
bWVudC5leGVjQ29tbWFuZCgic2VsZWN0QWxsIiwgZmFsc2UpOworCiAgICAgZnVuY3Rpb24gb2Jq
ZWN0T25Mb2FkKCkgewogICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VW5vcmRl
cmVkTGlzdCIsIGZhbHNlKTsKICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIml0YWxpYyIs
IGZhbHNlKTsKLSAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxwPiBUZXN0cyBpbnNlcnRpbmcg
bGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBXZWJL
aXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwvcD4iOwotICAgICAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOwotICAgICAgICB9KTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAi
PHA+IFRlc3RzIGluc2VydGluZyBsaXN0IGZvbGxvd2VkIGJ5IGFuIGVkaXQgY29tbWFuZC4gVGhl
IHRlc3QgcGFzc2VzIGlmIFdlYktpdCBkb2Vzbid0IGNyYXNoIG9yIGhpdCBhbiBhc3NlcnRpb24u
PC9wPiI7CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwogICAgIH0KIDwvc2NyaXB0
PgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398028</attachid>
            <date>2020-04-29 20:08:03 -0700</date>
            <delta_ts>2020-04-29 22:58:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200429200802.patch</filename>
            <type>text/plain</type>
            <size>17863</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uOTA4NzJmZjlhNjE5ODFlZDg3Zjk4ZDI4N2Y1ZTYy
NDlkMDlhY2EyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA0LTI5ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgcGF0
Y2guIFJlbW92ZSBtX2ZyYW1lIGluIEZyYW1lU2VsZWN0aW9uIHNvIGl0IHdpbGwgbm90IGJlCisg
ICAgICAgIGluYWR2ZXJ0ZW50bHkgdXNlZCBhbmQgY2F1c2UgdGhpcyBjcmFzaC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdC4KKworICAgICAgICAqIGVk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFs
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFu
Z2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoK
KyAgICAgICAgKiBlZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgICogZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZSk6CisKIDIwMjAtMDQtMjggIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1h
bmQgdmlhIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCkBAIC0xMywxNSArNDMsMTQg
QEAKIAogICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjptX3Nl
bGVjdGlvbik6Ci0gICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1l
KToKICAgICAgICAgKFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCiAgICAg
ICAgICogZG9tL0RvY3VtZW50Lmg6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9y
KToKICAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgogICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6c2VsZWN0aW9uIGNvbnN0KToKLSAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6
Ci0gICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBjb25zdCk6
CiAgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKICAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIpOgogICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKQEAgLTE1MSwxMSArMTgwLDEwIEBACiAgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
b3VudE1hdGNoZXNGb3JUZXh0KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbik6Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVj
dFRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRl
Y3RUZWxlcGhvbmVOdW1iZXJzIGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6Ci0gICAgICAgIChXZWJDb3JlOjpjYW5k
aWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmlu
Z0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
b250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0IGNvbnN0KToKQEAgLTE5MSw3
ICsyMTksNyBAQAogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z1JpZ2h0KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdM
ZWZ0KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgotICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CiAg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CiAg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKICAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CkBAIC0yMTQs
NiArMjQyLDcgQEAKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCiAgICAgICAgICogZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oOgogICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
Ojpkb0FwcGx5KToKQEAgLTI2MSw2ICsyOTAsNyBAQAogICAgICAgICAqIGVkaXRpbmcvVHlwaW5n
Q29tbWFuZC5oOgogICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW06CiAgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcpOgogICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CiAgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKQEAgLTI4OSw2ICszMTksOCBAQAogICAgICAgICAqIGVk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgogICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRp
b25Ub0NvbW1pdHRlZCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwp
OgpAQCAtMjk2LDYgKzMyOCw4IEBACiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xl
YXIpOgogICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWU6
OkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVx
dWVzdERPTVBhc3RlQWNjZXNzKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5k
VGV4dFpvb21GYWN0b3JzKToKICAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBh
ZWY0YmM1YTdkOGY2ZDZkNWFkNjZlNjYwYjdmNGU4ZWVlMTg4YTFjLi5kYzY0MzJmODhlMTJiM2Ez
ZDEzZjIzYWJmODVlMmVjNzA4M2ZkNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBi
b29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpCiAKIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290
Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAg
YXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOworICAgIGF1dG8qIHZpZXcg
PSBtX2RvY3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVz
KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDA0OGVkMDYxYjVlODQwYTYwOGE4ZTdm
OWY4NmEzN2EwNTdhYTc5ODIuLmEzZjYxMjQyMDU5Yjg0NGQ3NzU0MzI1OWI0MmE3MzVhYjE2Nzgz
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xNDYs
NyArMTQ2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIAogRnJhbWVTZWxlY3Rpb246OkZyYW1lU2Vs
ZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0g
ICAgLCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAg
LCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkK
ICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Nyw3ICsxNTYsNyBAQCBGcmFtZVNlbGVjdGlv
bjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hYnNDYXJldEJv
dW5kc0RpcnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9m
cmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZEZyYW1lKCkgPT0gbV9mcmFtZSkKKyAgICAsIG1fZm9jdXNlZChkb2N1bWVudCAmJiBkb2N1bWVu
dC0+ZnJhbWUoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKS0+cGFnZSgpICYmIGRvY3VtZW50LT5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LT5mcmFtZSgp
KQogICAgICwgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdT
ZWxlY3Rpb25VcGRhdGUoZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxX
aGVuUmV2ZWFsaW5nU2VsZWN0aW9uKGZhbHNlKQpAQCAtMzM2LDE3ICszMzUsMTcgQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25z
dCBWaXNpYmxlU2VsZWN0aW8KICAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxl
Y3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFs
KHRydWUpOwogCi0gICAgaWYgKCFtX2ZyYW1lKSB7CisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFt
X2RvY3VtZW50LT5mcmFtZSgpKSB7CiAgICAgICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9u
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24KLSAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9
PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCisgICAgLy8gaWYgZG9j
dW1lbnQtPmZyYW1lKCkgPT0gbV9kb2N1bWVudC0+ZnJhbWUoKSB3ZSBjYW4gZ2V0IGludG8gYW4g
aW5maW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBu
ZXdTZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFt
ZT4gbmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewot
ICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0
aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkgewotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlv
bkZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBB
WFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAg
ICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZG9jdW1lbnQtPmZyYW1lKCkgJiYgbmV3U2Vs
ZWN0aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkgeworICAgICAgICAgICAgICAgIG5ld1NlbGVj
dGlvbkRvY3VtZW50LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRp
b25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAg
ICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBz
ZWxlY3Rpb24sIHRoaXMgRnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAg
ICAgICAgICAgICAvLyBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwg
YnV0IHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKICAgICAgICAg
ICAgICAgICAvLyB0aGUgZnJhbWUgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiBJZiB0aGlzIGlz
IHRoZSBjYXNlLCBjbGVhciBvdXIgc2VsZWN0aW9uLgpAQCAtMTM3Nyw5ICsxMzc2LDEwIEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQobV9m
cmFtZSkpCisgICAgaWYgKG1fZG9jdW1lbnQgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQo
bV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9
PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKG1fZG9jdW1lbnQgJiYg
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewogICAgICAgICBpZiAoQVhP
YmplY3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkK
QEAgLTE5MzIsMTAgKzE5MzIsMTAgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogewogICAgIC8vIEZpbmQgdGhl
IHBhcmVudCBmcmFtZTsgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8g
ZG8uCi0gICAgRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUtPnRyZWUoKS5wYXJlbnQoKTsKKyAgICBG
cmFtZSogcGFyZW50ID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+dHJlZSgpLnBhcmVudCgpOwogICAg
IGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUt
PnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC0+cGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTQ4LDcgKzE5NDgsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEdldCB0byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAo
b3IgZXZlbiA8b2JqZWN0PikgZWxlbWVudCBpbiB0aGUgcGFyZW50IGZyYW1lLgotICAgIEVsZW1l
bnQqIG93bmVyRWxlbWVudCA9IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgIEVsZW1lbnQq
IG93bmVyRWxlbWVudCA9IG1fZG9jdW1lbnQtPm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3du
ZXJFbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgQ29udGFpbmVyTm9kZSogb3duZXJFbGVt
ZW50UGFyZW50ID0gb3duZXJFbGVtZW50LT5wYXJlbnROb2RlKCk7CkBAIC0yMjUzLDcgKzIyNTMs
NyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3Np
bmdFbmFibGVkKCk7CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1l
bnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkg
ewotICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRG
b2N1c2VkRWxlbWVudChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQt
PnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9k
b2N1bWVudC0+ZnJhbWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMjY1LDcgKzIyNjUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxl
bWVudElmTmVlZGVkKCkKICAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50
IGNoZWNrIGhlcmUuIFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwog
ICAgICAgICAgICAgLy8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2Fm
ZXN0IGZpeCBhdCB0aGlzIHRpbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9j
dXNhYmxlKCkgJiYgIWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICBt
X2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRh
cmdldCwgKm1fZnJhbWUpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9j
dXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9kb2N1bWVudC0+ZnJh
bWUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CkBAIC0yMjc0
LDcgKzIyNzQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVl
ZGVkKCkKICAgICB9CiAKICAgICBpZiAoY2FyZXRCcm93c2luZykKLSAgICAgICAgbV9kb2N1bWVu
dC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAq
bV9mcmFtZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCku
c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogfQogCiB2
b2lkIERyYWdDYXJldENvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgR3Jh
cGhpY3NDb250ZXh0JiBwLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExh
eW91dFJlY3QmIGNsaXBSZWN0KSBjb25zdApAQCAtMjMwMCw3ICsyMzAwLDcgQEAgUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnRpZXM+IEZyYW1lU2VsZWN0aW9uOjpjb3B5VHlwaW5nU3R5bGUoKSBj
b25zdAogYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgp
KQorICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVybiBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CkBAIC0yNDExLDcgKzI0
MTEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2
ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogICAgICAgICAgICAgICAgIGxheWVyLT5z
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAg
IHVwZGF0ZUFwcGVhcmFuY2UoKTsKICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFn
ZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNs
aWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50
KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50LT5m
cmFtZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKQEAgLTI0NDUsNyArMjQ0
NSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBp
ZiAobV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICByZXR1cm4gbV9kb2N1bWVudC0+
ZWRpdG9yKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24s
IG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKaW5kZXggM2E3YjA4NWY3Y2Y1MTU4ODMzMzg4NDEwYjAyYWJlODU2NjVj
NDhjMy4uOTA3NDc3MmQzZTJmOWRlMGZmNzFjNDA1MzI4MGYxYjk5MzQwMTU0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMzM3LDcgKzMzNyw2IEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgIEZyYW1lKiBtX2Zy
YW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25B
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3Bw
CmluZGV4IDI3MmUzNGJlYjc5MjY0ZWI2NzFkYzlhODZkN2FkYTg3NTZiZTcyYjQuLjk3MzRiNjhh
NGY2NWRhMTNiNWMzMzA2NTUxOTczNmY1Mzk2ZTNhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShj
b25zdCBBWFRleHRTdGF0ZUNoYW4KICAgICBpZiAoIWZvY3VzZWROb2RlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpOworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1
bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNl
bGVjdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9u
TWFjLm1tCmluZGV4IDgzNGNjMzZiYThhNjdhMmJlOGE3YjdiNDhjZWEzZTFmOTVjNzFjYjcuLjM1
MDNjMjZjM2ZmZDBjM2FjZjkyNTM3OTI4ODllZGZkZWFmMGExN2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCkBAIC0zNCwxMCArMzQsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vz
c2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQm
IGludGVudCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
OwotCiAgICAgaWYgKG1fc2VsZWN0aW9uLnN0YXJ0KCkuaXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rp
b24uZW5kKCkuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAgICAgICBpZiAoQVhPYmpl
Y3RDYWNoZSogY2FjaGUgPSBtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAg
ICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG1fc2VsZWN0
aW9uLnN0YXJ0KCksIGludGVudCwgbV9zZWxlY3Rpb24pOwogICAgIH0KIApAQCAtNDYsMTAgKzQ0
LDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rp
b25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuCiAgICAgaWYgKCFVQVpvb21FbmFibGVkKCkg
fHwgIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVy
VmlldyogcmVuZGVyVmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCk7CisgICAgUmVuZGVyVmll
dyogcmVuZGVyVmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRl
clZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJh
bWUtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1lbnQtPnZpZXco
KTsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTg0OWJj
YWIyOGU0YTc5OGQwOGQ2NTA5MDkyYmNiNDMwODc2Njg5OC4uYWI5NmExOWVkOGFmYmVhNGY1YTYy
MGQzNDhlMTQ4NzExZTRiY2E4NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA0LTI5ICBK
YWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jh
c2ggaW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmVtb3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA3NjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVkdWNlIHJ1biB0aW1lIGZvciB0aGlzIHRlc3QgY2FzZS4gCisKKyAgICAgICAgKiBlZGl0
aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sOgor
CiAyMDIwLTA0LTI4ICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgogCiAgICAg
ICAgIE51bGxwdHIgY3Jhc2ggaW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5k
LWNyYXNoLmh0bWwKaW5kZXggM2FmMzgxZDllZjVhM2ZkOTRlYjIxMDkwYzJhMjJmYmMwNzUxMmFh
Zi4uOGY3ZWIwYmU5YTRlNmU0NjExMmFjNTYzMjg0MTM3NzgwMWNmNzljYSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1h
bmQtY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQt
bGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCkBAIC0xLDE5ICsxLDE4IEBACi08Ym9k
eT48aW1hZ2U+PC9pbWFnZT48Zm9ybSBpZD1mb3JtIGNvbnRlbnRFZGl0YWJsZT10cnVlPjxvYmpl
Y3QgZGF0YT0/IG9ubG9hZD1vYmplY3RPbkxvYWQoKT48L29iamVjdD48L2Zvcm0+PGRpYWxvZyBv
cGVuPSJ0cnVlIj5hPC9kaWFsb2c+Cis8ZGl2IHN0eWxlPSJ3aWR0aDogMXB4OyBoZWlnaHQ6IDFw
eDsiPjwvZGl2PjxkaXYgY29udGVudEVkaXRhYmxlPXRydWU+PG9iamVjdCBkYXRhPSI/IiBvbmxv
YWQ9b2JqZWN0T25Mb2FkKCk+PC9vYmplY3Q+PC9kaXY+PHNwYW4+dGV4dDwvc3Bhbj4KIDxzY3Jp
cHQ+Ci0gICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTsKLSAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZCgic2VsZWN0QWxsIiwgZmFsc2UpOwogICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikgewogICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKICAgICAgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CiAgICAgfQogCisgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCku
ZW1wdHkoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgic2VsZWN0QWxsIiwgZmFsc2UpOwor
CiAgICAgZnVuY3Rpb24gb2JqZWN0T25Mb2FkKCkgewogICAgICAgICBkb2N1bWVudC5leGVjQ29t
bWFuZCgiaW5zZXJ0VW5vcmRlcmVkTGlzdCIsIGZhbHNlKTsKICAgICAgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoIml0YWxpYyIsIGZhbHNlKTsKLSAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1l
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxw
PiBUZXN0cyBpbnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0
ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwv
cD4iOwotICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwotICAgICAgICB9KTsKKyAgICAgICAgZG9jdW1lbnQu
Ym9keS5pbm5lckhUTUwgPSAiPHA+IFRlc3RzIGluc2VydGluZyBsaXN0IGZvbGxvd2VkIGJ5IGFu
IGVkaXQgY29tbWFuZC4gVGhlIHRlc3QgcGFzc2VzIGlmIFdlYktpdCBkb2Vzbid0IGNyYXNoIG9y
IGhpdCBhbiBhc3NlcnRpb24uPC9wPiI7CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OwogICAgIH0KIDwvc2NyaXB0PgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398035</attachid>
            <date>2020-04-29 21:55:32 -0700</date>
            <delta_ts>2020-04-29 22:58:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200429215532.patch</filename>
            <type>text/plain</type>
            <size>18347</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uOTA4NzJmZjlhNjE5ODFlZDg3Zjk4ZDI4N2Y1ZTYy
NDlkMDlhY2EyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA0LTI5ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgcGF0
Y2guIFJlbW92ZSBtX2ZyYW1lIGluIEZyYW1lU2VsZWN0aW9uIHNvIGl0IHdpbGwgbm90IGJlCisg
ICAgICAgIGluYWR2ZXJ0ZW50bHkgdXNlZCBhbmQgY2F1c2UgdGhpcyBjcmFzaC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdC4KKworICAgICAgICAqIGVk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFs
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFu
Z2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoK
KyAgICAgICAgKiBlZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNo
YW5nZSk6CisgICAgICAgICogZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZSk6CisKIDIwMjAtMDQtMjggIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1h
bmQgdmlhIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCkBAIC0xMywxNSArNDMsMTQg
QEAKIAogICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjptX3Nl
bGVjdGlvbik6Ci0gICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1l
KToKICAgICAgICAgKFdlYkNvcmU6Om1fdW5kb01hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCiAgICAg
ICAgICogZG9tL0RvY3VtZW50Lmg6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWRpdG9y
KToKICAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IgY29uc3QpOgogICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGlvbik6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6c2VsZWN0aW9uIGNvbnN0KToKLSAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6
Ci0gICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSBjb25zdCk6
CiAgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKICAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIpOgogICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
c3RvcFBlbmRpbmdDb3JyZWN0aW9uKToKQEAgLTE1MSwxMSArMTgwLDEwIEBACiAgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
b3VudE1hdGNoZXNGb3JUZXh0KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbik6Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVj
dFRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRl
Y3RUZWxlcGhvbmVOdW1iZXJzIGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBjb25zdCk6Ci0gICAgICAgIChXZWJDb3JlOjpjYW5k
aWRhdGVSYW5nZUZvclNlbGVjdGlvbik6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0cmlu
Z0ZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
b250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0KToKICAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0IGNvbnN0KToKQEAgLTE5MSw3
ICsyMTksNyBAQAogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmlu
Z1JpZ2h0KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdM
ZWZ0KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgotICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6CiAg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CiAg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKICAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6CkBAIC0yMTQs
NiArMjQyLDcgQEAKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlQWZ0ZXJMYXlvdXRPclN0eWxlQ2hhbmdlKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0Q2FyZXRCbGlua3MpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IERlbGV0ZWQuCiAgICAgICAgICogZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oOgogICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
Ojpkb0FwcGx5KToKQEAgLTI2MSw2ICsyOTAsNyBAQAogICAgICAgICAqIGVkaXRpbmcvVHlwaW5n
Q29tbWFuZC5oOgogICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW06CiAgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcpOgogICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CiAgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OndyaXRlU2VsZWN0aW9uKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKQEAgLTI4OSw2ICszMTksOCBAQAogICAgICAgICAqIGVk
aXRpbmcvd2luL0VkaXRvcldpbi5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3Rl
V2l0aFBhc3RlYm9hcmQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgogICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d2lsbFRyYW5zaXRp
b25Ub0NvbW1pdHRlZCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xvc2VVUkwp
OgpAQCAtMjk2LDYgKzMyOCw4IEBACiAgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xl
YXIpOgogICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWU6
OkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVx
dWVzdERPTVBhc3RlQWNjZXNzKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRQYWdlQW5k
VGV4dFpvb21GYWN0b3JzKToKICAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBh
ZWY0YmM1YTdkOGY2ZDZkNWFkNjZlNjYwYjdmNGU4ZWVlMTg4YTFjLi5kYzY0MzJmODhlMTJiM2Ez
ZDEzZjIzYWJmODVlMmVjNzA4M2ZkNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBi
b29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpCiAKIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290
Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAg
YXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOworICAgIGF1dG8qIHZpZXcg
PSBtX2RvY3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVz
KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDA0OGVkMDYxYjVlODQwYTYwOGE4ZTdm
OWY4NmEzN2EwNTdhYTc5ODIuLjA2NGM0ZWMzMTRlZTg3ZWIxZWExZDg3NTkzNTAxMGIwZmZlMDE0
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xNDYs
NyArMTQ2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIAogRnJhbWVTZWxlY3Rpb246OkZyYW1lU2Vs
ZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0g
ICAgLCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAg
LCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkK
ICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Nyw3ICsxNTYsNyBAQCBGcmFtZVNlbGVjdGlv
bjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hYnNDYXJldEJv
dW5kc0RpcnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9m
cmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZEZyYW1lKCkgPT0gbV9mcmFtZSkKKyAgICAsIG1fZm9jdXNlZChkb2N1bWVudCAmJiBkb2N1bWVu
dC0+ZnJhbWUoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKS0+cGFnZSgpICYmIGRvY3VtZW50LT5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LT5mcmFtZSgp
KQogICAgICwgbV9zaG91bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdT
ZWxlY3Rpb25VcGRhdGUoZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxX
aGVuUmV2ZWFsaW5nU2VsZWN0aW9uKGZhbHNlKQpAQCAtMzM2LDE3ICszMzUsMTcgQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25z
dCBWaXNpYmxlU2VsZWN0aW8KICAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxl
Y3Rpb24obV9kb2N1bWVudCkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFs
KHRydWUpOwogCi0gICAgaWYgKCFtX2ZyYW1lKSB7CisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFt
X2RvY3VtZW50LT5mcmFtZSgpKSB7CiAgICAgICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9u
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24KLSAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9
PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCisgICAgLy8gaWYgZG9j
dW1lbnQtPmZyYW1lKCkgPT0gbV9kb2N1bWVudC0+ZnJhbWUoKSB3ZSBjYW4gZ2V0IGludG8gYW4g
aW5maW5pdGUgbG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBu
ZXdTZWxlY3Rpb24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFt
ZT4gbmV3U2VsZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewot
ICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0
aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkgewotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlv
bkZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBB
WFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAg
ICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZG9jdW1lbnQtPmZyYW1lKCkgJiYgbmV3U2Vs
ZWN0aW9uRG9jdW1lbnQgIT0gbV9kb2N1bWVudCkgeworICAgICAgICAgICAgICAgIG5ld1NlbGVj
dGlvbkRvY3VtZW50LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRp
b25zLCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAg
ICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBz
ZWxlY3Rpb24sIHRoaXMgRnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAg
ICAgICAgICAgICAvLyBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwg
YnV0IHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKICAgICAgICAg
ICAgICAgICAvLyB0aGUgZnJhbWUgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiBJZiB0aGlzIGlz
IHRoZSBjYXNlLCBjbGVhciBvdXIgc2VsZWN0aW9uLgpAQCAtMzg0LDYgKzM4Myw4IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29u
c3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShv
cHRpb25zICYgRG9Ob3RTZXRGb2N1cykpIHsKICAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1l
bnQgPSBtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgICAgICBzZXRGb2N1c2VkRWxl
bWVudElmTmVlZGVkKCk7CisgICAgICAgIGlmICghbV9kb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbmVl
ZGVkLgogICAgICAgICBpZiAobV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBvbGRGb2N1
c2VkRWxlbWVudCkKICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQo
KTsKQEAgLTEzNzcsOSArMTM3OCwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFs
dGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgIGlm
IChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlz
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKG1fZnJhbWUpKQorICAgIGlmIChtX2RvY3VtZW50ICYm
IGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKSB7CiAgICAg
ICAgIGlmICghd2FzUmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUgJiYgcG9zaXRpb24g
PT0gb3JpZ2luYWxTdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KIAogICAgIGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkpIHsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVu
dC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCkBAIC0xOTMyLDEwICsxOTM0LDEwIEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QK
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNl
bGVjdGVkKCkKIHsKICAgICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5v
bmUsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2Zy
YW1lLT50cmVlKCkucGFyZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQtPmZy
YW1lKCktPnRyZWUoKS5wYXJlbnQoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJu
OwotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1f
ZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTk0OCw3ICsxOTUwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50
SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBHZXQg
dG8gdGhlIDxpZnJhbWU+IG9yIDxmcmFtZT4gKG9yIGV2ZW4gPG9iamVjdD4pIGVsZW1lbnQgaW4g
dGhlIHBhcmVudCBmcmFtZS4KLSAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2ZyYW1lLT5v
d25lckVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2RvY3VtZW50LT5v
d25lckVsZW1lbnQoKTsKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIENvbnRhaW5lck5vZGUqIG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFy
ZW50Tm9kZSgpOwpAQCAtMjI1Myw3ICsyMjU1LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1
bWVudC0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGlmIChjYXJldEJy
b3dzaW5nKSB7CiAgICAgICAgIGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JF
bGVtZW50KG1fc2VsZWN0aW9uLmJhc2UoKSkpIHsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFt
ZSk7CisgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNl
dEZvY3VzZWRFbGVtZW50KGFuY2hvciwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2NSw3ICsyMjY3LDcgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgICAgICAgICAv
LyBzbyBhZGQgdGhlICFpc0ZyYW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5
IGEgYmV0dGVyIHdheSB0byBtYWtlIHRoaXMKICAgICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxv
bmcgdGVybSwgYnV0IHRoaXMgaXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0aW1lLgogICAgICAg
ICAgICAgaWYgKHRhcmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0
YXJnZXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKKyAgICAgICAgICAg
ICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVt
ZW50KHRhcmdldCwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50T3JT
aGFkb3dIb3N0RWxlbWVudCgpOwpAQCAtMjI3NCw3ICsyMjc2LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgfQogCiAgICAgaWYgKGNhcmV0
QnJvd3NpbmcpCi0gICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCku
c2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50
LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICpt
X2RvY3VtZW50LT5mcmFtZSgpKTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWlu
dERyYWdDYXJldChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QKQEAg
LTIzMDAsNyArMjMwMiw3IEBAIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBGcmFtZVNl
bGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNo
b3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNv
bnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUo
KS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjZW5kaWYKICAgICByZXR1cm4gbV9kb2N1bWVudC0+ZWRpdG9yKCkuY2xpZW50KCktPnNo
b3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCkpOwpAQCAtMjQxMSw3ICsyNDEzLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Ny
b2wKICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9k
b2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlv
bkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZnJhbWUpOworICAgICAgICAgICAgICAgICAgICBtX2RvY3Vt
ZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlT
Y3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICNlbHNlCkBAIC0yNDQ1LDcgKzI0NDcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAogewog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5n
ZUNhbGxiYWNrc0Rpc2FibGVkKCkpCisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVj
dGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlv
bihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFs
c2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDNhN2IwODVm
N2NmNTE1ODgzMzM4ODQxMGIwMmFiZTg1NjY1YzQ4YzMuLjkwNzQ3NzJkM2UyZjlkZTBmZjcxYzQw
NTMyODBmMWI5OTM0MDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmgKQEAgLTMzNyw3ICszMzcsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBEb2N1bWVudCog
bV9kb2N1bWVudDsKLSAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQgbV94UG9z
Rm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAppbmRleCAyNzJlMzRiZWI3OTI2NGViNjcxZGM5
YTg2ZDdhZGE4NzU2YmU3MmI0Li45NzM0YjY4YTRmNjVkYTEzYjVjMzMwNjU1MTk3MzZmNTM5NmUz
YTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlv
bkF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25B
dGsuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vz
c2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuCiAgICAgaWYg
KCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKTsKKyAgICBB
WE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgp
OwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQppbmRleCA4MzRjYzM2YmE4YTY3YTJi
ZThhN2I3YjQ4Y2VhM2UxZjk1YzcxY2I3Li4zNTAzYzI2YzNmZmQwYzNhY2Y5MjUzNzkyODg5ZWRm
ZGVhZjBhMTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNl
bGVjdGlvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVj
dGlvbk1hYy5tbQpAQCAtMzQsMTAgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lk
IEZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNv
bnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCiB7Ci0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLQogICAgIGlmIChtX3NlbGVjdGlvbi5zdGFy
dCgpLmlzTm90TnVsbCgpICYmIG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7Ci0gICAg
ICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSkKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC0+
ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBpbnRlbnQsIG1fc2VsZWN0
aW9uKTsKICAgICB9CiAKQEAgLTQ2LDEwICs0NCwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpu
b3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFYVGV4dFN0YXRlQ2hh
bgogICAgIGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFtX3NlbGVjdGlvbi5pc0NhcmV0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBkb2N1bWVudC0+
cmVuZGVyVmlldygpOworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5y
ZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE4NDliY2FiMjhlNGE3OThkMDhkNjUwOTA5MmJjYjQzMDg3
NjY4OTguLmFiOTZhMTllZDhhZmJlYTRmNWE2MjBkMzQ4ZTE0ODcxMWU0YmNhODQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAyMC0wNC0yOSAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxl
LmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFu
ZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZHVjZSBydW4gdGltZSBmb3IgdGhpcyB0
ZXN0IGNhc2UuIAorCisgICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhl
bi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbDoKKwogMjAyMC0wNC0yOCAgSmFjayBMZWUgIDxzaGlo
Y2hpZWhfbGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4t
ZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9p
bnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCmluZGV4IDNhZjM4MWQ5ZWY1
YTNmZDk0ZWIyMTA5MGMyYTIyZmJjMDc1MTJhYWYuLjhmN2ViMGJlOWE0ZTZlNDYxMTJhYzU2MzI4
NDEzNzc4MDFjZjc5Y2EgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5n
L2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gu
aHRtbApAQCAtMSwxOSArMSwxOCBAQAotPGJvZHk+PGltYWdlPjwvaW1hZ2U+PGZvcm0gaWQ9Zm9y
bSBjb250ZW50RWRpdGFibGU9dHJ1ZT48b2JqZWN0IGRhdGE9PyBvbmxvYWQ9b2JqZWN0T25Mb2Fk
KCk+PC9vYmplY3Q+PC9mb3JtPjxkaWFsb2cgb3Blbj0idHJ1ZSI+YTwvZGlhbG9nPgorPGRpdiBz
dHlsZT0id2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7Ij48L2Rpdj48ZGl2IGNvbnRlbnRFZGl0YWJs
ZT10cnVlPjxvYmplY3QgZGF0YT0iPyIgb25sb2FkPW9iamVjdE9uTG9hZCgpPjwvb2JqZWN0Pjwv
ZGl2PjxzcGFuPnRleHQ8L3NwYW4+CiA8c2NyaXB0PgotICAgIGRvY3VtZW50LmdldFNlbGVjdGlv
bigpLmVtcHR5KCk7Ci0gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIsIGZhbHNl
KTsKICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7CiAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgIH0KIAor
ICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmVtcHR5KCk7CisgICAgZG9jdW1lbnQuZXhlY0Nv
bW1hbmQoInNlbGVjdEFsbCIsIGZhbHNlKTsKKwogICAgIGZ1bmN0aW9uIG9iamVjdE9uTG9hZCgp
IHsKICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFVub3JkZXJlZExpc3QiLCBm
YWxzZSk7CiAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxzZSk7Ci0g
ICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBk
b2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICI8cD4gVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93
ZWQgYnkgYW4gZWRpdCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3Qg
Y3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlvbi48L3A+IjsKLSAgICAgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAg
ICAgICAgfSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxwPiBUZXN0cyBp
bnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3Nl
cyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwvcD4iOworICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKICAgICB9CiA8L3NjcmlwdD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398038</attachid>
            <date>2020-04-29 22:57:05 -0700</date>
            <delta_ts>2020-04-30 11:41:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200429225704.patch</filename>
            <type>text/plain</type>
            <size>18512</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uNzk5MWMzNDc3OTdiOWEwZWYxZWI0NDYzMWMyMTg4
MTllMjhmZTE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIwLTA0LTI5ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgcGF0
Y2guIFJlbW92ZSBtX2ZyYW1lIGluIEZyYW1lU2VsZWN0aW9uIHNvIGl0IHdpbGwgbm90IGJlCisg
ICAgICAgIGluYWR2ZXJ0ZW50bHkgdXNlZCBhbmQgY2F1c2UgdGhpcyBjcmFzaC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdC4KKworICAgICAgICAqIGVk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6Cisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNl
bGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2hvdWxk
RGVsZXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OiBzaG91bGRD
aGFuZ2VTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5oOgorICAgICAgICAqIGVkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0
aW9uQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9y
U2VsZWN0aW9uQ2hhbmdlKToKKwogMjAyMC0wNC0yOCAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVl
QGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpFZGl0
Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKQEAgLTEzLDE1ICs0
NSwxNCBAQAogCiAgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKICAgICAgICAgKFdlYkNvcmU6
Om1fc2VsZWN0aW9uKToKLSAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVwYXJlRm9yRGVz
dHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9t
RnJhbWUpOgogICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFuYWdlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKTogRGVsZXRlZC4K
ICAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKICAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpl
ZGl0b3IpOgogICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVkaXRvciBjb25zdCk6CiAgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uKToKICAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpzZWxlY3Rpb24gY29uc3QpOgotICAgICAgICAqIGRvbS9Qb3NpdGlvbkl0ZXJhdG9y
LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlIGNv
bnN0KToKICAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgog
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcik6CiAgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24pOgpAQCAtMTUxLDExICsxODIsMTAgQEAKICAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZFN0cmluZyk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKLSAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxk
RGV0ZWN0VGVsZXBob25lTnVtYmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNob3Vs
ZERldGVjdFRlbGVwaG9uZU51bWJlcnMgY29uc3QpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6CiAgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0KToKLSAgICAgICAgKFdlYkNvcmU6
OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgY29uc3QpOgogICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQgY29uc3QpOgpAQCAt
MTkxLDcgKzIyMSw3IEBACiAgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
TW92aW5nUmlnaHQpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1v
dmluZ0xlZnQpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6Ci0g
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3aWxsQmVSZW1vdmVkRnJvbUZyYW1l
KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRz
KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3Qp
OgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zIGNvbnN0KToKQEAg
LTIxNCw2ICsyNDQsNyBAQAogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0
ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2UpOgogICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KToKICAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKTogRGVsZXRlZC4KICAgICAgICAgKiBl
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CiAgICAgICAgICogZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcDoKICAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQ6OmRvQXBwbHkpOgpAQCAtMjYxLDYgKzI5Miw3IEBACiAgICAgICAgICogZWRpdGluZy9U
eXBpbmdDb21tYW5kLmg6CiAgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbToK
ICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uSW5IVE1MRm9ybWF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6CiAgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKToKICAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb24pOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQpOgpAQCAtMjg5LDYgKzMyMSw4IEBACiAgICAgICAg
ICogZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcDoKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZCk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndlYkNvbnRl
bnRGcm9tUGFzdGVib2FyZCk6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6ZGVzdHJveSk6CiAgICAgICAgICogbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcDoKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp3aWxsVHJh
bnNpdGlvblRvQ29tbWl0dGVkKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbG9z
ZVVSTCk6CkBAIC0yOTYsNiArMzMwLDggQEAKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
OjpjbGVhcik6CiAgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgogICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGFlZjRiYzVhN2Q4ZjZkNmQ1YWQ2NmU2NjBiN2Y0ZThlZWUxODhhMWMuLmRjNjQzMmY4OGUx
MmIzYTNkMTNmMjNhYmY4NWUyZWM3MDgzZmQ1YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMzQyLDcgKzM0Miw3
IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0Nv
cnJlY3Rpb25FbmFibGVkKCkKIAogRmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsK
LSAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgpLT52aWV3KCk7CisgICAgYXV0byog
dmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHVuaXRlZEJvdW5kaW5n
Qm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggMDQ4ZWQwNjFiNWU4NDBhNjA4
YThlN2Y5Zjg2YTM3YTA1N2FhNzk4Mi4uZWU2MDhkYmRkZGM2Y2M4Y2ZjODJlOGZlZWZiNTJiOGI2
NWU4MzFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAg
LTE0Niw3ICsxNDYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0
aW9uYWxTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogCiBGcmFtZVNlbGVjdGlvbjo6RnJh
bWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKLSAgICAsIG1fZnJhbWUoZG9jdW1lbnQ/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cikK
ICAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uKCkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFy
aXR5KQogI2lmIEVOQUJMRShURVhUX0NBUkVUKQpAQCAtMTU3LDcgKzE1Niw3IEBAIEZyYW1lU2Vs
ZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgLCBtX2Fic0Nh
cmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAsIG1fY2FyZXRQYWludCh0cnVlKQogICAgICwgbV9p
c0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2ZvY3VzZWQobV9mcmFtZSAm
JiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1lKQorICAgICwgbV9mb2N1c2VkKGRvY3VtZW50ICYmIGRv
Y3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5mcmFtZSgpLT5wYWdlKCkgJiYgZG9jdW1lbnQt
PnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0gZG9jdW1lbnQtPmZy
YW1lKCkpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihmYWxzZSkKICAgICAsIG1fcGVu
ZGluZ1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3YXlzQWxpZ25DdXJzb3JPblNj
cm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0zMzYsMTcgKzMzNSwxNyBAQCBi
b29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNl
KGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25h
bFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0
aW9uYWwodHJ1ZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUpIHsKKyAgICBpZiAoIW1fZG9jdW1lbnQg
fHwgIW1fZG9jdW1lbnQtPmZyYW1lKCkpIHsKICAgICAgICAgbV9zZWxlY3Rpb24gPSBuZXdTZWxl
Y3Rpb247CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyA8aHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NjQ+OiBJbmZpbml0ZSByZWN1cnNpb24g
YXQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbgotICAgIC8vIGlmIGRvY3VtZW50LT5mcmFt
ZSgpID09IG1fZnJhbWUgd2UgY2FuIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AKKyAgICAvLyBp
ZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2RvY3VtZW50LT5mcmFtZSgpIHdlIGNhbiBnZXQgaW50
byBhbiBpbmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3VtZW50KiBuZXdTZWxlY3Rpb25Eb2N1bWVu
dCA9IG5ld1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoUmVmUHRy
PEZyYW1lPiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1NlbGVjdGlvbkRvY3VtZW50LT5mcmFtZSgp
KSB7Ci0gICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9mcmFtZSAmJiBuZXdT
ZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2RvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgbmV3U2Vs
ZWN0aW9uRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlv
bnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7CisgICAg
ICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBu
ZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2RvY3VtZW50KSB7CisgICAgICAgICAgICAgICAgbmV3
U2VsZWN0aW9uRG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24s
IG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBncmFudWxhcml0eSk7
CiAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGR1cmluZyB0aGUgYWJvdmUg
c2V0IHNlbGVjdGlvbiwgdGhpcyBGcmFtZVNlbGVjdGlvbiBoYXMgYmVlbiBtb2RpZmllZCBieQog
ICAgICAgICAgICAgICAgIC8vIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVj
dGVkLCBidXQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZCBzaW5jZQogICAg
ICAgICAgICAgICAgIC8vIHRoZSBmcmFtZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuIElmIHRo
aXMgaXMgdGhlIGNhc2UsIGNsZWFyIG91ciBzZWxlY3Rpb24uCkBAIC0zODQsNiArMzgzLDggQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5j
ZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBpZiAoIW5ld1NlbGVjdGlvbi5pc05vbmUoKSAm
JiAhKG9wdGlvbnMgJiBEb05vdFNldEZvY3VzKSkgewogICAgICAgICBhdXRvKiBvbGRGb2N1c2Vk
RWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgICAgIHNldEZvY3Vz
ZWRFbGVtZW50SWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5mcmFtZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCBi
ZSBuZWVkZWQuCiAgICAgICAgIGlmIChtX2RvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpICE9IG9s
ZEZvY3VzZWRFbGVtZW50KQogICAgICAgICAgICAgbV9kb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5l
ZWRlZCgpOwpAQCAtMTM3Nyw5ICsxMzc4LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlm
eShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAg
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQobV9mcmFtZSkpCisgICAgaWYgKG1fZG9jdW1l
bnQgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQobV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsK
ICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3Np
dGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCiAgICAgaWYgKG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSkgewogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX2Rv
Y3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKQEAgLTE5MzIsMTAgKzE5MzQsMTAgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBj
b25zdAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1
bGx5U2VsZWN0ZWQoKQogewogICAgIC8vIEZpbmQgdGhlIHBhcmVudCBmcmFtZTsgaWYgdGhlcmUg
aXMgbm9uZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgRnJhbWUqIHBhcmVudCA9
IG1fZnJhbWUtPnRyZWUoKS5wYXJlbnQoKTsKKyAgICBGcmFtZSogcGFyZW50ID0gbV9kb2N1bWVu
dC0+ZnJhbWUoKS0+dHJlZSgpLnBhcmVudCgpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICBy
ZXR1cm47Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdl
ID0gbV9kb2N1bWVudC0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0xOTQ4LDcgKzE5NTAsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVs
ZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEdldCB0byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAob3IgZXZlbiA8b2JqZWN0PikgZWxlbWVu
dCBpbiB0aGUgcGFyZW50IGZyYW1lLgotICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fZnJh
bWUtPm93bmVyRWxlbWVudCgpOworICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fZG9jdW1l
bnQtPm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1
cm47CiAgICAgQ29udGFpbmVyTm9kZSogb3duZXJFbGVtZW50UGFyZW50ID0gb3duZXJFbGVtZW50
LT5wYXJlbnROb2RlKCk7CkBAIC0yMjUzLDcgKzIyNTUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAgaWYgKGNh
cmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9IGVuY2xvc2luZ0Fu
Y2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAgICAgICAgbV9kb2N1bWVu
dC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsICpt
X2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjY1LDcgKzIyNjcsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICAgICAg
ICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUuIFRoZXJlJ3MgcHJv
YmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwogICAgICAgICAgICAgLy8gd29yayBpbiB0
aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0aGlzIHRpbWUuCiAg
ICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkgJiYgIWlzRnJhbWVFbGVt
ZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJhbWUpOworICAgICAg
ICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQodGFyZ2V0LCAqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LT5wYXJl
bnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CkBAIC0yMjc0LDcgKzIyNzYsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICB9CiAKICAgICBpZiAo
Y2FyZXRCcm93c2luZykKLSAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFtZSk7CisgICAgICAgIG1fZG9j
dW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQobnVsbHB0
ciwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogfQogCiB2b2lkIERyYWdDYXJldENvbnRyb2xsZXI6
OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KSBjb25z
dApAQCAtMjMwMCw3ICsyMzAyLDcgQEAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IEZy
YW1lU2VsZWN0aW9uOjpjb3B5VHlwaW5nU3R5bGUoKSBjb25zdAogYm9vbCBGcmFtZVNlbGVjdGlv
bjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bikgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChtX2ZyYW1lLT5z
ZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQorICAgIGlmIChtX2RvY3VtZW50LT5m
cmFtZSgpICYmIG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgcmV0dXJuIG1fZG9j
dW1lbnQtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKQEAgLTI0MTEsNyArMjQx
Myw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZl
YWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAgICAgICAgICAgICAgICAgbGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAg
dXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdl
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xp
ZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2ZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQo
KS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1lbnQtPmZy
YW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQpAQCAtMjQ0NSw3ICsyNDQ3
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogYm9vbCBG
cmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbikgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQorICAgIGlm
IChtX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbkNo
YW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAg
ICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxl
Y3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDNhN2IwODVmN2NmNTE1
ODgzMzM4ODQxMGIwMmFiZTg1NjY1YzQ4YzMuLjkwNzQ3NzJkM2UyZjlkZTBmZjcxYzQwNTMyODBm
MWI5OTM0MDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAg
LTMzNyw3ICszMzcsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBEb2N1bWVudCogbV9kb2N1
bWVudDsKLSAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvYXRr
L0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAppbmRleCAyNzJlMzRiZWI3OTI2NGViNjcxZGM5YTg2ZDdh
ZGE4NzU2YmU3MmI0Li45NzM0YjY4YTRmNjVkYTEzYjVjMzMwNjU1MTk3MzZmNTM5NmUzYTEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3Bw
CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxp
dHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuCiAgICAgaWYgKCFmb2N1
c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKTsKKyAgICBBWE9iamVj
dENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpOwogICAg
IGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQppbmRleCA4MzRjYzM2YmE4YTY3YTJiZThhN2I3
YjQ4Y2VhM2UxZjk1YzcxY2I3Li4zNTAzYzI2YzNmZmQwYzNhY2Y5MjUzNzkyODg5ZWRmZGVhZjBh
MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlv
bk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1h
Yy5tbQpAQCAtMzQsMTAgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFY
VGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLQogICAgIGlmIChtX3NlbGVjdGlvbi5zdGFydCgpLmlz
Tm90TnVsbCgpICYmIG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSkKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5n
ZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBpbnRlbnQsIG1fc2VsZWN0aW9uKTsK
ICAgICB9CiAKQEAgLTQ2LDEwICs0NCwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpub3RpZnlB
Y2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbgogICAg
IGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFtX3NlbGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBkb2N1bWVudC0+cmVuZGVy
VmlldygpOworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJW
aWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGE4NDliY2FiMjhlNGE3OThkMDhkNjUwOTA5MmJjYjQzMDg3NjY4OTgu
LmFiOTZhMTllZDhhZmJlYTRmNWE2MjBkMzQ4ZTE0ODcxMWU0YmNhODQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAyMC0wNC0yOSAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4K
KworICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZHVjZSBydW4gdGltZSBmb3IgdGhpcyB0ZXN0IGNh
c2UuIAorCisgICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0
LWNvbW1hbmQtY3Jhc2guaHRtbDoKKwogMjAyMC0wNC0yOCAgSmFjayBMZWUgIDxzaGloY2hpZWhf
bGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpF
ZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1j
b21tYW5kLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQt
bGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCmluZGV4IDNhZjM4MWQ5ZWY1YTNmZDk0
ZWIyMTA5MGMyYTIyZmJjMDc1MTJhYWYuLjhmN2ViMGJlOWE0ZTZlNDYxMTJhYzU2MzI4NDEzNzc4
MDFjZjc5Y2EgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2Vy
dC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRp
dGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApA
QCAtMSwxOSArMSwxOCBAQAotPGJvZHk+PGltYWdlPjwvaW1hZ2U+PGZvcm0gaWQ9Zm9ybSBjb250
ZW50RWRpdGFibGU9dHJ1ZT48b2JqZWN0IGRhdGE9PyBvbmxvYWQ9b2JqZWN0T25Mb2FkKCk+PC9v
YmplY3Q+PC9mb3JtPjxkaWFsb2cgb3Blbj0idHJ1ZSI+YTwvZGlhbG9nPgorPGRpdiBzdHlsZT0i
d2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7Ij48L2Rpdj48ZGl2IGNvbnRlbnRFZGl0YWJsZT10cnVl
PjxvYmplY3QgZGF0YT0iPyIgb25sb2FkPW9iamVjdE9uTG9hZCgpPjwvb2JqZWN0PjwvZGl2Pjxz
cGFuPnRleHQ8L3NwYW4+CiA8c2NyaXB0PgotICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmVt
cHR5KCk7Ci0gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIsIGZhbHNlKTsKICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7CiAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgIH0KIAorICAgIGRv
Y3VtZW50LmdldFNlbGVjdGlvbigpLmVtcHR5KCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
InNlbGVjdEFsbCIsIGZhbHNlKTsKKwogICAgIGZ1bmN0aW9uIG9iamVjdE9uTG9hZCgpIHsKICAg
ICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFVub3JkZXJlZExpc3QiLCBmYWxzZSk7
CiAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxzZSk7Ci0gICAgICAg
IHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCA9ICI8cD4gVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93ZWQgYnkg
YW4gZWRpdCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2gg
b3IgaGl0IGFuIGFzc2VydGlvbi48L3A+IjsKLSAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAg
fSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxwPiBUZXN0cyBpbnNlcnRp
bmcgbGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBX
ZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwvcD4iOworICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKICAgICB9CiA8L3NjcmlwdD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398072</attachid>
            <date>2020-04-30 11:40:40 -0700</date>
            <delta_ts>2020-05-01 13:01:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200430114039.patch</filename>
            <type>text/plain</type>
            <size>18581</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uYzQ5Zjk0MWM5Zjk1ZTk1YjA0ZGUzMzk2YThlYTlk
MDEwYTEyZDBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTA0LTI5ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgZml4
LiBSZW1vdmUgbV9mcmFtZSBpbiBGcmFtZVNlbGVjdGlvbiBzbyBpdCB3aWxsIG5vdCBiZQorICAg
ICAgICBpbmFkdmVydGVudGx5IHVzZWQgYW5kIGNhdXNlIHRoaXMgY3Jhc2guCisKKyAgICAgICAg
Q29ycmVjdCBmdW5jdGlvbiBsaXN0IGluIHRoZSBsb2cgZW50cnkgZm9yIHRoZSBmaXN0IHBhcnQg
b2YgdGhlIGZpeC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3Rpbmcg
dGVzdC4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1Jl
Y3RGb3JSYW5nZSBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGlu
Z0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5Q
YXJlbnRJZkZ1bGx5U2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OiBzaG91bGRDaGFuZ2VTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvYXRrL0ZyYW1lU2Vs
ZWN0aW9uQXRrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlB
Y2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9G
cmFtZVNlbGVjdGlvbk1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpu
b3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKwogMjAyMC0wNC0yOCAgSmFj
ayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRyIGNyYXNo
IGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUKQEAgLTEzLDE1ICs0NywxNCBAQAogCiAgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKICAgICAgICAgKFdlYkNvcmU6Om1fc2VsZWN0aW9uKToKLSAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgogICAgICAgICAoV2ViQ29yZTo6bV91bmRvTWFu
YWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcGFyZUZvckRl
c3RydWN0aW9uKTogRGVsZXRlZC4KICAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKICAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjplZGl0b3IpOgogICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmVkaXRvciBjb25zdCk6CiAgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZWN0aW9uKToK
ICAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3Rpb24gY29uc3QpOgotICAgICAgICAq
IGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRl
cmF0b3I6OmlzQ2FuZGlkYXRlIGNvbnN0KToKICAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwOgogICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6CiAgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24pOgpAQCAtMTUx
LDExICsxODQsMTAgQEAKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZmluZFN0cmluZyk6CiAg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQpOgogICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKLSAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMgY29uc3QpOgogICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycyk6
CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCk6CiAg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIGNvbnN0
KToKLSAgICAgICAgKFdlYkNvcmU6OmNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKToKICAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6CiAg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3Qg
Y29uc3QpOgogICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0
aW9uU3RhcnQgY29uc3QpOgpAQCAtMTkxLDcgKzIyMyw3IEBACiAgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQpOgogICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246Om1vZGlmeSk6Ci0gICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJl
cGFyZUZvckRlc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3
aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjphYnNvbHV0ZUNhcmV0Qm91bmRzKToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpyZWNvbXB1dGVDYXJldFJlY3QpOgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmNvbnRhaW5zIGNvbnN0KToKQEAgLTIxNCw2ICsyNDYsNyBAQAogICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2VBZnRlckxheW91dE9yU3R5bGVDaGFuZ2Up
OgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50
KToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldEJsaW5rcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKTog
RGVsZXRlZC4KICAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6CiAgICAgICAgICog
ZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcDoKICAgICAgICAgKFdlYkNvcmU6
Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgpAQCAtMjYxLDYgKzI5NCw3IEBA
CiAgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmg6CiAgICAgICAgICogZWRpdGluZy9j
b2NvYS9FZGl0b3JDb2NvYS5tbToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9u
SW5IVE1MRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0
cmluZyk6CiAgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKToKICAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb24pOgogICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQpOgpAQCAtMjg5
LDYgKzMyMyw4IEBACiAgICAgICAgICogZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcDoKICAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZCk6CiAgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCk6CisgICAgICAgICogaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6ZGVzdHJv
eSk6CiAgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKICAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjp3aWxsVHJhbnNpdGlvblRvQ29tbWl0dGVkKToKICAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpjbG9zZVVSTCk6CkBAIC0yOTYsNiArMzMyLDggQEAKICAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbGVhcik6CiAgICAgICAgICogcGFnZS9GcmFtZS5jcHA6
CiAgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnNldFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKICAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MpOgogICAgICAgICAo
V2ViQ29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgogICAgICAgICAqIHBh
Z2UvRnJhbWUuaDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGFlZjRiYzVhN2Q4ZjZkNmQ1YWQ2NmU2NjBiN2Y0ZThl
ZWUxODhhMWMuLmRjNjQzMmY4OGUxMmIzYTNkMTNmMjNhYmY4NWUyZWM3MDgzZmQ1YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcApAQCAtMzQyLDcgKzM0Miw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIAogRmxvYXRSZWN0IEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC5mcmFtZSgp
LT52aWV3KCk7CisgICAgYXV0byogdmlldyA9IG1fZG9jdW1lbnQudmlldygpOwogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jv
b3RWaWV3KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFk
cyhyYW5nZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5k
ZXggMDQ4ZWQwNjFiNWU4NDBhNjA4YThlN2Y5Zjg2YTM3YTA1N2FhNzk4Mi4uN2U3ZmNlMWY2YTM3
OTE5N2M5ZTUwZGI4ZTcxZjFhNWQ0YzYzYTE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE0Niw3ICsxNDYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQog
CiBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
IDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fZnJhbWUoZG9jdW1lbnQ/IGRvY3VtZW50
LT5mcmFtZSgpIDogbnVsbHB0cikKICAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCiAgICAgLCBtX2dyYW51bGFy
aXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogI2lmIEVOQUJMRShURVhUX0NBUkVUKQpAQCAtMTU3
LDcgKzE1Niw3IEBAIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihEb2N1bWVudCogZG9j
dW1lbnQpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKICAgICAsIG1fY2FyZXRQ
YWludCh0cnVlKQogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCi0gICAg
LCBtX2ZvY3VzZWQobV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1lKQorICAgICwgbV9m
b2N1c2VkKGRvY3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5wYWdlKCkg
JiYgZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZEZyYW1lKCkgPT0g
ZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgLCBtX3Nob3VsZFNob3dCbG9ja0N1cnNvcihmYWxzZSkK
ICAgICAsIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZShmYWxzZSkKICAgICAsIG1fYWx3YXlzQWxp
Z25DdXJzb3JPblNjcm9sbFdoZW5SZXZlYWxpbmdTZWxlY3Rpb24oZmFsc2UpCkBAIC0zMzYsMTcg
KzMzNSwxNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRp
bmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGlmIChzaG91bGRBbHdheXNV
c2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSkKICAgICAgICAgbmV3U2VsZWN0aW9u
LnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CiAKLSAgICBpZiAoIW1fZnJhbWUpIHsKKyAgICBpZiAo
IW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmZyYW1lKCkpIHsKICAgICAgICAgbV9zZWxlY3Rp
b24gPSBuZXdTZWxlY3Rpb247CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAv
LyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NjQ+OiBJbmZpbml0
ZSByZWN1cnNpb24gYXQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbgotICAgIC8vIGlmIGRv
Y3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2FuIGdldCBpbnRvIGFuIGluZmluaXRlIGxv
b3AKKyAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2RvY3VtZW50LT5mcmFtZSgpIHdl
IGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCiAgICAgaWYgKERvY3VtZW50KiBuZXdTZWxl
Y3Rpb25Eb2N1bWVudCA9IG5ld1NlbGVjdGlvbi5iYXNlKCkuZG9jdW1lbnQoKSkgewogICAgICAg
ICBpZiAoUmVmUHRyPEZyYW1lPiBuZXdTZWxlY3Rpb25GcmFtZSA9IG5ld1NlbGVjdGlvbkRvY3Vt
ZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9m
cmFtZSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2RvY3VtZW50KSB7Ci0gICAgICAgICAg
ICAgICAgbmV3U2VsZWN0aW9uRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24sIG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBncmFudWxh
cml0eSk7CisgICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uRnJhbWUgIT0gbV9kb2N1bWVudC0+
ZnJhbWUoKSAmJiBuZXdTZWxlY3Rpb25Eb2N1bWVudCAhPSBtX2RvY3VtZW50KSB7CisgICAgICAg
ICAgICAgICAgbmV3U2VsZWN0aW9uRG9jdW1lbnQtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24sIG9wdGlvbnMsIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCksIGFsaWduLCBn
cmFudWxhcml0eSk7CiAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGR1cmlu
ZyB0aGUgYWJvdmUgc2V0IHNlbGVjdGlvbiwgdGhpcyBGcmFtZVNlbGVjdGlvbiBoYXMgYmVlbiBt
b2RpZmllZCBieQogICAgICAgICAgICAgICAgIC8vIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50
SWZGdWxseVNlbGVjdGVkLCBidXQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxp
ZCBzaW5jZQogICAgICAgICAgICAgICAgIC8vIHRoZSBmcmFtZSBpcyBhYm91dCB0byBiZSBkZXN0
cm95ZWQuIElmIHRoaXMgaXMgdGhlIGNhc2UsIGNsZWFyIG91ciBzZWxlY3Rpb24uCkBAIC0zODQs
NiArMzgzLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBpZiAoIW5ld1NlbGVjdGlv
bi5pc05vbmUoKSAmJiAhKG9wdGlvbnMgJiBEb05vdFNldEZvY3VzKSkgewogICAgICAgICBhdXRv
KiBvbGRGb2N1c2VkRWxlbWVudCA9IG1fZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCk7CiAgICAg
ICAgIHNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50
LT5mcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBGSVhNRTog
U2hvdWxkIG5vdCBiZSBuZWVkZWQuCiAgICAgICAgIGlmIChtX2RvY3VtZW50LT5mb2N1c2VkRWxl
bWVudCgpICE9IG9sZEZvY3VzZWRFbGVtZW50KQogICAgICAgICAgICAgbV9kb2N1bWVudC0+dXBk
YXRlU3R5bGVJZk5lZWRlZCgpOwpAQCAtMTM3Nyw5ICsxMzc4LDEwIEBAIGJvb2wgRnJhbWVTZWxl
Y3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiwgVGV4CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQobV9mcmFtZSkpCisgICAg
aWYgKG1fZG9jdW1lbnQgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQobV9kb2N1bWVudC0+
ZnJhbWUoKSkpIHsKICAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9u
TW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgaWYgKG1fZG9jdW1lbnQgJiYgQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKQEAgLTE5MzIsMTAg
KzE5MzQsMTAgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50KSBjb25zdAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50
SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogewogICAgIC8vIEZpbmQgdGhlIHBhcmVudCBmcmFt
ZTsgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgRnJh
bWUqIHBhcmVudCA9IG1fZnJhbWUtPnRyZWUoKS5wYXJlbnQoKTsKKyAgICBGcmFtZSogcGFyZW50
ID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+dHJlZSgpLnBhcmVudCgpOwogICAgIGlmICghcGFyZW50
KQogICAgICAgICByZXR1cm47Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAg
ICBQYWdlKiBwYWdlID0gbV9kb2N1bWVudC0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xOTQ4LDcgKzE5NTAsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEdldCB0byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAob3IgZXZlbiA8b2Jq
ZWN0PikgZWxlbWVudCBpbiB0aGUgcGFyZW50IGZyYW1lLgotICAgIEVsZW1lbnQqIG93bmVyRWxl
bWVudCA9IG1fZnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgIEVsZW1lbnQqIG93bmVyRWxlbWVu
dCA9IG1fZG9jdW1lbnQtPm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgQ29udGFpbmVyTm9kZSogb3duZXJFbGVtZW50UGFyZW50ID0g
b3duZXJFbGVtZW50LT5wYXJlbnROb2RlKCk7CkBAIC0yMjUzLDcgKzIyNTUsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICBib29sIGNhcmV0
QnJvd3NpbmcgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7
CiAgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIGFuY2hvciA9
IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24uYmFzZSgpKSkgewotICAgICAgICAg
ICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVu
dChhbmNob3IsICptX2ZyYW1lKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9j
dXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9kb2N1bWVudC0+ZnJh
bWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjY1LDcg
KzIyNjcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVk
KCkKICAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUu
IFRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwogICAgICAgICAgICAg
Ly8gd29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0
aGlzIHRpbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkgJiYg
IWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdldCwgKm1fZnJh
bWUpOworICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LCAqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ID0g
dGFyZ2V0LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CkBAIC0yMjc0LDcgKzIyNzYsNyBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVlZGVkKCkKICAgICB9
CiAKICAgICBpZiAoY2FyZXRCcm93c2luZykKLSAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyLCAqbV9mcmFtZSk7Cisg
ICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVs
ZW1lbnQobnVsbHB0ciwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogfQogCiB2b2lkIERyYWdDYXJl
dENvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0
JiBwLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGNs
aXBSZWN0KSBjb25zdApAQCAtMjMwMCw3ICsyMzAyLDcgQEAgUmVmUHRyPE11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IEZyYW1lU2VsZWN0aW9uOjpjb3B5VHlwaW5nU3R5bGUoKSBjb25zdAogYm9vbCBG
cmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbikgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlm
IChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQorICAgIGlmICht
X2RvY3VtZW50LT5mcmFtZSgpICYmIG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbkNoYW5n
ZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAg
cmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShj
cmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKQEAg
LTI0MTEsNyArMjQxMyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihT
ZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50LT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1l
KCptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJv
bWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1f
ZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxzZQpAQCAt
MjQ0NSw3ICsyNDQ3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5v
bmUoKQogYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxl
ZCgpKQorICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fZG9jdW1lbnQtPmZyYW1lKCkt
PnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogI2VuZGlmCiAgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVkaXRvcigpLnNob3VsZENoYW5nZVNl
bGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHko
KSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDNh
N2IwODVmN2NmNTE1ODgzMzM4ODQxMGIwMmFiZTg1NjY1YzQ4YzMuLjkwNzQ3NzJkM2UyZjlkZTBm
ZjcxYzQwNTMyODBmMWI5OTM0MDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgKQEAgLTMzNyw3ICszMzcsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBEb2N1
bWVudCogbV9kb2N1bWVudDsKLSAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQg
bV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcAppbmRleCAyNzJlMzRiZWI3OTI2NGVi
NjcxZGM5YTg2ZDdhZGE4NzU2YmU3MmI0Li45NzM0YjY4YTRmNjVkYTEzYjVjMzMwNjU1MTk3MzZm
NTM5NmUzYTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9GcmFtZVNl
bGVjdGlvbkF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxl
Y3Rpb25BdGsuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlm
eUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuCiAg
ICAgaWYgKCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKTsK
KyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RD
YWNoZSgpOwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQppbmRleCA4MzRjYzM2YmE4
YTY3YTJiZThhN2I3YjQ4Y2VhM2UxZjk1YzcxY2I3Li4zNTAzYzI2YzNmZmQwYzNhY2Y5MjUzNzky
ODg5ZWRmZGVhZjBhMTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9G
cmFtZVNlbGVjdGlvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFt
ZVNlbGVjdGlvbk1hYy5tbQpAQCAtMzQsMTAgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hh
bmdlKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCiB7Ci0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLQogICAgIGlmIChtX3NlbGVjdGlv
bi5zdGFydCgpLmlzTm90TnVsbCgpICYmIG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7
Ci0gICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50LT5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1
bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+cG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBpbnRlbnQsIG1f
c2VsZWN0aW9uKTsKICAgICB9CiAKQEAgLTQ2LDEwICs0NCwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFYVGV4dFN0
YXRlQ2hhbgogICAgIGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFtX3NlbGVjdGlvbi5pc0NhcmV0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBkb2N1
bWVudC0+cmVuZGVyVmlldygpOworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBtX2RvY3Vt
ZW50LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcp
CiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE4NDliY2FiMjhlNGE3OThkMDhkNjUwOTA5MmJj
YjQzMDg3NjY4OTguLmFiOTZhMTllZDhhZmJlYTRmNWE2MjBkMzQ4ZTE0ODcxMWU0YmNhODQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNC0yOSAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVl
QGFwcGxlLmNvbT4KKworICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpFZGl0
Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZHVjZSBydW4gdGltZSBmb3Ig
dGhpcyB0ZXN0IGNhc2UuIAorCisgICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxp
c3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbDoKKwogMjAyMC0wNC0yOCAgSmFjayBMZWUg
IDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVk
aXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5v
ZGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0
LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2Vy
dGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQtY29tbWFuZC1jcmFzaC5odG1sCmluZGV4IDNhZjM4
MWQ5ZWY1YTNmZDk0ZWIyMTA5MGMyYTIyZmJjMDc1MTJhYWYuLjhmN2ViMGJlOWE0ZTZlNDYxMTJh
YzU2MzI4NDEzNzc4MDFjZjc5Y2EgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5z
ZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQt
Y3Jhc2guaHRtbApAQCAtMSwxOSArMSwxOCBAQAotPGJvZHk+PGltYWdlPjwvaW1hZ2U+PGZvcm0g
aWQ9Zm9ybSBjb250ZW50RWRpdGFibGU9dHJ1ZT48b2JqZWN0IGRhdGE9PyBvbmxvYWQ9b2JqZWN0
T25Mb2FkKCk+PC9vYmplY3Q+PC9mb3JtPjxkaWFsb2cgb3Blbj0idHJ1ZSI+YTwvZGlhbG9nPgor
PGRpdiBzdHlsZT0id2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7Ij48L2Rpdj48ZGl2IGNvbnRlbnRF
ZGl0YWJsZT10cnVlPjxvYmplY3QgZGF0YT0iPyIgb25sb2FkPW9iamVjdE9uTG9hZCgpPjwvb2Jq
ZWN0PjwvZGl2PjxzcGFuPnRleHQ8L3NwYW4+CiA8c2NyaXB0PgotICAgIGRvY3VtZW50LmdldFNl
bGVjdGlvbigpLmVtcHR5KCk7Ci0gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIs
IGZhbHNlKTsKICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CiAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAg
IH0KIAorICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmVtcHR5KCk7CisgICAgZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIsIGZhbHNlKTsKKwogICAgIGZ1bmN0aW9uIG9iamVjdE9u
TG9hZCgpIHsKICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFVub3JkZXJlZExp
c3QiLCBmYWxzZSk7CiAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxz
ZSk7Ci0gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICI8cD4gVGVzdHMgaW5zZXJ0aW5nIGxpc3Qg
Zm9sbG93ZWQgYnkgYW4gZWRpdCBjb21tYW5kLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRv
ZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlvbi48L3A+IjsKLSAgICAgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKLSAgICAgICAgfSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxwPiBU
ZXN0cyBpbnNlcnRpbmcgbGlzdCBmb2xsb3dlZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0ZXN0
IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwvcD4i
OworICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKICAgICB9CiA8L3NjcmlwdD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398222</attachid>
            <date>2020-05-01 13:01:55 -0700</date>
            <delta_ts>2020-05-01 13:50:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207600-20200501130154.patch</filename>
            <type>text/plain</type>
            <size>15075</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlM2ZhYmI2MTc4YjI2
M2ViY2Y5NWVjODM2Mzc3NzlmZTlhMzhkMS4uMTQ2OTM4ZDNlMWNjNjZiYWUzY2U3ZGNhYzZmZjc5
YzkzM2ZjNTc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIwLTA0LTI5ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kIHZpYSBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3NjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81Njk2OTQ1MD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWNvbmQgcGFydCBvZiB0aGUgZml4
LiBSZW1vdmUgbV9mcmFtZSBpbiBGcmFtZVNlbGVjdGlvbiBzbyBpdCB3aWxsIG5vdCBiZQorICAg
ICAgICBpbmFkdmVydGVudGx5IHVzZWQgYW5kIGNhdXNlIHRoaXMgY3Jhc2guCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAgKiBlZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UgY29uc3QpOgorICAg
ICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkRWxlbWVudElmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNob3VsZERl
bGV0ZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFs
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjogc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aDoKKyAgICAgICAgKiBlZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZSk6CisgICAgICAgICogZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNl
bGVjdGlvbkNoYW5nZSk6CisKIDIwMjAtMDQtMjggIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBh
cHBsZS5jb20+CiAKICAgICAgICAgTnVsbHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENv
bW1hbmQgdmlhIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBh
ZWY0YmM1YTdkOGY2ZDZkNWFkNjZlNjYwYjdmNGU4ZWVlMTg4YTFjLi5kYzY0MzJmODhlMTJiM2Ez
ZDEzZjIzYWJmODVlMmVjNzA4M2ZkNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBi
b29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpCiAKIEZsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290
Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAg
YXV0byogdmlldyA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpOworICAgIGF1dG8qIHZpZXcg
PSBtX2RvY3VtZW50LnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVz
KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDA0OGVkMDYxYjVlODQwYTYwOGE4ZTdm
OWY4NmEzN2EwNTdhYTc5ODIuLjdlN2ZjZTFmNmEzNzkxOTdjOWU1MGRiOGU3MWYxYTVkNGM2M2Ex
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xNDYs
NyArMTQ2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFs
U2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKIAogRnJhbWVTZWxlY3Rpb246OkZyYW1lU2Vs
ZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0g
ICAgLCBtX2ZyYW1lKGRvY3VtZW50PyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHIpCiAgICAg
LCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkK
ICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKQEAgLTE1Nyw3ICsxNTYsNyBAQCBGcmFtZVNlbGVjdGlv
bjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hYnNDYXJldEJv
dW5kc0RpcnR5KHRydWUpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKG1fZnJhbWUgJiYgbV9m
cmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZEZyYW1lKCkgPT0gbV9mcmFtZSkKKyAgICAsIG1fZm9jdXNlZChkb2N1bWVudCAmJiBkb2N1bWVu
dC0+ZnJhbWUoKSAmJiBkb2N1bWVudC0+cGFnZSgpICYmIGRvY3VtZW50LT5wYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgpID09IGRvY3VtZW50LT5mcmFtZSgpKQogICAgICwg
bV9zaG91bGRTaG93QmxvY2tDdXJzb3IoZmFsc2UpCiAgICAgLCBtX3BlbmRpbmdTZWxlY3Rpb25V
cGRhdGUoZmFsc2UpCiAgICAgLCBtX2Fsd2F5c0FsaWduQ3Vyc29yT25TY3JvbGxXaGVuUmV2ZWFs
aW5nU2VsZWN0aW9uKGZhbHNlKQpAQCAtMzM2LDE3ICszMzUsMTcgQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxl
U2VsZWN0aW8KICAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9k
b2N1bWVudCkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwog
Ci0gICAgaWYgKCFtX2ZyYW1lKSB7CisgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50
LT5mcmFtZSgpKSB7CiAgICAgICAgIG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IEZyYW1lU2VsZWN0
aW9uOjpzZXRTZWxlY3Rpb24KLSAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1l
IHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCisgICAgLy8gaWYgZG9jdW1lbnQtPmZy
YW1lKCkgPT0gbV9kb2N1bWVudC0+ZnJhbWUoKSB3ZSBjYW4gZ2V0IGludG8gYW4gaW5maW5pdGUg
bG9vcAogICAgIGlmIChEb2N1bWVudCogbmV3U2VsZWN0aW9uRG9jdW1lbnQgPSBuZXdTZWxlY3Rp
b24uYmFzZSgpLmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZT4gbmV3U2Vs
ZWN0aW9uRnJhbWUgPSBuZXdTZWxlY3Rpb25Eb2N1bWVudC0+ZnJhbWUoKSkgewotICAgICAgICAg
ICAgaWYgKG5ld1NlbGVjdGlvbkZyYW1lICE9IG1fZnJhbWUgJiYgbmV3U2VsZWN0aW9uRG9jdW1l
bnQgIT0gbV9kb2N1bWVudCkgewotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgaWYgKG5l
d1NlbGVjdGlvbkZyYW1lICE9IG1fZG9jdW1lbnQtPmZyYW1lKCkgJiYgbmV3U2VsZWN0aW9uRG9j
dW1lbnQgIT0gbV9kb2N1bWVudCkgeworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkRvY3Vt
ZW50LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvcHRpb25zLCBBWFRl
eHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAg
ICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhlIGFib3ZlIHNldCBzZWxlY3Rpb24s
IHRoaXMgRnJhbWVTZWxlY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgYnkKICAgICAgICAgICAgICAg
ICAvLyBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCwgYnV0IHRoYXQg
dGhlIHNlbGVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQgc2luY2UKICAgICAgICAgICAgICAgICAv
LyB0aGUgZnJhbWUgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiBJZiB0aGlzIGlzIHRoZSBjYXNl
LCBjbGVhciBvdXIgc2VsZWN0aW9uLgpAQCAtMzg0LDYgKzM4Myw4IEBAIGJvb2wgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvCiAgICAgaWYgKCFuZXdTZWxlY3Rpb24uaXNOb25lKCkgJiYgIShvcHRpb25zICYg
RG9Ob3RTZXRGb2N1cykpIHsKICAgICAgICAgYXV0byogb2xkRm9jdXNlZEVsZW1lbnQgPSBtX2Rv
Y3VtZW50LT5mb2N1c2VkRWxlbWVudCgpOwogICAgICAgICBzZXRGb2N1c2VkRWxlbWVudElmTmVl
ZGVkKCk7CisgICAgICAgIGlmICghbV9kb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgYmUgbmVlZGVkLgogICAg
ICAgICBpZiAobV9kb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKSAhPSBvbGRGb2N1c2VkRWxlbWVu
dCkKICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKQEAgLTEz
NzcsOSArMTM3OCwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24g
YWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlzU3BhdGlhbE5h
dmlnYXRpb25FbmFibGVkKG1fZnJhbWUpKQorICAgIGlmIChtX2RvY3VtZW50ICYmIGlzU3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKG1fZG9jdW1lbnQtPmZyYW1lKCkpKSB7CiAgICAgICAgIGlmICgh
d2FzUmFuZ2UgJiYgYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUgJiYgcG9zaXRpb24gPT0gb3JpZ2lu
YWxTdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAg
IGlmIChtX2RvY3VtZW50ICYmIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkp
IHsKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC0+ZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpCkBAIC0xOTMyLDEwICsxOTM0LDEwIEBAIGJvb2wgRnJhbWVTZWxl
Y3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkK
IHsKICAgICAvLyBGaW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4g
d2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVl
KCkucGFyZW50KCk7CisgICAgRnJhbWUqIHBhcmVudCA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPnRy
ZWUoKS5wYXJlbnQoKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIFBh
Z2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgUGFnZSogcGFnZSA9IG1fZG9jdW1lbnQt
PnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTk0OCw3ICsx
OTUwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJ
ZkZ1bGx5U2VsZWN0ZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBHZXQgdG8gdGhlIDxp
ZnJhbWU+IG9yIDxmcmFtZT4gKG9yIGV2ZW4gPG9iamVjdD4pIGVsZW1lbnQgaW4gdGhlIHBhcmVu
dCBmcmFtZS4KLSAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2ZyYW1lLT5vd25lckVsZW1l
bnQoKTsKKyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2RvY3VtZW50LT5vd25lckVsZW1l
bnQoKTsKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRh
aW5lck5vZGUqIG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFyZW50Tm9kZSgp
OwpAQCAtMjI1Myw3ICsyMjU1LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVs
ZW1lbnRJZk5lZWRlZCgpCiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9kb2N1bWVudC0+c2V0
dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7
CiAgICAgICAgIGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1f
c2VsZWN0aW9uLmJhc2UoKSkpIHsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9j
dXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCAqbV9mcmFtZSk7CisgICAg
ICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRF
bGVtZW50KGFuY2hvciwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjI2NSw3ICsyMjY3LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgICAgICAgICAvLyBzbyBhZGQg
dGhlICFpc0ZyYW1lRWxlbWVudCBjaGVjayBoZXJlLiBUaGVyZSdzIHByb2JhYmx5IGEgYmV0dGVy
IHdheSB0byBtYWtlIHRoaXMKICAgICAgICAgICAgIC8vIHdvcmsgaW4gdGhlIGxvbmcgdGVybSwg
YnV0IHRoaXMgaXMgdGhlIHNhZmVzdCBmaXggYXQgdGhpcyB0aW1lLgogICAgICAgICAgICAgaWYg
KHRhcmdldC0+aXNNb3VzZUZvY3VzYWJsZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQpKSB7
Ci0gICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQsICptX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICBtX2Rv
Y3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KHRhcmdl
dCwgKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50T3JTaGFkb3dIb3N0
RWxlbWVudCgpOwpAQCAtMjI3NCw3ICsyMjc2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
Rm9jdXNlZEVsZW1lbnRJZk5lZWRlZCgpCiAgICAgfQogCiAgICAgaWYgKGNhcmV0QnJvd3Npbmcp
Ci0gICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQobnVsbHB0ciwgKm1fZnJhbWUpOworICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCkt
PmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIsICptX2RvY3VtZW50
LT5mcmFtZSgpKTsKIH0KIAogdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJl
dChGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkgY29uc3QKQEAgLTIzMDAsNyAr
MjMwMiw3IEBAIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBGcmFtZVNlbGVjdGlvbjo6
Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0
ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7CiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdl
Q2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2Rv
Y3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVybiBtX2RvY3VtZW50LT5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CkBAIC0yNDExLDcgKzI0MTMsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxN
b2RlLCBjb25zdCBTY3JvbAogICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFwcGVhcmFu
Y2UoKTsKICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQotICAgICAgICAg
ICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJl
dmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9mcmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFs
ZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50LT5mcmFtZSgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogI2Vsc2UKQEAgLTI0NDUsNyArMjQ0Nyw3IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKIGJvb2wgRnJhbWVTZWxlY3Rpb246
OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24pIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobV9mcmFtZS0+
c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVudC0+
ZnJhbWUoKSAmJiBtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIHJldHVybiBtX2Rv
Y3VtZW50LT5lZGl0b3IoKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1Nl
bGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCksIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCAzYTdiMDg1ZjdjZjUxNTg4MzMzODg0MTBiMDJh
YmU4NTY2NWM0OGMzLi45MDc0NzcyZDNlMmY5ZGUwZmY3MWM0MDUzMjgwZjFiOTkzNDAxNTQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0zMzcsNyArMzM3LDYg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgRnJh
bWUqIG1fZnJhbWU7CiAKICAgICBMYXlvdXRVbml0IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9GcmFtZVNl
bGVjdGlvbkF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlv
bkF0ay5jcHAKaW5kZXggMjcyZTM0YmViNzkyNjRlYjY3MWRjOWE4NmQ3YWRhODc1NmJlNzJiNC4u
OTczNGI2OGE0ZjY1ZGExM2I1YzMzMDY1NTE5NzM2ZjUzOTZlM2ExMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcApAQCAtOTcsNyArOTcs
NyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9u
Q2hhbmdlKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbgogICAgIGlmICghZm9jdXNlZE5vZGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUg
PSBtX2RvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0ZyYW1lU2VsZWN0aW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVT
ZWxlY3Rpb25NYWMubW0KaW5kZXggODM0Y2MzNmJhOGE2N2EyYmU4YTdiN2I0OGNlYTNlMWY5NWM3
MWNiNy4uMzUwM2MyNmMzZmZkMGMzYWNmOTI1Mzc5Mjg4OWVkZmRlYWYwYTE3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KQEAgLTM0LDEw
ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90
aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYgaW50ZW50KQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCk7Ci0KICAgICBpZiAobV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBt
X3NlbGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkgewotICAgICAgICBpZiAoQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBkb2N1bWVudC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNo
ZSgpKQogICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
bV9zZWxlY3Rpb24uc3RhcnQoKSwgaW50ZW50LCBtX3NlbGVjdGlvbik7CiAgICAgfQogCkBAIC00
NiwxMCArNDQsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZv
clNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW4KICAgICBpZiAoIVVBWm9vbUVu
YWJsZWQoKSB8fCAhbV9zZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKKyAgICBS
ZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOwogICAgIGlm
ICghcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gbV9mcmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9kb2N1bWVu
dC0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCBhODQ5YmNhYjI4ZTRhNzk4ZDA4ZDY1MDkwOTJiY2I0MzA4NzY2ODk4Li4zZmIwYTM3YTEwNGE4
Yjc2ZGY3YjNlZmI0OTNkM2M2NTcwNmMzYTUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAt
MDQtMjkgIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBsZS5jb20+CisKKyAgICAgICAgTnVs
bHB0ciBjcmFzaCBpbiBFZGl0Q29tbWFuZDo6RWRpdENvbW1hbmQgdmlhIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZW1vdmVOb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDc2MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWR1Y2UgcnVuIHRpbWUgZm9yIHRoaXMgdGVzdCBjYXNlLgorCisgICAgICAg
ICogZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2gu
aHRtbDoKKwogMjAyMC0wNC0yOCAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4K
IAogICAgICAgICBOdWxscHRyIGNyYXNoIGluIEVkaXRDb21tYW5kOjpFZGl0Q29tbWFuZCB2aWEg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRpdC1jb21tYW5kLWNyYXNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtbGlzdC10aGVuLWVkaXQt
Y29tbWFuZC1jcmFzaC5odG1sCmluZGV4IDNhZjM4MWQ5ZWY1YTNmZDk0ZWIyMTA5MGMyYTIyZmJj
MDc1MTJhYWYuLmRkNDcyNGZjNzgxYjUxMTE5MGE2ZGM5MTI2ZWEyOWE1NmJmMDJkN2UgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1saXN0LXRoZW4tZWRp
dC1jb21tYW5kLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcv
aW5zZXJ0LWxpc3QtdGhlbi1lZGl0LWNvbW1hbmQtY3Jhc2guaHRtbApAQCAtMSwxOSArMSwxNyBA
QAotPGJvZHk+PGltYWdlPjwvaW1hZ2U+PGZvcm0gaWQ9Zm9ybSBjb250ZW50RWRpdGFibGU9dHJ1
ZT48b2JqZWN0IGRhdGE9PyBvbmxvYWQ9b2JqZWN0T25Mb2FkKCk+PC9vYmplY3Q+PC9mb3JtPjxk
aWFsb2cgb3Blbj0idHJ1ZSI+YTwvZGlhbG9nPgorPGRpdiBzdHlsZT0id2lkdGg6IDFweDsgaGVp
Z2h0OiAxcHg7Ij48L2Rpdj48ZGl2IGNvbnRlbnRFZGl0YWJsZT10cnVlPjxvYmplY3QgZGF0YT0i
PyIgb25sb2FkPW9iamVjdE9uTG9hZCgpPjwvb2JqZWN0PjwvZGl2PjxzcGFuPnRleHQ8L3NwYW4+
CiA8c2NyaXB0PgotICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmVtcHR5KCk7Ci0gICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIsIGZhbHNlKTsKICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpIHsKICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CiAgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgIH0KIAorICAgIGRvY3VtZW50LmdldFNlbGVj
dGlvbigpLmVtcHR5KCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInNlbGVjdEFsbCIsIGZh
bHNlKTsKKwogICAgIGZ1bmN0aW9uIG9iamVjdE9uTG9hZCgpIHsKICAgICAgICAgZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoImluc2VydFVub3JkZXJlZExpc3QiLCBmYWxzZSk7CiAgICAgICAgIGRvY3Vt
ZW50LmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxzZSk7Ci0gICAgICAgIHJlcXVlc3RBbmltYXRp
b25GcmFtZShmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRN
TCA9ICI8cD4gVGVzdHMgaW5zZXJ0aW5nIGxpc3QgZm9sbG93ZWQgYnkgYW4gZWRpdCBjb21tYW5k
LiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2Vy
dGlvbi48L3A+IjsKLSAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxwPiBUZXN0cyBpbnNlcnRpbmcgbGlzdCBmb2xsb3dl
ZCBieSBhbiBlZGl0IGNvbW1hbmQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBj
cmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwvcD4iOworICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKICAgICB9CiA8L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>