<?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>66101</bug_id>
          
          <creation_ts>2011-08-11 14:44:46 -0700</creation_ts>
          <short_desc>Two null crashes in Treebuilder</short_desc>
          <delta_ts>2012-01-04 14:26:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>75317</dependson>
          <blocked>75554</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Abhishek Arya">inferno</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>ossy</cc>
    
    <cc>simonjam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>450047</commentid>
    <comment_count>0</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2011-08-11 14:44:46 -0700</bug_when>
    <thetext>crashes don&apos;t look exploitable, but might be big stability issues.

Testcase1::
AAAA0AAAA0&lt;iframe onload=&quot;document.write(&apos;&lt;iframe onload=&amp;quot;document.write(\&apos;&lt;script&gt;\&apos;)&amp;quot;&gt;&apos;);document.close();&quot;&gt;

/usr/local/google/home/aarya/chrome/src/out/Release/chrome --allow-file-access-from-files --disable-click-to-play --disable-hang-monitor --disable-metrics --disable-popup-blocking --disable-prompt-on-repost --enable-desktop-notifications --enable-experimental-extension-apis --enable-extension-apps --enable-extension-timeline-api --enable-geolocation --enable-indexed-database --enable-nacl --enable-native-web-workers --enable-search-provider-api-v2 --force-internal-pdf --incognito --js-flags=&quot;--expose-gc&quot; --new-window --no-default-browser-check --no-first-run --no-process-singleton-dialog --no-sandbox --single-process --enable-gpu-plugin --enable-gpu-rendering --enable-accelerated-compositing --enable-webgl --enable-accelerated-2d-canvas --user-data-dir=/usr/local/google/home/aarya/FuzzTmp/t71 

ASAN:SIGSEGV
==23678== ERROR: AddressSanitizer crashed on unknown address 0x0000000000000000 (pc 0x7f1dff2eeb80 sp 0x7f1de05f0750 bp 0x7f1de05f0760 ax 0x100000000000 T12)
AddressSanitizer can not provide additional info. ABORTING
    #2 0x7f1dff2752a1 in WebCore::HTMLTreeBuilder::processEndOfFile(WebCore::AtomicHTMLToken&amp;) 
    #3 0x7f1dff268f51 in WebCore::HTMLTreeBuilder::processToken(WebCore::AtomicHTMLToken&amp;) 
    #4 0x7f1dff268995 in WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken(WebCore::AtomicHTMLToken&amp;) 
    #5 0x7f1dff26887b in WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&amp;) 
    #6 0x7f1dff21f07c in WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) 
    #7 0x7f1dff21e91d in WebCore::HTMLDocumentParser::prepareToStopParsing() 
    #8 0x7f1dfef3522f in WebCore::Document::close() 
    #9 0x7f1dfe6bb78a in WebCore::HTMLDocumentInternal::closeCallback(v8::Arguments const&amp;) out/Release/obj/gen/webkit/bindings/V8DerivedSources03.cpp:0
    #10 0x7f1dfdb31a31 in v8::internal::Builtin_HandleApiCall(v8::internal::(anonymous namespace)::BuiltinArguments&lt;(v8::internal::BuiltinExtraArguments)1&gt;, v8::internal::Isolate*) v8/src/builtins.cc:0
    #11 0x37beff93e14e in 
    #12 0x37beff9662bd in 
    #13 0x37beff966640 in 
    #14 0x37beff958fe7 in 
    #15 0x37beff942f7f in 
    #16 0x7f1dfdb70bd3 in v8::internal::Invoke(bool, v8::internal::Handle&lt;v8::internal::JSFunction&gt;, v8::internal::Handle&lt;v8::internal::Object&gt;, int, v8::internal::Object***, bool*) v8/src/execution.cc:0
    #17 0x7f1dfdaf277d in v8::Function::Call(v8::Handle&lt;v8::Object&gt;, int, v8::Handle&lt;v8::Value&gt;*) 
    #18 0x7f1dff5e3fa6 in WebCore::V8Proxy::callFunction(v8::Handle&lt;v8::Function&gt;, v8::Handle&lt;v8::Object&gt;, int, v8::Handle&lt;v8::Value&gt;*) 
    #19 0x7f1dff5d6372 in WebCore::V8LazyEventListener::callListenerFunction(WebCore::ScriptExecutionContext*, v8::Handle&lt;v8::Value&gt;, WebCore::Event*) 
    #20 0x7f1dffeed7ec in WebCore::V8AbstractEventListener::invokeEventHandler(WebCore::ScriptExecutionContext*, WebCore::Event*, v8::Handle&lt;v8::Value&gt;) 
    #21 0x7f1dffeed512 in WebCore::V8AbstractEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) 
    #22 0x7f1dfefb5e80 in WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector&lt;WebCore::RegisteredEventListener, 1ul&gt;&amp;) 
    #23 0x7f1dfefb5a3f in WebCore::EventTarget::fireEventListeners(WebCore::Event*) 
    #24 0x7f1dfefee631 in WebCore::Node::handleLocalEvents(WebCore::Event*) 
    #25 0x7f1dfefa9626 in WebCore::EventDispatcher::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;) 
    #26 0x7f1dfefa5db0 in WebCore::EventDispatchMediator::dispatchEvent(WebCore::EventDispatcher*) const 
    #27 0x7f1dfefa6226 in WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::EventDispatchMediator&gt;) 
    #28 0x7f1dfefeec84 in WebCore::Node::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;) 
    #29 0x7f1dffca09f7 in WebCore::DOMWindow::dispatchLoadEvent() 
    #30 0x7f1dfef3e2e3 in WebCore::Document::implicitClose() 
    #31 0x7f1dffb934bd in WebCore::FrameLoader::checkCompleted() 
    #32 0x7f1dffb8f6c8 in WebCore::FrameLoader::finishedParsing() 
    #33 0x7f1dfef5c4c4 in WebCore::Document::finishedParsing() 
    #34 0x7f1dff21e9e5 in WebCore::HTMLDocumentParser::prepareToStopParsing() 
    #35 0x7f1dffb703c4 in WebCore::DocumentWriter::endIfNotLoadingMainResource() 
    #36 0x7f1dffbaf649 in WebCore::FrameLoader::finishedLoading() 
    #37 0x7f1dffbd4510 in WebCore::MainResourceLoader::didFinishLoading(double) 
    #38 0x7f1dffbd2a68 in WebCore::MainResourceLoader::continueAfterContentPolicy(WebCore::PolicyAction, WebCore::ResourceResponse const&amp;) 
    #39 0x7f1dffbd339e in WebCore::MainResourceLoader::continueAfterContentPolicy(WebCore::PolicyAction) 
    #40 0x7f1dffbe6fba in WebCore::PolicyChecker::continueAfterContentPolicy(WebCore::PolicyAction) 
    #41 0x7f1dfe56e692 in WebKit::FrameLoaderClientImpl::dispatchDecidePolicyForResponse(void (WebCore::PolicyChecker::*)(WebCore::PolicyAction), WebCore::ResourceResponse const&amp;, WebCore::ResourceRequest const&amp;) 
    #42 0x7f1dffbd3d65 in WebCore::MainResourceLoader::didReceiveResponse(WebCore::ResourceResponse const&amp;) 
    #43 0x7f1dffbd4f90 in WebCore::MainResourceLoader::handleEmptyLoad(WebCore::KURL const&amp;, bool) 
    #44 0x7f1dffbd58f5 in WebCore::MainResourceLoader::loadNow(WebCore::ResourceRequest&amp;) 
    #45 0x7f1dffbd5ff8 in WebCore::MainResourceLoader::load(WebCore::ResourceRequest const&amp;, WebCore::SubstituteData const&amp;) 
    #46 0x7f1dffb5fc89 in WebCore::DocumentLoader::startLoadingMainResource(unsigned long) 
    #47 0x7f1dffbb0ac1 in WebCore::FrameLoader::continueLoadAfterWillSubmitForm() 
    #48 0x7f1dffba4551 in WebCore::FrameLoader::continueLoadAfterNavigationPolicy(WebCore::ResourceRequest const&amp;, WTF::PassRefPtr&lt;WebCore::FormState&gt;, bool) 
    #49 0x7f1dffba49b8 in WebCore::FrameLoader::callContinueLoadAfterNavigationPolicy(void*, WebCore::ResourceRequest const&amp;, WTF::PassRefPtr&lt;WebCore::FormState&gt;, bool) 
    #50 0x7f1dffbe3c78 in WebCore::PolicyCallback::call(bool) 
    #51 0x7f1dffbe646c in WebCore::PolicyChecker::continueAfterNavigationPolicy(WebCore::PolicyAction) 
    #52 0x7f1dfe56f785 in WebKit::FrameLoaderClientImpl::dispatchDecidePolicyForNavigationAction(void (WebCore::PolicyChecker::*)(WebCore::PolicyAction), WebCore::NavigationAction const&amp;, WebCore::ResourceRequest const&amp;, WTF::PassRefPtr&lt;WebCore::FormState&gt;) 
    #53 0x7f1dffbe52cb in WebCore::PolicyChecker::checkNavigationPolicy(WebCore::ResourceRequest const&amp;, WebCore::DocumentLoader*, WTF::PassRefPtr&lt;WebCore::FormState&gt;, void (*)(void*, WebCore::ResourceRequest const&amp;, WTF::PassRefPtr&lt;WebCore::FormState&gt;, bool), void*) 
    #54 0x7f1dffba2bdb in WebCore::FrameLoader::loadWithDocumentLoader(WebCore::DocumentLoader*, WebCore::FrameLoadType, WTF::PassRefPtr&lt;WebCore::FormState&gt;) 
    #55 0x7f1dffba11ab in WebCore::FrameLoader::loadWithNavigationAction(WebCore::ResourceRequest const&amp;, WebCore::NavigationAction const&amp;, bool, WebCore::FrameLoadType, WTF::PassRefPtr&lt;WebCore::FormState&gt;) 
    #56 0x7f1dffb98989 in WebCore::FrameLoader::loadURL(WebCore::KURL const&amp;, WTF::String const&amp;, WTF::String const&amp;, bool, WebCore::FrameLoadType, WTF::PassRefPtr&lt;WebCore::Event&gt;, WTF::PassRefPtr&lt;WebCore::FormState&gt;) 
    #57 0x7f1dffb9453a in WebCore::FrameLoader::loadURLIntoChildFrame(WebCore::KURL const&amp;, WTF::String const&amp;, WebCore::Frame*) 
    #58 0x7f1dfe4ca867 in WebKit::WebFrameImpl::createChildFrame(WebCore::FrameLoadRequest const&amp;, WebCore::HTMLFrameOwnerElement*) 
    #59 0x7f1dfe5741ef in WebKit::FrameLoaderClientImpl::createFrame(WebCore::KURL const&amp;, WTF::String const&amp;, WebCore::HTMLFrameOwnerElement*, WTF::String const&amp;, bool, int, int) 
    #60 0x7f1dffc00743 in WebCore::SubframeLoader::loadSubframe(WebCore::HTMLFrameOwnerElement*, WebCore::KURL const&amp;, WTF::String const&amp;, WTF::String const&amp;) 
    #61 0x7f1dffbfc018 in WebCore::SubframeLoader::loadOrRedirectSubframe(WebCore::HTMLFrameOwnerElement*, WebCore::KURL const&amp;, WTF::AtomicString const&amp;, bool, bool) 
    #62 0x7f1dffbfb78c in WebCore::SubframeLoader::requestFrame(WebCore::HTMLFrameOwnerElement*, WTF::String const&amp;, WTF::AtomicString const&amp;, bool, bool) 
    #63 0x7f1dff0e12b6 in WebCore::HTMLFrameElementBase::openURL(bool, bool) 

    #0 0x7f1dff2eeb80 in WebCore::HTMLElementStack::pop() 
    #1 0x7f1dff2752a1 in WebCore::HTMLTreeBuilder::processEndOfFile(WebCore::AtomicHTMLToken&amp;) 
    #2 0x7f1dff268f51 in WebCore::HTMLTreeBuilder::processToken(WebCore::AtomicHTMLToken&amp;) 
    #3 0x7f1dff268995 in WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken(WebCore::AtomicHTMLToken&amp;) 
    #4 0x7f1dff26887b in WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&amp;) 
    #5 0x7f1dff21f07c in WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) 
    #6 0x7f1dff21e91d in WebCore::HTMLDocumentParser::prepareToStopParsing() 
    #7 0x7f1dfef3522f in WebCore::Document::close() 
    #8 0x7f1dfe6bb78a in WebCore::HTMLDocumentInternal::closeCallback(v8::Arguments const&amp;) out/Release/obj/gen/webkit/bindings/V8DerivedSources03.cpp:0
    #9 0x7f1dfdb31a31 in v8::internal::Builtin_HandleApiCall(v8::internal::(anonymous namespace)::BuiltinArguments&lt;(v8::internal::BuiltinExtraArguments)1&gt;, v8::internal::Isolate*) v8/src/builtins.cc:0
    #10 0x37beff93e14e in 
Stats: 0M malloced (0M for red zones) by 0 calls
Stats: 0M realloced by 0 calls
Stats: 0M freed by 0 calls
Stats: 0M really freed by 0 calls
Stats: 0M (0 pages) mmaped in 0 calls
 mmaps   by size:
 mallocs by size:
 frees   by size:
 rfrees  by size:
Stats: malloc large: 0 small slow: 0


Testcase2::
&lt;math&gt;&lt;option&gt;&lt;option&gt;&lt;/html&gt;&lt;option&gt;&lt;/option&gt;

/usr/local/google/home/aarya/chrome/src/out/Release/chrome --allow-file-access-from-files --disable-click-to-play --disable-hang-monitor --disable-metrics --disable-popup-blocking --disable-prompt-on-repost --enable-desktop-notifications --enable-experimental-extension-apis --enable-extension-apps --enable-extension-timeline-api --enable-geolocation --enable-indexed-database --enable-nacl --enable-native-web-workers --enable-search-provider-api-v2 --force-internal-pdf --incognito --js-flags=&quot;--expose-gc&quot; --new-window --no-default-browser-check --no-first-run --no-process-singleton-dialog --no-sandbox --single-process --enable-gpu-plugin --enable-gpu-rendering --enable-accelerated-compositing --enable-webgl --enable-accelerated-2d-canvas --user-data-dir=/usr/local/google/home/aarya/FuzzTmp/t71 

ASAN:SIGSEGV
==17326== ERROR: AddressSanitizer crashed on unknown address 0x0000000000000000 (pc 0x7f423c22408c sp 0x7f421b2d0660 bp 0x7f421b2d0690 ax (nil) T12)
AddressSanitizer can not provide additional info. ABORTING
    #2 0x7f423c1c0e7d in WebCore::HTMLTreeBuilder::processEndTagForInBody(WebCore::AtomicHTMLToken&amp;) 
    #3 0x7f423c1a618e in WebCore::HTMLTreeBuilder::processEndTag(WebCore::AtomicHTMLToken&amp;) 
    #4 0x7f423c19d404 in WebCore::HTMLTreeBuilder::processToken(WebCore::AtomicHTMLToken&amp;) 
    #5 0x7f423c19cf95 in WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken(WebCore::AtomicHTMLToken&amp;) 
    #6 0x7f423c19ce7b in WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&amp;) 
    #7 0x7f423c1536ac in WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) 
    #8 0x7f423c155254 in WebCore::HTMLDocumentParser::append(WebCore::SegmentedString const&amp;) 
    #9 0x7f423eab0f06 in WebCore::DecodedDataDocumentParser::flush(WebCore::DocumentWriter*) 
    #10 0x7f423cab5af9 in WebCore::DocumentWriter::endIfNotLoadingMainResource() 
    #11 0x7f423caf4e09 in WebCore::FrameLoader::finishedLoading() 
    #12 0x7f423cb199e0 in WebCore::MainResourceLoader::didFinishLoading(double) 
    #13 0x7f423d9c6039 in webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest(net::URLRequestStatus const&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, base::Time const&amp;) 
    #14 0x7f423b2c9aca in bool IPC::MessageWithTuple&lt;Tuple4&lt;int, net::URLRequestStatus, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, base::Time&gt; &gt;::Dispatch&lt;ResourceDispatcher, ResourceDispatcher, void (ResourceDispatcher::*)(int, net::URLRequestStatus const&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, base::Time const&amp;)&gt;(IPC::Message const*, ResourceDispatcher*, ResourceDispatcher*, void (ResourceDispatcher::*)(int, net::URLRequestStatus const&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, base::Time const&amp;)) 
    #15 0x7f423b2c76b0 in ResourceDispatcher::DispatchMessage(IPC::Message const&amp;) 
    #16 0x7f423b2c5489 in ResourceDispatcher::OnMessageReceived(IPC::Message const&amp;) 
    #17 0x7f423b1ea930 in ChildThread::OnMessageReceived(IPC::Message const&amp;) 
    #18 0x7f423b324894 in IPC::ChannelProxy::Context::OnDispatchMessage(IPC::Message const&amp;) 
    #19 0x7f4239db0119 in base::subtle::TaskClosureAdapter::Run() 
    #20 0x7f4239d4129c in MessageLoop::RunTask(MessageLoop::PendingTask const&amp;) 
    #21 0x7f4239d418a2 in MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&amp;) 
    #22 0x7f4239d42aee in MessageLoop::DoWork() 
    #23 0x7f4239d4bf98 in base::MessagePumpDefault::Run(base::MessagePump::Delegate*) 
    #24 0x7f4239d401c7 in MessageLoop::RunInternal() 
    #25 0x7f4239d3e42e in MessageLoop::Run() 
    #26 0x7f4239db38c0 in base::Thread::ThreadMain() 
    #27 0x7f4239db24fc in base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:0
    #28 0x7f423ee9b1e7 in AsanThread::ThreadStart() /home/kcc/asan/asan/asan_thread.cc:98

    #0 0x7f423c22408c in WebCore::HTMLElementStack::popUntilPopped(WebCore::Element*) 
    #1 0x7f423c1c0e7d in WebCore::HTMLTreeBuilder::processEndTagForInBody(WebCore::AtomicHTMLToken&amp;) 
    #2 0x7f423c1a618e in WebCore::HTMLTreeBuilder::processEndTag(WebCore::AtomicHTMLToken&amp;) 
    #3 0x7f423c19d404 in WebCore::HTMLTreeBuilder::processToken(WebCore::AtomicHTMLToken&amp;) 
    #4 0x7f423c19cf95 in WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken(WebCore::AtomicHTMLToken&amp;) 
    #5 0x7f423c19ce7b in WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&amp;) 
    #6 0x7f423c1536ac in WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) 
    #7 0x7f423c155254 in WebCore::HTMLDocumentParser::append(WebCore::SegmentedString const&amp;) 
    #8 0x7f423eab0f06 in WebCore::DecodedDataDocumentParser::flush(WebCore::DocumentWriter*) 
    #9 0x7f423cab5af9 in WebCore::DocumentWriter::endIfNotLoadingMainResource() 
    #10 0x7f423caf4e09 in WebCore::FrameLoader::finishedLoading() 
    #11 0x7f423cb199e0 in WebCore::MainResourceLoader::didFinishLoading(double) 
    #12 0x7f423d9c6039 in webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest(net::URLRequestStatus const&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, base::Time const&amp;) 
    #13 0x7f423b2c9aca in bool IPC::MessageWithTuple&lt;Tuple4&lt;int, net::URLRequestStatus, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, base::Time&gt; &gt;::Dispatch&lt;ResourceDispatcher, ResourceDispatcher, void (ResourceDispatcher::*)(int, net::URLRequestStatus const&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, base::Time const&amp;)&gt;(IPC::Message const*, ResourceDispatcher*, ResourceDispatcher*, void (ResourceDispatcher::*)(int, net::URLRequestStatus const&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, base::Time const&amp;)) 
    #14 0x7f423b2c76b0 in ResourceDispatcher::DispatchMessage(IPC::Message const&amp;) 
    #15 0x7f423b2c5489 in ResourceDispatcher::OnMessageReceived(IPC::Message const&amp;) 
    #16 0x7f423b1ea930 in ChildThread::OnMessageReceived(IPC::Message const&amp;) 
    #17 0x7f423b324894 in IPC::ChannelProxy::Context::OnDispatchMessage(IPC::Message const&amp;) 
    #18 0x7f4239db0119 in base::subtle::TaskClosureAdapter::Run() 
    #19 0x7f4239d4129c in MessageLoop::RunTask(MessageLoop::PendingTask const&amp;) 
    #20 0x7f4239d418a2 in MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&amp;) 
    #21 0x7f4239d42aee in MessageLoop::DoWork() 
    #22 0x7f4239d4bf98 in base::MessagePumpDefault::Run(base::MessagePump::Delegate*) 
    #23 0x7f4239d401c7 in MessageLoop::RunInternal() 
    #24 0x7f4239d3e42e in MessageLoop::Run() 
    #25 0x7f4239db38c0 in base::Thread::ThreadMain() 
    #26 0x7f4239db24fc in base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:0
    #27 0x7f423ee9b1e7 in AsanThread::ThreadStart() /home/kcc/asan/asan/asan_thread.cc:98
    #28 0x7f423436e9ca in start_thread 
    #29 0x7f42322cc70d in __clone 
Stats: 0M malloced (0M for red zones) by 0 calls
Stats: 0M realloced by 0 calls
Stats: 0M freed by 0 calls
Stats: 0M really freed by 0 calls
Stats: 0M (0 pages) mmaped in 0 calls
 mmaps   by size:
 mallocs by size:
 frees   by size:
 rfrees  by size:
Stats: malloc large: 0 small slow: 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450060</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-11 15:00:15 -0700</bug_when>
    <thetext>I can look at this once I&apos;m done gardening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483608</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-13 16:15:19 -0700</bug_when>
    <thetext>These still repro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527812</commentid>
    <comment_count>3</comment_count>
      <attachid>120711</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-28 17:32:41 -0800</bug_when>
    <thetext>Created attachment 120711
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527814</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-28 18:19:55 -0800</bug_when>
    <thetext>The underly issue with Testcase1 is that we&apos;re re-entering the tree builder.  We&apos;ve done a bunch of point fixes around tree builder re-entrancy, but neither the implementation nor the specification are really designed to handle re-entrancy.

Firefox avoids this problem by putting the parser on its own thread.  I don&apos;t think we&apos;re quite ready to do that yet (although we will eventually, presumably, as computers become ever more parallel).  The approach in this patch is to queue up the DOM mutations and actually perform them on a shallower stack.  That&apos;s essentially the approach we&apos;ve used for executing &lt;scripts&gt;.

This patch seems to work pretty well.  I need to do some more performance tuning to make sure we&apos;re not churning reference counts, but I believe the approach is sound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527994</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-29 12:06:28 -0800</bug_when>
    <thetext>Currently this patch is a 36% slowdown on the html-parser benchmark.  Looks like I&apos;ve got some more work to do here.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528037</commentid>
    <comment_count>6</comment_count>
      <attachid>120771</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-29 15:55:19 -0800</bug_when>
    <thetext>Created attachment 120771
ugly, but fast</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528039</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-29 15:56:21 -0800</bug_when>
    <thetext>This lastest patch is within a couple percent of our original performance.  Next step: beautification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529096</commentid>
    <comment_count>8</comment_count>
      <attachid>121005</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 15:20:37 -0800</bug_when>
    <thetext>Created attachment 121005
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529099</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 15:21:28 -0800</bug_when>
    <thetext>This patch isn&apos;t really 100% done.  I still need to add the test and do some final performance tuning, but I wanted to upload it for review to make sure it&apos;s on the right track.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529157</commentid>
    <comment_count>10</comment_count>
      <attachid>121005</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-03 16:43:17 -0800</bug_when>
    <thetext>Comment on attachment 121005
Patch

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

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:136
&gt; +    AttachmentQueue queue;
&gt; +    queue.swap(m_attachmentQueue);

You might note why we do a swap here.  Maybe it&apos;s obvious to other readers, but it seems subtle yet important that you&apos;re doing this to allow executeTask to cause reentry.

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:252
&gt; +        // We need to actually add the Doctype node to the DOM.
&gt; +        executeQueuedTasks();
&gt;          m_document-&gt;setCompatibilityModeFromDoctype();

You should probably add a FIXME here about ways to improve this.  Could this cause some of the same rentrancy troubles as before?

&gt; Source/WebCore/html/parser/HTMLConstructionSite.h:148
&gt; +    typedef Vector&lt;HTMLConstructionSiteTask, 5&gt; AttachmentQueue;

You should note here that it&apos;s rare to have more than one item in this queue.  You should also note when things get queued.

As you explained in person, this happens when a single token can cause more than one DOM node (such as reconstructing active formatting elements, or adding implicit elements like &lt;head&gt;, or &lt;tbody&gt;, etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529158</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-03 16:44:14 -0800</bug_when>
    <thetext>finishParsingChildren can do all sorts of stuff, iirc.  Possibly even execute script (for SVG).  It seems dangerous that we&apos;re calling it synchronously and possibly reentering from such.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529185</commentid>
    <comment_count>12</comment_count>
      <attachid>121023</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 17:12:58 -0800</bug_when>
    <thetext>Created attachment 121023
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529244</commentid>
    <comment_count>13</comment_count>
      <attachid>121023</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 18:58:01 -0800</bug_when>
    <thetext>Comment on attachment 121023
Patch for landing

Clearing flags on attachment: 121023

Committed r104000: &lt;http://trac.webkit.org/changeset/104000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529245</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 18:58:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529386</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-03 23:44:44 -0800</bug_when>
    <thetext>It made 15 tests assert on SL, GTK, Qt:
http://build.webkit.org/results/SnowLeopard%20Intel%20Debug%20%28Tests%29/r104000%20%284100%29/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529389</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-04 00:15:30 -0800</bug_when>
    <thetext>Fixed by http://trac.webkit.org/changeset/104015</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120711</attachid>
            <date>2011-12-28 17:32:41 -0800</date>
            <delta_ts>2011-12-29 15:55:14 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-66101-20111228173240.patch</filename>
            <type>text/plain</type>
            <size>9467</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAJKHJldmlzaW9uIDEwMzc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNDkgKzkx
LDQ1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkVHlwZT4KIFBhc3NSZWZQdHI8Q2hpbGRUeXBl
PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoKENvbnRhaW5lck5vZGUqIHJhd1BhcmVudCwg
UGFzc1JlZlB0cjxDaGlsZFR5cGU+IHBycENoaWxkKQogewogICAgIFJlZlB0cjxDaGlsZFR5cGU+
IGNoaWxkID0gcHJwQ2hpbGQ7Ci0gICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IHJh
d1BhcmVudDsKIAotICAgIC8vIEZJWE1FOiBJdCdzIGNvbmZ1c2luZyB0aGF0IEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjphdHRhY2ggZG9lcyB0aGUgbWFnaWMKLSAgICAvLyByZWRpcmVjdGlvbiB0byB0
aGUgZm9zdGVyIHBhcmVudCBidXQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaEF0U2l0ZQot
ICAgIC8vIGRvZXNuJ3QuIEl0IGZlZWxzIGxpa2Ugd2UncmUgbWlzc2luZyBhIGNvbmNlcHQgc29t
ZWhvdy4KKyAgICBBdHRhY2htZW50VGFzayB0YXNrOworICAgIHRhc2sucGFyZW50ID0gcmF3UGFy
ZW50OworICAgIHRhc2suY2hpbGQgPSBjaGlsZDsKKwogICAgIGlmIChzaG91bGRGb3N0ZXJQYXJl
bnQoKSkgewotICAgICAgICBmb3N0ZXJQYXJlbnQoY2hpbGQuZ2V0KCkpOwotICAgICAgICBBU1NF
UlQoY2hpbGQtPmF0dGFjaGVkKCkgfHwgIWNoaWxkLT5wYXJlbnROb2RlKCkgfHwgIWNoaWxkLT5w
YXJlbnROb2RlKCktPmF0dGFjaGVkKCkpOworICAgICAgICBmb3N0ZXJQYXJlbnQodGFzay5jaGls
ZC5nZXQoKSk7CiAgICAgICAgIHJldHVybiBjaGlsZC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAg
Ly8gQWRkIGFzIGEgc2libGluZyBvZiB0aGUgcGFyZW50IGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUg
bWF4aW11bSBkZXB0aCBhbGxvd2VkLgogICAgIGlmIChtX29wZW5FbGVtZW50cy5zdGFja0RlcHRo
KCkgPiBtX21heGltdW1ET01UcmVlRGVwdGgpCi0gICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50Tm9kZSgpOwotCi0gICAgcGFyZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgICAg
IHRhc2sucGFyZW50ID0gdGFzay5wYXJlbnQtPnBhcmVudE5vZGUoKTsKIAotICAgIC8vIEFuIGV2
ZW50IGhhbmRsZXIgKERPTSBNdXRhdGlvbiwgYmVmb3JlbG9hZCwgZXQgYWwuKSBjb3VsZCBoYXZl
IHJlbW92ZWQKLSAgICAvLyB0aGUgY2hpbGQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbid0IHRy
eSBhdHRhY2hpbmcgaXQuCi0gICAgaWYgKCFjaGlsZC0+cGFyZW50Tm9kZSgpKQotICAgICAgICBy
ZXR1cm4gY2hpbGQucmVsZWFzZSgpOwotCi0gICAgaWYgKHBhcmVudC0+YXR0YWNoZWQoKSAmJiAh
Y2hpbGQtPmF0dGFjaGVkKCkpCi0gICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAgICBtX2F0dGFj
aG1lbnRRdWV1ZS5hcHBlbmQodGFzayk7CiAgICAgcmV0dXJuIGNoaWxkLnJlbGVhc2UoKTsKIH0K
IAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQXRTaXRlKGNvbnN0IEF0dGFjaG1l
bnRTaXRlJiBzaXRlLCBQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQordm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6ZXhlY3V0ZVF1ZXVlZFRhc2tzKCkKIHsKLSAgICAvLyBGSVhNRTogSXQncyB1
bmZvcnR1bmF0ZSB0aGF0IHdlIG5lZWQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byBjaGlsZAotICAg
IC8vIGhlcmUgdG8gY2FsbCBhdHRhY2goKS4gIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGV0aGVy
IHdlIGNhbiByZWx5IG9uCi0gICAgLy8gfHNpdGUucGFyZW50fCB0byBob2xkIGEgcmVmIGF0IHRo
aXMgcG9pbnQuCi0gICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisgICAgQXR0YWNo
bWVudFF1ZXVlIHF1ZXVlOworICAgIHF1ZXVlLnN3YXAobV9hdHRhY2htZW50UXVldWUpOwogCi0g
ICAgaWYgKHNpdGUubmV4dENoaWxkKQotICAgICAgICBzaXRlLnBhcmVudC0+cGFyc2VySW5zZXJ0
QmVmb3JlKGNoaWxkLCBzaXRlLm5leHRDaGlsZCk7Ci0gICAgZWxzZQotICAgICAgICBzaXRlLnBh
cmVudC0+cGFyc2VyQWRkQ2hpbGQoY2hpbGQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cXVldWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXR0YWNobWVudFRhc2smIHRhc2sgPSBxdWV1
ZVtpXTsKKworICAgICAgICBpZiAodGFzay5uZXh0Q2hpbGQpCisgICAgICAgICAgICB0YXNrLnBh
cmVudC0+cGFyc2VySW5zZXJ0QmVmb3JlKHRhc2suY2hpbGQuZ2V0KCksIHRhc2submV4dENoaWxk
LmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGFzay5wYXJlbnQtPnBhcnNlckFk
ZENoaWxkKHRhc2suY2hpbGQuZ2V0KCkpOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgcnVuIGZy
b20gYmVmb3JlbG9hZCAob3IgRE9NIE11dGF0aW9uIG9yIGV2ZW50IGhhbmRsZXJzKQorICAgICAg
ICAvLyBtaWdodCBoYXZlIHJlbW92ZWQgdGhlIGNoaWxkLCBpbiB3aGljaCBjYXNlIHdlIHNob3Vs
ZCBub3QgYXR0YWNoIGl0LgorCisgICAgICAgIGlmICh0YXNrLmNoaWxkLT5wYXJlbnROb2RlKCkg
JiYgdGFzay5wYXJlbnQtPmF0dGFjaGVkKCkgJiYgIXRhc2suY2hpbGQtPmF0dGFjaGVkKCkpCisg
ICAgICAgICAgICB0YXNrLmNoaWxkLT5hdHRhY2goKTsKKyAgICB9CiAKLSAgICAvLyBKYXZhU2Ny
aXB0IHJ1biBmcm9tIGJlZm9yZWxvYWQgKG9yIERPTSBNdXRhdGlvbiBvciBldmVudCBoYW5kbGVy
cykKLSAgICAvLyBtaWdodCBoYXZlIHJlbW92ZWQgdGhlIGNoaWxkLCBpbiB3aGljaCBjYXNlIHdl
IHNob3VsZCBub3QgYXR0YWNoIGl0LgotICAgIGlmIChjaGlsZC0+cGFyZW50Tm9kZSgpICYmIHNp
dGUucGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSkKLSAgICAgICAgY2hp
bGQtPmF0dGFjaCgpOworICAgIC8vIFdlIG1pZ2h0IGJlIGRldGFjaGVkIG5vdy4KIH0KIAogSFRN
TENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50KiBkb2N1bWVu
dCwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCkKQEAgLTM0MCwxMSArMzM2LDExIEBAIHZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ24KIAogdm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0
ZXNwYWNlTW9kZSB3aGl0ZXNwYWNlTW9kZSkKIHsKLSAgICBBdHRhY2htZW50U2l0ZSBzaXRlOwot
ICAgIHNpdGUucGFyZW50ID0gY3VycmVudE5vZGUoKTsKLSAgICBzaXRlLm5leHRDaGlsZCA9IDA7
CisgICAgQXR0YWNobWVudFRhc2sgdGFzazsKKyAgICB0YXNrLnBhcmVudCA9IGN1cnJlbnROb2Rl
KCk7CisgICAgdGFzay5uZXh0Q2hpbGQgPSAwOwogICAgIGlmIChzaG91bGRGb3N0ZXJQYXJlbnQo
KSkKLSAgICAgICAgZmluZEZvc3RlclNpdGUoc2l0ZSk7CisgICAgICAgIGZpbmRGb3N0ZXJTaXRl
KHRhc2spOwogCiAgICAgLy8gU3RyaW5ncyBjb21wb3NlZCBlbnRpcmVseSBvZiB3aGl0ZXNwYWNl
IGFyZSBsaWtlbHkgdG8gYmUgcmVwZWF0ZWQuCiAgICAgLy8gVHVybiB0aGVtIGludG8gQXRvbWlj
U3RyaW5nIHNvIHdlIHNoYXJlIGEgc2luZ2xlIHN0cmluZyBmb3IgZWFjaC4KQEAgLTM1Niw3ICsz
NTIsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kCiAgICAgLy8g
RklYTUU6IFNwbGl0dGluZyB0ZXh0IG5vZGVzIGludG8gc21hbGxlciBjaHVua3MgY29udHJhZGlj
dHMgSFRNTDUgc3BlYywgYnV0IGlzIGN1cnJlbnRseSBuZWNlc3NhcnkKICAgICAvLyBmb3IgcGVy
Zm9ybWFuY2UsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
ODk4Pi4KIAotICAgIE5vZGUqIHByZXZpb3VzQ2hpbGQgPSBzaXRlLm5leHRDaGlsZCA/IHNpdGUu
bmV4dENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IHNpdGUucGFyZW50LT5sYXN0Q2hpbGQoKTsK
KyAgICBOb2RlKiBwcmV2aW91c0NoaWxkID0gdGFzay5uZXh0Q2hpbGQgPyB0YXNrLm5leHRDaGls
ZC0+cHJldmlvdXNTaWJsaW5nKCkgOiB0YXNrLnBhcmVudC0+bGFzdENoaWxkKCk7CiAgICAgaWYg
KHByZXZpb3VzQ2hpbGQgJiYgcHJldmlvdXNDaGlsZC0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBXZSdyZSBvbmx5IHN1cHBvc2VkIHRvIGFwcGVuZCB0byB0aGlzIHRleHQgbm9k
ZSBpZiBpdAogICAgICAgICAvLyB3YXMgdGhlIGxhc3QgdGV4dCBub2RlIGluc2VydGVkIGJ5IHRo
ZSBwYXJzZXIuCkBAIC0zNjUsMTYgKzM2MSwxNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRUZXh0Tm9kCiAgICAgfQogCiAgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IGNo
YXJhY3RlcnMubGVuZ3RoKCkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gVGV4
dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0KHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRV
c2VBdG9taWNTdHJpbmcgPyBBdG9taWNTdHJpbmcoY2hhcmFjdGVycykuc3RyaW5nKCkgOiBjaGFy
YWN0ZXJzLCBjdXJyZW50UG9zaXRpb24pOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUg
PSBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQodGFzay5wYXJlbnQtPmRvY3VtZW50KCksIHNo
b3VsZFVzZUF0b21pY1N0cmluZyA/IEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzKS5zdHJpbmcoKSA6
IGNoYXJhY3RlcnMsIGN1cnJlbnRQb3NpdGlvbik7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgYSB3
aG9sZSBzdHJpbmcgb2YgdW5icmVha2FibGUgY2hhcmFjdGVycyB0aGUgYWJvdmUgY291bGQgbGVh
ZCB0byBhbiBpbmZpbml0ZSBsb29wLiBFeGNlZWRpbmcgdGhlIGxlbmd0aCBsaW1pdCBpcyB0aGUg
bGVzc2VyIGV2aWwuCiAgICAgICAgIGlmICghdGV4dE5vZGUtPmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgc3Vic3RyaW5nID0gY2hhcmFjdGVycy5zdWJzdHJpbmcoY3VycmVudFBvc2l0
aW9uKTsKLSAgICAgICAgICAgIHRleHROb2RlID0gVGV4dDo6Y3JlYXRlKHNpdGUucGFyZW50LT5k
b2N1bWVudCgpLCBzaG91bGRVc2VBdG9taWNTdHJpbmcgPyBBdG9taWNTdHJpbmcoc3Vic3RyaW5n
KS5zdHJpbmcoKSA6IHN1YnN0cmluZyk7CisgICAgICAgICAgICB0ZXh0Tm9kZSA9IFRleHQ6OmNy
ZWF0ZSh0YXNrLnBhcmVudC0+ZG9jdW1lbnQoKSwgc2hvdWxkVXNlQXRvbWljU3RyaW5nID8gQXRv
bWljU3RyaW5nKHN1YnN0cmluZykuc3RyaW5nKCkgOiBzdWJzdHJpbmcpOwogICAgICAgICB9CiAK
ICAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IHRleHROb2RlLT5sZW5ndGgoKTsKICAgICAgICAg
QVNTRVJUKGN1cnJlbnRQb3NpdGlvbiA8PSBjaGFyYWN0ZXJzLmxlbmd0aCgpKTsKLSAgICAgICAg
YXR0YWNoQXRTaXRlKHNpdGUsIHRleHROb2RlLnJlbGVhc2UoKSk7CisgICAgICAgIHRhc2suY2hp
bGQgPSB0ZXh0Tm9kZS5yZWxlYXNlKCk7CisgICAgICAgIG1fYXR0YWNobWVudFF1ZXVlLmFwcGVu
ZCh0YXNrKTsKICAgICB9CiB9CiAKQEAgLTQ4MSwyMyArNDc4LDIxIEBAIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6OmdlbmVyYXRlSW1wbGkKICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7
CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmZpbmRGb3N0ZXJTaXRlKEF0dGFjaG1l
bnRTaXRlJiBzaXRlKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZmluZEZvc3RlclNpdGUo
QXR0YWNobWVudFRhc2smIHRhc2spCiB7CiAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJl
Y29yZCogbGFzdFRhYmxlRWxlbWVudFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGFi
bGVUYWcubG9jYWxOYW1lKCkpOwogICAgIGlmIChsYXN0VGFibGVFbGVtZW50UmVjb3JkKSB7CiAg
ICAgICAgIEVsZW1lbnQqIGxhc3RUYWJsZUVsZW1lbnQgPSBsYXN0VGFibGVFbGVtZW50UmVjb3Jk
LT5lbGVtZW50KCk7CiAgICAgICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSBsYXN0VGFi
bGVFbGVtZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIHNpdGUucGFyZW50ID0gcGFy
ZW50OwotICAgICAgICAgICAgc2l0ZS5uZXh0Q2hpbGQgPSBsYXN0VGFibGVFbGVtZW50OworICAg
ICAgICAgICAgdGFzay5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgICAgICB0YXNrLm5leHRDaGls
ZCA9IGxhc3RUYWJsZUVsZW1lbnQ7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgc2l0ZS5wYXJlbnQgPSBsYXN0VGFibGVFbGVtZW50UmVjb3JkLT5uZXh0KCktPmVsZW1l
bnQoKTsKLSAgICAgICAgc2l0ZS5uZXh0Q2hpbGQgPSAwOworICAgICAgICB0YXNrLnBhcmVudCA9
IGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIC8vIEZyYWdtZW50IGNhc2UKLSAgICBzaXRlLnBhcmVudCA9IG1fb3Bl
bkVsZW1lbnRzLnJvb3ROb2RlKCk7IC8vIERvY3VtZW50RnJhZ21lbnQKLSAgICBzaXRlLm5leHRD
aGlsZCA9IDA7CisgICAgdGFzay5wYXJlbnQgPSBtX29wZW5FbGVtZW50cy5yb290Tm9kZSgpOyAv
LyBEb2N1bWVudEZyYWdtZW50CiB9CiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNob3Vs
ZEZvc3RlclBhcmVudCgpIGNvbnN0CkBAIC01MDksOSArNTA0LDEwIEBAIGJvb2wgSFRNTENvbnN0
cnVjdGlvblNpdGU6OnNob3VsZEZvc3RlclAKIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
Zm9zdGVyUGFyZW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgQXR0YWNobWVudFNpdGUgc2l0ZTsKLSAg
ICBmaW5kRm9zdGVyU2l0ZShzaXRlKTsKLSAgICBhdHRhY2hBdFNpdGUoc2l0ZSwgbm9kZSk7Cisg
ICAgQXR0YWNobWVudFRhc2sgdGFzazsKKyAgICBmaW5kRm9zdGVyU2l0ZSh0YXNrKTsKKyAgICB0
YXNrLmNoaWxkID0gbm9kZTsKKyAgICBtX2F0dGFjaG1lbnRRdWV1ZS5hcHBlbmQodGFzayk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuaAkocmV2aXNpb24gMTAzNzgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUs
NyBAQCBwdWJsaWM6CiAgICAgfkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2b2lkIGRl
dGFjaCgpOworICAgIHZvaWQgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAKICAgICB2b2lkIGluc2Vy
dERvY3R5cGUoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBpbnNlcnRDb21tZW50KEF0b21p
Y0hUTUxUb2tlbiYpOwpAQCAtMTIxLDE3ICsxMjIsMTkgQEAgcHVibGljOgogICAgIH07CiAKIHBy
aXZhdGU6Ci0gICAgc3RydWN0IEF0dGFjaG1lbnRTaXRlIHsKLSAgICAgICAgQ29udGFpbmVyTm9k
ZSogcGFyZW50OwotICAgICAgICBOb2RlKiBuZXh0Q2hpbGQ7CisgICAgc3RydWN0IEF0dGFjaG1l
bnRUYXNrIHsKKyAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudDsKKyAgICAgICAg
UmVmUHRyPE5vZGU+IG5leHRDaGlsZDsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGNoaWxkOwogICAg
IH07CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxBdHRhY2htZW50VGFzaywgNT4gQXR0YWNobWVudFF1
ZXVlOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRUeXBlPgogICAgIFBhc3NSZWZQdHI8
Q2hpbGRUeXBlPiBhdHRhY2goQ29udGFpbmVyTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPENoaWxk
VHlwZT4gY2hpbGQpOwogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gYXR0YWNoVG9DdXJyZW50KFBh
c3NSZWZQdHI8RWxlbWVudD4pOwogCi0gICAgdm9pZCBhdHRhY2hBdFNpdGUoY29uc3QgQXR0YWNo
bWVudFNpdGUmLCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKTsKLSAgICB2b2lkIGZpbmRGb3N0ZXJT
aXRlKEF0dGFjaG1lbnRTaXRlJik7CisgICAgdm9pZCBmaW5kRm9zdGVyU2l0ZShBdHRhY2htZW50
VGFzayYpOwogCiAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxlbWVudEZyb21T
YXZlZEVsZW1lbnQoRWxlbWVudCopOwogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7
CkBAIC0xNTEsNiArMTU0LDggQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIEhUTUxFbGVtZW50U3Rh
Y2sgbV9vcGVuRWxlbWVudHM7CiAgICAgbXV0YWJsZSBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzOwogCisgICAgQXR0YWNobWVudFF1ZXVlIG1fYXR0
YWNobWVudFF1ZXVlOworCiAgICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fZnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uOwogICAgIGJvb2wgbV9pc1BhcnNpbmdGcmFnbWVudDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CShyZXZpc2lvbiAxMDM3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzgsNiArNDc4LDkgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tQQogCiAgICAgbV9wYXJzZXItPnRva2VuaXpl
cigpLT5zZXRGb3JjZU51bGxDaGFyYWN0ZXJSZXBsYWNlbWVudChtX2luc2VydGlvbk1vZGUgPT0g
VGV4dE1vZGUgfHwgaW5Gb3JlaWduQ29udGVudCk7CiAgICAgbV9wYXJzZXItPnRva2VuaXplcigp
LT5zZXRTaG91bGRBbGxvd0NEQVRBKGluRm9yZWlnbkNvbnRlbnQpOworCisgICAgbV90cmVlLmV4
ZWN1dGVRdWV1ZWRUYXNrcygpOworICAgIC8vIFdlIG1pZ2h0IGJlIGRldGFjaGVkIG5vdy4KIH0K
IAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120771</attachid>
            <date>2011-12-29 15:55:19 -0800</date>
            <delta_ts>2012-01-03 15:20:33 -0800</delta_ts>
            <desc>ugly, but fast</desc>
            <filename>bug-66101-20111229155518.patch</filename>
            <type>text/plain</type>
            <size>12021</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAJKHJldmlzaW9uIDEwMzgxMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNTMgKzg3
LDU1IEBAIGlubGluZSBib29sIGlzQWxsV2hpdGVzcGFjZShjb25zdCBTdHJpbmcKIAogfSAvLyBu
YW1lc3BhY2UKIAorc3RhdGljIGlubGluZSB2b2lkIGV4ZWN1dGVUYXNrKEhUTUxDb25zdHJ1Y3Rp
b25TaXRlVGFzayYgdGFzaykKK3sKKyAgICBpZiAodGFzay5uZXh0Q2hpbGQpCisgICAgICAgIHRh
c2sucGFyZW50LT5wYXJzZXJJbnNlcnRCZWZvcmUodGFzay5jaGlsZC5nZXQoKSwgdGFzay5uZXh0
Q2hpbGQpOworICAgIGVsc2UKKyAgICAgICAgdGFzay5wYXJlbnQtPnBhcnNlckFkZENoaWxkKHRh
c2suY2hpbGQuZ2V0KCkpOworCisgICAgLy8gSmF2YVNjcmlwdCBydW4gZnJvbSBiZWZvcmVsb2Fk
IChvciBET00gTXV0YXRpb24gb3IgZXZlbnQgaGFuZGxlcnMpCisgICAgLy8gbWlnaHQgaGF2ZSBy
ZW1vdmVkIHRoZSBjaGlsZCwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgbm90IGF0dGFjaCBpdC4K
KworICAgIGlmICh0YXNrLmNoaWxkLT5wYXJlbnROb2RlKCkgJiYgdGFzay5wYXJlbnQtPmF0dGFj
aGVkKCkgJiYgIXRhc2suY2hpbGQtPmF0dGFjaGVkKCkpCisgICAgICAgIHRhc2suY2hpbGQtPmF0
dGFjaCgpOworCisgICAgdGFzay5jaGlsZC0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKKworICAg
IGlmICh0YXNrLnNlbGZDbG9zaW5nKQorICAgICAgICB0YXNrLmNoaWxkLT5maW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRUeXBlPgotUGFzc1JlZlB0
cjxDaGlsZFR5cGU+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2goQ29udGFpbmVyTm9kZSog
cmF3UGFyZW50LCBQYXNzUmVmUHRyPENoaWxkVHlwZT4gcHJwQ2hpbGQpCitQYXNzUmVmUHRyPENo
aWxkVHlwZT4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaChDb250YWluZXJOb2RlKiBwYXJl
bnQsIFBhc3NSZWZQdHI8Q2hpbGRUeXBlPiBwcnBDaGlsZCkKIHsKICAgICBSZWZQdHI8Q2hpbGRU
eXBlPiBjaGlsZCA9IHBycENoaWxkOwotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQg
PSByYXdQYXJlbnQ7CiAKLSAgICAvLyBGSVhNRTogSXQncyBjb25mdXNpbmcgdGhhdCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6YXR0YWNoIGRvZXMgdGhlIG1hZ2ljCi0gICAgLy8gcmVkaXJlY3Rpb24g
dG8gdGhlIGZvc3RlciBwYXJlbnQgYnV0IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hBdFNp
dGUKLSAgICAvLyBkb2Vzbid0LiBJdCBmZWVscyBsaWtlIHdlJ3JlIG1pc3NpbmcgYSBjb25jZXB0
IHNvbWVob3cuCisgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRhc2s7CisgICAgdGFzay5w
YXJlbnQgPSBwYXJlbnQ7CisgICAgdGFzay5jaGlsZCA9IGNoaWxkLmdldCgpOworCiAgICAgaWYg
KHNob3VsZEZvc3RlclBhcmVudCgpKSB7Ci0gICAgICAgIGZvc3RlclBhcmVudChjaGlsZC5nZXQo
KSk7Ci0gICAgICAgIEFTU0VSVChjaGlsZC0+YXR0YWNoZWQoKSB8fCAhY2hpbGQtPnBhcmVudE5v
ZGUoKSB8fCAhY2hpbGQtPnBhcmVudE5vZGUoKS0+YXR0YWNoZWQoKSk7CisgICAgICAgIGZvc3Rl
clBhcmVudCh0YXNrLmNoaWxkKTsKICAgICAgICAgcmV0dXJuIGNoaWxkLnJlbGVhc2UoKTsKICAg
ICB9CiAKICAgICAvLyBBZGQgYXMgYSBzaWJsaW5nIG9mIHRoZSBwYXJlbnQgaWYgd2UgaGF2ZSBy
ZWFjaGVkIHRoZSBtYXhpbXVtIGRlcHRoIGFsbG93ZWQuCiAgICAgaWYgKG1fb3BlbkVsZW1lbnRz
LnN0YWNrRGVwdGgoKSA+IG1fbWF4aW11bURPTVRyZWVEZXB0aCkKLSAgICAgICAgcGFyZW50ID0g
cGFyZW50LT5wYXJlbnROb2RlKCk7Ci0KLSAgICBwYXJlbnQtPnBhcnNlckFkZENoaWxkKGNoaWxk
KTsKLQotICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIgKERPTSBNdXRhdGlvbiwgYmVmb3JlbG9hZCwg
ZXQgYWwuKSBjb3VsZCBoYXZlIHJlbW92ZWQKLSAgICAvLyB0aGUgY2hpbGQsIGluIHdoaWNoIGNh
c2Ugd2Ugc2hvdWxkbid0IHRyeSBhdHRhY2hpbmcgaXQuCi0gICAgaWYgKCFjaGlsZC0+cGFyZW50
Tm9kZSgpKQotICAgICAgICByZXR1cm4gY2hpbGQucmVsZWFzZSgpOworICAgICAgICB0YXNrLnBh
cmVudCA9IHRhc2sucGFyZW50LT5wYXJlbnROb2RlKCk7CiAKLSAgICBpZiAocGFyZW50LT5hdHRh
Y2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSkKLSAgICAgICAgY2hpbGQtPmF0dGFjaCgpOwor
ICAgIG1fYXR0YWNobWVudFF1ZXVlLmFwcGVuZCh0YXNrKTsKICAgICByZXR1cm4gY2hpbGQucmVs
ZWFzZSgpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hBdFNpdGUoY29u
c3QgQXR0YWNobWVudFNpdGUmIHNpdGUsIFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQpCit2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpleGVjdXRlUXVldWVkVGFza3MoKQogewotICAgIC8vIEZJ
WE1FOiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgd2UgbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRv
IGNoaWxkCi0gICAgLy8gaGVyZSB0byBjYWxsIGF0dGFjaCgpLiAgV2Ugc2hvdWxkIGludmVzdGln
YXRlIHdoZXRoZXIgd2UgY2FuIHJlbHkgb24KLSAgICAvLyB8c2l0ZS5wYXJlbnR8IHRvIGhvbGQg
YSByZWYgYXQgdGhpcyBwb2ludC4KLSAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBwcnBDaGlsZDsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXR0YWNobWVudFF1ZXVlLnNpemUoKTsgKytp
KQorICAgICAgICBleGVjdXRlVGFzayhtX2F0dGFjaG1lbnRRdWV1ZVtpXSk7CiAKLSAgICBpZiAo
c2l0ZS5uZXh0Q2hpbGQpCi0gICAgICAgIHNpdGUucGFyZW50LT5wYXJzZXJJbnNlcnRCZWZvcmUo
Y2hpbGQsIHNpdGUubmV4dENoaWxkKTsKLSAgICBlbHNlCi0gICAgICAgIHNpdGUucGFyZW50LT5w
YXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgbV9hdHRhY2htZW50UXVldWUuY2xlYXIoKTsKIAot
ICAgIC8vIEphdmFTY3JpcHQgcnVuIGZyb20gYmVmb3JlbG9hZCAob3IgRE9NIE11dGF0aW9uIG9y
IGV2ZW50IGhhbmRsZXJzKQotICAgIC8vIG1pZ2h0IGhhdmUgcmVtb3ZlZCB0aGUgY2hpbGQsIGlu
IHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBhdHRhY2ggaXQuCi0gICAgaWYgKGNoaWxkLT5wYXJl
bnROb2RlKCkgJiYgc2l0ZS5wYXJlbnQtPmF0dGFjaGVkKCkgJiYgIWNoaWxkLT5hdHRhY2hlZCgp
KQotICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgLy8gV2UgbWlnaHQgYmUgZGV0YWNoZWQg
bm93LgogfQogCiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9j
dW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQpAQCAtMzA2LDcg
KzMwOCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNlbGZDbG8KICAgICAv
LyBOb3JtYWxseSBIVE1MRWxlbWVudFN0YWNrIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGZp
bmlzaFBhcnNpbmdDaGlsZHJlbiwKICAgICAvLyBidXQgc2VsZi1jbG9zaW5nIGVsZW1lbnRzIGFy
ZSBuZXZlciBpbiB0aGUgZWxlbWVudCBzdGFjayBzbyB0aGUgc3RhY2sKICAgICAvLyBkb2Vzbid0
IGdldCBhIGNoYW5jZSB0byB0ZWxsIHRoZW0gdGhhdCB3ZSdyZSBkb25lIHBhcnNpbmcgdGhlaXIg
Y2hpbGRyZW4uCi0gICAgZWxlbWVudC0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgbV9h
dHRhY2htZW50UXVldWUubGFzdCgpLnNlbGZDbG9zaW5nID0gdHJ1ZTsKICAgICAvLyBGSVhNRTog
RG8gd2Ugd2FudCB0byBhY2tub3dsZWRnZSB0aGUgdG9rZW4ncyBzZWxmLWNsb3NpbmcgZmxhZz8K
ICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
L211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCNhY2tub3dsZWRnZS1zZWxmLWNsb3NpbmctZmxh
ZwogfQpAQCAtMzQwLDExICszNDIsMTEgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0Rm9yZWlnbgogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZShj
b25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIFdoaXRlc3BhY2VNb2RlIHdoaXRlc3BhY2VNb2RlKQog
ewotICAgIEF0dGFjaG1lbnRTaXRlIHNpdGU7Ci0gICAgc2l0ZS5wYXJlbnQgPSBjdXJyZW50Tm9k
ZSgpOwotICAgIHNpdGUubmV4dENoaWxkID0gMDsKKyAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZVRh
c2sgdGFzazsKKyAgICB0YXNrLnBhcmVudCA9IGN1cnJlbnROb2RlKCk7CisgICAgdGFzay5uZXh0
Q2hpbGQgPSAwOwogICAgIGlmIChzaG91bGRGb3N0ZXJQYXJlbnQoKSkKLSAgICAgICAgZmluZEZv
c3RlclNpdGUoc2l0ZSk7CisgICAgICAgIGZpbmRGb3N0ZXJTaXRlKHRhc2spOwogCiAgICAgLy8g
U3RyaW5ncyBjb21wb3NlZCBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGFyZSBsaWtlbHkgdG8gYmUg
cmVwZWF0ZWQuCiAgICAgLy8gVHVybiB0aGVtIGludG8gQXRvbWljU3RyaW5nIHNvIHdlIHNoYXJl
IGEgc2luZ2xlIHN0cmluZyBmb3IgZWFjaC4KQEAgLTM1Niw3ICszNTgsNyBAQCB2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kCiAgICAgLy8gRklYTUU6IFNwbGl0dGluZyB0
ZXh0IG5vZGVzIGludG8gc21hbGxlciBjaHVua3MgY29udHJhZGljdHMgSFRNTDUgc3BlYywgYnV0
IGlzIGN1cnJlbnRseSBuZWNlc3NhcnkKICAgICAvLyBmb3IgcGVyZm9ybWFuY2UsIHNlZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODk4Pi4KIAotICAgIE5vZGUq
IHByZXZpb3VzQ2hpbGQgPSBzaXRlLm5leHRDaGlsZCA/IHNpdGUubmV4dENoaWxkLT5wcmV2aW91
c1NpYmxpbmcoKSA6IHNpdGUucGFyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICBOb2RlKiBwcmV2aW91
c0NoaWxkID0gdGFzay5uZXh0Q2hpbGQgPyB0YXNrLm5leHRDaGlsZC0+cHJldmlvdXNTaWJsaW5n
KCkgOiB0YXNrLnBhcmVudC0+bGFzdENoaWxkKCk7CiAgICAgaWYgKHByZXZpb3VzQ2hpbGQgJiYg
cHJldmlvdXNDaGlsZC0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSdyZSBv
bmx5IHN1cHBvc2VkIHRvIGFwcGVuZCB0byB0aGlzIHRleHQgbm9kZSBpZiBpdAogICAgICAgICAv
LyB3YXMgdGhlIGxhc3QgdGV4dCBub2RlIGluc2VydGVkIGJ5IHRoZSBwYXJzZXIuCkBAIC0zNjUs
MTYgKzM2NywxNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kCiAg
ICAgfQogCiAgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IGNoYXJhY3RlcnMubGVuZ3RoKCkp
IHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gVGV4dDo6Y3JlYXRlV2l0aExlbmd0
aExpbWl0KHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRVc2VBdG9taWNTdHJpbmcgPyBB
dG9taWNTdHJpbmcoY2hhcmFjdGVycykuc3RyaW5nKCkgOiBjaGFyYWN0ZXJzLCBjdXJyZW50UG9z
aXRpb24pOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBUZXh0OjpjcmVhdGVXaXRo
TGVuZ3RoTGltaXQodGFzay5wYXJlbnQtPmRvY3VtZW50KCksIHNob3VsZFVzZUF0b21pY1N0cmlu
ZyA/IEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzKS5zdHJpbmcoKSA6IGNoYXJhY3RlcnMsIGN1cnJl
bnRQb3NpdGlvbik7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgYSB3aG9sZSBzdHJpbmcgb2YgdW5i
cmVha2FibGUgY2hhcmFjdGVycyB0aGUgYWJvdmUgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBs
b29wLiBFeGNlZWRpbmcgdGhlIGxlbmd0aCBsaW1pdCBpcyB0aGUgbGVzc2VyIGV2aWwuCiAgICAg
ICAgIGlmICghdGV4dE5vZGUtPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgc3Vic3Ry
aW5nID0gY2hhcmFjdGVycy5zdWJzdHJpbmcoY3VycmVudFBvc2l0aW9uKTsKLSAgICAgICAgICAg
IHRleHROb2RlID0gVGV4dDo6Y3JlYXRlKHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRV
c2VBdG9taWNTdHJpbmcgPyBBdG9taWNTdHJpbmcoc3Vic3RyaW5nKS5zdHJpbmcoKSA6IHN1YnN0
cmluZyk7CisgICAgICAgICAgICB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZSh0YXNrLnBhcmVudC0+
ZG9jdW1lbnQoKSwgc2hvdWxkVXNlQXRvbWljU3RyaW5nID8gQXRvbWljU3RyaW5nKHN1YnN0cmlu
Zykuc3RyaW5nKCkgOiBzdWJzdHJpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgY3VycmVudFBv
c2l0aW9uICs9IHRleHROb2RlLT5sZW5ndGgoKTsKICAgICAgICAgQVNTRVJUKGN1cnJlbnRQb3Np
dGlvbiA8PSBjaGFyYWN0ZXJzLmxlbmd0aCgpKTsKLSAgICAgICAgYXR0YWNoQXRTaXRlKHNpdGUs
IHRleHROb2RlLnJlbGVhc2UoKSk7CisgICAgICAgIHRhc2suY2hpbGQgPSB0ZXh0Tm9kZS5yZWxl
YXNlKCk7CisgICAgICAgIGV4ZWN1dGVUYXNrKHRhc2spOwogICAgIH0KIH0KIApAQCAtNDgxLDIz
ICs0ODQsMjEgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Z2VuZXJhdGVJbXBsaQogICAg
ICAgICBtX29wZW5FbGVtZW50cy5wb3AoKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6ZmluZEZvc3RlclNpdGUoQXR0YWNobWVudFNpdGUmIHNpdGUpCit2b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smIHRhc2sp
CiB7CiAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbGFzdFRhYmxlRWxlbWVu
dFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGFibGVUYWcubG9jYWxOYW1lKCkpOwog
ICAgIGlmIChsYXN0VGFibGVFbGVtZW50UmVjb3JkKSB7CiAgICAgICAgIEVsZW1lbnQqIGxhc3RU
YWJsZUVsZW1lbnQgPSBsYXN0VGFibGVFbGVtZW50UmVjb3JkLT5lbGVtZW50KCk7CiAgICAgICAg
IGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSBsYXN0VGFibGVFbGVtZW50LT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgICAgIHNpdGUucGFyZW50ID0gcGFyZW50OwotICAgICAgICAgICAgc2l0
ZS5uZXh0Q2hpbGQgPSBsYXN0VGFibGVFbGVtZW50OworICAgICAgICAgICAgdGFzay5wYXJlbnQg
PSBwYXJlbnQ7CisgICAgICAgICAgICB0YXNrLm5leHRDaGlsZCA9IGxhc3RUYWJsZUVsZW1lbnQ7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc2l0ZS5wYXJlbnQgPSBs
YXN0VGFibGVFbGVtZW50UmVjb3JkLT5uZXh0KCktPmVsZW1lbnQoKTsKLSAgICAgICAgc2l0ZS5u
ZXh0Q2hpbGQgPSAwOworICAgICAgICB0YXNrLnBhcmVudCA9IGxhc3RUYWJsZUVsZW1lbnRSZWNv
cmQtPm5leHQoKS0+ZWxlbWVudCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEZy
YWdtZW50IGNhc2UKLSAgICBzaXRlLnBhcmVudCA9IG1fb3BlbkVsZW1lbnRzLnJvb3ROb2RlKCk7
IC8vIERvY3VtZW50RnJhZ21lbnQKLSAgICBzaXRlLm5leHRDaGlsZCA9IDA7CisgICAgdGFzay5w
YXJlbnQgPSBtX29wZW5FbGVtZW50cy5yb290Tm9kZSgpOyAvLyBEb2N1bWVudEZyYWdtZW50CiB9
CiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNob3VsZEZvc3RlclBhcmVudCgpIGNvbnN0
CkBAIC01MDcsMTEgKzUwOCwxMyBAQCBib29sIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzaG91bGRG
b3N0ZXJQCiAgICAgICAgICYmIGNhdXNlc0Zvc3RlclBhcmVudGluZyhjdXJyZW50RWxlbWVudCgp
LT50YWdRTmFtZSgpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Zm9zdGVyUGFy
ZW50KE5vZGUqIG5vZGUpCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmb3N0ZXJQYXJlbnQo
UGFzc1JlZlB0cjxOb2RlPiBub2RlKQogewotICAgIEF0dGFjaG1lbnRTaXRlIHNpdGU7Ci0gICAg
ZmluZEZvc3RlclNpdGUoc2l0ZSk7Ci0gICAgYXR0YWNoQXRTaXRlKHNpdGUsIG5vZGUpOworICAg
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrOworICAgIHRhc2submV4dENoaWxkID0gMDsK
KyAgICBmaW5kRm9zdGVyU2l0ZSh0YXNrKTsKKyAgICB0YXNrLmNoaWxkID0gbm9kZTsKKyAgICBl
eGVjdXRlVGFzayh0YXNrKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCShyZXZpc2lvbiAxMDM4MTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCwyOSBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSFRN
TENvbnN0cnVjdGlvblNpdGVUYXNrIHsKKyAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2soKQor
ICAgICAgICA6IHBhcmVudCgwKQorICAgICAgICAsIG5leHRDaGlsZCgwKQorICAgICAgICAsIHNl
bGZDbG9zaW5nKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBDb250YWluZXJOb2RlKiBwYXJl
bnQ7CisgICAgTm9kZSogbmV4dENoaWxkOworICAgIFJlZlB0cjxOb2RlPiBjaGlsZDsKKyAgICBi
b29sIHNlbGZDbG9zaW5nOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3Bh
Y2UgV1RGIHsKK3RlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpIVE1MQ29u
c3RydWN0aW9uU2l0ZVRhc2s+IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgeyB9OworfSAvLyBu
YW1lc3BhY2UgV1RGCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTUsNiArNzgsNyBAQCBw
dWJsaWM6CiAgICAgfkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2b2lkIGRldGFjaCgp
OworICAgIHZvaWQgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAKICAgICB2b2lkIGluc2VydERvY3R5
cGUoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBpbnNlcnRDb21tZW50KEF0b21pY0hUTUxU
b2tlbiYpOwpAQCAtNzgsNyArMTAyLDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8RWxlbWVu
dD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKik7CiAKICAgICBib29sIHNob3VsZEZvc3RlclBhcmVudCgpIGNvbnN0Owot
ICAgIHZvaWQgZm9zdGVyUGFyZW50KE5vZGUqKTsKKyAgICB2b2lkIGZvc3RlclBhcmVudChQYXNz
UmVmUHRyPE5vZGU+KTsKIAogICAgIGJvb2wgaW5kZXhPZkZpcnN0VW5vcGVuRm9ybWF0dGluZ0Vs
ZW1lbnQodW5zaWduZWQmIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4KSBjb25zdDsKICAgICB2b2lk
IHJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CkBAIC0xMjEsMTcgKzE0
NSwxMyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQXR0YWNobWVu
dFNpdGUgewotICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQ7Ci0gICAgICAgIE5vZGUqIG5l
eHRDaGlsZDsKLSAgICB9OworICAgIHR5cGVkZWYgVmVjdG9yPEhUTUxDb25zdHJ1Y3Rpb25TaXRl
VGFzaywgNT4gQXR0YWNobWVudFF1ZXVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRU
eXBlPgogICAgIFBhc3NSZWZQdHI8Q2hpbGRUeXBlPiBhdHRhY2goQ29udGFpbmVyTm9kZSogcGFy
ZW50LCBQYXNzUmVmUHRyPENoaWxkVHlwZT4gY2hpbGQpOwogICAgIFBhc3NSZWZQdHI8RWxlbWVu
dD4gYXR0YWNoVG9DdXJyZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwogCi0gICAgdm9pZCBhdHRh
Y2hBdFNpdGUoY29uc3QgQXR0YWNobWVudFNpdGUmLCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKTsK
LSAgICB2b2lkIGZpbmRGb3N0ZXJTaXRlKEF0dGFjaG1lbnRTaXRlJik7CisgICAgdm9pZCBmaW5k
Rm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smKTsKIAogICAgIFBhc3NSZWZQdHI8
RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tU2F2ZWRFbGVtZW50KEVsZW1lbnQqKTsKICAg
ICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpOwpAQCAtMTUxLDYgKzE3MSw4IEBAIHByaXZh
dGU6CiAgICAgbXV0YWJsZSBIVE1MRWxlbWVudFN0YWNrIG1fb3BlbkVsZW1lbnRzOwogICAgIG11
dGFibGUgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
czsKIAorICAgIEF0dGFjaG1lbnRRdWV1ZSBtX2F0dGFjaG1lbnRRdWV1ZTsKKwogICAgIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbjsKICAg
ICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CiAKQEAgLTE2Myw2ICsxODUsNiBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1fbWF4aW11bURPTVRyZWVEZXB0aDsKIH07CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRWxlbWVudFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAkocmV2aXNpb24gMTAzODEzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hDb21tb24oUGFz
c1JlCiAKICAgICBtX3N0YWNrRGVwdGgrKzsKICAgICBtX3RvcCA9IGFkb3B0UHRyKG5ldyBFbGVt
ZW50UmVjb3JkKG5vZGUsIG1fdG9wLnJlbGVhc2UoKSkpOwotICAgIHRvcE5vZGUoKS0+YmVnaW5Q
YXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAvLyB0b3BOb2RlKCktPmJlZ2luUGFyc2luZ0NoaWxkcmVu
KCk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQ29tbW9uKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24g
MTAzODEzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCw5IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpjb25zdHJ1Y3RUcmVlRnJvbUEKIAogICAgIG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0Rm9y
Y2VOdWxsQ2hhcmFjdGVyUmVwbGFjZW1lbnQobV9pbnNlcnRpb25Nb2RlID09IFRleHRNb2RlIHx8
IGluRm9yZWlnbkNvbnRlbnQpOwogICAgIG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0U2hvdWxk
QWxsb3dDREFUQShpbkZvcmVpZ25Db250ZW50KTsKKworICAgIG1fdHJlZS5leGVjdXRlUXVldWVk
VGFza3MoKTsKKyAgICAvLyBXZSBtaWdodCBiZSBkZXRhY2hlZCBub3cuCiB9CiAKIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121005</attachid>
            <date>2012-01-03 15:20:37 -0800</date>
            <delta_ts>2012-01-03 17:12:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66101-20120103152035.patch</filename>
            <type>text/plain</type>
            <size>17003</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzk3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEyLTAxLTAzICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVHdvIG51bGwgY3Jhc2hlcyBpbiBU
cmVlYnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjYxMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGUgdW5kZXJseSBpc3N1ZSB3aXRoIGNhdXNpbmcgdGhlIGNyYXNoIGlzIHRoYXQgd2UncmUg
cmUtZW50ZXJpbmcgdGhlCisgICAgICAgIHRyZWUgYnVpbGRlci4gIFdlJ3ZlIGRvbmUgYSBidW5j
aCBvZiBwb2ludCBmaXhlcyBhcm91bmQgdHJlZSBidWlsZGVyCisgICAgICAgIHJlLWVudHJhbmN5
LCBidXQgbmVpdGhlciB0aGUgaW1wbGVtZW50YXRpb24gbm9yIHRoZSBzcGVjaWZpY2F0aW9uIGFy
ZQorICAgICAgICByZWFsbHkgZGVzaWduZWQgdG8gaGFuZGxlIHJlLWVudHJhbmN5LgorCisgICAg
ICAgIEZpcmVmb3ggYXZvaWRzIHRoaXMgcHJvYmxlbSBieSBwdXR0aW5nIHRoZSBwYXJzZXIgb24g
aXRzIG93biB0aHJlYWQuICBJCisgICAgICAgIGRvbid0IHRoaW5rIHdlJ3JlIHF1aXRlIHJlYWR5
IHRvIGRvIHRoYXQgeWV0IChhbHRob3VnaCB3ZSB3aWxsCisgICAgICAgIGV2ZW50dWFsbHksIHBy
ZXN1bWFibHksIGFzIGNvbXB1dGVycyBiZWNvbWUgZXZlciBtb3JlIHBhcmFsbGVsKS4gIFRoZQor
ICAgICAgICBhcHByb2FjaCBpbiB0aGlzIHBhdGNoIGlzIHRvIHF1ZXVlIHVwIHRoZSBET00gbXV0
YXRpb25zIGFuZCBhY3R1YWxseQorICAgICAgICBwZXJmb3JtIHRoZW0gb24gYSBzaGFsbG93ZXIg
c3RhY2suICBUaGF0J3MgZXNzZW50aWFsbHkgdGhlIGFwcHJvYWNoCisgICAgICAgIHdlJ3ZlIHVz
ZWQgZm9yIGV4ZWN1dGluZyA8c2NyaXB0cz4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBxdWV1ZXMg
dXAgRE9NIG1vZGlmaWNhdGlvbnMgYW5kIGV4ZWN1dGVzIHRoZW0gZnJvbSBhIGNsZWFuCisgICAg
ICAgIGNhbGwgc3RhY2ssIHN0b3BwaW5nIHVzIGZyb20gcmUtZW50ZXJpbmcgdGhlIHRyZWUgYnVp
bGRlci4gIFdlIG1pZ2h0CisgICAgICAgIG5lZWQgdG8gZXhwZXJpbWVudCB3aXRoIGV4YWN0bHkg
d2hlcmUgdG8ga2ljayBvZmYgdGhlIHF1ZXVlLCBidXQgdGhpcworICAgICAgICBsb2NhdGlvbiBz
ZWVtcyByZWFzb25hYmxlIGFuZCBmaXhlcyB0aGUgY3Jhc2guCisKKyAgICAgICAgTm8gdGVzdHMg
KE9PUFMhKSA8LS0gSSBoYXZlIGEgdGVzdCwgYnV0IEkgbmVlZCB0byBhZGQgaXQgdG8gdGhlIHBh
dGNoLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRhc2spOgorICAgICAgICAgICAgLSBBZGQgYSBoZWxw
ZXIgZnVuY3Rpb24gZm9yIGFjdHVhbGx5IGV4ZWN1dGluZyBhIHF1ZXVlIERPTQorICAgICAgICAg
ICAgICBtdXRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjph
dHRhY2gpOgorICAgICAgICAgICAgLSBJbnN0ZWFkIG9mIGFjdHVhbGx5IGF0dGFjaGluZyB0aGUg
ZWxlbWVudCB0byB0aGUgRE9NLCB0aGlzCisgICAgICAgICAgICAgIGZ1bmN0aW9uIG5vdyBxdWV1
ZXMgdGhlIGVsZW1lbnQgZm9yIGF0dGFjaG1lbnQuICBJbiBhIGZvbGxvdy11cAorICAgICAgICAg
ICAgICBwYXRjaCwgSSBwbGFuIHRvIGNoYW5nZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiB2b2lk
IChhbmQgSSdsbAorICAgICAgICAgICAgICBwcm9iYWJseSByZW5hbWUgaXQgdG8gc29tZXRoaW5n
IHRoYXQgbWFrZXMgaXQgY2xlYXIgdGhhdCBpdCBvbmx5CisgICAgICAgICAgICAgIHF1ZXVlcyB0
aGUgYXR0YWNobWVudCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
ZXhlY3V0ZVF1ZXVlZFRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgICAgIC0gU2V0dGluZyB0aGUgY29tcGF0bW9k
ZSBmcm9tIHRoZSBEb2N0eXBlIHJlcXVpcmVzIHRoZSBkb2N0eXBlIHRvCisgICAgICAgICAgICAg
IGFjdHVhbGx5IGJlIGluIHRoZSBET00sIHNvIHdlIG5lZWQgdG8gZXhlY3V0ZSBvdXIgcXVldWVk
IHRhc2tzCisgICAgICAgICAgICAgIHN5bmNocm9ub3VzbHkuICBXZSBjYW4gbGlrZWx5IGltcHJv
dmUgdGhpcyBmdW5jdGlvbiBieSBwYXNzaW5nCisgICAgICAgICAgICAgIHRoZSBEb2N0eXBlIGVs
ZW1lbnQgZXhwbGljaXRseSBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZmluZEZvc3RlclNpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmZvc3RlclBhcmVudCk6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6SFRNTENvbnN0cnVjdGlvblNpdGVUYXNr
KToKKyAgICAgICAgICAgIC0gQWRkIGEgdGFzayBvYmplY3QgdGhhdCBob2xkcyBvbiB0byB0aGUg
cmVsZXZhbnQgZWxlbWVudHMuICBXZQorICAgICAgICAgICAgICBkZWZpbmUgc29tZSB2ZWN0b3Ig
dHJhaXRzIGZvciB0aGlzIG9iamVjdCB0byBtYXRjaCB0aGUgdHJhaXRzIG9uCisgICAgICAgICAg
ICAgIFJlZlB0ciAod2hpY2ggbWFrZSBWZWN0b3Igb3BlcmF0aW9ucyBmYXN0ZXIgYnkgZXhwbGFp
bmluZyB0aGF0CisgICAgICAgICAgICAgIHRoaXMgdHlwZSBpcyBtb3ZlYWJsZSB3aXRob3V0IGhh
dmluZyB0byBjaHVybiByZWZlcmVuY2UgY291bnRzKS4KKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MRWxlbWVudFN0YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6
OnB1c2hDb21tb24pOgorICAgICAgICAgICAgLSBXZSBkZWxheSB0aGUgImJlZ2luIHBhcnNpbmci
IGNhbGwgdW50aWwgd2UgYWN0dWFsbHkgYXR0YWNoIHRoZQorICAgICAgICAgICAgICBlbGVtZW50
IHRvIHRoZSBET00uICBUaGF0IHNwbGl0cyB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNhbGxpbmcK
KyAgICAgICAgICAgICAgYmVnaW4vZmluaXNoZWQsIHdoaWNoIGlzIGxlc3MgdGhhbiBpZGVhbCwg
YnV0IEkgZGlkbid0IHNlZQorICAgICAgICAgICAgICBhbm90aGVyIHNvbHV0aW9uLgorICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4pOgorICAgICAgICAg
ICAgLSBLaWNrIG9mZiB0aGUgcXVldWVkIG11dGF0aW9ucy4KKwogMjAxMi0wMS0wMyAgQWRyaWVu
bmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3Zl
IHVubmVlZGVkIGNvbnRlbnQgdnMuIGxheWVyIHNwYWNlIGRpc3RpbmN0aW9uIGluIHRpbGVkIGxh
eWVycwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNp
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25z
dHJ1Y3Rpb25TaXRlLmNwcAkocmV2aXNpb24gMTAzOTIyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw1
MyArODcsNTggQEAgaW5saW5lIGJvb2wgaXNBbGxXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZwogCiB9
IC8vIG5hbWVzcGFjZQogCitzdGF0aWMgaW5saW5lIHZvaWQgZXhlY3V0ZVRhc2soSFRNTENvbnN0
cnVjdGlvblNpdGVUYXNrJiB0YXNrKQoreworICAgIGlmICh0YXNrLm5leHRDaGlsZCkKKyAgICAg
ICAgdGFzay5wYXJlbnQtPnBhcnNlckluc2VydEJlZm9yZSh0YXNrLmNoaWxkLmdldCgpLCB0YXNr
Lm5leHRDaGlsZC5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLnBhcmVudC0+cGFyc2Vy
QWRkQ2hpbGQodGFzay5jaGlsZC5nZXQoKSk7CisKKyAgICAvLyBKYXZhU2NyaXB0IHJ1biBmcm9t
IGJlZm9yZWxvYWQgKG9yIERPTSBNdXRhdGlvbiBvciBldmVudCBoYW5kbGVycykKKyAgICAvLyBt
aWdodCBoYXZlIHJlbW92ZWQgdGhlIGNoaWxkLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBub3Qg
YXR0YWNoIGl0LgorCisgICAgaWYgKHRhc2suY2hpbGQtPnBhcmVudE5vZGUoKSAmJiB0YXNrLnBh
cmVudC0+YXR0YWNoZWQoKSAmJiAhdGFzay5jaGlsZC0+YXR0YWNoZWQoKSkKKyAgICAgICAgdGFz
ay5jaGlsZC0+YXR0YWNoKCk7CisKKyAgICB0YXNrLmNoaWxkLT5iZWdpblBhcnNpbmdDaGlsZHJl
bigpOworCisgICAgaWYgKHRhc2suc2VsZkNsb3NpbmcpCisgICAgICAgIHRhc2suY2hpbGQtPmZp
bmlzaFBhcnNpbmdDaGlsZHJlbigpOworfQorCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91
bGQgcmV0dXJuIHZvaWQuIENhbGxlcnMgc2hvdWxkIGtlZXAgYSBwb2ludGVyIHRvCisvLyB0aGUg
Y2hpbGQgaWYgdGhleSB3YW50IG9uZS4KIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkVHlwZT4KLVBh
c3NSZWZQdHI8Q2hpbGRUeXBlPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoKENvbnRhaW5l
ck5vZGUqIHJhd1BhcmVudCwgUGFzc1JlZlB0cjxDaGlsZFR5cGU+IHBycENoaWxkKQorUGFzc1Jl
ZlB0cjxDaGlsZFR5cGU+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2goQ29udGFpbmVyTm9k
ZSogcGFyZW50LCBQYXNzUmVmUHRyPENoaWxkVHlwZT4gcHJwQ2hpbGQpCiB7CiAgICAgUmVmUHRy
PENoaWxkVHlwZT4gY2hpbGQgPSBwcnBDaGlsZDsKLSAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4g
cGFyZW50ID0gcmF3UGFyZW50OwogCi0gICAgLy8gRklYTUU6IEl0J3MgY29uZnVzaW5nIHRoYXQg
SFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaCBkb2VzIHRoZSBtYWdpYwotICAgIC8vIHJlZGly
ZWN0aW9uIHRvIHRoZSBmb3N0ZXIgcGFyZW50IGJ1dCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0
YWNoQXRTaXRlCi0gICAgLy8gZG9lc24ndC4gSXQgZmVlbHMgbGlrZSB3ZSdyZSBtaXNzaW5nIGEg
Y29uY2VwdCBzb21laG93LgorICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrOworICAg
IHRhc2sucGFyZW50ID0gcGFyZW50OworICAgIHRhc2suY2hpbGQgPSBjaGlsZC5nZXQoKTsKKwog
ICAgIGlmIChzaG91bGRGb3N0ZXJQYXJlbnQoKSkgewotICAgICAgICBmb3N0ZXJQYXJlbnQoY2hp
bGQuZ2V0KCkpOwotICAgICAgICBBU1NFUlQoY2hpbGQtPmF0dGFjaGVkKCkgfHwgIWNoaWxkLT5w
YXJlbnROb2RlKCkgfHwgIWNoaWxkLT5wYXJlbnROb2RlKCktPmF0dGFjaGVkKCkpOworICAgICAg
ICBmb3N0ZXJQYXJlbnQodGFzay5jaGlsZCk7CiAgICAgICAgIHJldHVybiBjaGlsZC5yZWxlYXNl
KCk7CiAgICAgfQogCiAgICAgLy8gQWRkIGFzIGEgc2libGluZyBvZiB0aGUgcGFyZW50IGlmIHdl
IGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBkZXB0aCBhbGxvd2VkLgogICAgIGlmIChtX29wZW5F
bGVtZW50cy5zdGFja0RlcHRoKCkgPiBtX21heGltdW1ET01UcmVlRGVwdGgpCi0gICAgICAgIHBh
cmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwotCi0gICAgcGFyZW50LT5wYXJzZXJBZGRDaGls
ZChjaGlsZCk7CisgICAgICAgIHRhc2sucGFyZW50ID0gdGFzay5wYXJlbnQtPnBhcmVudE5vZGUo
KTsKIAotICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIgKERPTSBNdXRhdGlvbiwgYmVmb3JlbG9hZCwg
ZXQgYWwuKSBjb3VsZCBoYXZlIHJlbW92ZWQKLSAgICAvLyB0aGUgY2hpbGQsIGluIHdoaWNoIGNh
c2Ugd2Ugc2hvdWxkbid0IHRyeSBhdHRhY2hpbmcgaXQuCi0gICAgaWYgKCFjaGlsZC0+cGFyZW50
Tm9kZSgpKQotICAgICAgICByZXR1cm4gY2hpbGQucmVsZWFzZSgpOwotCi0gICAgaWYgKHBhcmVu
dC0+YXR0YWNoZWQoKSAmJiAhY2hpbGQtPmF0dGFjaGVkKCkpCi0gICAgICAgIGNoaWxkLT5hdHRh
Y2goKTsKKyAgICBtX2F0dGFjaG1lbnRRdWV1ZS5hcHBlbmQodGFzayk7CiAgICAgcmV0dXJuIGNo
aWxkLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQXRT
aXRlKGNvbnN0IEF0dGFjaG1lbnRTaXRlJiBzaXRlLCBQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxk
KQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZXhlY3V0ZVF1ZXVlZFRhc2tzKCkKIHsKLSAg
ICAvLyBGSVhNRTogSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHdlIG5lZWQgdG8gaG9sZCBhIHJlZmVy
ZW5jZSB0byBjaGlsZAotICAgIC8vIGhlcmUgdG8gY2FsbCBhdHRhY2goKS4gIFdlIHNob3VsZCBp
bnZlc3RpZ2F0ZSB3aGV0aGVyIHdlIGNhbiByZWx5IG9uCi0gICAgLy8gfHNpdGUucGFyZW50fCB0
byBob2xkIGEgcmVmIGF0IHRoaXMgcG9pbnQuCi0gICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJw
Q2hpbGQ7CisgICAgQXR0YWNobWVudFF1ZXVlIHF1ZXVlOworICAgIHF1ZXVlLnN3YXAobV9hdHRh
Y2htZW50UXVldWUpOwogCi0gICAgaWYgKHNpdGUubmV4dENoaWxkKQotICAgICAgICBzaXRlLnBh
cmVudC0+cGFyc2VySW5zZXJ0QmVmb3JlKGNoaWxkLCBzaXRlLm5leHRDaGlsZCk7Ci0gICAgZWxz
ZQotICAgICAgICBzaXRlLnBhcmVudC0+cGFyc2VyQWRkQ2hpbGQoY2hpbGQpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAgIGV4ZWN1dGVUYXNr
KHF1ZXVlW2ldKTsKIAotICAgIC8vIEphdmFTY3JpcHQgcnVuIGZyb20gYmVmb3JlbG9hZCAob3Ig
RE9NIE11dGF0aW9uIG9yIGV2ZW50IGhhbmRsZXJzKQotICAgIC8vIG1pZ2h0IGhhdmUgcmVtb3Zl
ZCB0aGUgY2hpbGQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBhdHRhY2ggaXQuCi0gICAg
aWYgKGNoaWxkLT5wYXJlbnROb2RlKCkgJiYgc2l0ZS5wYXJlbnQtPmF0dGFjaGVkKCkgJiYgIWNo
aWxkLT5hdHRhY2hlZCgpKQotICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgLy8gV2UgbWln
aHQgYmUgZGV0YWNoZWQgbm93LgogfQogCiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0
cnVjdGlvblNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURl
cHRoKQpAQCAtMjI5LDcgKzIzNCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dERvY3R5cGUKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpE
T0NUWVBFKTsKICAgICBhdHRhY2gobV9hdHRhY2htZW50Um9vdCwgRG9jdW1lbnRUeXBlOjpjcmVh
dGUobV9kb2N1bWVudCwgdG9rZW4ubmFtZSgpLCBTdHJpbmc6OmFkb3B0KHRva2VuLnB1YmxpY0lk
ZW50aWZpZXIoKSksIFN0cmluZzo6YWRvcHQodG9rZW4uc3lzdGVtSWRlbnRpZmllcigpKSkpOwot
ICAgIAorCiAgICAgLy8gRE9DVFlQRSBub2RlcyBhcmUgb25seSBwcm9jZXNzZWQgd2hlbiBwYXJz
aW5nIGZyYWdtZW50cyB3L28gY29udGV4dEVsZW1lbnRzLCB3aGljaAogICAgIC8vIG5ldmVyIG9j
Y3Vycy4gIEhvd2V2ZXIsIGlmIHdlIGV2ZXIgY2hvc2UgdG8gc3VwcG9ydCBzdWNoLCB0aGlzIGNv
ZGUgaXMgc3VidGx5IHdyb25nLAogICAgIC8vIGJlY2F1c2UgY29udGV4dC1sZXNzIGZyYWdtZW50
cyBjYW4gZGV0ZXJtaW5lIHRoZWlyIG93biBxdWlya3MgbW9kZSwgYW5kIHRodXMgY2hhbmdlCkBA
IC0yMzgsMTEgKzI0MywxNCBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0
eXBlCiAgICAgQVNTRVJUKCFtX2lzUGFyc2luZ0ZyYWdtZW50KTsKICAgICBpZiAobV9pc1BhcnNp
bmdGcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYgKHRva2VuLmZvcmNl
UXVpcmtzKCkpCiAgICAgICAgIG1fZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlKERvY3Vt
ZW50OjpRdWlya3NNb2RlKTsKLSAgICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIG5l
ZWQgdG8gYWN0dWFsbHkgYWRkIHRoZSBEb2N0eXBlIG5vZGUgdG8gdGhlIERPTS4KKyAgICAgICAg
ZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgICAgIG1fZG9jdW1lbnQtPnNldENvbXBhdGliaWxp
dHlNb2RlRnJvbURvY3R5cGUoKTsKKyAgICB9CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydENvbW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKQEAgLTMwNiw3ICszMTQs
NyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvCiAgICAgLy8gTm9y
bWFsbHkgSFRNTEVsZW1lbnRTdGFjayBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBmaW5pc2hQ
YXJzaW5nQ2hpbGRyZW4sCiAgICAgLy8gYnV0IHNlbGYtY2xvc2luZyBlbGVtZW50cyBhcmUgbmV2
ZXIgaW4gdGhlIGVsZW1lbnQgc3RhY2sgc28gdGhlIHN0YWNrCiAgICAgLy8gZG9lc24ndCBnZXQg
YSBjaGFuY2UgdG8gdGVsbCB0aGVtIHRoYXQgd2UncmUgZG9uZSBwYXJzaW5nIHRoZWlyIGNoaWxk
cmVuLgotICAgIGVsZW1lbnQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIG1fYXR0YWNo
bWVudFF1ZXVlLmxhc3QoKS5zZWxmQ2xvc2luZyA9IHRydWU7CiAgICAgLy8gRklYTUU6IERvIHdl
IHdhbnQgdG8gYWNrbm93bGVkZ2UgdGhlIHRva2VuJ3Mgc2VsZi1jbG9zaW5nIGZsYWc/CiAgICAg
Ly8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0
aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjYWNrbm93bGVkZ2Utc2VsZi1jbG9zaW5nLWZsYWcKIH0K
QEAgLTM0MCwxMSArMzQ4LDExIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZv
cmVpZ24KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3Qg
U3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW9kZSB3aGl0ZXNwYWNlTW9kZSkKIHsKLSAg
ICBBdHRhY2htZW50U2l0ZSBzaXRlOwotICAgIHNpdGUucGFyZW50ID0gY3VycmVudE5vZGUoKTsK
LSAgICBzaXRlLm5leHRDaGlsZCA9IDA7CisgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRh
c2s7CisgICAgdGFzay5wYXJlbnQgPSBjdXJyZW50Tm9kZSgpOworICAgIHRhc2submV4dENoaWxk
ID0gMDsKICAgICBpZiAoc2hvdWxkRm9zdGVyUGFyZW50KCkpCi0gICAgICAgIGZpbmRGb3N0ZXJT
aXRlKHNpdGUpOworICAgICAgICBmaW5kRm9zdGVyU2l0ZSh0YXNrKTsKIAogICAgIC8vIFN0cmlu
Z3MgY29tcG9zZWQgZW50aXJlbHkgb2Ygd2hpdGVzcGFjZSBhcmUgbGlrZWx5IHRvIGJlIHJlcGVh
dGVkLgogICAgIC8vIFR1cm4gdGhlbSBpbnRvIEF0b21pY1N0cmluZyBzbyB3ZSBzaGFyZSBhIHNp
bmdsZSBzdHJpbmcgZm9yIGVhY2guCkBAIC0zNTYsNyArMzY0LDcgQEAgdm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZAogICAgIC8vIEZJWE1FOiBTcGxpdHRpbmcgdGV4dCBu
b2RlcyBpbnRvIHNtYWxsZXIgY2h1bmtzIGNvbnRyYWRpY3RzIEhUTUw1IHNwZWMsIGJ1dCBpcyBj
dXJyZW50bHkgbmVjZXNzYXJ5CiAgICAgLy8gZm9yIHBlcmZvcm1hbmNlLCBzZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTg5OD4uCiAKLSAgICBOb2RlKiBwcmV2
aW91c0NoaWxkID0gc2l0ZS5uZXh0Q2hpbGQgPyBzaXRlLm5leHRDaGlsZC0+cHJldmlvdXNTaWJs
aW5nKCkgOiBzaXRlLnBhcmVudC0+bGFzdENoaWxkKCk7CisgICAgTm9kZSogcHJldmlvdXNDaGls
ZCA9IHRhc2submV4dENoaWxkID8gdGFzay5uZXh0Q2hpbGQtPnByZXZpb3VzU2libGluZygpIDog
dGFzay5wYXJlbnQtPmxhc3RDaGlsZCgpOwogICAgIGlmIChwcmV2aW91c0NoaWxkICYmIHByZXZp
b3VzQ2hpbGQtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAvLyBGSVhNRTogV2UncmUgb25seSBz
dXBwb3NlZCB0byBhcHBlbmQgdG8gdGhpcyB0ZXh0IG5vZGUgaWYgaXQKICAgICAgICAgLy8gd2Fz
IHRoZSBsYXN0IHRleHQgbm9kZSBpbnNlcnRlZCBieSB0aGUgcGFyc2VyLgpAQCAtMzY1LDE2ICsz
NzMsMTcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZAogICAgIH0K
IAogICAgIHdoaWxlIChjdXJyZW50UG9zaXRpb24gPCBjaGFyYWN0ZXJzLmxlbmd0aCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1p
dChzaXRlLnBhcmVudC0+ZG9jdW1lbnQoKSwgc2hvdWxkVXNlQXRvbWljU3RyaW5nID8gQXRvbWlj
U3RyaW5nKGNoYXJhY3RlcnMpLnN0cmluZygpIDogY2hhcmFjdGVycywgY3VycmVudFBvc2l0aW9u
KTsKKyAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gVGV4dDo6Y3JlYXRlV2l0aExlbmd0
aExpbWl0KHRhc2sucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRVc2VBdG9taWNTdHJpbmcgPyBB
dG9taWNTdHJpbmcoY2hhcmFjdGVycykuc3RyaW5nKCkgOiBjaGFyYWN0ZXJzLCBjdXJyZW50UG9z
aXRpb24pOwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgd2hvbGUgc3RyaW5nIG9mIHVuYnJlYWth
YmxlIGNoYXJhY3RlcnMgdGhlIGFib3ZlIGNvdWxkIGxlYWQgdG8gYW4gaW5maW5pdGUgbG9vcC4g
RXhjZWVkaW5nIHRoZSBsZW5ndGggbGltaXQgaXMgdGhlIGxlc3NlciBldmlsLgogICAgICAgICBp
ZiAoIXRleHROb2RlLT5sZW5ndGgoKSkgewogICAgICAgICAgICAgU3RyaW5nIHN1YnN0cmluZyA9
IGNoYXJhY3RlcnMuc3Vic3RyaW5nKGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgICAgICAgICB0ZXh0
Tm9kZSA9IFRleHQ6OmNyZWF0ZShzaXRlLnBhcmVudC0+ZG9jdW1lbnQoKSwgc2hvdWxkVXNlQXRv
bWljU3RyaW5nID8gQXRvbWljU3RyaW5nKHN1YnN0cmluZykuc3RyaW5nKCkgOiBzdWJzdHJpbmcp
OworICAgICAgICAgICAgdGV4dE5vZGUgPSBUZXh0OjpjcmVhdGUodGFzay5wYXJlbnQtPmRvY3Vt
ZW50KCksIHNob3VsZFVzZUF0b21pY1N0cmluZyA/IEF0b21pY1N0cmluZyhzdWJzdHJpbmcpLnN0
cmluZygpIDogc3Vic3RyaW5nKTsKICAgICAgICAgfQogCiAgICAgICAgIGN1cnJlbnRQb3NpdGlv
biArPSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIEFTU0VSVChjdXJyZW50UG9zaXRpb24g
PD0gY2hhcmFjdGVycy5sZW5ndGgoKSk7Ci0gICAgICAgIGF0dGFjaEF0U2l0ZShzaXRlLCB0ZXh0
Tm9kZS5yZWxlYXNlKCkpOworICAgICAgICB0YXNrLmNoaWxkID0gdGV4dE5vZGUucmVsZWFzZSgp
OworICAgICAgICBleGVjdXRlVGFzayh0YXNrKTsKICAgICB9CiB9CiAKQEAgLTQ4MSwyMyArNDkw
LDIxIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmdlbmVyYXRlSW1wbGkKICAgICAgICAg
bV9vcGVuRWxlbWVudHMucG9wKCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmZp
bmRGb3N0ZXJTaXRlKEF0dGFjaG1lbnRTaXRlJiBzaXRlKQordm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6ZmluZEZvc3RlclNpdGUoSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrJiB0YXNrKQogewog
ICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGxhc3RUYWJsZUVsZW1lbnRSZWNv
cmQgPSBtX29wZW5FbGVtZW50cy50b3Btb3N0KHRhYmxlVGFnLmxvY2FsTmFtZSgpKTsKICAgICBp
ZiAobGFzdFRhYmxlRWxlbWVudFJlY29yZCkgewogICAgICAgICBFbGVtZW50KiBsYXN0VGFibGVF
bGVtZW50ID0gbGFzdFRhYmxlRWxlbWVudFJlY29yZC0+ZWxlbWVudCgpOwogICAgICAgICBpZiAo
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbGFzdFRhYmxlRWxlbWVudC0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgICAgICBzaXRlLnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgICAgIHNpdGUubmV4
dENoaWxkID0gbGFzdFRhYmxlRWxlbWVudDsKKyAgICAgICAgICAgIHRhc2sucGFyZW50ID0gcGFy
ZW50OworICAgICAgICAgICAgdGFzay5uZXh0Q2hpbGQgPSBsYXN0VGFibGVFbGVtZW50OwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHNpdGUucGFyZW50ID0gbGFzdFRh
YmxlRWxlbWVudFJlY29yZC0+bmV4dCgpLT5lbGVtZW50KCk7Ci0gICAgICAgIHNpdGUubmV4dENo
aWxkID0gMDsKKyAgICAgICAgdGFzay5wYXJlbnQgPSBsYXN0VGFibGVFbGVtZW50UmVjb3JkLT5u
ZXh0KCktPmVsZW1lbnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBGcmFnbWVu
dCBjYXNlCi0gICAgc2l0ZS5wYXJlbnQgPSBtX29wZW5FbGVtZW50cy5yb290Tm9kZSgpOyAvLyBE
b2N1bWVudEZyYWdtZW50Ci0gICAgc2l0ZS5uZXh0Q2hpbGQgPSAwOworICAgIHRhc2sucGFyZW50
ID0gbV9vcGVuRWxlbWVudHMucm9vdE5vZGUoKTsgLy8gRG9jdW1lbnRGcmFnbWVudAogfQogCiBi
b29sIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzaG91bGRGb3N0ZXJQYXJlbnQoKSBjb25zdApAQCAt
NTA3LDExICs1MTQsMTMgQEAgYm9vbCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6c2hvdWxkRm9zdGVy
UAogICAgICAgICAmJiBjYXVzZXNGb3N0ZXJQYXJlbnRpbmcoY3VycmVudEVsZW1lbnQoKS0+dGFn
UU5hbWUoKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmZvc3RlclBhcmVudChO
b2RlKiBub2RlKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Zm9zdGVyUGFyZW50KFBhc3NS
ZWZQdHI8Tm9kZT4gbm9kZSkKIHsKLSAgICBBdHRhY2htZW50U2l0ZSBzaXRlOwotICAgIGZpbmRG
b3N0ZXJTaXRlKHNpdGUpOwotICAgIGF0dGFjaEF0U2l0ZShzaXRlLCBub2RlKTsKKyAgICBIVE1M
Q29uc3RydWN0aW9uU2l0ZVRhc2sgdGFzazsKKyAgICB0YXNrLm5leHRDaGlsZCA9IDA7CisgICAg
ZmluZEZvc3RlclNpdGUodGFzayk7CisgICAgdGFzay5jaGlsZCA9IG5vZGU7CisgICAgZXhlY3V0
ZVRhc2sodGFzayk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAkocmV2aXNpb24gMTAzOTIyKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsMjkgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEhUTUxDb25z
dHJ1Y3Rpb25TaXRlVGFzayB7CisgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrKCkKKyAgICAg
ICAgOiBwYXJlbnQoMCkKKyAgICAgICAgLCBuZXh0Q2hpbGQoMCkKKyAgICAgICAgLCBzZWxmQ2xv
c2luZyhmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBh
cmVudDsKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOworICAgIFJlZlB0cjxOb2RlPiBjaGls
ZDsKKyAgICBib29sIHNlbGZDbG9zaW5nOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKK3RlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2s+IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgeyB9
OworfSAvLyBuYW1lc3BhY2UgV1RGCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTUsNiAr
NzgsNyBAQCBwdWJsaWM6CiAgICAgfkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2b2lk
IGRldGFjaCgpOworICAgIHZvaWQgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAKICAgICB2b2lkIGlu
c2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBpbnNlcnRDb21tZW50KEF0
b21pY0hUTUxUb2tlbiYpOwpAQCAtNzgsNyArMTAyLDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQ
dHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkKik7CiAKICAgICBib29sIHNob3VsZEZvc3RlclBhcmVudCgp
IGNvbnN0OwotICAgIHZvaWQgZm9zdGVyUGFyZW50KE5vZGUqKTsKKyAgICB2b2lkIGZvc3RlclBh
cmVudChQYXNzUmVmUHRyPE5vZGU+KTsKIAogICAgIGJvb2wgaW5kZXhPZkZpcnN0VW5vcGVuRm9y
bWF0dGluZ0VsZW1lbnQodW5zaWduZWQmIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4KSBjb25zdDsK
ICAgICB2b2lkIHJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CkBAIC0x
MjEsMTcgKzE0NSwxMyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3Qg
QXR0YWNobWVudFNpdGUgewotICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQ7Ci0gICAgICAg
IE5vZGUqIG5leHRDaGlsZDsKLSAgICB9OworICAgIHR5cGVkZWYgVmVjdG9yPEhUTUxDb25zdHJ1
Y3Rpb25TaXRlVGFzaywgNT4gQXR0YWNobWVudFF1ZXVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hpbGRUeXBlPgogICAgIFBhc3NSZWZQdHI8Q2hpbGRUeXBlPiBhdHRhY2goQ29udGFpbmVy
Tm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPENoaWxkVHlwZT4gY2hpbGQpOwogICAgIFBhc3NSZWZQ
dHI8RWxlbWVudD4gYXR0YWNoVG9DdXJyZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwogCi0gICAg
dm9pZCBhdHRhY2hBdFNpdGUoY29uc3QgQXR0YWNobWVudFNpdGUmLCBQYXNzUmVmUHRyPE5vZGU+
IGNoaWxkKTsKLSAgICB2b2lkIGZpbmRGb3N0ZXJTaXRlKEF0dGFjaG1lbnRTaXRlJik7CisgICAg
dm9pZCBmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smKTsKIAogICAgIFBh
c3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tU2F2ZWRFbGVtZW50KEVsZW1l
bnQqKTsKICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpOwpAQCAtMTUxLDYgKzE3MSw4
IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBIVE1MRWxlbWVudFN0YWNrIG1fb3BlbkVsZW1lbnRz
OwogICAgIG11dGFibGUgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCBtX2FjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50czsKIAorICAgIEF0dGFjaG1lbnRRdWV1ZSBtX2F0dGFjaG1lbnRRdWV1ZTsKKwog
ICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbjsKICAgICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CiAKQEAgLTE2Myw2ICsxODUsNiBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbWF4aW11bURPTVRyZWVEZXB0aDsKIH07CiAKLX0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAkocmV2aXNpb24gMTAzOTIyKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4NSw3ICs1ODUsNiBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hD
b21tb24oUGFzc1JlCiAKICAgICBtX3N0YWNrRGVwdGgrKzsKICAgICBtX3RvcCA9IGFkb3B0UHRy
KG5ldyBFbGVtZW50UmVjb3JkKG5vZGUsIG1fdG9wLnJlbGVhc2UoKSkpOwotICAgIHRvcE5vZGUo
KS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKIH0KIAogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpw
b3BDb21tb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxMDM5MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzgsNiArNDc4LDkg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tQQogCiAgICAgbV9wYXJz
ZXItPnRva2VuaXplcigpLT5zZXRGb3JjZU51bGxDaGFyYWN0ZXJSZXBsYWNlbWVudChtX2luc2Vy
dGlvbk1vZGUgPT0gVGV4dE1vZGUgfHwgaW5Gb3JlaWduQ29udGVudCk7CiAgICAgbV9wYXJzZXIt
PnRva2VuaXplcigpLT5zZXRTaG91bGRBbGxvd0NEQVRBKGluRm9yZWlnbkNvbnRlbnQpOworCisg
ICAgbV90cmVlLmV4ZWN1dGVRdWV1ZWRUYXNrcygpOworICAgIC8vIFdlIG1pZ2h0IGJlIGRldGFj
aGVkIG5vdy4KIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121023</attachid>
            <date>2012-01-03 17:12:58 -0800</date>
            <delta_ts>2012-01-03 18:58:01 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-66101-20120103171256.patch</filename>
            <type>text/plain</type>
            <size>19045</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzk5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEyLTAxLTAzICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVHdvIG51bGwgY3Jhc2hlcyBpbiBU
cmVlYnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjYxMDEKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBU
aGUgdW5kZXJseSBpc3N1ZSB3aXRoIGNhdXNpbmcgdGhlIGNyYXNoIGlzIHRoYXQgd2UncmUgcmUt
ZW50ZXJpbmcgdGhlCisgICAgICAgIHRyZWUgYnVpbGRlci4gIFdlJ3ZlIGRvbmUgYSBidW5jaCBv
ZiBwb2ludCBmaXhlcyBhcm91bmQgdHJlZSBidWlsZGVyCisgICAgICAgIHJlLWVudHJhbmN5LCBi
dXQgbmVpdGhlciB0aGUgaW1wbGVtZW50YXRpb24gbm9yIHRoZSBzcGVjaWZpY2F0aW9uIGFyZQor
ICAgICAgICByZWFsbHkgZGVzaWduZWQgdG8gaGFuZGxlIHJlLWVudHJhbmN5LgorCisgICAgICAg
IEZpcmVmb3ggYXZvaWRzIHRoaXMgcHJvYmxlbSBieSBwdXR0aW5nIHRoZSBwYXJzZXIgb24gaXRz
IG93biB0aHJlYWQuICBJCisgICAgICAgIGRvbid0IHRoaW5rIHdlJ3JlIHF1aXRlIHJlYWR5IHRv
IGRvIHRoYXQgeWV0IChhbHRob3VnaCB3ZSB3aWxsCisgICAgICAgIGV2ZW50dWFsbHksIHByZXN1
bWFibHksIGFzIGNvbXB1dGVycyBiZWNvbWUgZXZlciBtb3JlIHBhcmFsbGVsKS4gIFRoZQorICAg
ICAgICBhcHByb2FjaCBpbiB0aGlzIHBhdGNoIGlzIHRvIHF1ZXVlIHVwIHRoZSBET00gbXV0YXRp
b25zIGFuZCBhY3R1YWxseQorICAgICAgICBwZXJmb3JtIHRoZW0gb24gYSBzaGFsbG93ZXIgc3Rh
Y2suICBUaGF0J3MgZXNzZW50aWFsbHkgdGhlIGFwcHJvYWNoCisgICAgICAgIHdlJ3ZlIHVzZWQg
Zm9yIGV4ZWN1dGluZyA8c2NyaXB0cz4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBxdWV1ZXMgdXAg
RE9NIG1vZGlmaWNhdGlvbnMgYW5kIGV4ZWN1dGVzIHRoZW0gZnJvbSBhIGNsZWFuCisgICAgICAg
IGNhbGwgc3RhY2ssIHN0b3BwaW5nIHVzIGZyb20gcmUtZW50ZXJpbmcgdGhlIHRyZWUgYnVpbGRl
ci4gIFdlIG1pZ2h0CisgICAgICAgIG5lZWQgdG8gZXhwZXJpbWVudCB3aXRoIGV4YWN0bHkgd2hl
cmUgdG8ga2ljayBvZmYgdGhlIHF1ZXVlLCBidXQgdGhpcworICAgICAgICBsb2NhdGlvbiBzZWVt
cyByZWFzb25hYmxlIGFuZCBmaXhlcyB0aGUgY3Jhc2guCisKKyAgICAgICAgVGVzdDogZmFzdC9w
YXJzZXIvcmUtZW50ZXItYW5kLWNyYXNoLmh0bWwKKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVUYXNrKToK
KyAgICAgICAgICAgIC0gQWRkIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBhY3R1YWxseSBleGVjdXRp
bmcgYSBxdWV1ZSBET00KKyAgICAgICAgICAgICAgbXV0YXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoKToKKyAgICAgICAgICAgIC0gSW5zdGVhZCBv
ZiBhY3R1YWxseSBhdHRhY2hpbmcgdGhlIGVsZW1lbnQgdG8gdGhlIERPTSwgdGhpcworICAgICAg
ICAgICAgICBmdW5jdGlvbiBub3cgcXVldWVzIHRoZSBlbGVtZW50IGZvciBhdHRhY2htZW50LiAg
SW4gYSBmb2xsb3ctdXAKKyAgICAgICAgICAgICAgcGF0Y2gsIEkgcGxhbiB0byBjaGFuZ2UgdGhp
cyBmdW5jdGlvbiB0byByZXR1cm4gdm9pZCAoYW5kIEknbGwKKyAgICAgICAgICAgICAgcHJvYmFi
bHkgcmVuYW1lIGl0IHRvIHNvbWV0aGluZyB0aGF0IG1ha2VzIGl0IGNsZWFyIHRoYXQgaXQgb25s
eQorICAgICAgICAgICAgICBxdWV1ZXMgdGhlIGF0dGFjaG1lbnQpLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmV4ZWN1dGVRdWV1ZWRUYXNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZSk6CisgICAgICAgICAg
ICAtIFNldHRpbmcgdGhlIGNvbXBhdG1vZGUgZnJvbSB0aGUgRG9jdHlwZSByZXF1aXJlcyB0aGUg
ZG9jdHlwZSB0bworICAgICAgICAgICAgICBhY3R1YWxseSBiZSBpbiB0aGUgRE9NLCBzbyB3ZSBu
ZWVkIHRvIGV4ZWN1dGUgb3VyIHF1ZXVlZCB0YXNrcworICAgICAgICAgICAgICBzeW5jaHJvbm91
c2x5LiAgV2UgY2FuIGxpa2VseSBpbXByb3ZlIHRoaXMgZnVuY3Rpb24gYnkgcGFzc2luZworICAg
ICAgICAgICAgICB0aGUgRG9jdHlwZSBlbGVtZW50IGV4cGxpY2l0bHkgaW4gYSBmb2xsb3ctdXAg
cGF0Y2guCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2Vs
ZkNsb3NpbmdIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0VGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlv
blNpdGU6OmZpbmRGb3N0ZXJTaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjpmb3N0ZXJQYXJlbnQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1
Y3Rpb25TaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2s6
OkhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayk6CisgICAgICAgICAgICAtIEFkZCBhIHRhc2sgb2Jq
ZWN0IHRoYXQgaG9sZHMgb24gdG8gdGhlIHJlbGV2YW50IGVsZW1lbnRzLiAgV2UKKyAgICAgICAg
ICAgICAgZGVmaW5lIHNvbWUgdmVjdG9yIHRyYWl0cyBmb3IgdGhpcyBvYmplY3QgdG8gbWF0Y2gg
dGhlIHRyYWl0cyBvbgorICAgICAgICAgICAgICBSZWZQdHIgKHdoaWNoIG1ha2UgVmVjdG9yIG9w
ZXJhdGlvbnMgZmFzdGVyIGJ5IGV4cGxhaW5pbmcgdGhhdAorICAgICAgICAgICAgICB0aGlzIHR5
cGUgaXMgbW92ZWFibGUgd2l0aG91dCBoYXZpbmcgdG8gY2h1cm4gcmVmZXJlbmNlIGNvdW50cyku
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNoQ29tbW9uKToKKyAgICAgICAgICAgIC0gV2Ug
ZGVsYXkgdGhlICJiZWdpbiBwYXJzaW5nIiBjYWxsIHVudGlsIHdlIGFjdHVhbGx5IGF0dGFjaCB0
aGUKKyAgICAgICAgICAgICAgZWxlbWVudCB0byB0aGUgRE9NLiAgVGhhdCBzcGxpdHMgdGhlIHJl
c3BvbnNpYmlsaXR5IGZvciBjYWxsaW5nCisgICAgICAgICAgICAgIGJlZ2luL2ZpbmlzaGVkLCB3
aGljaCBpcyBsZXNzIHRoYW4gaWRlYWwsIGJ1dCBJIGRpZG4ndCBzZWUKKyAgICAgICAgICAgICAg
YW5vdGhlciBzb2x1dGlvbi4KKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlRnJv
bUF0b21pY1Rva2VuKToKKyAgICAgICAgICAgIC0gS2ljayBvZmYgdGhlIHF1ZXVlZCBtdXRhdGlv
bnMuCisKIDIwMTItMDEtMDMgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBQdXNoIGRyYXdzQ29udGVudCBhbmQgY29udGVudHNWaXNp
YmxlIGludG8gYWNjZWxlcmF0ZWQgY29tcG9zaXRvcgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkocmV2aXNpb24gMTAz
OTIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw1MyArODcsNjQgQEAgaW5saW5lIGJvb2wgaXNBbGxX
aGl0ZXNwYWNlKGNvbnN0IFN0cmluZwogCiB9IC8vIG5hbWVzcGFjZQogCitzdGF0aWMgaW5saW5l
IHZvaWQgZXhlY3V0ZVRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrJiB0YXNrKQoreworICAg
IGlmICh0YXNrLm5leHRDaGlsZCkKKyAgICAgICAgdGFzay5wYXJlbnQtPnBhcnNlckluc2VydEJl
Zm9yZSh0YXNrLmNoaWxkLmdldCgpLCB0YXNrLm5leHRDaGlsZC5nZXQoKSk7CisgICAgZWxzZQor
ICAgICAgICB0YXNrLnBhcmVudC0+cGFyc2VyQWRkQ2hpbGQodGFzay5jaGlsZC5nZXQoKSk7CisK
KyAgICAvLyBKYXZhU2NyaXB0IHJ1biBmcm9tIGJlZm9yZWxvYWQgKG9yIERPTSBNdXRhdGlvbiBv
ciBldmVudCBoYW5kbGVycykKKyAgICAvLyBtaWdodCBoYXZlIHJlbW92ZWQgdGhlIGNoaWxkLCBp
biB3aGljaCBjYXNlIHdlIHNob3VsZCBub3QgYXR0YWNoIGl0LgorCisgICAgaWYgKHRhc2suY2hp
bGQtPnBhcmVudE5vZGUoKSAmJiB0YXNrLnBhcmVudC0+YXR0YWNoZWQoKSAmJiAhdGFzay5jaGls
ZC0+YXR0YWNoZWQoKSkKKyAgICAgICAgdGFzay5jaGlsZC0+YXR0YWNoKCk7CisKKyAgICB0YXNr
LmNoaWxkLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOworCisgICAgaWYgKHRhc2suc2VsZkNsb3Np
bmcpCisgICAgICAgIHRhc2suY2hpbGQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworfQorCisv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHZvaWQuIENhbGxlcnMgc2hvdWxk
IGtlZXAgYSBwb2ludGVyIHRvCisvLyB0aGUgY2hpbGQgaWYgdGhleSB3YW50IG9uZS4KIHRlbXBs
YXRlPHR5cGVuYW1lIENoaWxkVHlwZT4KLVBhc3NSZWZQdHI8Q2hpbGRUeXBlPiBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6YXR0YWNoKENvbnRhaW5lck5vZGUqIHJhd1BhcmVudCwgUGFzc1JlZlB0cjxD
aGlsZFR5cGU+IHBycENoaWxkKQorUGFzc1JlZlB0cjxDaGlsZFR5cGU+IEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjphdHRhY2goQ29udGFpbmVyTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPENoaWxkVHlw
ZT4gcHJwQ2hpbGQpCiB7CiAgICAgUmVmUHRyPENoaWxkVHlwZT4gY2hpbGQgPSBwcnBDaGlsZDsK
LSAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcmF3UGFyZW50OwogCi0gICAgLy8g
RklYTUU6IEl0J3MgY29uZnVzaW5nIHRoYXQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaCBk
b2VzIHRoZSBtYWdpYwotICAgIC8vIHJlZGlyZWN0aW9uIHRvIHRoZSBmb3N0ZXIgcGFyZW50IGJ1
dCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQXRTaXRlCi0gICAgLy8gZG9lc24ndC4gSXQg
ZmVlbHMgbGlrZSB3ZSdyZSBtaXNzaW5nIGEgY29uY2VwdCBzb21laG93LgorICAgIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlVGFzayB0YXNrOworICAgIHRhc2sucGFyZW50ID0gcGFyZW50OworICAgIHRh
c2suY2hpbGQgPSBjaGlsZC5nZXQoKTsKKwogICAgIGlmIChzaG91bGRGb3N0ZXJQYXJlbnQoKSkg
ewotICAgICAgICBmb3N0ZXJQYXJlbnQoY2hpbGQuZ2V0KCkpOwotICAgICAgICBBU1NFUlQoY2hp
bGQtPmF0dGFjaGVkKCkgfHwgIWNoaWxkLT5wYXJlbnROb2RlKCkgfHwgIWNoaWxkLT5wYXJlbnRO
b2RlKCktPmF0dGFjaGVkKCkpOworICAgICAgICBmb3N0ZXJQYXJlbnQodGFzay5jaGlsZCk7CiAg
ICAgICAgIHJldHVybiBjaGlsZC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gQWRkIGFzIGEg
c2libGluZyBvZiB0aGUgcGFyZW50IGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBkZXB0
aCBhbGxvd2VkLgogICAgIGlmIChtX29wZW5FbGVtZW50cy5zdGFja0RlcHRoKCkgPiBtX21heGlt
dW1ET01UcmVlRGVwdGgpCi0gICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwot
Ci0gICAgcGFyZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgICAgIHRhc2sucGFyZW50
ID0gdGFzay5wYXJlbnQtPnBhcmVudE5vZGUoKTsKIAotICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIg
KERPTSBNdXRhdGlvbiwgYmVmb3JlbG9hZCwgZXQgYWwuKSBjb3VsZCBoYXZlIHJlbW92ZWQKLSAg
ICAvLyB0aGUgY2hpbGQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbid0IHRyeSBhdHRhY2hpbmcg
aXQuCi0gICAgaWYgKCFjaGlsZC0+cGFyZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gY2hpbGQu
cmVsZWFzZSgpOwotCi0gICAgaWYgKHBhcmVudC0+YXR0YWNoZWQoKSAmJiAhY2hpbGQtPmF0dGFj
aGVkKCkpCi0gICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAgICBtX2F0dGFjaG1lbnRRdWV1ZS5h
cHBlbmQodGFzayk7CiAgICAgcmV0dXJuIGNoaWxkLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQXRTaXRlKGNvbnN0IEF0dGFjaG1lbnRTaXRlJiBzaXRl
LCBQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
ZXhlY3V0ZVF1ZXVlZFRhc2tzKCkKIHsKLSAgICAvLyBGSVhNRTogSXQncyB1bmZvcnR1bmF0ZSB0
aGF0IHdlIG5lZWQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byBjaGlsZAotICAgIC8vIGhlcmUgdG8g
Y2FsbCBhdHRhY2goKS4gIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHdlIGNhbiByZWx5
IG9uCi0gICAgLy8gfHNpdGUucGFyZW50fCB0byBob2xkIGEgcmVmIGF0IHRoaXMgcG9pbnQuCi0g
ICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CisgICAgY29uc3Qgc2l6ZV90IHNpemUg
PSBtX2F0dGFjaG1lbnRRdWV1ZS5zaXplKCk7CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoc2l0ZS5uZXh0Q2hpbGQpCi0gICAgICAgIHNpdGUucGFyZW50LT5wYXJz
ZXJJbnNlcnRCZWZvcmUoY2hpbGQsIHNpdGUubmV4dENoaWxkKTsKLSAgICBlbHNlCi0gICAgICAg
IHNpdGUucGFyZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgLy8gQ29weSB0aGUgdGFz
ayBxdWV1ZSBpbnRvIGEgbG9jYWwgdmFyaWFibGUgaW4gY2FzZSBleGVjdXRlVGFzaworICAgIC8v
IHJlLWVudGVycyB0aGUgcGFyc2VyLgorICAgIEF0dGFjaG1lbnRRdWV1ZSBxdWV1ZTsKKyAgICBx
dWV1ZS5zd2FwKG1fYXR0YWNobWVudFF1ZXVlKTsKIAotICAgIC8vIEphdmFTY3JpcHQgcnVuIGZy
b20gYmVmb3JlbG9hZCAob3IgRE9NIE11dGF0aW9uIG9yIGV2ZW50IGhhbmRsZXJzKQotICAgIC8v
IG1pZ2h0IGhhdmUgcmVtb3ZlZCB0aGUgY2hpbGQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5v
dCBhdHRhY2ggaXQuCi0gICAgaWYgKGNoaWxkLT5wYXJlbnROb2RlKCkgJiYgc2l0ZS5wYXJlbnQt
PmF0dGFjaGVkKCkgJiYgIWNoaWxkLT5hdHRhY2hlZCgpKQotICAgICAgICBjaGlsZC0+YXR0YWNo
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGV4ZWN1
dGVUYXNrKHF1ZXVlW2ldKTsKKworICAgIC8vIFdlIG1pZ2h0IGJlIGRldGFjaGVkIG5vdy4KIH0K
IAogSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50KiBk
b2N1bWVudCwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCkKQEAgLTIyOSw3ICsyNDAsNyBA
QCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlCiB7CiAgICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CiAgICAgYXR0YWNoKG1f
YXR0YWNobWVudFJvb3QsIERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLm5h
bWUoKSwgU3RyaW5nOjphZG9wdCh0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCkpLCBTdHJpbmc6OmFk
b3B0KHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKSkpKTsKLSAgICAKKwogICAgIC8vIERPQ1RZUEUg
bm9kZXMgYXJlIG9ubHkgcHJvY2Vzc2VkIHdoZW4gcGFyc2luZyBmcmFnbWVudHMgdy9vIGNvbnRl
eHRFbGVtZW50cywgd2hpY2gKICAgICAvLyBuZXZlciBvY2N1cnMuICBIb3dldmVyLCBpZiB3ZSBl
dmVyIGNob3NlIHRvIHN1cHBvcnQgc3VjaCwgdGhpcyBjb2RlIGlzIHN1YnRseSB3cm9uZywKICAg
ICAvLyBiZWNhdXNlIGNvbnRleHQtbGVzcyBmcmFnbWVudHMgY2FuIGRldGVybWluZSB0aGVpciBv
d24gcXVpcmtzIG1vZGUsIGFuZCB0aHVzIGNoYW5nZQpAQCAtMjM4LDExICsyNDksMTQgQEAgdm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZQogICAgIEFTU0VSVCghbV9pc1Bh
cnNpbmdGcmFnbWVudCk7CiAgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKKwogICAgIGlmICh0b2tlbi5mb3JjZVF1aXJrcygpKQogICAgICAgICBtX2Rv
Y3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1bWVudDo6UXVpcmtzTW9kZSk7Ci0gICAg
ZWxzZQorICAgIGVsc2UgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGFjdHVhbGx5IGFkZCB0aGUg
RG9jdHlwZSBub2RlIHRvIHRoZSBET00uCisgICAgICAgIGV4ZWN1dGVRdWV1ZWRUYXNrcygpOwog
ICAgICAgICBtX2RvY3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKCk7Cisg
ICAgfQogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCkBAIC0zMDYsNyArMzIwLDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0U2VsZkNsbwogICAgIC8vIE5vcm1hbGx5IEhUTUxFbGVtZW50U3RhY2sg
aXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgZmluaXNoUGFyc2luZ0NoaWxkcmVuLAogICAgIC8v
IGJ1dCBzZWxmLWNsb3NpbmcgZWxlbWVudHMgYXJlIG5ldmVyIGluIHRoZSBlbGVtZW50IHN0YWNr
IHNvIHRoZSBzdGFjawogICAgIC8vIGRvZXNuJ3QgZ2V0IGEgY2hhbmNlIHRvIHRlbGwgdGhlbSB0
aGF0IHdlJ3JlIGRvbmUgcGFyc2luZyB0aGVpciBjaGlsZHJlbi4KLSAgICBlbGVtZW50LT5maW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICBtX2F0dGFjaG1lbnRRdWV1ZS5sYXN0KCkuc2VsZkNs
b3NpbmcgPSB0cnVlOwogICAgIC8vIEZJWE1FOiBEbyB3ZSB3YW50IHRvIGFja25vd2xlZGdlIHRo
ZSB0b2tlbidzIHNlbGYtY2xvc2luZyBmbGFnPwogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9y
Zy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1s
I2Fja25vd2xlZGdlLXNlbGYtY2xvc2luZy1mbGFnCiB9CkBAIC0zNDAsMTEgKzM1NCwxMSBAQCB2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduCiAKIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hp
dGVzcGFjZU1vZGUgd2hpdGVzcGFjZU1vZGUpCiB7Ci0gICAgQXR0YWNobWVudFNpdGUgc2l0ZTsK
LSAgICBzaXRlLnBhcmVudCA9IGN1cnJlbnROb2RlKCk7Ci0gICAgc2l0ZS5uZXh0Q2hpbGQgPSAw
OworICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrOworICAgIHRhc2sucGFyZW50ID0g
Y3VycmVudE5vZGUoKTsKKyAgICB0YXNrLm5leHRDaGlsZCA9IDA7CiAgICAgaWYgKHNob3VsZEZv
c3RlclBhcmVudCgpKQotICAgICAgICBmaW5kRm9zdGVyU2l0ZShzaXRlKTsKKyAgICAgICAgZmlu
ZEZvc3RlclNpdGUodGFzayk7CiAKICAgICAvLyBTdHJpbmdzIGNvbXBvc2VkIGVudGlyZWx5IG9m
IHdoaXRlc3BhY2UgYXJlIGxpa2VseSB0byBiZSByZXBlYXRlZC4KICAgICAvLyBUdXJuIHRoZW0g
aW50byBBdG9taWNTdHJpbmcgc28gd2Ugc2hhcmUgYSBzaW5nbGUgc3RyaW5nIGZvciBlYWNoLgpA
QCAtMzU2LDcgKzM3MCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHRO
b2QKICAgICAvLyBGSVhNRTogU3BsaXR0aW5nIHRleHQgbm9kZXMgaW50byBzbWFsbGVyIGNodW5r
cyBjb250cmFkaWN0cyBIVE1MNSBzcGVjLCBidXQgaXMgY3VycmVudGx5IG5lY2Vzc2FyeQogICAg
IC8vIGZvciBwZXJmb3JtYW5jZSwgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU4OTg+LgogCi0gICAgTm9kZSogcHJldmlvdXNDaGlsZCA9IHNpdGUubmV4dENo
aWxkID8gc2l0ZS5uZXh0Q2hpbGQtPnByZXZpb3VzU2libGluZygpIDogc2l0ZS5wYXJlbnQtPmxh
c3RDaGlsZCgpOworICAgIE5vZGUqIHByZXZpb3VzQ2hpbGQgPSB0YXNrLm5leHRDaGlsZCA/IHRh
c2submV4dENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IHRhc2sucGFyZW50LT5sYXN0Q2hpbGQo
KTsKICAgICBpZiAocHJldmlvdXNDaGlsZCAmJiBwcmV2aW91c0NoaWxkLT5pc1RleHROb2RlKCkp
IHsKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gYXBwZW5kIHRvIHRo
aXMgdGV4dCBub2RlIGlmIGl0CiAgICAgICAgIC8vIHdhcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW5z
ZXJ0ZWQgYnkgdGhlIHBhcnNlci4KQEAgLTM2NSwxNiArMzc5LDE3IEBAIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydFRleHROb2QKICAgICB9CiAKICAgICB3aGlsZSAoY3VycmVudFBv
c2l0aW9uIDwgY2hhcmFjdGVycy5sZW5ndGgoKSkgewotICAgICAgICBSZWZQdHI8VGV4dD4gdGV4
dE5vZGUgPSBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQoc2l0ZS5wYXJlbnQtPmRvY3VtZW50
KCksIHNob3VsZFVzZUF0b21pY1N0cmluZyA/IEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzKS5zdHJp
bmcoKSA6IGNoYXJhY3RlcnMsIGN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIFJlZlB0cjxUZXh0
PiB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdCh0YXNrLnBhcmVudC0+ZG9j
dW1lbnQoKSwgc2hvdWxkVXNlQXRvbWljU3RyaW5nID8gQXRvbWljU3RyaW5nKGNoYXJhY3RlcnMp
LnN0cmluZygpIDogY2hhcmFjdGVycywgY3VycmVudFBvc2l0aW9uKTsKICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBhIHdob2xlIHN0cmluZyBvZiB1bmJyZWFrYWJsZSBjaGFyYWN0ZXJzIHRoZSBhYm92
ZSBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIEV4Y2VlZGluZyB0aGUgbGVuZ3RoIGxp
bWl0IGlzIHRoZSBsZXNzZXIgZXZpbC4KICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+bGVuZ3RoKCkp
IHsKICAgICAgICAgICAgIFN0cmluZyBzdWJzdHJpbmcgPSBjaGFyYWN0ZXJzLnN1YnN0cmluZyhj
dXJyZW50UG9zaXRpb24pOwotICAgICAgICAgICAgdGV4dE5vZGUgPSBUZXh0OjpjcmVhdGUoc2l0
ZS5wYXJlbnQtPmRvY3VtZW50KCksIHNob3VsZFVzZUF0b21pY1N0cmluZyA/IEF0b21pY1N0cmlu
ZyhzdWJzdHJpbmcpLnN0cmluZygpIDogc3Vic3RyaW5nKTsKKyAgICAgICAgICAgIHRleHROb2Rl
ID0gVGV4dDo6Y3JlYXRlKHRhc2sucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRVc2VBdG9taWNT
dHJpbmcgPyBBdG9taWNTdHJpbmcoc3Vic3RyaW5nKS5zdHJpbmcoKSA6IHN1YnN0cmluZyk7CiAg
ICAgICAgIH0KIAogICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gdGV4dE5vZGUtPmxlbmd0aCgp
OwogICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uIDw9IGNoYXJhY3RlcnMubGVuZ3RoKCkp
OwotICAgICAgICBhdHRhY2hBdFNpdGUoc2l0ZSwgdGV4dE5vZGUucmVsZWFzZSgpKTsKKyAgICAg
ICAgdGFzay5jaGlsZCA9IHRleHROb2RlLnJlbGVhc2UoKTsKKyAgICAgICAgZXhlY3V0ZVRhc2so
dGFzayk7CiAgICAgfQogfQogCkBAIC00ODEsMjMgKzQ5NiwyMSBAQCB2b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjpnZW5lcmF0ZUltcGxpCiAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcCgpOwog
fQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZShBdHRhY2htZW50
U2l0ZSYgc2l0ZSkKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmZpbmRGb3N0ZXJTaXRlKEhU
TUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYgdGFzaykKIHsKICAgICBIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKiBsYXN0VGFibGVFbGVtZW50UmVjb3JkID0gbV9vcGVuRWxlbWVudHMudG9w
bW9zdCh0YWJsZVRhZy5sb2NhbE5hbWUoKSk7CiAgICAgaWYgKGxhc3RUYWJsZUVsZW1lbnRSZWNv
cmQpIHsKICAgICAgICAgRWxlbWVudCogbGFzdFRhYmxlRWxlbWVudCA9IGxhc3RUYWJsZUVsZW1l
bnRSZWNvcmQtPmVsZW1lbnQoKTsKICAgICAgICAgaWYgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IGxhc3RUYWJsZUVsZW1lbnQtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgc2l0ZS5wYXJl
bnQgPSBwYXJlbnQ7Ci0gICAgICAgICAgICBzaXRlLm5leHRDaGlsZCA9IGxhc3RUYWJsZUVsZW1l
bnQ7CisgICAgICAgICAgICB0YXNrLnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgICAgIHRhc2su
bmV4dENoaWxkID0gbGFzdFRhYmxlRWxlbWVudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBzaXRlLnBhcmVudCA9IGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQtPm5leHQo
KS0+ZWxlbWVudCgpOwotICAgICAgICBzaXRlLm5leHRDaGlsZCA9IDA7CisgICAgICAgIHRhc2su
cGFyZW50ID0gbGFzdFRhYmxlRWxlbWVudFJlY29yZC0+bmV4dCgpLT5lbGVtZW50KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gRnJhZ21lbnQgY2FzZQotICAgIHNpdGUucGFyZW50
ID0gbV9vcGVuRWxlbWVudHMucm9vdE5vZGUoKTsgLy8gRG9jdW1lbnRGcmFnbWVudAotICAgIHNp
dGUubmV4dENoaWxkID0gMDsKKyAgICB0YXNrLnBhcmVudCA9IG1fb3BlbkVsZW1lbnRzLnJvb3RO
b2RlKCk7IC8vIERvY3VtZW50RnJhZ21lbnQKIH0KIAogYm9vbCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6c2hvdWxkRm9zdGVyUGFyZW50KCkgY29uc3QKQEAgLTUwNywxMSArNTIwLDEzIEBAIGJvb2wg
SFRNTENvbnN0cnVjdGlvblNpdGU6OnNob3VsZEZvc3RlclAKICAgICAgICAgJiYgY2F1c2VzRm9z
dGVyUGFyZW50aW5nKGN1cnJlbnRFbGVtZW50KCktPnRhZ1FOYW1lKCkpOwogfQogCi12b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpmb3N0ZXJQYXJlbnQoTm9kZSogbm9kZSkKK3ZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6OmZvc3RlclBhcmVudChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiB7Ci0g
ICAgQXR0YWNobWVudFNpdGUgc2l0ZTsKLSAgICBmaW5kRm9zdGVyU2l0ZShzaXRlKTsKLSAgICBh
dHRhY2hBdFNpdGUoc2l0ZSwgbm9kZSk7CisgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRh
c2s7CisgICAgdGFzay5uZXh0Q2hpbGQgPSAwOworICAgIGZpbmRGb3N0ZXJTaXRlKHRhc2spOwor
ICAgIHRhc2suY2hpbGQgPSBub2RlOworICAgIGV4ZWN1dGVUYXNrKHRhc2spOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmgJKHJldmlzaW9uIDEwMzkyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDM1IEBACiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2sgeworICAg
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzaygpCisgICAgICAgIDogc2VsZkNsb3NpbmcoZmFsc2Up
CisgICAgeworICAgIH0KKworICAgIHZvaWQgdGFrZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2sm
IG90aGVyKQorICAgIHsKKyAgICAgICAgcGFyZW50ID0gb3RoZXIucGFyZW50LnJlbGVhc2UoKTsK
KyAgICAgICAgbmV4dENoaWxkID0gb3RoZXIubmV4dENoaWxkLnJlbGVhc2UoKTsKKyAgICAgICAg
Y2hpbGQgPSBvdGhlci5jaGlsZC5yZWxlYXNlKCk7CisgICAgICAgIHNlbGZDbG9zaW5nID0gb3Ro
ZXIuc2VsZkNsb3Npbmc7CisgICAgfQorCisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVu
dDsKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOworICAgIFJlZlB0cjxOb2RlPiBjaGlsZDsK
KyAgICBib29sIHNlbGZDbG9zaW5nOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitu
YW1lc3BhY2UgV1RGIHsKK3RlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZVRhc2s+IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgeyB9Owor
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTUsNiArODQs
NyBAQCBwdWJsaWM6CiAgICAgfkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2b2lkIGRl
dGFjaCgpOworICAgIHZvaWQgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAKICAgICB2b2lkIGluc2Vy
dERvY3R5cGUoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBpbnNlcnRDb21tZW50KEF0b21p
Y0hUTUxUb2tlbiYpOwpAQCAtNzgsNyArMTA4LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8
RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKik7CiAKICAgICBib29sIHNob3VsZEZvc3RlclBhcmVudCgpIGNv
bnN0OwotICAgIHZvaWQgZm9zdGVyUGFyZW50KE5vZGUqKTsKKyAgICB2b2lkIGZvc3RlclBhcmVu
dChQYXNzUmVmUHRyPE5vZGU+KTsKIAogICAgIGJvb2wgaW5kZXhPZkZpcnN0VW5vcGVuRm9ybWF0
dGluZ0VsZW1lbnQodW5zaWduZWQmIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4KSBjb25zdDsKICAg
ICB2b2lkIHJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CkBAIC0xMjEs
MTcgKzE1MSwxNSBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQXR0
YWNobWVudFNpdGUgewotICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQ7Ci0gICAgICAgIE5v
ZGUqIG5leHRDaGlsZDsKLSAgICB9OworICAgIC8vIEluIHRoZSBjb21tb24gY2FzZSwgdGhpcyBx
dWV1ZSB3aWxsIGhhdmUgb25seSBvbmUgdGFzayBiZWNhdXNlIG1vc3QKKyAgICAvLyB0b2tlbnMg
cHJvZHVjZSBvbmx5IG9uZSBET00gbXV0YXRpb24uCisgICAgdHlwZWRlZiBWZWN0b3I8SFRNTENv
bnN0cnVjdGlvblNpdGVUYXNrLCAxPiBBdHRhY2htZW50UXVldWU7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGlsZFR5cGU+CiAgICAgUGFzc1JlZlB0cjxDaGlsZFR5cGU+IGF0dGFjaChDb250
YWluZXJOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8Q2hpbGRUeXBlPiBjaGlsZCk7CiAgICAgUGFz
c1JlZlB0cjxFbGVtZW50PiBhdHRhY2hUb0N1cnJlbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAK
LSAgICB2b2lkIGF0dGFjaEF0U2l0ZShjb25zdCBBdHRhY2htZW50U2l0ZSYsIFBhc3NSZWZQdHI8
Tm9kZT4gY2hpbGQpOwotICAgIHZvaWQgZmluZEZvc3RlclNpdGUoQXR0YWNobWVudFNpdGUmKTsK
KyAgICB2b2lkIGZpbmRGb3N0ZXJTaXRlKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYpOwogCiAg
ICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVsZW1lbnQo
RWxlbWVudCopOwogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CkBAIC0xNTEsNiAr
MTc5LDggQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIEhUTUxFbGVtZW50U3RhY2sgbV9vcGVuRWxl
bWVudHM7CiAgICAgbXV0YWJsZSBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0IG1fYWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzOwogCisgICAgQXR0YWNobWVudFF1ZXVlIG1fYXR0YWNobWVudFF1ZXVl
OworCiAgICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fZnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uOwogICAgIGJvb2wgbV9pc1BhcnNpbmdGcmFnbWVudDsKIApAQCAtMTYzLDYgKzE5
Myw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9tYXhpbXVtRE9NVHJlZURlcHRoOwogfTsK
IAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCShyZXZpc2lvbiAxMDM5
MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTg1LDcgKzU4NSw2IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6
cHVzaENvbW1vbihQYXNzUmUKIAogICAgIG1fc3RhY2tEZXB0aCsrOwogICAgIG1fdG9wID0gYWRv
cHRQdHIobmV3IEVsZW1lbnRSZWNvcmQobm9kZSwgbV90b3AucmVsZWFzZSgpKSk7Ci0gICAgdG9w
Tm9kZSgpLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwogfQogCiB2b2lkIEhUTUxFbGVtZW50U3Rh
Y2s6OnBvcENvbW1vbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDEwMzkyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2ICs0
NzgsOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21BCiAKICAgICBt
X3BhcnNlci0+dG9rZW5pemVyKCktPnNldEZvcmNlTnVsbENoYXJhY3RlclJlcGxhY2VtZW50KG1f
aW5zZXJ0aW9uTW9kZSA9PSBUZXh0TW9kZSB8fCBpbkZvcmVpZ25Db250ZW50KTsKICAgICBtX3Bh
cnNlci0+dG9rZW5pemVyKCktPnNldFNob3VsZEFsbG93Q0RBVEEoaW5Gb3JlaWduQ29udGVudCk7
CisKKyAgICBtX3RyZWUuZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CisgICAgLy8gV2UgbWlnaHQgYmUg
ZGV0YWNoZWQgbm93LgogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDM5OTApCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0w
MS0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFR3byBudWxs
IGNyYXNoZXMgaW4gVHJlZWJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY2MTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CisKKyAgICAgICAgVGVzdCB0aGF0IHdlIG5vIGxvbmdlciBjcmFzaCBvbiB0aGlzIHRlc3QgY2Fz
ZS4KKworICAgICAgICAqIGZhc3QvcGFyc2VyL3JlLWVudGVyLWFuZC1jcmFzaC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcGFyc2VyL3JlLWVudGVyLWFuZC1jcmFzaC5odG1s
OiBBZGRlZC4KKwogMjAxMi0wMS0wMyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFB1c2ggZHJhd3NDb250ZW50IGFuZCBjb250ZW50
c1Zpc2libGUgaW50byBhY2NlbGVyYXRlZCBjb21wb3NpdG9yCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3BhcnNlci9yZS1lbnRlci1hbmQtY3Jhc2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvcGFyc2VyL3JlLWVudGVyLWFuZC1jcmFzaC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9yZS1lbnRlci1hbmQtY3Jh
c2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK0FMRVJUOiBUaGlz
IHRlc3QgcGFzZXMgaWYgaXQgZG9lc24ndCBjcmFzaC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9wYXJzZXIvcmUtZW50ZXItYW5kLWNyYXNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9wYXJzZXIvcmUtZW50ZXItYW5kLWNyYXNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3BhcnNlci9yZS1lbnRlci1hbmQtY3Jhc2guaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3IEBACis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2FsZXJ0KCJU
aGlzIHRlc3QgcGFzZXMgaWYgaXQgZG9lc24ndCBjcmFzaC4iKTsKKzwvc2NyaXB0PgoreHh4PGlm
cmFtZSBvbmxvYWQ9ImRvY3VtZW50LndyaXRlKCc8aWZyYW1lIG9ubG9hZD0mcXVvdDtkb2N1bWVu
dC53cml0ZShcJzxzY3JpcHQ+XCcpO2RvY3VtZW50LmNsb3NlKCk7JnF1b3Q7PjwvaWZyYW1lPicp
OyI+eXl5Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>