<?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>12216</bug_id>
          <alias>mark-stack</alias>
          <creation_ts>2007-01-11 15:28:14 -0800</creation_ts>
          <short_desc>Stack overflow crash in JavaScript garbage collector mark pass</short_desc>
          <delta_ts>2009-08-21 14:49:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Carson">dacarson</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>KwhiteRight</cc>
    
    <cc>mbritto</cc>
    
    <cc>mjs</cc>
    
    <cc>salj</cc>
    
    <cc>zalan</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>35730</commentid>
    <comment_count>0</comment_count>
    <who name="David Carson">dacarson</who>
    <bug_when>2007-01-11 15:28:14 -0800</bug_when>
    <thetext>In relation to the bug:
http://bugs.webkit.org/show_bug.cgi?id=3743
If I add two more zeros in the for loop below (taken from the test case for the bug), a stack overflow occurs in the Mark() GC functionality, before it makes it to the ary.toString() call.

var ary=[0];
for(var i=1; i&lt;1000000; i++)
  ary=[ary, i];

shouldThrow(&quot;ary.toString()&quot;);

It seems that the mac dumps out at a stack depth of 174580 frames.
Below is a copy of the stack dump with the repeating part removed. The current stack overflow protection relies on JS going through the method JSObject::call(). However, as can be seen by the stack dump, it does not go through it. We can check depth in mark() and throw exception. But it implies we will never mark the inner objects and they won&apos;t be gc later.


#0	0x0053a957 in KJS::JSImmediate::isImmediate at JSImmediate.h:64
#1	0x0053b0af in KJS::JSValue::downcast at value.h:249
#2	0x0053b240 in KJS::JSValue::marked at value.h:357
#3	0x004e458f in KJS::JSObject::mark at object.cpp:122
#4	0x004ba49f in KJS::ArrayInstance::mark at array_object.cpp:278
#5	0x0053b219 in KJS::JSValue::mark at value.h:352
#6	0x004ba4fb in KJS::ArrayInstance::mark at array_object.cpp:283
#7	0x0053b219 in KJS::JSValue::mark at value.h:352
#8	0x004ba4fb in KJS::ArrayInstance::mark at array_object.cpp:283
#9	0x0053b219 in KJS::JSValue::mark at value.h:352
#10	0x004ba4fb in KJS::ArrayInstance::mark at array_object.cpp:283
....
#174509	0x0053b219 in KJS::JSValue::mark at value.h:352
#174510	0x004ba4fb in KJS::ArrayInstance::mark at array_object.cpp:283
#174511	0x0053b219 in KJS::JSValue::mark at value.h:352
#174512	0x004ba4fb in KJS::ArrayInstance::mark at array_object.cpp:283
#174513	0x0053b219 in KJS::JSValue::mark at value.h:352
#174514	0x004ba4fb in KJS::ArrayInstance::mark at array_object.cpp:283
#174515	0x0053b219 in KJS::JSValue::mark at value.h:352
#174516	0x004e7456 in KJS::PropertyMap::mark at property_map.cpp:551
#174517	0x004e45ae in KJS::JSObject::mark at object.cpp:125
#174518	0x012680c7 in KJS::Window::mark at kjs_window.cpp:465
#174519	0x005434ee in KJS::ScopeChain::mark at object.h:596
#174520	0x0052eab4 in KJS::Context::mark at Context.cpp:92
#174521	0x004cb3ae in KJS::Interpreter::mark at interpreter.cpp:657
#174522	0x0124fc10 in KJS::ScriptInterpreter::mark at kjs_binding.cpp:227
#174523	0x004bf45d in KJS::Collector::collect at collector.cpp:474
#174524	0x004bf984 in KJS::Collector::allocate at collector.cpp:123
#174525	0x004f3371 in KJS::JSCell::operator new at value.cpp:41
#174526	0x004baba3 in KJS::ArrayObjectImp::construct at array_object.cpp:960
#174527	0x004dc51f in KJS::ElementNode::evaluate at nodes.cpp:413
#174528	0x004dc38a in KJS::ArrayNode::evaluate at nodes.cpp:438
#174529	0x004dea09 in KJS::AssignResolveNode::evaluate at nodes.cpp:1420
#174530	0x004d836c in KJS::ExprStatementNode::execute at nodes.cpp:1672
#174531	0x004d7484 in KJS::ForNode::execute at nodes.cpp:1819
#174532	0x004d609a in KJS::SourceElementsNode::execute at nodes.cpp:2455
#174533	0x004d489c in KJS::BlockNode::execute at nodes.cpp:1648
#174534	0x004cdec1 in KJS::Interpreter::evaluate at interpreter.cpp:478
#174535	0x01266e9d in WebCore::KJSProxy::evaluate at kjs_proxy.cpp:65
#174536	0x0139d3f5 in WebCore::FrameLoader::executeScript at FrameLoader.cpp:690
#174537	0x0101dc0a in WebCore::HTMLTokenizer::scriptExecution at HTMLTokenizer.cpp:501
#174538	0x010203e8 in WebCore::HTMLTokenizer::scriptHandler at HTMLTokenizer.cpp:451
#174539	0x010208ff in WebCore::HTMLTokenizer::parseSpecial at HTMLTokenizer.cpp:308
#174540	0x0102277c in WebCore::HTMLTokenizer::parseTag at HTMLTokenizer.cpp:1228
#174541	0x01022f84 in WebCore::HTMLTokenizer::write at HTMLTokenizer.cpp:1442
#174542	0x01393302 in WebCore::FrameLoader::write at FrameLoader.cpp:891
#174543	0x0139342b in WebCore::FrameLoader::addData at FrameLoader.cpp:1511
#174544	0x010fbf4f in -[WebCoreFrameBridge addData:] at WebCoreFrameBridge.mm:298
#174545	0x010ff7b6 in -[WebCoreFrameBridge receivedData:textEncodingName:] at WebCoreFrameBridge.mm:1621
#174546	0x00331db1 in -[WebHTMLRepresentation receivedData:withDataSource:] at WebHTMLRepresentation.mm:157
#174547	0x0032c2c7 in -[WebDataSource(WebInternal) _receivedData:] at WebDataSource.mm:175
#174548	0x00394087 in WebFrameLoaderClient::committedLoad at WebFrameLoaderClient.mm:623
#174549	0x0138fedf in WebCore::FrameLoader::committedLoad at FrameLoader.cpp:2861
#174550	0x0139f8d1 in WebCore::DocumentLoader::commitLoad at DocumentLoader.cpp:329
#174551	0x0139f92a in WebCore::DocumentLoader::receivedData at DocumentLoader.cpp:341
#174552	0x0138f35b in WebCore::FrameLoader::receivedData at FrameLoader.cpp:1901
#174553	0x01376078 in WebCore::MainResourceLoader::addData at MainResourceLoaderMac.mm:144
#174554	0x01374e31 in WebCore::ResourceLoader::didReceiveData at ResourceLoaderMac.mm:225
#174555	0x013763ad in WebCore::MainResourceLoader::didReceiveData at MainResourceLoaderMac.mm:314
#174556	0x01374a1e in WebCore::ResourceLoader::didReceiveData at ResourceLoaderMac.mm:385
#174557	0x01383424 in -[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:] at ResourceHandleMac.mm:291
#174558	0x9265eb86 in -[NSURLConnection(NSURLConnectionInternal) _sendDidReceiveDataCallback]
#174559	0x9265ce67 in -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks]
#174560	0x9265cb41 in _sendCallbacks
#174561	0x9082afd2 in CFRunLoopRunSpecific
#174562	0x9082ab0e in CFRunLoopRunInMode
#174563	0x9262ddc6 in -[NSRunLoop runMode:beforeDate:]
#174564	0x9267b970 in -[NSRunLoop runUntilDate:]
#174565	0x9352f0c0 in NSCoreDragReceiveProc
#174566	0x917f517d in DoDropMessage
#174567	0x917f633d in CoreDragMessageHandler
#174568	0x90872b7a in __CFMessagePortPerform
#174569	0x9082b66d in CFRunLoopRunSpecific
#174570	0x9082ab0e in CFRunLoopRunInMode
#174571	0x92ddabef in RunCurrentEventLoopInMode
#174572	0x92dda2fd in ReceiveNextEventCommon
#174573	0x92dda154 in BlockUntilNextEventMatchingListInMode
#174574	0x9327f465 in _DPSNextEvent
#174575	0x9327f056 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
#174576	0x00006cea in ??
#174577	0x93278ddb in -[NSApplication run]
#174578	0x9326cd2f in NSApplicationMain
#174579	0x0005f54a in ??
#174580	0x0005f471 in ??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35731</commentid>
    <comment_count>1</comment_count>
      <attachid>12371</attachid>
    <who name="David Carson">dacarson</who>
    <bug_when>2007-01-11 15:30:14 -0800</bug_when>
    <thetext>Created attachment 12371
Opening this file _WILL_ cause WebKit to crash

This file shows the crash. Careful clicking on it, as it will cause Safari to crash. Save it to your filesystem before opening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35734</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-01-11 17:03:02 -0800</bug_when>
    <thetext>Reproducible crash =&gt; p1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34730</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-16 00:04:11 -0800</bug_when>
    <thetext>Clearly we can fix this by changing the marking system to not mark recursively. Instead the mark functions can simply add the items to mark to a vector passed into the mark function, and the caller can then mark those in turn. The tricky part may be doing this efficiently!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34601</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-01-16 19:48:57 -0800</bug_when>
    <thetext>&lt;rdar://problem/4928697&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15086</commentid>
    <comment_count>5</comment_count>
    <who name="M.E. O&apos;Neill">oneill+webkit</who>
    <bug_when>2007-04-10 23:18:24 -0700</bug_when>
    <thetext>Here&apos;s another example, found while playing with ways to work around bug 4045

http://www.cs.hmc.edu/~oneill/cps-sum.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4728</commentid>
    <comment_count>6</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-07-14 17:38:57 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Clearly we can fix this by changing the marking system to not mark recursively.
&gt; Instead the mark functions can simply add the items to mark to a vector passed
&gt; into the mark function, and the caller can then mark those in turn. The tricky
&gt; part may be doing this efficiently!

The only portable way of fixing this that I can see is to essentially convert the marking code to continuation-passing style, so that all temporary storage used during marking is allocated in a few vectors on the heap, and transfer of control between the mark() methods of different cell classes is done using a trampoline. With GCC, one could use tail recursion instead of a trampoline for a slight optimization, but that isn&apos;t portable, and doesn&apos;t even work with separate compilation in GCC.

Does this sound like a good idea to anyone else? I will gladly implement it if no one has any objections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4730</commentid>
    <comment_count>7</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-07-14 19:28:58 -0700</bug_when>
    <thetext>In my previous comment, I proposed a fix for this bug and said that I didn&apos;t see any other portable way of fixing it. Here is another method that is not as portable, but won&apos;t require as many changes to existing code as the proposal in my previous comment, and will probably be more efficient, as replacing stack allocation with heap allocation gives a performance hit on modern x86 processors. It also lets you fall back to the existing code with #ifdef if some of the non-portable things are not supported properly.

To avoid the stack overflow, one can implement &quot;segmented stacks&quot; using setjmp() and longjmp(). Before beginning the marking process, malloc a new region to be used as the stack. Construct the proper jmp_buf (this is non-portable) that uses this new region as a stack and longjmp() to it. Now, every time you are going to call another method, double check that you have enough stack space left by whatever method you would like (calling the usual functions to get the stack pointer, comparing pointers, or checking SP with some inline assembly). If you don&apos;t, allocate a new region of memory to be used as a stack, dump a setjmp() into the beginning of it, manufacture another jmp_buf that uses this region as a stack, and then resume business as usual. When the other method returns, free the new stack you allocated, and longjmp() back to where you were. You don&apos;t even need to do this every method call, only once whenever another method call from the current method call could possibly overflow the stack. Of course, if you know the size of the usual stack, you could avoid the initial allocation.

This does kill any chance of using C++ exceptions in the new stack, but it will probably be a lot more efficient than using continuation-passing style. Beyond a stack comparison and a branch that will likely be predicted properly, it only kicks in when the stack overflows, whereas with CPS you always take a bit of a hit in order to handle the unusual case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60555</commentid>
    <comment_count>8</comment_count>
      <attachid>17110</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-07 06:57:39 -0800</bug_when>
    <thetext>Created attachment 17110
incomplete patch that uses an explicit mark stack - this is actually a speedup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60574</commentid>
    <comment_count>9</comment_count>
      <attachid>17110</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-07 10:43:15 -0800</bug_when>
    <thetext>Comment on attachment 17110
incomplete patch that uses an explicit mark stack - this is actually a speedup

I didn&apos;t mean to flag this for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62440</commentid>
    <comment_count>10</comment_count>
      <attachid>17544</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 00:50:07 -0800</bug_when>
    <thetext>Created attachment 17544
[1/4]         Not reviewed.


        Fix DumpRenderTree ObjC bug comparing strings.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController identityIsEqual::]): Compare strings with string
        equality instead of identiy equality.
---
 WebKitTools/ChangeLog                           |   13 +++++++++++++
 WebKitTools/DumpRenderTree/mac/ObjCController.m |    2 ++
 2 files changed, 15 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62441</commentid>
    <comment_count>11</comment_count>
      <attachid>17545</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 00:50:12 -0800</bug_when>
    <thetext>Created attachment 17545
[2/4] JavaScriptCore:


        Not reviewed.

        Implement mark stack. This version is not suitable for prime time because it makes a
        huge allocation on every collect, and potentially makes marking of detached subtrees
        slow. But it is a .2% - .4% speedup even without much tweaking.

        The basic approach is to replace mark() methods with
        markChildren(MarkStack&amp;) methods. Reachable references are pushed
        onto a mark stack (which encapsulates ignoring already-marked
        references).

        Objects are no longer responsible for actually setting their own
        mark bits, the collector does that. This means that for objects on
        the number heap we don&apos;t have to call markChildren() at all since
        we know there aren&apos;t any.

        The mark phase of collect pushes roots onto the mark stack
        and drains it as often as possible.

        To make this approach viable requires a constant-size mark stack
        and a slow fallback approach for when the stack size is exceeded,
        plus optimizations to make the required stack small in common
        cases. This should be doable.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/ExecState.cpp:
        (KJS::ExecState::markChildren):
        * kjs/ExecState.h:
        * kjs/JSWrapperObject.cpp:
        (KJS::JSWrapperObject::markChildren):
        * kjs/JSWrapperObject.h:
        * kjs/array_instance.cpp:
        (KJS::ArrayInstance::markChildren):
        * kjs/array_instance.h:
        * kjs/bool_object.cpp:
        (BooleanInstance::markChildren):
        * kjs/bool_object.h:
        * kjs/collector.cpp:
        (KJS::Collector::heapAllocate):
        (KJS::drainMarkStack):
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::markCurrentThreadConservatively):
        (KJS::Collector::markOtherThreadConservatively):
        (KJS::Collector::markProtectedObjects):
        (KJS::Collector::markMainThreadOnlyObjects):
        (KJS::Collector::collect):
        * kjs/collector.h:
        (KJS::Collector::cellMayHaveRefs):
        * kjs/error_object.cpp:
        * kjs/error_object.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::markChildren):
        (KJS::Arguments::Arguments):
        (KJS::Arguments::markChildren):
        (KJS::ActivationImp::markChildren):
        * kjs/function.h:
        * kjs/internal.cpp:
        (KJS::GetterSetterImp::markChildren):
        * kjs/interpreter.cpp:
        (KJS::Interpreter::markRoots):
        * kjs/interpreter.h:
        * kjs/list.cpp:
        (KJS::List::markProtectedListsSlowCase):
        * kjs/list.h:
        (KJS::List::markProtectedLists):
        * kjs/object.cpp:
        (KJS::JSObject::markChildren):
        * kjs/object.h:
        (KJS::ScopeChain::markChildren):
        * kjs/property_map.cpp:
        (KJS::PropertyMap::markChildren):
        * kjs/property_map.h:
        * kjs/scope_chain.h:
        * kjs/string_object.cpp:
        (KJS::StringInstance::markChildren):
        * kjs/string_object.h:
        * kjs/value.h:
        (KJS::JSValue::markChildren):

JavaScriptGlue:

        Not reviewed.

        Fixups for JavaScriptCore mark stack.

        * JSObject.cpp:
        (JSUserObject::Mark):
        * JSObject.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectMark):
        * JSValueWrapper.h:
        * UserObjectImp.cpp:
        * UserObjectImp.h:

WebCore:

        Not reviewed.

        Implement mark stack. This version is not suitable for prime time because it makes a
        huge allocation on every collect, and potentially makes marking of detached subtrees
        slow. But it is a .2% - .4% speedup even without much tweaking.

        I replaced mark() methods with markChildren() as usual. One
        optimization that is lost is avoiding walking detached DOM
        subtrees more than once to mark them; since marking is not
        recursive there&apos;s no obvious way to bracket operation on the tree
        any more.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::markChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::markChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::markChildren):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::markChildren):
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_events.cpp:
        (WebCore::JSUnprotectedEventListener::markChildren):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::markChildren):
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:
        * dom/NodeFilter.h:
        * dom/NodeFilterCondition.h:

        Not reviewed.

        - Test cases for &quot;Stack overflow crash in JavaScript garbage collector mark pass&quot;
        http://bugs.webkit.org/show_bug.cgi?id=12216

        I have fixed this with the mark stack work.

        * fast/js/gc-breadth-2-expected.txt: Added.
        * fast/js/gc-breadth-2.html: Added.
        * fast/js/gc-breadth-expected.txt: Added.
        * fast/js/gc-breadth.html: Added.
        * fast/js/gc-depth-expected.txt: Added.
        * fast/js/gc-depth.html: Added.
        * fast/js/resources/gc-breadth-2.js: Added.
        * fast/js/resources/gc-breadth.js: Added.
        * fast/js/resources/gc-depth.js: Added.

        Not reviewed.

        Add the actual mark stack. Forgot to include this in my original commit.

        * kjs/MarkStack.h: Added.
        (KJS::MarkStack::push):
        (KJS::MarkStack::pushAtom):
        (KJS::MarkStack::pop):
        (KJS::MarkStack::isEmpty):
        (KJS::MarkStack::reserveCapacity):

        Not reviewed.

        - remove over-optimistic assert

        * kjs/value.h:
---
 JavaScriptCore/ChangeLog                           |  168 ++++++++++++++
 JavaScriptCore/JavaScriptCore.exp                  |    9 +-
 .../JavaScriptCore.xcodeproj/project.pbxproj       |    4 +
 JavaScriptCore/kjs/ExecState.cpp                   |    4 +-
 JavaScriptCore/kjs/ExecState.h                     |    2 +-
 JavaScriptCore/kjs/JSWrapperObject.cpp             |    7 +-
 JavaScriptCore/kjs/JSWrapperObject.h               |    8 +-
 JavaScriptCore/kjs/MarkStack.h                     |  229 ++++++++++++++++++++
 JavaScriptCore/kjs/array_instance.cpp              |   17 +-
 JavaScriptCore/kjs/array_instance.h                |    2 +-
 JavaScriptCore/kjs/bool_object.cpp                 |   19 +-
 JavaScriptCore/kjs/bool_object.h                   |    3 +-
 JavaScriptCore/kjs/collector.cpp                   |   64 ++++--
 JavaScriptCore/kjs/collector.h                     |   25 ++-
 JavaScriptCore/kjs/date_object.cpp                 |   13 +-
 JavaScriptCore/kjs/date_object.h                   |    6 +-
 JavaScriptCore/kjs/error_object.cpp                |    6 -
 JavaScriptCore/kjs/error_object.h                  |    2 -
 JavaScriptCore/kjs/function.cpp                    |   39 ++--
 JavaScriptCore/kjs/function.h                      |    6 +-
 JavaScriptCore/kjs/internal.cpp                    |   12 +-
 JavaScriptCore/kjs/interpreter.cpp                 |  144 ++++++------
 JavaScriptCore/kjs/interpreter.h                   |    2 +-
 JavaScriptCore/kjs/list.cpp                        |    9 +-
 JavaScriptCore/kjs/list.h                          |    6 +-
 JavaScriptCore/kjs/number_object.cpp               |   16 +-
 JavaScriptCore/kjs/number_object.h                 |    4 +-
 JavaScriptCore/kjs/object.cpp                      |   11 +-
 JavaScriptCore/kjs/object.h                        |   14 +-
 JavaScriptCore/kjs/property_map.cpp                |   16 +-
 JavaScriptCore/kjs/property_map.h                  |    3 +-
 JavaScriptCore/kjs/scope_chain.h                   |    2 +-
 JavaScriptCore/kjs/string_object.cpp               |   38 ++--
 JavaScriptCore/kjs/string_object.h                 |   12 +-
 JavaScriptCore/kjs/value.h                         |   15 +-
 JavaScriptGlue/ChangeLog                           |   15 ++
 JavaScriptGlue/JSObject.cpp                        |    4 +-
 JavaScriptGlue/JSObject.h                          |    4 +-
 JavaScriptGlue/JSValueWrapper.cpp                  |    4 +-
 JavaScriptGlue/JSValueWrapper.h                    |    2 +-
 JavaScriptGlue/UserObjectImp.cpp                   |    6 +-
 JavaScriptGlue/UserObjectImp.h                     |    2 +-
 LayoutTests/ChangeLog                              |   19 ++
 LayoutTests/fast/js/gc-breadth-2-expected.txt      |    9 +
 LayoutTests/fast/js/gc-breadth-2.html              |   13 ++
 LayoutTests/fast/js/gc-breadth-expected.txt        |    9 +
 LayoutTests/fast/js/gc-breadth.html                |   13 ++
 LayoutTests/fast/js/gc-depth-expected.txt          |    9 +
 LayoutTests/fast/js/gc-depth.html                  |   13 ++
 LayoutTests/fast/js/resources/gc-breadth-2.js      |   13 ++
 LayoutTests/fast/js/resources/gc-breadth.js        |   13 ++
 LayoutTests/fast/js/resources/gc-depth.js          |   13 ++
 WebCore/ChangeLog                                  |   56 +++++
 .../bindings/js/JSCSSStyleDeclarationCustom.cpp    |    2 +-
 WebCore/bindings/js/JSDocumentCustom.cpp           |    6 +-
 WebCore/bindings/js/JSNodeCustom.cpp               |   33 +---
 WebCore/bindings/js/JSNodeFilterCondition.cpp      |    4 +-
 WebCore/bindings/js/JSNodeFilterCondition.h        |    2 +-
 WebCore/bindings/js/JSNodeFilterCustom.cpp         |    6 +-
 WebCore/bindings/js/JSNodeIteratorCustom.cpp       |    6 +-
 WebCore/bindings/js/JSTreeWalkerCustom.cpp         |    6 +-
 WebCore/bindings/js/JSXMLHttpRequest.cpp           |   10 +-
 WebCore/bindings/js/JSXMLHttpRequest.h             |    2 +-
 WebCore/bindings/js/kjs_binding.cpp                |    8 +-
 WebCore/bindings/js/kjs_binding.h                  |    2 +-
 WebCore/bindings/js/kjs_events.cpp                 |    6 +-
 WebCore/bindings/js/kjs_events.h                   |    2 +-
 WebCore/bindings/js/kjs_window.cpp                 |    8 +-
 WebCore/bindings/js/kjs_window.h                   |    2 +-
 WebCore/bindings/scripts/CodeGeneratorJS.pm        |    2 +-
 WebCore/dom/Node.cpp                               |    3 +-
 WebCore/dom/Node.h                                 |    4 +-
 WebCore/dom/NodeFilter.h                           |    6 +-
 WebCore/dom/NodeFilterCondition.h                  |    6 +-
 74 files changed, 919 insertions(+), 361 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62442</commentid>
    <comment_count>12</comment_count>
      <attachid>17546</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 00:50:14 -0800</bug_when>
    <thetext>Created attachment 17546
[3/4]         Not reviewed.


        - push large PropertyMaps as ranges too

        This seems to be a wash on SunSpider.

        The high-water mark for the stack on the SunSpider benchmark goes
        from 1979 to 220.

        * kjs/MarkStack.h:
        (KJS::RangeTag): Tempate class to aid tagging both JSValue** and PropertyMap*
        ranges.
        (KJS::MarkStack::getValue): Overloaded helper for newly templatized
        algorithms.
        (KJS::MarkStack::safeToAccess): ditto
        (KJS::MarkStack::advanceRangeStartToCellWithRefs): Templatized.
        (KJS::MarkStack::pushWholeRange): ditto
        (KJS::MarkStack::pushOneItemAndAdvance): ditto
        (KJS::MarkStack::advanceUntil126ItemsPushed): ditto
        (KJS::MarkStack::pushRange): ditto
        (KJS::MarkStack::pop): Handle both kinds of ranges now.
        * kjs/property_map.cpp:
        (KJS::PropertyMap::markChildren): Use pushRanges.
        * kjs/property_map.h:
        (KJS::PropertyMapEntry::PropertyMapEntry): Made this public in the header.
---
 JavaScriptCore/ChangeLog            |   28 ++++++++++
 JavaScriptCore/kjs/MarkStack.h      |   98 ++++++++++++++++++++++++++---------
 JavaScriptCore/kjs/property_map.cpp |   16 +-----
 JavaScriptCore/kjs/property_map.h   |   13 ++++-
 4 files changed, 116 insertions(+), 39 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62443</commentid>
    <comment_count>13</comment_count>
      <attachid>17547</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 00:50:16 -0800</bug_when>
    <thetext>Created attachment 17547
[4/4] JavaScriptCore:


        Not reviewed.

        Use a fixed-size mark stack so that we don&apos;t trigger huge
        allocations when garbage collecting. In the unlikely case of
        overflowing the mark stack, use a slow fallback path where we
        crawl the whole heap, looking for objects with the mark bit set
        and pushing their children.

        This is an 0.2% SunSpider speedup (but in retrospect I&apos;m not sure
        the last patch was a speedup).

        * kjs/JSLock.cpp:
        (KJS::JSLock::registerThread):
        * kjs/MarkStack.h:
        (KJS::MarkStack::append):
        (KJS::MarkStack::push):
        (KJS::MarkStack::pushOneItemAndAdvance):
        (KJS::MarkStack::advanceUntil126ItemsPushed):
        (KJS::MarkStack::pushRange):
        (KJS::MarkStack::pop):
        (KJS::MarkStack::reset):
        (KJS::MarkStack::size):
        (KJS::MarkStack::overflowed):
        * kjs/collector.cpp:
        (KJS::):
        (KJS::initializeRegisteredThreadKey):
        (KJS::Collector::registerThread):
        (KJS::slowFallbackMarkIfNeeded):
        (KJS::Collector::collect):

LayoutTests:

        Not reviewed.

        - Test case that hits the worst case of range stack marking, to ensure that the slow
        fallback path has coverage.

        * fast/js/gc-pathological-expected.txt: Added.
        * fast/js/gc-pathological.html: Added.
        * fast/js/resources/gc-pathological.js: Added.
---
 JavaScriptCore/ChangeLog                         |   32 +++++++++++
 JavaScriptCore/kjs/JSLock.cpp                    |   14 ++---
 JavaScriptCore/kjs/MarkStack.h                   |   46 +++++++++++-----
 JavaScriptCore/kjs/collector.cpp                 |   64 +++++++++++++++++++---
 LayoutTests/ChangeLog                            |   11 ++++
 LayoutTests/fast/js/gc-pathological-expected.txt |    9 +++
 LayoutTests/fast/js/gc-pathological.html         |   13 +++++
 LayoutTests/fast/js/resources/gc-pathological.js |   25 +++++++++
 8 files changed, 183 insertions(+), 31 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62444</commentid>
    <comment_count>14</comment_count>
      <attachid>17548</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 01:21:52 -0800</bug_when>
    <thetext>Created attachment 17548
[1/6]         Not reviewed.


        Fix DumpRenderTree ObjC bug comparing strings.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController identityIsEqual::]): Compare strings with string
        equality instead of identiy equality.
---
 WebKitTools/ChangeLog                           |   13 ++++++++++++-
 WebKitTools/DumpRenderTree/mac/ObjCController.m |    2 ++
 2 files changed, 14 insertions(+), 1 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62445</commentid>
    <comment_count>15</comment_count>
      <attachid>17549</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 01:21:55 -0800</bug_when>
    <thetext>Created attachment 17549
[2/6] JavaScriptCore:


        Not reviewed.

        Implement mark stack. This version is not suitable for prime time because it makes a
        huge allocation on every collect, and potentially makes marking of detached subtrees
        slow. But it is a .2% - .4% speedup even without much tweaking.

        The basic approach is to replace mark() methods with
        markChildren(MarkStack&amp;) methods. Reachable references are pushed
        onto a mark stack (which encapsulates ignoring already-marked
        references).

        Objects are no longer responsible for actually setting their own
        mark bits, the collector does that. This means that for objects on
        the number heap we don&apos;t have to call markChildren() at all since
        we know there aren&apos;t any.

        The mark phase of collect pushes roots onto the mark stack
        and drains it as often as possible.

        To make this approach viable requires a constant-size mark stack
        and a slow fallback approach for when the stack size is exceeded,
        plus optimizations to make the required stack small in common
        cases. This should be doable.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * kjs/ExecState.cpp:
        (KJS::ExecState::markChildren):
        * kjs/ExecState.h:
        * kjs/JSWrapperObject.cpp:
        (KJS::JSWrapperObject::markChildren):
        * kjs/JSWrapperObject.h:
        * kjs/array_instance.cpp:
        (KJS::ArrayInstance::markChildren):
        * kjs/array_instance.h:
        * kjs/bool_object.cpp:
        (BooleanInstance::markChildren):
        * kjs/bool_object.h:
        * kjs/collector.cpp:
        (KJS::Collector::heapAllocate):
        (KJS::drainMarkStack):
        (KJS::Collector::markStackObjectsConservatively):
        (KJS::Collector::markCurrentThreadConservatively):
        (KJS::Collector::markOtherThreadConservatively):
        (KJS::Collector::markProtectedObjects):
        (KJS::Collector::markMainThreadOnlyObjects):
        (KJS::Collector::collect):
        * kjs/collector.h:
        (KJS::Collector::cellMayHaveRefs):
        * kjs/error_object.cpp:
        * kjs/error_object.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::markChildren):
        (KJS::Arguments::Arguments):
        (KJS::Arguments::markChildren):
        (KJS::ActivationImp::markChildren):
        * kjs/function.h:
        * kjs/internal.cpp:
        (KJS::GetterSetterImp::markChildren):
        * kjs/interpreter.cpp:
        (KJS::Interpreter::markRoots):
        * kjs/interpreter.h:
        * kjs/list.cpp:
        (KJS::List::markProtectedListsSlowCase):
        * kjs/list.h:
        (KJS::List::markProtectedLists):
        * kjs/object.cpp:
        (KJS::JSObject::markChildren):
        * kjs/object.h:
        (KJS::ScopeChain::markChildren):
        * kjs/property_map.cpp:
        (KJS::PropertyMap::markChildren):
        * kjs/property_map.h:
        * kjs/scope_chain.h:
        * kjs/string_object.cpp:
        (KJS::StringInstance::markChildren):
        * kjs/string_object.h:
        * kjs/value.h:
        (KJS::JSValue::markChildren):

JavaScriptGlue:

        Not reviewed.

        Fixups for JavaScriptCore mark stack.

        * JSObject.cpp:
        (JSUserObject::Mark):
        * JSObject.h:
        * JSValueWrapper.cpp:
        (JSValueWrapper::JSObjectMark):
        * JSValueWrapper.h:
        * UserObjectImp.cpp:
        * UserObjectImp.h:

WebCore:

        Not reviewed.

        Implement mark stack. This version is not suitable for prime time because it makes a
        huge allocation on every collect, and potentially makes marking of detached subtrees
        slow. But it is a .2% - .4% speedup even without much tweaking.

        I replaced mark() methods with markChildren() as usual. One
        optimization that is lost is avoiding walking detached DOM
        subtrees more than once to mark them; since marking is not
        recursive there&apos;s no obvious way to bracket operation on the tree
        any more.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * bindings/js/JSNodeFilterCondition.cpp:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::markChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::markChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::markChildren):
        * bindings/js/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::markChildren):
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/kjs_binding.cpp:
        (KJS::ScriptInterpreter::markDOMNodesForDocument):
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_events.cpp:
        (WebCore::JSUnprotectedEventListener::markChildren):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_window.cpp:
        (KJS::Window::markChildren):
        * bindings/js/kjs_window.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        * dom/Node.h:
        * dom/NodeFilter.h:
        * dom/NodeFilterCondition.h:

        Not reviewed.

        - Test cases for &quot;Stack overflow crash in JavaScript garbage collector mark pass&quot;
        http://bugs.webkit.org/show_bug.cgi?id=12216

        I have fixed this with the mark stack work.

        * fast/js/gc-breadth-2-expected.txt: Added.
        * fast/js/gc-breadth-2.html: Added.
        * fast/js/gc-breadth-expected.txt: Added.
        * fast/js/gc-breadth.html: Added.
        * fast/js/gc-depth-expected.txt: Added.
        * fast/js/gc-depth.html: Added.
        * fast/js/resources/gc-breadth-2.js: Added.
        * fast/js/resources/gc-breadth.js: Added.
        * fast/js/resources/gc-depth.js: Added.

        Not reviewed.

        Add the actual mark stack. Forgot to include this in my original commit.

        * kjs/MarkStack.h: Added.
        (KJS::MarkStack::push):
        (KJS::MarkStack::pushAtom):
        (KJS::MarkStack::pop):
        (KJS::MarkStack::isEmpty):
        (KJS::MarkStack::reserveCapacity):

        Not reviewed.

        - remove over-optimistic assert

        * kjs/value.h:
---
 JavaScriptCore/ChangeLog                           |   93 +++++++++++++
 JavaScriptCore/JavaScriptCore.exp                  |    6 +-
 .../JavaScriptCore.xcodeproj/project.pbxproj       |    4 +
 JavaScriptCore/kjs/ExecState.cpp                   |    4 +-
 JavaScriptCore/kjs/ExecState.h                     |    2 +-
 JavaScriptCore/kjs/JSWrapperObject.cpp             |    7 +-
 JavaScriptCore/kjs/JSWrapperObject.h               |    4 +-
 JavaScriptCore/kjs/MarkStack.h                     |   96 +++++++++++++
 JavaScriptCore/kjs/array_instance.cpp              |   15 +--
 JavaScriptCore/kjs/array_instance.h                |    2 +-
 JavaScriptCore/kjs/bool_object.cpp                 |    6 +
 JavaScriptCore/kjs/bool_object.h                   |    1 +
 JavaScriptCore/kjs/collector.cpp                   |   64 ++++++----
 JavaScriptCore/kjs/collector.h                     |   25 +++-
 JavaScriptCore/kjs/error_object.cpp                |    6 -
 JavaScriptCore/kjs/error_object.h                  |    2 -
 JavaScriptCore/kjs/function.cpp                    |   39 ++---
 JavaScriptCore/kjs/function.h                      |    6 +-
 JavaScriptCore/kjs/internal.cpp                    |   12 +-
 JavaScriptCore/kjs/interpreter.cpp                 |  144 ++++++++++----------
 JavaScriptCore/kjs/interpreter.h                   |    2 +-
 JavaScriptCore/kjs/list.cpp                        |    9 +-
 JavaScriptCore/kjs/list.h                          |    6 +-
 JavaScriptCore/kjs/object.cpp                      |   11 +-
 JavaScriptCore/kjs/object.h                        |   14 +-
 JavaScriptCore/kjs/property_map.cpp                |   16 +--
 JavaScriptCore/kjs/property_map.h                  |    3 +-
 JavaScriptCore/kjs/scope_chain.h                   |    2 +-
 JavaScriptCore/kjs/string_object.cpp               |    6 +
 JavaScriptCore/kjs/string_object.h                 |    1 +
 JavaScriptCore/kjs/value.h                         |   15 +-
 JavaScriptGlue/ChangeLog                           |   15 ++
 JavaScriptGlue/JSObject.cpp                        |    4 +-
 JavaScriptGlue/JSObject.h                          |    4 +-
 JavaScriptGlue/JSValueWrapper.cpp                  |    4 +-
 JavaScriptGlue/JSValueWrapper.h                    |    2 +-
 JavaScriptGlue/UserObjectImp.cpp                   |    6 +-
 JavaScriptGlue/UserObjectImp.h                     |    2 +-
 LayoutTests/ChangeLog                              |   19 +++
 LayoutTests/fast/js/gc-breadth-2-expected.txt      |    9 ++
 LayoutTests/fast/js/gc-breadth-2.html              |   13 ++
 LayoutTests/fast/js/gc-breadth-expected.txt        |    9 ++
 LayoutTests/fast/js/gc-breadth.html                |   13 ++
 LayoutTests/fast/js/gc-depth-expected.txt          |    9 ++
 LayoutTests/fast/js/gc-depth.html                  |   13 ++
 LayoutTests/fast/js/resources/gc-breadth-2.js      |   13 ++
 LayoutTests/fast/js/resources/gc-breadth.js        |   13 ++
 LayoutTests/fast/js/resources/gc-depth.js          |   13 ++
 WebCore/ChangeLog                                  |   45 ++++++
 WebCore/bindings/js/JSDocumentCustom.cpp           |    6 +-
 WebCore/bindings/js/JSNodeCustom.cpp               |   33 +----
 WebCore/bindings/js/JSNodeFilterCondition.cpp      |    4 +-
 WebCore/bindings/js/JSNodeFilterCondition.h        |    2 +-
 WebCore/bindings/js/JSNodeFilterCustom.cpp         |    6 +-
 WebCore/bindings/js/JSNodeIteratorCustom.cpp       |    6 +-
 WebCore/bindings/js/JSTreeWalkerCustom.cpp         |    6 +-
 WebCore/bindings/js/JSXMLHttpRequest.cpp           |   10 +-
 WebCore/bindings/js/JSXMLHttpRequest.h             |    2 +-
 WebCore/bindings/js/kjs_binding.cpp                |    8 +-
 WebCore/bindings/js/kjs_binding.h                  |    2 +-
 WebCore/bindings/js/kjs_events.cpp                 |    6 +-
 WebCore/bindings/js/kjs_events.h                   |    2 +-
 WebCore/bindings/js/kjs_window.cpp                 |    8 +-
 WebCore/bindings/js/kjs_window.h                   |    2 +-
 WebCore/bindings/scripts/CodeGeneratorJS.pm        |    2 +-
 WebCore/dom/Node.cpp                               |    3 +-
 WebCore/dom/Node.h                                 |    4 +-
 WebCore/dom/NodeFilter.h                           |    6 +-
 WebCore/dom/NodeFilterCondition.h                  |    6 +-
 69 files changed, 661 insertions(+), 292 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62446</commentid>
    <comment_count>16</comment_count>
      <attachid>17550</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 01:21:57 -0800</bug_when>
    <thetext>Created attachment 17550
[3/6] JavaScriptCore:


        Not reviewed.

        Change things around so JSWrapperObject takes the internal value
        as a constructor argument, instead of initially filling in
        jsUndefined(). Plus corresponding cleanup.

        * JavaScriptCore.exp:
        * kjs/JSWrapperObject.h:
        * kjs/bool_object.cpp:
        (BooleanPrototype::BooleanPrototype):
        (BooleanObjectImp::construct):
        * kjs/bool_object.h:
        * kjs/date_object.cpp:
        (KJS::DateObjectImp::construct):
        * kjs/date_object.h:
        * kjs/number_object.cpp:
        (NumberPrototype::NumberPrototype):
        (NumberObjectImp::construct):
        * kjs/number_object.h:
        * kjs/string_object.cpp:
        (KJS::StringInstance::StringInstance):
        (KJS::StringObjectImp::construct):
        * kjs/string_object.h:

WebCore:

        Not reviewed.

        Change things around so JSWrapperObject takes the internal value
        as a constructor argument, instead of initially filling in
        jsUndefined(). Plus corresponding cleanup.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
---
 JavaScriptCore/ChangeLog                           |   26 ++++++++++++++++
 JavaScriptCore/JavaScriptCore.exp                  |    3 +-
 JavaScriptCore/kjs/JSWrapperObject.h               |    6 ++--
 JavaScriptCore/kjs/bool_object.cpp                 |   13 ++-----
 JavaScriptCore/kjs/bool_object.h                   |    2 +-
 JavaScriptCore/kjs/date_object.cpp                 |   13 +++-----
 JavaScriptCore/kjs/date_object.h                   |    6 ++-
 JavaScriptCore/kjs/number_object.cpp               |   16 +++-------
 JavaScriptCore/kjs/number_object.h                 |    4 +-
 JavaScriptCore/kjs/string_object.cpp               |   32 ++++++-------------
 JavaScriptCore/kjs/string_object.h                 |   11 +++----
 WebCore/ChangeLog                                  |   11 +++++++
 .../bindings/js/JSCSSStyleDeclarationCustom.cpp    |    2 +-
 13 files changed, 78 insertions(+), 67 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62447</commentid>
    <comment_count>17</comment_count>
      <attachid>17551</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 01:21:59 -0800</bug_when>
    <thetext>Created attachment 17551
[4/6]         Not reviewed.


        - push ranges onto the stack to avoid making a huge mark stack for large arrays.

        This is an 0.6% SunSpider speedup (baseline for this branch being
        about on par with trunk).

        This patch lowers the high-water mark for the most array-intensive tests from
        2687 to 316. Unfortunately, the unpack-code test creates a very large object and
        has a high-water mark of 1979.

        We need to get the high-water mark as low as possible so that we
        can use a fixed-size mark stack with a slow fallback algorithm for
        the rare cases that it fails.

        Remaining open-ended storages that can blow out the mark stack include:

        - PropertyMap
        - LocalStorage
        - SparseArrayValueMap

        Somewhat annoyingly, each has different rules for traversal. Only
        the PropertyMap seems likely to get huge in relatively common
        cases so the next step will be to take care of that.

        * kjs/MarkStack.h:
        (KJS::MarkStack::push): Define this as a separate inline outside of the class
        declaration.
        (KJS::MarkStack::pushAtom): ditto
        (KJS::MarkStack::isEmpty): ditto
        (KJS::MarkStack::reserveCapacity): ditto

        (KJS::MarkStack::pushRange): New function to handle pushing a
        range. For small enough ranges or ranges that only contain known
        atomic values, they are handled immediately. Bigger ranges are saved on
        the stack and only the first chunk is pushed.

        (KJS::MarkStack::pop): Accomodate the possibility of ranges on the
        stack. We handle this by pulling out the range, repushing it, and then
        popping.

        (KJS::MarkStack::size): Added. Useful for debugging.
        (KJS::MarkStack::advanceRangeStartToCellWithRefs): Helper for
        pushRange
        (KJS::MarkStack::pushWholeRange): ditto
        (KJS::MarkStack::pushOneItemAndAdvance): ditto
        (KJS::MarkStack::advanceUntil126ItemsPushed): ditto
        * kjs/array_instance.cpp:
        (KJS::ArrayInstance::markChildren): Use pushRange.
---
 JavaScriptCore/ChangeLog              |  112 ++++++++++++++++
 JavaScriptCore/kjs/MarkStack.h        |  227 ++++++++++++++++++++++++++-------
 JavaScriptCore/kjs/array_instance.cpp |    6 +-
 3 files changed, 293 insertions(+), 52 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62448</commentid>
    <comment_count>18</comment_count>
      <attachid>17552</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 01:22:01 -0800</bug_when>
    <thetext>Created attachment 17552
[5/6]         Not reviewed.


        - push large PropertyMaps as ranges too

        This appears to be a wash on SunSpider.

        The high-water mark for the stack on the SunSpider benchmark goes
        from 1979 to 220.

        * kjs/MarkStack.h:
        (KJS::RangeTag): Tempate class to aid tagging both JSValue** and PropertyMap*
        ranges.
        (KJS::MarkStack::getValue): Overloaded helper for newly templatized
        algorithms.
        (KJS::MarkStack::safeToAccess): ditto
        (KJS::MarkStack::advanceRangeStartToCellWithRefs): Templatized.
        (KJS::MarkStack::pushWholeRange): ditto
        (KJS::MarkStack::pushOneItemAndAdvance): ditto
        (KJS::MarkStack::advanceUntil126ItemsPushed): ditto
        (KJS::MarkStack::pushRange): ditto
        (KJS::MarkStack::pop): Handle both kinds of ranges now.
        * kjs/property_map.cpp:
        (KJS::PropertyMap::markChildren): Use pushRanges.
        * kjs/property_map.h:
        (KJS::PropertyMapEntry::PropertyMapEntry): Made this public in the header.
---
 JavaScriptCore/ChangeLog            |   40 +++++++++++----
 JavaScriptCore/kjs/MarkStack.h      |   98 ++++++++++++++++++++++++++---------
 JavaScriptCore/kjs/property_map.cpp |   16 +-----
 JavaScriptCore/kjs/property_map.h   |   13 ++++-
 4 files changed, 118 insertions(+), 49 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62449</commentid>
    <comment_count>19</comment_count>
      <attachid>17553</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 01:22:02 -0800</bug_when>
    <thetext>Created attachment 17553
[6/6] JavaScriptCore:


        Not reviewed.

        Use a fixed-size mark stack so that we don&apos;t trigger huge
        allocations when garbage collecting. In the unlikely case of
        overflowing the mark stack, use a slow fallback path where we
        crawl the whole heap, looking for objects with the mark bit set
        and pushing their children.

        This is an 0.2% SunSpider speedup (but in retrospect I&apos;m not sure
        the last patch was a speedup).

        * kjs/JSLock.cpp:
        (KJS::JSLock::registerThread):
        * kjs/MarkStack.h:
        (KJS::MarkStack::append):
        (KJS::MarkStack::push):
        (KJS::MarkStack::pushOneItemAndAdvance):
        (KJS::MarkStack::advanceUntil126ItemsPushed):
        (KJS::MarkStack::pushRange):
        (KJS::MarkStack::pop):
        (KJS::MarkStack::reset):
        (KJS::MarkStack::size):
        (KJS::MarkStack::overflowed):
        * kjs/collector.cpp:
        (KJS::):
        (KJS::initializeRegisteredThreadKey):
        (KJS::Collector::registerThread):
        (KJS::slowFallbackMarkIfNeeded):
        (KJS::Collector::collect):

LayoutTests:

        Not reviewed.

        - Test case that hits the worst case of range stack marking, to ensure that the slow
        fallback path has coverage.

        * fast/js/gc-pathological-expected.txt: Added.
        * fast/js/gc-pathological.html: Added.
        * fast/js/resources/gc-pathological.js: Added.
---
 JavaScriptCore/ChangeLog                         |   31 +++++++++++
 JavaScriptCore/kjs/JSLock.cpp                    |   14 ++---
 JavaScriptCore/kjs/MarkStack.h                   |   46 +++++++++++-----
 JavaScriptCore/kjs/collector.cpp                 |   64 +++++++++++++++++++---
 LayoutTests/ChangeLog                            |   11 ++++
 LayoutTests/fast/js/gc-pathological-expected.txt |    9 +++
 LayoutTests/fast/js/gc-pathological.html         |   13 +++++
 LayoutTests/fast/js/resources/gc-pathological.js |   25 +++++++++
 8 files changed, 182 insertions(+), 31 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62450</commentid>
    <comment_count>20</comment_count>
      <attachid>17548</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 01:30:57 -0800</bug_when>
    <thetext>Comment on attachment 17548
[1/6]         Not reviewed.

I&apos;ll fix the bogus ChangeLog changes when I actually commit this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62470</commentid>
    <comment_count>21</comment_count>
      <attachid>17548</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-27 09:18:46 -0800</bug_when>
    <thetext>Comment on attachment 17548
[1/6]         Not reviewed.

Looks like ChangeLog was merged incorrectly.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62471</commentid>
    <comment_count>22</comment_count>
      <attachid>17549</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-27 09:25:12 -0800</bug_when>
    <thetext>Comment on attachment 17549
[2/6] JavaScriptCore:

Do we really need BooleanInstance::markChildren? Seems like it does no good and just makes things a little slower.

 35     virtual void markChildren(MarkStack&amp; stack);

I&apos;d prefer to not name the argument in declarations like these.

I think the variable name &quot;stack&quot; is confusing in the context of the Collector class, where we have something else called stackPointer and stackBase. Maybe in some cases you should just use the name markStack.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62472</commentid>
    <comment_count>23</comment_count>
      <attachid>17550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-27 09:27:15 -0800</bug_when>
    <thetext>Comment on attachment 17550
[3/6] JavaScriptCore:

r=me -- no clear on how this relates to the other patches here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62473</commentid>
    <comment_count>24</comment_count>
      <attachid>17551</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-27 09:30:52 -0800</bug_when>
    <thetext>Comment on attachment 17551
[4/6]         Not reviewed.

Looks like the ChangeLog has some duplication in it.

 34         void push(JSValue* value);
 35         void push(JSCell* cell);

 38         void pushAtom(JSValue* value);
 39         void pushAtom(JSCell* cell);

 47         void reserveCapacity(size_t size);

No need to name the arguments here.

 45         bool isEmpty();
 46         size_t size();

These should be const.

I&apos;d slightly prefer for loops for these:

 101         while (start != end) {
...
 109             ++start;

I can read them better than a while with a ++.

 155         // after processing arange on the stack there is always at

Missing space in &quot;arange&quot;.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62475</commentid>
    <comment_count>25</comment_count>
      <attachid>17552</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-27 09:33:09 -0800</bug_when>
    <thetext>Comment on attachment 17552
[5/6]         Not reviewed.

 7         This seems tobe a wash on SunSpider.

Missing space here.

 42         // used to push JSValue** or PopertyMapEntry* ranges

Missing &quot;r&quot; here.

I&apos;m concerned that the change to property_map.h might cause a compilation failure on platforms that don&apos;t compile all at once. You may need to move an include from the .cpp to the .h.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62476</commentid>
    <comment_count>26</comment_count>
      <attachid>17553</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-27 09:36:49 -0800</bug_when>
    <thetext>Comment on attachment 17553
[6/6] JavaScriptCore:

 50         bool overflowed();

Should be const.

All the places that use markStack.storage could probably just use markStack -- all that matters is that the size is large enough and aligned appropriately, you don&apos;t have to use the array inside the union.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62483</commentid>
    <comment_count>27</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-11-27 10:09:27 -0800</bug_when>
    <thetext>The license in MarkStack.h is LGPL, I think we should make it BSD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62500</commentid>
    <comment_count>28</comment_count>
      <attachid>17548</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-27 11:40:01 -0800</bug_when>
    <thetext>Comment on attachment 17548
[1/6]         Not reviewed.

a and b here should probably be given the type &quot;id&quot; instead of &quot;WebScriptObject&quot;, if we don&apos;t know what actual type they&apos;ll have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62501</commentid>
    <comment_count>29</comment_count>
      <attachid>17549</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-27 11:49:13 -0800</bug_when>
    <thetext>Comment on attachment 17549
[2/6] JavaScriptCore:

&quot;getChildren&quot; might be a better name than &quot;markChildren&quot; since the function doesn&apos;t actually do the marking -- it only pushes the children onto a stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62502</commentid>
    <comment_count>30</comment_count>
      <attachid>17550</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-27 11:52:51 -0800</bug_when>
    <thetext>Comment on attachment 17550
[3/6] JavaScriptCore:

+        ASSERT(m_stack.size() &lt; m_stack.capacity());
+        m_stack.uncheckedAppend(cell);

You can remove the ASSERT here and elsewhere; uncheckedAppend does that already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62504</commentid>
    <comment_count>31</comment_count>
      <attachid>17552</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-27 11:58:42 -0800</bug_when>
    <thetext>Comment on attachment 17552
[5/6]         Not reviewed.

-            startSlot = reinterpret_cast&lt;JSCell*&gt;(reinterpret_cast&lt;uintptr_t&gt;(start) | 1);
+            startSlot = reinterpret_cast&lt;JSCell*&gt;(reinterpret_cast&lt;uintptr_t&gt;(start) | RangeTag&lt;T&gt;::m_tag);
             return;

+            JSValue** start = reinterpret_cast&lt;JSValue**&gt;(reinterpret_cast&lt;uintptr_t&gt;(cell) &amp; ~3L);
+            JSValue** end = reinterpret_cast&lt;JSValue**&gt;(m_stack.last());
+            m_stack.removeLast();

I think it would help readability to encapsulate the bit shifting here into inline &quot;tag&quot; and &quot;untag&quot; functions, as we do in JSImmediate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62505</commentid>
    <comment_count>32</comment_count>
      <attachid>17553</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-27 12:06:20 -0800</bug_when>
    <thetext>Comment on attachment 17553
[6/6] JavaScriptCore:

+    inline void MarkStack::reset() 
     {
-        m_stack.reserveCapacity(size);
+        m_stack.reserveCapacity(512);
+        m_overflowed = false;
     }

Calling reserveCapacity doesn&apos;t shrink the Vector&apos;s buffer once it has grown. So, if a single mark pass overflows big-time, the MarkStack will remain huge for the lifetime of the process. Is that a problem? Do we want to explicitly shrink the Vector&apos;s buffer instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62533</commentid>
    <comment_count>33</comment_count>
      <attachid>17548</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-27 22:04:14 -0800</bug_when>
    <thetext>Comment on attachment 17548
[1/6]         Not reviewed.

I landed this patch with the ChangeLog fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63417</commentid>
    <comment_count>34</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-05 22:59:50 -0800</bug_when>
    <thetext>Maciej, is this bug fixed yet? Why is it still open? It&apos;s showing up in the &quot;patches to commit&quot; queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86268</commentid>
    <comment_count>35</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-07-17 14:01:25 -0700</bug_when>
    <thetext>*** Bug 20076 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138172</commentid>
    <comment_count>36</comment_count>
      <attachid>34331</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 14:54:29 -0700</bug_when>
    <thetext>Created attachment 34331
JSC portion of fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138173</commentid>
    <comment_count>37</comment_count>
      <attachid>34332</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 14:55:30 -0700</bug_when>
    <thetext>Created attachment 34332
JavaScriptGlue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138175</commentid>
    <comment_count>38</comment_count>
      <attachid>34333</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 14:56:03 -0700</bug_when>
    <thetext>Created attachment 34333
WebCore portion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138176</commentid>
    <comment_count>39</comment_count>
      <attachid>34334</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 14:56:40 -0700</bug_when>
    <thetext>Created attachment 34334
Layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138194</commentid>
    <comment_count>40</comment_count>
      <attachid>34331</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 15:40:21 -0700</bug_when>
    <thetext>Comment on attachment 34331
JSC portion of fix

Removing r? flag from the jsc portion, as it is not the final version (i have some style tweaks and a bug fix that i hadn&apos;t committed locally so i achieved patch creation fail).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138225</commentid>
    <comment_count>41</comment_count>
      <attachid>34344</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 17:19:41 -0700</bug_when>
    <thetext>Created attachment 34344
Shorter layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138226</commentid>
    <comment_count>42</comment_count>
      <attachid>34345</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 17:20:19 -0700</bug_when>
    <thetext>Created attachment 34345
JavaScriptCore portion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138228</commentid>
    <comment_count>43</comment_count>
      <attachid>34344</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-07 17:26:24 -0700</bug_when>
    <thetext>Comment on attachment 34344
Shorter layout test

&gt; +
&gt; +successfullyParsed = true;
&gt; \ No newline at end of file

You need a newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138246</commentid>
    <comment_count>44</comment_count>
      <attachid>34351</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 17:58:04 -0700</bug_when>
    <thetext>Created attachment 34351
JavaScriptCore portion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138285</commentid>
    <comment_count>45</comment_count>
      <attachid>34351</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 21:54:50 -0700</bug_when>
    <thetext>Comment on attachment 34351
JavaScriptCore portion

This change is not explained in the ChangeLog:
51  OTHER_CFLAGS_normal_GCC_42 = -fomit-frame-pointer -funwind-tables;
 51 OTHER_CFLAGS_normal_GCC_42 = -funwind-tables;

Style:
 383     inline void MarkStack::drain() {

I don&apos;t understand this part of the change:
123     , propertyNameIteratorStructure(JSPropertyNameIterator::createStructure(jsNull()))
 124     , getterSetterStructure(GetterSetter::createStructure(jsNull()))

These parts don&apos;t seem explained in the ChangeLog.


Space:
namespace JSC {
 33 void* MarkStack::allocateStack(size_t size)

Regarding the rest of the substance of the change, it looks fine.  I think you&apos;ll probably want a more regular JSC contributer to look at this though.  If it&apos;s still up for review come monday, I&apos;m happy to take a second look and r+ it for you.

My primary complaint as this patch stands is that the ChangeLog needs more explanation of what you&apos;re doing, particularly the two changes I highlighted above (compile flags and the structures strored off of GlobalData).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138286</commentid>
    <comment_count>46</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 21:58:47 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 34351 [details])
&gt; This change is not explained in the ChangeLog:
&gt; 51  OTHER_CFLAGS_normal_GCC_42 = -fomit-frame-pointer -funwind-tables;
&gt;  51 OTHER_CFLAGS_normal_GCC_42 = -funwind-tables;

Yeah, fixed locally already.

&gt; Style:
&gt;  383     inline void MarkStack::drain() {
Goddammit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138843</commentid>
    <comment_count>47</comment_count>
      <attachid>34351</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-10 15:33:13 -0700</bug_when>
    <thetext>Comment on attachment 34351
JavaScriptCore portion

Please comment CompoundType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138903</commentid>
    <comment_count>48</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-10 21:36:17 -0700</bug_when>
    <thetext>Committed in r47022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141987</commentid>
    <comment_count>49</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-21 14:47:27 -0700</bug_when>
    <thetext>No updates in 11 days.  I assume these are all landed, but I&apos;ll leave Oliver to confirm that and close the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141989</commentid>
    <comment_count>50</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-21 14:49:03 -0700</bug_when>
    <thetext>This has been fixed, but the fixeration got eaten by the great bugzilla disaster of &apos;09</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>12371</attachid>
            <date>2007-01-11 15:30:14 -0800</date>
            <delta_ts>2009-08-07 14:56:40 -0700</delta_ts>
            <desc>Opening this file _WILL_ cause WebKit to crash</desc>
            <filename>toString-stack-overflow.html</filename>
            <type>text/html</type>
            <size>201</size>
            <attacher name="David Carson">dacarson</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgo8aHRtbD4KPGhl
YWQ+CjwvaGVhZD4KPGJvZHk+CjxzY3JpcHQ+CnZhciBhcnk9WzBdOwpmb3IodmFyIGk9MTsgaTwx
MDAwMDAwOyBpKyspCiAgYXJ5PVthcnksIGldOwoKdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17110</attachid>
            <date>2007-11-07 06:57:39 -0800</date>
            <delta_ts>2007-11-27 01:02:01 -0800</delta_ts>
            <desc>incomplete patch that uses an explicit mark stack - this is actually a speedup</desc>
            <filename>mark-stack.patch.txt</filename>
            <type>text/plain</type>
            <size>34546</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5l
eHAJKHJldmlzaW9uIDI3NTY2KQorKysgSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgsNyArMTE4LDYgQEAgX19aTjNLSlMxMUludGVycHJldGVyMTZzdG9wVGltZW91dENo
ZWNrRQogX19aTjNLSlMxMUludGVycHJldGVyMTdzdGFydFRpbWVvdXRDaGVja0V2CiBfX1pOM0tK
UzExSW50ZXJwcmV0ZXIyMXNob3VsZFByaW50RXhjZXB0aW9uc0V2CiBfX1pOM0tKUzExSW50ZXJw
cmV0ZXIyNHNldFNob3VsZFByaW50RXhjZXB0aW9uc0ViCi1fX1pOM0tKUzExSW50ZXJwcmV0ZXI0
bWFya0V2CiBfX1pOM0tKUzExSW50ZXJwcmV0ZXI2c19ob29rRQogX19aTjNLSlMxMUludGVycHJl
dGVyOGV2YWx1YXRlRVJLTlNfN1VTdHJpbmdFaVBLTlNfNVVDaGFyRWlQTlNfN0pTVmFsdWVFCiBf
X1pOM0tKUzExSW50ZXJwcmV0ZXI4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VpUzNfUE5TXzdKU1Zh
bHVlRQpAQCAtMTUwLDcgKzE0OSw2IEBAIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTNwdXRFUE5T
XzlFeGVjU3QKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTRpbmZvRQogX19aTjNLSlMxNFN0cmlu
Z0luc3RhbmNlQzFFUE5TXzhKU09iamVjdEVSS05TXzdVU3RyaW5nRQogX19aTjNLSlMxNFN0cmlu
Z0luc3RhbmNlQzJFUE5TXzhKU09iamVjdEVSS05TXzdVU3RyaW5nRQotX19aTjNLSlMxNUpTV3Jh
cHBlck9iamVjdDRtYXJrRXYKIF9fWk4zS0pTMTVTYXZlZFByb3BlcnRpZXNDMUV2CiBfX1pOM0tK
UzE1U2F2ZWRQcm9wZXJ0aWVzRDFFdgogX19aTjNLSlMxNlJ1bnRpbWVPYmplY3RJbXA0aW5mb0UK
QEAgLTE5Nyw2ICsxOTUsNyBAQCBfX1pOM0tKUzhEZWJ1Z2dlcjlleGNlcHRpb25FUE5TXzlFeGVj
U3RhCiBfX1pOM0tKUzhEZWJ1Z2dlckMyRXYKIF9fWk4zS0pTOERlYnVnZ2VyRDJFdgogX19aTjNL
SlM4SlNPYmplY3QxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRlRVBOU183SlNWYWx1ZUUKK19f
Wk4zS0pTOEpTT2JqZWN0MTJtYXJrQ2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCiBfX1pOM0tKUzhK
U09iamVjdDEycmVtb3ZlRGlyZWN0RVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlM4SlNPYmpl
Y3QxNGNhbGxBc0Z1bmN0aW9uRVBOU185RXhlY1N0YXRlRVBTMF9SS05TXzRMaXN0RQogX19aTjNL
SlM4SlNPYmplY3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlm
aWVyRQpAQCAtMjA3LDcgKzIwNiw2IEBAIF9fWk4zS0pTOEpTT2JqZWN0MjJmaWxsR2V0dGVyUHJv
cGVydHlTbG8KIF9fWk4zS0pTOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRl
bnRpZmllckVQTlNfN0pTVmFsdWVFaQogX19aTjNLSlM4SlNPYmplY3QzcHV0RVBOU185RXhlY1N0
YXRlRWpQTlNfN0pTVmFsdWVFaQogX19aTjNLSlM4SlNPYmplY3Q0Y2FsbEVQTlNfOUV4ZWNTdGF0
ZUVQUzBfUktOU180TGlzdEUKLV9fWk4zS0pTOEpTT2JqZWN0NG1hcmtFdgogX19aTjNLSlM4SlNP
YmplY3Q5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRVJLTlNfNExpc3RFCiBfX1pOM0tKUzhKU09i
amVjdDljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFUktOU180TGlzdEVSS05TXzEwSWRlbnRpZmll
ckVSS05TXzdVU3RyaW5nRWkKIF9fWk4zS0pTOEpTT2JqZWN0OXB1dERpcmVjdEVSS05TXzEwSWRl
bnRpZmllckVQTlNfN0pTVmFsdWVFaQpAQCAtMjQzLDggKzI0MSw2IEBAIF9fWk5LM0tKUzE5SW50
ZXJuYWxGdW5jdGlvbkltcDE0aW1wbGVtZW4KIF9fWk5LM0tKUzE5SW50ZXJuYWxGdW5jdGlvbklt
cDIxaW1wbGVtZW50c0hhc0luc3RhbmNlRXYKIF9fWk5LM0tKUzRMaXN0OGdldFNsaWNlRWlSUzBf
CiBfX1pOSzNLSlM2SlNDZWxsMTdnZXRUcnVuY2F0ZWRJbnQzMkVSaQotX19aTkszS0pTNkpTQ2Vs
bDE3Z2V0VHJ1bmNhdGVkSW50MzJFUmkKLV9fWk5LM0tKUzZKU0NlbGwxOGdldFRydW5jYXRlZFVJ
bnQzMkVSagogX19aTkszS0pTNkpTQ2VsbDE4Z2V0VHJ1bmNhdGVkVUludDMyRVJqCiBfX1pOSzNL
SlM2SlNDZWxsOWdldE51bWJlckVSZAogX19aTkszS0pTNkpTQ2VsbDlnZXROdW1iZXJFdgpJbmRl
eDoga2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0V4ZWNTdGF0ZS5jcHAJKHJl
dmlzaW9uIDI3NTY2KQorKysga2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDEwICs4OSwxMCBAQCBFeGVjU3RhdGU6On5FeGVjU3RhdGUoKQogICAgIG1faW50ZXJwcmV0ZXIt
PnNldEN1cnJlbnRFeGVjKG1fc2F2ZWRFeGVjU3RhdGUpOwogfQogCi12b2lkIEV4ZWNTdGF0ZTo6
bWFyaygpCit2b2lkIEV4ZWNTdGF0ZTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spCiB7
CiAgICAgZm9yIChFeGVjU3RhdGUqIGV4ZWMgPSB0aGlzOyBleGVjOyBleGVjID0gZXhlYy0+bV9j
YWxsaW5nRXhlY1N0YXRlKQotICAgICAgICBleGVjLT5zY29wZS5tYXJrKCk7CisgICAgICAgIGV4
ZWMtPnNjb3BlLm1hcmtDaGlsZHJlbihzdGFjayk7CiB9CiAKIEludGVycHJldGVyKiBFeGVjU3Rh
dGU6OmxleGljYWxJbnRlcnByZXRlcigpIGNvbnN0CkluZGV4OiBranMvRXhlY1N0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2pzL0V4ZWNTdGF0ZS5oCShyZXZpc2lvbiAyNzU2NikKKysrIGtqcy9FeGVj
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBuYW1lc3BhY2UgS0pTICB7
CiAgICAgICAgIHZvaWQgcG9wU3dpdGNoKCkgeyBtX3N3aXRjaERlcHRoLS07IH0KICAgICAgICAg
Ym9vbCBpblN3aXRjaCgpIGNvbnN0IHsgcmV0dXJuIChtX3N3aXRjaERlcHRoID4gMCk7IH0KICAg
ICAgICAgCi0gICAgICAgIHZvaWQgbWFyaygpOworICAgICAgICB2b2lkIG1hcmtDaGlsZHJlbihN
YXJrU3RhY2smKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRv
IGF2b2lkIGFjY2Vzc2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlc2UgaWRlbnRpZmll
cnMgaW4KICAgICAgICAgLy8gaW1wb3J0YW50IHByb3BlcnR5IGxvb2t1cCBmdW5jdGlvbnMsIHRv
IGF2b2lkIHRha2luZyBQSUMgYnJhbmNoZXMgaW4gTWFjaC1PIGJpbmFyaWVzCkluZGV4OiBranMv
SlNXcmFwcGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNXcmFwcGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gMjc1NjYpCisrKyBranMvSlNXcmFwcGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi12b2lkIEpTV3Jh
cHBlck9iamVjdDo6bWFyaygpIAordm9pZCBKU1dyYXBwZXJPYmplY3Q6Om1hcmtDaGlsZHJlbihN
YXJrU3RhY2smIHN0YWNrKSAKIHsKLSAgICBKU09iamVjdDo6bWFyaygpOwotICAgIGlmIChtX2lu
dGVybmFsVmFsdWUgJiYgIW1faW50ZXJuYWxWYWx1ZS0+bWFya2VkKCkpCi0gICAgICAgIG1faW50
ZXJuYWxWYWx1ZS0+bWFyaygpOworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwor
ICAgIHN0YWNrLnB1c2hBdG9tKG1faW50ZXJuYWxWYWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEtKUwpJbmRleDoga2pzL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU1dy
YXBwZXJPYmplY3QuaAkocmV2aXNpb24gMjc1NjYpCisrKyBranMvSlNXcmFwcGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
ICAqLwogICAgICAgICB2b2lkIHNldEludGVybmFsVmFsdWUoSlNWYWx1ZSogdik7CiAgICAgICAg
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
a0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAg
ICAgICBKU1ZhbHVlKiBtX2ludGVybmFsVmFsdWU7CkluZGV4OiBranMvYXJyYXlfaW5zdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtqcy9hcnJheV9pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI3NTY2
KQorKysga2pzL2FycmF5X2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDI2ICs0
MDIsMjMgQEAgdm9pZCBBcnJheUluc3RhbmNlOjpzZXRMZW5ndGgodW5zaWduZWQgbgogICAgIG1f
bGVuZ3RoID0gbmV3TGVuZ3RoOwogfQogCi12b2lkIEFycmF5SW5zdGFuY2U6Om1hcmsoKQordm9p
ZCBBcnJheUluc3RhbmNlOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBK
U09iamVjdDo6bWFyaygpOworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwogCiAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihtX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNW
YWx1ZSogdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlICYm
ICF2YWx1ZS0+bWFya2VkKCkpCi0gICAgICAgICAgICB2YWx1ZS0+bWFyaygpOworICAgICAgICBp
ZiAodmFsdWUpCisgICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTsKICAgICB9CiAKICAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCkg
ewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0g
aXQtPnNlY29uZDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPm1hcmtlZCgpKQotICAgICAgICAg
ICAgICAgIHZhbHVlLT5tYXJrKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAgICAgc3RhY2sucHVzaChpdC0+c2Vjb25kKTsKICAgICB9CiB9CiAKSW5kZXg6IGtq
cy9hcnJheV9pbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9hcnJheV9pbnN0YW5jZS5oCShy
ZXZpc2lvbiAyNzU2NikKKysrIGtqcy9hcnJheV9pbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwog
Ci0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVu
KE1hcmtTdGFjayYpOwogCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwpJbmRleDoga2pzL2Jvb2xfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvYm9vbF9vYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzU2NikKKysrIGtqcy9ib29sX29iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDEyIEBAIEJvb2xlYW5JbnN0YW5jZTo6Qm9vbGVhbkluc3RhbmNl
KEpTT2JqZWMKIHsKIH0KIAordm9pZCBCb29sZWFuSW5zdGFuY2U6Om1hcmtDaGlsZHJlbihNYXJr
U3RhY2smIHN0YWNrKQoreworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOworICAg
IEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoaW50ZXJuYWxWYWx1ZSgpKSk7Cit9CisK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCb29sZWFuUHJvdG90eXBlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTUuNi40CkluZGV4OiBranMvYm9vbF9v
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBranMvYm9vbF9vYmplY3QuaAkocmV2aXNpb24gMjc1NjYp
CisrKyBranMvYm9vbF9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBCb29sZWFuSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKTsKIAog
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjayk7
CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwogCkluZGV4OiBranMvY29s
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvY29sbGVjdG9yLmNwcAkocmV2aXNpb24gMjc1
NjYpCisrKyBranMvY29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVk
ZSAibGlzdC5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgInZhbHVlLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHNldGptcC5oPgpAQCAtNDc3LDcgKzQ3OCwx
NCBAQCB2b2lkIENvbGxlY3Rvcjo6cmVnaXN0ZXJUaHJlYWQoKQogLy8gY2VsbCBzaXplIG5lZWRz
IHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZvciB0aGlzIHRvIGJlIHZhbGlkCiAjZGVmaW5lIElTX0hB
TEZfQ0VMTF9BTElHTkVEKHApICgoKGludHB0cl90KShwKSAmIChDRUxMX01BU0sgPj4gMSkpID09
IDApCiAKLXZvaWQgQ29sbGVjdG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkodm9p
ZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmFpbk1hcmtTdGFjayhN
YXJrU3RhY2smIHN0YWNrKQoreworICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKQorICAgICAg
ICBzdGFjay5wb3AoKS0+bWFya0NoaWxkcmVuKHN0YWNrKTsKK30KKworCit2b2lkIENvbGxlY3Rv
cjo6bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgc3RhY2ssIHZvaWQg
KnN0YXJ0LCB2b2lkICplbmQpCiB7CiAgIGlmIChzdGFydCA+IGVuZCkgewogICAgIHZvaWQqIHRt
cCA9IHN0YXJ0OwpAQCAtNTE5LDggKzUyNyw4IEBAIHZvaWQgQ29sbGVjdG9yOjptYXJrU3RhY2tP
YmplY3RzQ29uc2VydmEKICAgICAgICAgICAgICAgaWYgKChwcmltYXJ5QmxvY2tzW2Jsb2NrXSA9
PSBibG9ja0FkZHIpICYgKG9mZnNldCA8PSBsYXN0Q2VsbE9mZnNldCkpIHsKICAgICAgICAgICAg
ICAgICAgIGlmICgoKENvbGxlY3RvckNlbGwqKXhBc0JpdHMpLT51LmZyZWVDZWxsLnplcm9JZkZy
ZWUgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgIEpTQ2VsbCogaW1wID0gcmVpbnRlcnBy
ZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlt
cC0+bWFya2VkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGltcC0+bWFyaygpOworICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goaW1wKTsKKyAgICAgICAgICAgICAgICAgICAg
ICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQpAQCAtNTMxLDcgKzUzOSw3IEBAIHZvaWQg
Q29sbGVjdG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmEKICAgfQogfQogCi12b2lkIENvbGxl
Y3Rvcjo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSgpCit2b2lkIENvbGxlY3Rvcjo6
bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smIHN0YWNrKQogewogICAg
IC8vIHNldGptcCBmb3JjZXMgdm9sYXRpbGUgcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrCiAgICAg
am1wX2J1ZiByZWdpc3RlcnM7CkBAIC01NDgsNyArNTU2LDcgQEAgdm9pZCBDb2xsZWN0b3I6Om1h
cmtDdXJyZW50VGhyZWFkQ29uc2VydgogICAgIHZvaWQqIHN0YWNrUG9pbnRlciA9ICZkdW1teTsK
ICAgICB2b2lkKiBzdGFja0Jhc2UgPSBjdXJyZW50VGhyZWFkU3RhY2tCYXNlKCk7CiAKLSAgICBt
YXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UpOwor
ICAgIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShzdGFjaywgc3RhY2tQb2ludGVyLCBz
dGFja0Jhc2UpOwogfQogCiAjaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCkBAIC02OTEsNyArNjk5
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkKiBvdGhlclRocmVhZFN0YWNrQmFzZQogI2VuZGlmCiB9
CiAKLXZvaWQgQ29sbGVjdG9yOjptYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShUaHJlYWQq
IHRocmVhZCkKK3ZvaWQgQ29sbGVjdG9yOjptYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShN
YXJrU3RhY2smIHN0YWNrLCBUaHJlYWQqIHRocmVhZCkKIHsKICAgc3VzcGVuZFRocmVhZCh0aHJl
YWQtPnBsYXRmb3JtVGhyZWFkKTsKIApAQCAtNjk5LDI1ICs3MDcsMjUgQEAgdm9pZCBDb2xsZWN0
b3I6Om1hcmtPdGhlclRocmVhZENvbnNlcnZhdAogICBzaXplX3QgcmVnU2l6ZSA9IGdldFBsYXRm
b3JtVGhyZWFkUmVnaXN0ZXJzKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQsIHJlZ3MpOwogCiAgIC8v
IG1hcmsgdGhlIHRocmVhZCdzIHJlZ2lzdGVycwotICBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0
aXZlbHkoKHZvaWQqKSZyZWdzLCAodm9pZCopKChjaGFyKikmcmVncyArIHJlZ1NpemUpKTsKKyAg
bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KHN0YWNrLCAodm9pZCopJnJlZ3MsICh2b2lk
KikoKGNoYXIqKSZyZWdzICsgcmVnU2l6ZSkpOwogIAogICB2b2lkKiBzdGFja1BvaW50ZXIgPSBv
dGhlclRocmVhZFN0YWNrUG9pbnRlcihyZWdzKTsKICAgdm9pZCogc3RhY2tCYXNlID0gb3RoZXJU
aHJlYWRTdGFja0Jhc2UocmVncywgdGhyZWFkKTsKLSAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZh
dGl2ZWx5KHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKKyAgbWFya1N0YWNrT2JqZWN0c0NvbnNl
cnZhdGl2ZWx5KHN0YWNrLCBzdGFja1BvaW50ZXIsIHN0YWNrQmFzZSk7CiAKICAgcmVzdW1lVGhy
ZWFkKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQpOwogfQogCiAjZW5kaWYKIAotdm9pZCBDb2xsZWN0
b3I6Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSgpCit2b2lkIENvbGxlY3Rvcjo6bWFy
a1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgc3RhY2spCiB7Ci0gIG1hcmtD
dXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHkoKTsKKyAgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2
YXRpdmVseShzdGFjayk7CiAKICNpZiBVU0UoTVVMVElQTEVfVEhSRUFEUykKICAgZm9yIChUaHJl
YWQgKnRocmVhZCA9IHJlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQgIT0gTlVMTDsgdGhyZWFkID0g
dGhyZWFkLT5uZXh0KSB7CiAgICAgaWYgKCFwdGhyZWFkX2VxdWFsKHRocmVhZC0+cG9zaXhUaHJl
YWQsIHB0aHJlYWRfc2VsZigpKSkgewotICAgICAgbWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZl
bHkodGhyZWFkKTsKKyAgICAgICAgbWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoc3RhY2ss
IHRocmVhZCk7CiAgICAgfQogICB9CiAjZW5kaWYKQEAgLTc2OSwxOCArNzc3LDE3IEBAIHZvaWQg
Q29sbGVjdG9yOjpjb2xsZWN0T25NYWluVGhyZWFkT25seSgKICAgICArK21haW5UaHJlYWRPbmx5
T2JqZWN0Q291bnQ7CiB9CiAKLXZvaWQgQ29sbGVjdG9yOjptYXJrUHJvdGVjdGVkT2JqZWN0cygp
Cit2b2lkIENvbGxlY3Rvcjo6bWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0YWNrJiBzdGFjaykK
IHsKICAgUHJvdGVjdENvdW50U2V0JiBwcm90ZWN0ZWRWYWx1ZXMgPSBLSlM6OnByb3RlY3RlZFZh
bHVlcygpOwogICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IHByb3RlY3RlZFZhbHVl
cy5lbmQoKTsKICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gcHJvdGVjdGVk
VmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgIEpTQ2VsbCAqdmFsID0gaXQt
PmZpcnN0OwotICAgIGlmICghdmFsLT5tYXJrZWQoKSkKLSAgICAgIHZhbC0+bWFyaygpOworICAg
IHN0YWNrLnB1c2goaXQtPmZpcnN0KTsKKyAgICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CiAgIH0K
IH0KIAotdm9pZCBDb2xsZWN0b3I6Om1hcmtNYWluVGhyZWFkT25seU9iamVjdHMoKQordm9pZCBD
b2xsZWN0b3I6Om1hcmtNYWluVGhyZWFkT25seU9iamVjdHMoTWFya1N0YWNrJiBzdGFjaykKIHsK
ICNpZiBVU0UoTVVMVElQTEVfVEhSRUFEUykKICAgICBBU1NFUlQoIW9uTWFpblRocmVhZCgpKTsK
QEAgLTgxMiw3ICs4MTksOCBAQCB2b2lkIENvbGxlY3Rvcjo6bWFya01haW5UaHJlYWRPbmx5T2Jq
ZWN0CiAgICAgICAgICAgICAgICAgaWYgKGN1ckJsb2NrLT5jb2xsZWN0T25NYWluVGhyZWFkT25s
eS5nZXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJCbG9jay0+bWFya2VkLmdl
dChpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KGNlbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW1wLT5tYXJr
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGltcCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCsrY291bnQgPT0gbWFpblRocmVhZE9ubHlPYmpl
Y3RDb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTk0OCw5ICs5NTYs
MTUgQEAgYm9vbCBDb2xsZWN0b3I6OmNvbGxlY3QoKQogCiAgIC8vIE1BUks6IGZpcnN0IG1hcmsg
YWxsIHJlZmVyZW5jZWQgb2JqZWN0cyByZWN1cnNpdmVseSBzdGFydGluZyBvdXQgZnJvbSB0aGUg
c2V0IG9mIHJvb3Qgb2JqZWN0cwogCisgIHNpemVfdCBvcmlnaW5hbExpdmVPYmplY3RzID0gcHJp
bWFyeUhlYXAubnVtTGl2ZU9iamVjdHMgKyBudW1iZXJIZWFwLm51bUxpdmVPYmplY3RzOworCisg
IE1hcmtTdGFjayBzdGFjazsKKyAgc3RhY2sucmVzZXJ2ZUNhcGFjaXR5KHByaW1hcnlIZWFwLmxp
dmVPYmplY3RzKTsKKyAgcHJpbnRmKCJSZXNlcnZpbmcgc3RhY2sgY2FwYWNpdHk6ICVsZFxuIiwg
cHJpbWFyeUhlYXAubGl2ZU9iamVjdHMpOyAKKwogI2lmbmRlZiBOREVCVUcKICAgLy8gRm9yYmlk
IG1hbGxvYyBkdXJpbmcgdGhlIG1hcmsgcGhhc2UuIE1hcmtpbmcgYSB0aHJlYWQgc3VzcGVuZHMg
aXQsIHNvIAotICAvLyBhIG1hbGxvYyBpbnNpZGUgbWFyaygpIHdvdWxkIHJpc2sgYSBkZWFkbG9j
ayB3aXRoIGEgdGhyZWFkIHRoYXQgaGFkIGJlZW4gCisgIC8vIGEgbWFsbG9jIGluc2lkZSBtYXJr
Q2hpbGRyZW4oKSB3b3VsZCByaXNrIGEgZGVhZGxvY2sgd2l0aCBhIHRocmVhZCB0aGF0IGhhZCBi
ZWVuIAogICAvLyBzdXNwZW5kZWQgd2hpbGUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCiAgIGZh
c3RNYWxsb2NGb3JiaWQoKTsKICNlbmRpZgpAQCAtOTU4LDI0ICs5NzIsMjUgQEAgYm9vbCBDb2xs
ZWN0b3I6OmNvbGxlY3QoKQogICBpZiAoSW50ZXJwcmV0ZXI6OnNfaG9vaykgewogICAgIEludGVy
cHJldGVyKiBzY3IgPSBJbnRlcnByZXRlcjo6c19ob29rOwogICAgIGRvIHsKLSAgICAgIHNjci0+
bWFyaygpOworICAgICAgc2NyLT5tYXJrUm9vdHMoc3RhY2spOworICAgICAgZHJhaW5NYXJrU3Rh
Y2soc3RhY2spOwogICAgICAgc2NyID0gc2NyLT5uZXh0OwogICAgIH0gd2hpbGUgKHNjciAhPSBJ
bnRlcnByZXRlcjo6c19ob29rKTsKICAgfQogCi0gIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRp
dmVseSgpOwotICBtYXJrUHJvdGVjdGVkT2JqZWN0cygpOwotICBMaXN0OjptYXJrUHJvdGVjdGVk
TGlzdHMoKTsKKyAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KHN0YWNrKTsKKyAgbWFy
a1Byb3RlY3RlZE9iamVjdHMoc3RhY2spOworICBMaXN0OjptYXJrUHJvdGVjdGVkTGlzdHMoc3Rh
Y2spOworICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CiAjaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMp
CiAgIGlmICghY3VycmVudFRocmVhZElzTWFpblRocmVhZCkKLSAgICBtYXJrTWFpblRocmVhZE9u
bHlPYmplY3RzKCk7CisgICAgbWFya01haW5UaHJlYWRPbmx5T2JqZWN0cyhzdGFjayk7CiAjZW5k
aWYKIAogI2lmbmRlZiBOREVCVUcKICAgZmFzdE1hbGxvY0FsbG93KCk7CiAjZW5kaWYKICAgICAK
LSAgc2l6ZV90IG9yaWdpbmFsTGl2ZU9iamVjdHMgPSBwcmltYXJ5SGVhcC5udW1MaXZlT2JqZWN0
cyArIG51bWJlckhlYXAubnVtTGl2ZU9iamVjdHM7CiAgIHNpemVfdCBudW1MaXZlT2JqZWN0cyA9
IHN3ZWVwPFByaW1hcnlIZWFwPihjdXJyZW50VGhyZWFkSXNNYWluVGhyZWFkKTsKICAgbnVtTGl2
ZU9iamVjdHMgKz0gc3dlZXA8TnVtYmVySGVhcD4oY3VycmVudFRocmVhZElzTWFpblRocmVhZCk7
CiAgIApJbmRleDoga2pzL2NvbGxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9jb2xsZWN0b3Iu
aAkocmV2aXNpb24gMjc1NjYpCisrKyBranMvY29sbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDkgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBLSlMgewogCisgIGNsYXNzIENvbGxlY3RvckJs
b2NrOwogICBjbGFzcyBKU0NlbGw7CiAgIGNsYXNzIEpTVmFsdWU7Ci0gIGNsYXNzIENvbGxlY3Rv
ckJsb2NrOworICBjbGFzcyBNYXJrU3RhY2s7CiAKICAgY2xhc3MgQ29sbGVjdG9yIHsKICAgcHVi
bGljOgpAQCAtNzgsMTIgKzc5LDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIENvbGxlY3Rvcigp
OwogCiAgICAgc3RhdGljIHZvaWQgcmVjb3JkRXh0cmFDb3N0KHNpemVfdCk7Ci0gICAgc3RhdGlj
IHZvaWQgbWFya1Byb3RlY3RlZE9iamVjdHMoKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJrTWFpblRo
cmVhZE9ubHlPYmplY3RzKCk7Ci0gICAgc3RhdGljIHZvaWQgbWFya0N1cnJlbnRUaHJlYWRDb25z
ZXJ2YXRpdmVseSgpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2
ZWx5KFRocmVhZCopOwotICAgIHN0YXRpYyB2b2lkIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRp
dmVseSgpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSh2
b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrUHJvdGVjdGVkT2Jq
ZWN0cyhNYXJrU3RhY2smKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTWFpblRocmVhZE9ubHlPYmpl
Y3RzKE1hcmtTdGFjayYpOworICAgIHN0YXRpYyB2b2lkIG1hcmtDdXJyZW50VGhyZWFkQ29uc2Vy
dmF0aXZlbHkoTWFya1N0YWNrJik7CisgICAgc3RhdGljIHZvaWQgbWFya090aGVyVGhyZWFkQ29u
c2VydmF0aXZlbHkoTWFya1N0YWNrJiwgVGhyZWFkKik7CisgICAgc3RhdGljIHZvaWQgbWFya1N0
YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYpOworICAgIHN0YXRpYyB2b2lkIG1h
cmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smLCB2b2lkKiBzdGFydCwgdm9p
ZCogZW5kKTsKIAogICAgIHN0YXRpYyBzaXplX3QgbWFpblRocmVhZE9ubHlPYmplY3RDb3VudDsK
ICAgICBzdGF0aWMgYm9vbCBtZW1vcnlGdWxsOwpJbmRleDoga2pzL2Vycm9yX29iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2pzL2Vycm9yX29iamVjdC5jcHAJKHJldmlzaW9uIDI3NTY2KQorKysg
a2pzL2Vycm9yX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw5ICsxNTYsMyBAQCBK
U1ZhbHVlKiBOYXRpdmVFcnJvckltcDo6Y2FsbEFzRnVuY3Rpb24oCiAgIHJldHVybiBjb25zdHJ1
Y3QoZXhlYywgYXJncyk7CiB9CiAKLXZvaWQgTmF0aXZlRXJyb3JJbXA6Om1hcmsoKQotewotICBK
U09iamVjdDo6bWFyaygpOwotICBpZiAocHJvdG8gJiYgIXByb3RvLT5tYXJrZWQoKSkKLSAgICBw
cm90by0+bWFyaygpOwotfQpJbmRleDoga2pzL2Vycm9yX29iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtqcy9lcnJvcl9vYmplY3QuaAkocmV2aXNpb24gMjc1NjYpCisrKyBranMvZXJyb3Jfb2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
dmlydHVhbCBKU09iamVjdCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAm
YXJncyk7CiAgICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7Ci0KICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CiAgIHByaXZhdGU6CkluZGV4OiBranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9m
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NTY2KQorKysga2pzL2Z1bmN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEwIEBAIEZ1bmN0aW9uSW1wOjpGdW5jdGlvbkltcChFeGVj
U3RhdGUqIGV4ZWMKIHsKIH0KIAotdm9pZCBGdW5jdGlvbkltcDo6bWFyaygpCit2b2lkIEZ1bmN0
aW9uSW1wOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBJbnRlcm5hbEZ1
bmN0aW9uSW1wOjptYXJrKCk7Ci0gICAgX3Njb3BlLm1hcmsoKTsKKyAgICBJbnRlcm5hbEZ1bmN0
aW9uSW1wOjptYXJrQ2hpbGRyZW4oc3RhY2spOworICAgIF9zY29wZS5tYXJrQ2hpbGRyZW4oc3Rh
Y2spOwogfQogCiBKU1ZhbHVlKiBGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKQEAgLTMzMCw5ICsz
MzAsOSBAQCBjb25zdCBDbGFzc0luZm8gQXJndW1lbnRzOjppbmZvID0geyAiQXJnCiAKIC8vIEVD
TUEgMTAuMS44CiBBcmd1bWVudHM6OkFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9u
SW1wKiBmdW5jLCBjb25zdCBMaXN0JiBhcmdzLCBBY3RpdmF0aW9uSW1wKiBhY3QpCi06IEpTT2Jq
ZWN0KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkp
LCAKLV9hY3RpdmF0aW9uT2JqZWN0KGFjdCksCi1pbmRleFRvTmFtZU1hcChmdW5jLCBhcmdzKQor
ICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCkpIAorICAsIF9hY3RpdmF0aW9uT2JqZWN0KGFjdCkKKyAgLCBpbmRleFRvTmFtZU1h
cChmdW5jLCBhcmdzKQogewogICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxl
ZSwgZnVuYywgRG9udEVudW0pOwogICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwgYXJncy5zaXplKCksIERvbnRFbnVtKTsKQEAgLTM0NiwxMSArMzQ2LDEwIEBAIGluZGV4
VG9OYW1lTWFwKGZ1bmMsIGFyZ3MpCiAgIH0KIH0KIAotdm9pZCBBcmd1bWVudHM6Om1hcmsoKSAK
K3ZvaWQgQXJndW1lbnRzOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykgCiB7Ci0gIEpT
T2JqZWN0OjptYXJrKCk7Ci0gIGlmIChfYWN0aXZhdGlvbk9iamVjdCAmJiAhX2FjdGl2YXRpb25P
YmplY3QtPm1hcmtlZCgpKQotICAgIF9hY3RpdmF0aW9uT2JqZWN0LT5tYXJrKCk7CisgIEpTT2Jq
ZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOworICBzdGFjay5wdXNoKF9hY3RpdmF0aW9uT2JqZWN0
KTsKIH0KIAogSlNWYWx1ZSogQXJndW1lbnRzOjptYXBwZWRJbmRleEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC00NzQsMjMgKzQ3MywxNyBAQCB2b2lkIEFjdGl2YXRpb25J
bXA6OnB1dChFeGVjU3RhdGUqLCBjb25zCiAgIF9wcm9wLnB1dChwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBhdHRyLCAoYXR0ciA9PSBOb25lIHx8IGF0dHIgPT0gRG9udERlbGV0ZSkpOwogfQogCi12b2lk
IEFjdGl2YXRpb25JbXA6Om1hcmsoKQordm9pZCBBY3RpdmF0aW9uSW1wOjptYXJrQ2hpbGRyZW4o
TWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBKU09iamVjdDo6bWFyaygpOworICAgIEpTT2JqZWN0
OjptYXJrQ2hpbGRyZW4oc3RhY2spOwogCiAgICAgc2l6ZV90IHNpemUgPSBkLT5sb2NhbFN0b3Jh
Z2Uuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIEpTVmFsdWUqIHZhbHVlID0gZC0+bG9jYWxTdG9yYWdlW2ldLnZhbHVlOwotICAgICAgICBp
ZiAoIXZhbHVlLT5tYXJrZWQoKSkKLSAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7Ci0gICAgfQor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBzdGFjay5wdXNo
KGQtPmxvY2FsU3RvcmFnZVtpXS52YWx1ZSk7CiAgICAgCi0gICAgQVNTRVJUKGQtPmZ1bmN0aW9u
KTsKLSAgICBpZiAoIWQtPmZ1bmN0aW9uLT5tYXJrZWQoKSkKLSAgICAgICAgZC0+ZnVuY3Rpb24t
Pm1hcmsoKTsKLQotICAgIGlmIChkLT5hcmd1bWVudHNPYmplY3QgJiYgIWQtPmFyZ3VtZW50c09i
amVjdC0+bWFya2VkKCkpCi0gICAgICAgIGQtPmFyZ3VtZW50c09iamVjdC0+bWFyaygpOworICAg
IHN0YWNrLnB1c2goZC0+ZnVuY3Rpb24pOworICAgIGlmIChkLT5hcmd1bWVudHNPYmplY3QpCisg
ICAgICBzdGFjay5wdXNoKGQtPmFyZ3VtZW50c09iamVjdCk7CiB9CiAKIHZvaWQgQWN0aXZhdGlv
bkltcDo6Y3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IGtqcy9m
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5oCShyZXZpc2lvbiAyNzU2NikK
KysrIGtqcy9mdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIHZvaWQgc2V0U2NvcGUoY29uc3QgU2NvcGVDaGFpbiYgcykgeyBfc2Nv
cGUgPSBzOyB9CiAgICAgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGUoKSBjb25zdCB7IHJldHVybiBf
c2NvcGU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICBwcml2YXRlOgogICAgIFNjb3BlQ2hhaW4gX3Nj
b3BlOwpAQCAtMTI0LDcgKzEyNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBBcmd1bWVu
dHMgOiBwdWJsaWMgSlNPYmplY3QgewogICBwdWJsaWM6CiAgICAgQXJndW1lbnRzKEV4ZWNTdGF0
ZSosIEZ1bmN0aW9uSW1wKiBmdW5jLCBjb25zdCBMaXN0JiBhcmdzLCBBY3RpdmF0aW9uSW1wKiBh
Y3QpOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtDaGls
ZHJlbihNYXJrU3RhY2smKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CkBAIC0x
NjMsNyArMTYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwogCi0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgYm9vbCBpc0FjdGl2YXRpb24o
KSB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IGtqcy9pbnRlcm5hbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2pzL2ludGVybmFsLmNwcAkocmV2aXNpb24gMjc1NjYpCisrKyBranMvaW50ZXJuYWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTQgKzE0MiwxMiBAQCBib29sIE51bWJlckltcDo6Z2V0
VHJ1bmNhdGVkVUludDMyKHVpbnQzCiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBHZXR0ZXJTZXR0ZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12b2lk
IEdldHRlclNldHRlckltcDo6bWFyaygpCit2b2lkIEdldHRlclNldHRlckltcDo6bWFya0NoaWxk
cmVuKE1hcmtTdGFjayYgc3RhY2spCiB7Ci0gICAgSlNDZWxsOjptYXJrKCk7Ci0gICAgCi0gICAg
aWYgKGdldHRlciAmJiAhZ2V0dGVyLT5tYXJrZWQoKSkKLSAgICAgICAgZ2V0dGVyLT5tYXJrKCk7
Ci0gICAgaWYgKHNldHRlciAmJiAhc2V0dGVyLT5tYXJrZWQoKSkKLSAgICAgICAgc2V0dGVyLT5t
YXJrKCk7CisgICAgaWYgKGdldHRlcikKKyAgICAgICAgc3RhY2sucHVzaChnZXR0ZXIpOworICAg
IGlmIChzZXR0ZXIpCisgICAgICAgIHN0YWNrLnB1c2goc2V0dGVyKTsKIH0KIAogSlNWYWx1ZSog
R2V0dGVyU2V0dGVySW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBKU1R5cGUpIGNvbnN0Cklu
ZGV4OiBranMvaW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9pbnRlcnByZXRlci5j
cHAJKHJldmlzaW9uIDI3NTY2KQorKysga2pzL2ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTI5LDgwICs1MjksODAgQEAgSlNPYmplY3QgKkludGVycHJldGVyOjpidWlsdGluVVJJ
RXJyb3JQcgogICByZXR1cm4gbV9VcmlFcnJvclByb3RvdHlwZTsKIH0KIAotdm9pZCBJbnRlcnBy
ZXRlcjo6bWFyaygpCit2b2lkIEludGVycHJldGVyOjptYXJrUm9vdHMoTWFya1N0YWNrJiBzdGFj
aykKIHsKICAgICBpZiAobV9jdXJyZW50RXhlYykKLSAgICAgICAgbV9jdXJyZW50RXhlYy0+bWFy
aygpOworICAgICAgICBtX2N1cnJlbnRFeGVjLT5tYXJrQ2hpbGRyZW4oc3RhY2spOwogCi0gICAg
aWYgKG1fZ2xvYmFsRXhlYy5leGNlcHRpb24oKSAmJiAhbV9nbG9iYWxFeGVjLmV4Y2VwdGlvbigp
LT5tYXJrZWQoKSkKLSAgICAgICAgbV9nbG9iYWxFeGVjLmV4Y2VwdGlvbigpLT5tYXJrKCk7Cisg
ICAgaWYgKG1fZ2xvYmFsRXhlYy5leGNlcHRpb24oKSkKKyAgICAgICAgc3RhY2sucHVzaChtX2ds
b2JhbEV4ZWMuZXhjZXB0aW9uKCkpOwogCi0gICAgaWYgKG1fZ2xvYmFsT2JqZWN0ICYmICFtX2ds
b2JhbE9iamVjdC0+bWFya2VkKCkpCi0gICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5tYXJrKCk7Cisg
ICAgaWYgKG1fZ2xvYmFsT2JqZWN0KQorICAgICAgICBzdGFjay5wdXNoKG1fZ2xvYmFsT2JqZWN0
KTsKIAotICAgIGlmIChtX09iamVjdCAmJiAhbV9PYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBt
X09iamVjdC0+bWFyaygpOwotICAgIGlmIChtX0Z1bmN0aW9uICYmICFtX0Z1bmN0aW9uLT5tYXJr
ZWQoKSkKLSAgICAgICAgbV9GdW5jdGlvbi0+bWFyaygpOwotICAgIGlmIChtX0FycmF5ICYmICFt
X0FycmF5LT5tYXJrZWQoKSkKLSAgICAgICAgbV9BcnJheS0+bWFyaygpOwotICAgIGlmIChtX0Jv
b2xlYW4gJiYgIW1fQm9vbGVhbi0+bWFya2VkKCkpCi0gICAgICAgIG1fQm9vbGVhbi0+bWFyaygp
OwotICAgIGlmIChtX1N0cmluZyAmJiAhbV9TdHJpbmctPm1hcmtlZCgpKQotICAgICAgICBtX1N0
cmluZy0+bWFyaygpOwotICAgIGlmIChtX051bWJlciAmJiAhbV9OdW1iZXItPm1hcmtlZCgpKQot
ICAgICAgICBtX051bWJlci0+bWFyaygpOwotICAgIGlmIChtX0RhdGUgJiYgIW1fRGF0ZS0+bWFy
a2VkKCkpCi0gICAgICAgIG1fRGF0ZS0+bWFyaygpOwotICAgIGlmIChtX1JlZ0V4cCAmJiAhbV9S
ZWdFeHAtPm1hcmtlZCgpKQotICAgICAgICBtX1JlZ0V4cC0+bWFyaygpOwotICAgIGlmIChtX0Vy
cm9yICYmICFtX0Vycm9yLT5tYXJrZWQoKSkKLSAgICAgICAgbV9FcnJvci0+bWFyaygpOwotICAg
IAotICAgIGlmIChtX09iamVjdFByb3RvdHlwZSAmJiAhbV9PYmplY3RQcm90b3R5cGUtPm1hcmtl
ZCgpKQotICAgICAgICBtX09iamVjdFByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX0Z1bmN0
aW9uUHJvdG90eXBlICYmICFtX0Z1bmN0aW9uUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAg
bV9GdW5jdGlvblByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX0FycmF5UHJvdG90eXBlICYm
ICFtX0FycmF5UHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9BcnJheVByb3RvdHlwZS0+
bWFyaygpOwotICAgIGlmIChtX0Jvb2xlYW5Qcm90b3R5cGUgJiYgIW1fQm9vbGVhblByb3RvdHlw
ZS0+bWFya2VkKCkpCi0gICAgICAgIG1fQm9vbGVhblByb3RvdHlwZS0+bWFyaygpOwotICAgIGlm
IChtX1N0cmluZ1Byb3RvdHlwZSAmJiAhbV9TdHJpbmdQcm90b3R5cGUtPm1hcmtlZCgpKQotICAg
ICAgICBtX1N0cmluZ1Byb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX051bWJlclByb3RvdHlw
ZSAmJiAhbV9OdW1iZXJQcm90b3R5cGUtPm1hcmtlZCgpKQotICAgICAgICBtX051bWJlclByb3Rv
dHlwZS0+bWFyaygpOwotICAgIGlmIChtX0RhdGVQcm90b3R5cGUgJiYgIW1fRGF0ZVByb3RvdHlw
ZS0+bWFya2VkKCkpCi0gICAgICAgIG1fRGF0ZVByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmICht
X1JlZ0V4cFByb3RvdHlwZSAmJiAhbV9SZWdFeHBQcm90b3R5cGUtPm1hcmtlZCgpKQotICAgICAg
ICBtX1JlZ0V4cFByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX0Vycm9yUHJvdG90eXBlICYm
ICFtX0Vycm9yUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9FcnJvclByb3RvdHlwZS0+
bWFyaygpOwotICAgIAotICAgIGlmIChtX0V2YWxFcnJvciAmJiAhbV9FdmFsRXJyb3ItPm1hcmtl
ZCgpKQotICAgICAgICBtX0V2YWxFcnJvci0+bWFyaygpOwotICAgIGlmIChtX1JhbmdlRXJyb3Ig
JiYgIW1fUmFuZ2VFcnJvci0+bWFya2VkKCkpCi0gICAgICAgIG1fUmFuZ2VFcnJvci0+bWFyaygp
OwotICAgIGlmIChtX1JlZmVyZW5jZUVycm9yICYmICFtX1JlZmVyZW5jZUVycm9yLT5tYXJrZWQo
KSkKLSAgICAgICAgbV9SZWZlcmVuY2VFcnJvci0+bWFyaygpOwotICAgIGlmIChtX1N5bnRheEVy
cm9yICYmICFtX1N5bnRheEVycm9yLT5tYXJrZWQoKSkKLSAgICAgICAgbV9TeW50YXhFcnJvci0+
bWFyaygpOwotICAgIGlmIChtX1R5cGVFcnJvciAmJiAhbV9UeXBlRXJyb3ItPm1hcmtlZCgpKQot
ICAgICAgICBtX1R5cGVFcnJvci0+bWFyaygpOwotICAgIGlmIChtX1VyaUVycm9yICYmICFtX1Vy
aUVycm9yLT5tYXJrZWQoKSkKLSAgICAgICAgbV9VcmlFcnJvci0+bWFyaygpOwotICAgIAotICAg
IGlmIChtX0V2YWxFcnJvclByb3RvdHlwZSAmJiAhbV9FdmFsRXJyb3JQcm90b3R5cGUtPm1hcmtl
ZCgpKQotICAgICAgICBtX0V2YWxFcnJvclByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX1Jh
bmdlRXJyb3JQcm90b3R5cGUgJiYgIW1fUmFuZ2VFcnJvclByb3RvdHlwZS0+bWFya2VkKCkpCi0g
ICAgICAgIG1fUmFuZ2VFcnJvclByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX1JlZmVyZW5j
ZUVycm9yUHJvdG90eXBlICYmICFtX1JlZmVyZW5jZUVycm9yUHJvdG90eXBlLT5tYXJrZWQoKSkK
LSAgICAgICAgbV9SZWZlcmVuY2VFcnJvclByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX1N5
bnRheEVycm9yUHJvdG90eXBlICYmICFtX1N5bnRheEVycm9yUHJvdG90eXBlLT5tYXJrZWQoKSkK
LSAgICAgICAgbV9TeW50YXhFcnJvclByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX1R5cGVF
cnJvclByb3RvdHlwZSAmJiAhbV9UeXBlRXJyb3JQcm90b3R5cGUtPm1hcmtlZCgpKQotICAgICAg
ICBtX1R5cGVFcnJvclByb3RvdHlwZS0+bWFyaygpOwotICAgIGlmIChtX1VyaUVycm9yUHJvdG90
eXBlICYmICFtX1VyaUVycm9yUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9VcmlFcnJv
clByb3RvdHlwZS0+bWFyaygpOworICAgIGlmIChtX09iamVjdCkKKyAgICAgICBzdGFjay5wdXNo
KG1fT2JqZWN0KTsKKyAgICBpZiAobV9GdW5jdGlvbikKKyAgICAgICAgc3RhY2sucHVzaChtX0Z1
bmN0aW9uKTsKKyAgICBpZiAobV9BcnJheSkKKyAgICAgICAgc3RhY2sucHVzaChtX0FycmF5KTsK
KyAgICBpZiAobV9Cb29sZWFuKQorICAgICAgICBzdGFjay5wdXNoKG1fQm9vbGVhbik7CisgICAg
aWYgKG1fU3RyaW5nKQorICAgICAgICBzdGFjay5wdXNoKG1fU3RyaW5nKTsKKyAgICBpZiAobV9O
dW1iZXIpCisgICAgICAgIHN0YWNrLnB1c2gobV9OdW1iZXIpOworICAgIGlmIChtX0RhdGUpCisg
ICAgICAgIHN0YWNrLnB1c2gobV9EYXRlKTsKKyAgICBpZiAobV9SZWdFeHApCisgICAgICAgIHN0
YWNrLnB1c2gobV9SZWdFeHApOworICAgIGlmIChtX0Vycm9yKQorICAgICAgICBzdGFjay5wdXNo
KG1fRXJyb3IpOworICAgIAorICAgIGlmIChtX09iamVjdFByb3RvdHlwZSkKKyAgICAgICAgc3Rh
Y2sucHVzaChtX09iamVjdFByb3RvdHlwZSk7CisgICAgaWYgKG1fRnVuY3Rpb25Qcm90b3R5cGUp
CisgICAgICAgIHN0YWNrLnB1c2gobV9GdW5jdGlvblByb3RvdHlwZSk7CisgICAgaWYgKG1fQXJy
YXlQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9BcnJheVByb3RvdHlwZSk7CisgICAg
aWYgKG1fQm9vbGVhblByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX0Jvb2xlYW5Qcm90
b3R5cGUpOworICAgIGlmIChtX1N0cmluZ1Byb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaCht
X1N0cmluZ1Byb3RvdHlwZSk7CisgICAgaWYgKG1fTnVtYmVyUHJvdG90eXBlKQorICAgICAgICBz
dGFjay5wdXNoKG1fTnVtYmVyUHJvdG90eXBlKTsKKyAgICBpZiAobV9EYXRlUHJvdG90eXBlKQor
ICAgICAgICBzdGFjay5wdXNoKG1fRGF0ZVByb3RvdHlwZSk7CisgICAgaWYgKG1fUmVnRXhwUHJv
dG90eXBlKQorICAgICAgICBzdGFjay5wdXNoKG1fUmVnRXhwUHJvdG90eXBlKTsKKyAgICBpZiAo
bV9FcnJvclByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX0Vycm9yUHJvdG90eXBlKTsK
KyAgICAKKyAgICBpZiAobV9FdmFsRXJyb3IpCisgICAgICAgIHN0YWNrLnB1c2gobV9FdmFsRXJy
b3IpOworICAgIGlmIChtX1JhbmdlRXJyb3IpCisgICAgICAgIHN0YWNrLnB1c2gobV9SYW5nZUVy
cm9yKTsKKyAgICBpZiAobV9SZWZlcmVuY2VFcnJvcikKKyAgICAgICAgc3RhY2sucHVzaChtX1Jl
ZmVyZW5jZUVycm9yKTsKKyAgICBpZiAobV9TeW50YXhFcnJvcikKKyAgICAgICAgc3RhY2sucHVz
aChtX1N5bnRheEVycm9yKTsKKyAgICBpZiAobV9UeXBlRXJyb3IpCisgICAgICAgIHN0YWNrLnB1
c2gobV9UeXBlRXJyb3IpOworICAgIGlmIChtX1VyaUVycm9yKQorICAgICAgICBzdGFjay5wdXNo
KG1fVXJpRXJyb3IpOworICAgIAorICAgIGlmIChtX0V2YWxFcnJvclByb3RvdHlwZSkKKyAgICAg
ICAgc3RhY2sucHVzaChtX0V2YWxFcnJvclByb3RvdHlwZSk7CisgICAgaWYgKG1fUmFuZ2VFcnJv
clByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX1JhbmdlRXJyb3JQcm90b3R5cGUpOwor
ICAgIGlmIChtX1JlZmVyZW5jZUVycm9yUHJvdG90eXBlKQorICAgICAgICBzdGFjay5wdXNoKG1f
UmVmZXJlbmNlRXJyb3JQcm90b3R5cGUpOworICAgIGlmIChtX1N5bnRheEVycm9yUHJvdG90eXBl
KQorICAgICAgICBzdGFjay5wdXNoKG1fU3ludGF4RXJyb3JQcm90b3R5cGUpOworICAgIGlmICht
X1R5cGVFcnJvclByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX1R5cGVFcnJvclByb3Rv
dHlwZSk7CisgICAgaWYgKG1fVXJpRXJyb3JQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2go
bV9VcmlFcnJvclByb3RvdHlwZSk7CiB9CiAKICNpZmRlZiBLSlNfREVCVUdfTUVNCkluZGV4OiBr
anMvaW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvaW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMjc1NjYpCisrKyBranMvaW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcg
KzI4Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIENhbGxlZCBkdXJpbmcgdGhlIG1hcmsg
cGhhc2Ugb2YgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBTdWJjbGFzc2VzIAogICAgICAqIGltcGxl
bWVudGluZyBjdXN0b20gbWFyayBtZXRob2RzIG11c3QgbWFrZSBzdXJlIHRvIGNoYWluIHRvIHRo
aXMgb25lLgogICAgICAqLwotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2
b2lkIG1hcmtSb290cyhNYXJrU3RhY2smKTsKIAogI2lmZGVmIEtKU19ERUJVR19NRU0KICAgICAv
KioKSW5kZXg6IGtqcy9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbGlzdC5jcHAJKHJldmlz
aW9uIDI3NTY2KQorKysga2pzL2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxOCArNDMs
MTUgQEAgTGlzdDo6TGlzdFNldCYgTGlzdDo6bWFya1NldCgpCiAgICAgcmV0dXJuIHN0YXRpY01h
cmtTZXQ7CiB9CiAKLXZvaWQgTGlzdDo6bWFya1Byb3RlY3RlZExpc3RzU2xvd0Nhc2UoKQordm9p
ZCBMaXN0OjptYXJrUHJvdGVjdGVkTGlzdHNTbG93Q2FzZShNYXJrU3RhY2smIHN0YWNrKQogewog
ICAgIExpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1hcmtTZXQoKS5lbmQoKTsKICAgICBmb3IgKExp
c3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBMaXN0KiBsaXN0ID0gKml0OwogCiAgICAgICAgIGl0ZXJhdG9yIGVuZDIgPSBs
aXN0LT5lbmQoKTsKLSAgICAgICAgZm9yIChpdGVyYXRvciBpdDIgPSBsaXN0LT5iZWdpbigpOyBp
dDIgIT0gZW5kMjsgKytpdDIpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSAqaXQyOwotICAg
ICAgICAgICAgaWYgKCF2LT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICB2LT5tYXJrKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgZm9yIChpdGVyYXRvciBpdDIgPSBsaXN0LT5iZWdpbigpOyBpdDIg
IT0gZW5kMjsgKytpdDIpCisgICAgICAgICAgICBzdGFjay5wdXNoKCppdDIpOwogICAgIH0KIH0K
IApJbmRleDoga2pzL2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbGlzdC5oCShyZXZpc2lvbiAy
NzU2NikKKysrIGtqcy9saXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE4ICs4NSwxOCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3Rvci5iZWdpbigpOyB9CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yLmVuZCgpOyB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgbWFy
a1Byb3RlY3RlZExpc3RzKCkKKyAgICAgICAgc3RhdGljIHZvaWQgbWFya1Byb3RlY3RlZExpc3Rz
KE1hcmtTdGFjayYgc3RhY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbWFya1NldCgp
LnNpemUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtYXJrUHJvdGVj
dGVkTGlzdHNTbG93Q2FzZSgpOworICAgICAgICAgICAgbWFya1Byb3RlY3RlZExpc3RzU2xvd0Nh
c2Uoc3RhY2spOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IExpc3QmIGVtcHR5
KCk7IC8vIEZhc3QgcGF0aCBmb3IgYW4gZW1wdHkgbGlzdC4KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHN0YXRpYyBMaXN0U2V0JiBtYXJrU2V0KCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIG1hcmtQ
cm90ZWN0ZWRMaXN0c1Nsb3dDYXNlKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIG1hcmtQcm90ZWN0
ZWRMaXN0c1Nsb3dDYXNlKE1hcmtTdGFjayYpOwogCiAgICAgICAgIHZvaWQgZXhwYW5kQW5kQXBw
ZW5kKEpTVmFsdWUqKTsKIApJbmRleDoga2pzL29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pz
L29iamVjdC5jcHAJKHJldmlzaW9uIDI3NTY2KQorKysga2pzL29iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMywxMCArMTEzLDggQEAgSlNWYWx1ZSAqSlNPYmplY3Q6OmNhbGwoRXhlY1N0
YXRlICpleGVjLAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSlNPYmplY3Qg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgSlNPYmplY3Q6Om1h
cmsoKQordm9pZCBKU09iamVjdDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spCiB7Ci0g
IEpTQ2VsbDo6bWFyaygpOwotCiAjaWYgSkFWQVNDUklQVF9NQVJLX1RSQUNJTkcKICAgc3RhdGlj
IGludCBtYXJrU3RhY2tEZXB0aCA9IDA7CiAgIG1hcmtTdGFja0RlcHRoKys7CkBAIC0xMjYsMTEg
KzEyNCw4IEBAIHZvaWQgSlNPYmplY3Q6Om1hcmsoKQogICBwcmludGYoIiVzICglcClcbiIsIGNs
YXNzTmFtZSgpLlVURjhTdHJpbmcoKS5jX3N0cigpLCB0aGlzKTsKICNlbmRpZgogICAKLSAgSlNW
YWx1ZSAqcHJvdG8gPSBfcHJvdG87Ci0gIGlmICghcHJvdG8tPm1hcmtlZCgpKQotICAgIHByb3Rv
LT5tYXJrKCk7Ci0KLSAgX3Byb3AubWFyaygpOworICBzdGFjay5wdXNoKF9wcm90byk7CisgIF9w
cm9wLm1hcmtDaGlsZHJlbihzdGFjayk7CiAgIAogI2lmIEpBVkFTQ1JJUFRfTUFSS19UUkFDSU5H
CiAgIG1hcmtTdGFja0RlcHRoLS07CkluZGV4OiBranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL29iamVjdC5oCShyZXZpc2lvbiAyNzU2NikKKysrIGtqcy9vYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAi
Q29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJp
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgInByb3BlcnR5X21hcC5oIgogI2luY2x1ZGUgInByb3Bl
cnR5X3Nsb3QuaCIKQEAgLTg0LDcgKzg1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVh
bCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdmlydHVhbCBK
U09iamVjdCAqdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICAgIAotICAgIHZp
cnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3Rh
Y2smKTsKICAgICAgIAogICAgIEpTT2JqZWN0ICpnZXRHZXR0ZXIoKSB7IHJldHVybiBnZXR0ZXI7
IH0KICAgICB2b2lkIHNldEdldHRlcihKU09iamVjdCAqZykgeyBnZXR0ZXIgPSBnOyB9CkBAIC0x
MTEsNyArMTEyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICovCiAgICAgSlNPYmplY3QoKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJl
bihNYXJrU3RhY2smKTsKICAgICB2aXJ0dWFsIEpTVHlwZSB0eXBlKCkgY29uc3Q7CiAKICAgICAv
KioKQEAgLTU4NiwxMiArNTg3LDExIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0
T3duUHJvcGUKIAogLy8gRklYTUU6IFB1dCB0aGlzIGZ1bmN0aW9uIGluIGEgc2VwYXJhdGUgZmls
ZSBuYW1lZCBzb21ldGhpbmcgbGlrZSBzY29wZV9jaGFpbl9tYXJrLmggLS0gY2FuJ3QgcHV0IGl0
IGluIHNjb3BlX2NoYWluLmggc2luY2UgaXQgZGVwZW5kcyBvbiBKU09iamVjdC4KIAotaW5saW5l
IHZvaWQgU2NvcGVDaGFpbjo6bWFyaygpCitpbmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrQ2hp
bGRyZW4oTWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBmb3IgKFNjb3BlQ2hhaW5Ob2RlICpuID0g
X25vZGU7IG47IG4gPSBuLT5uZXh0KSB7Ci0gICAgICAgIEpTT2JqZWN0ICpvID0gbi0+b2JqZWN0
OwotICAgICAgICBpZiAoIW8tPm1hcmtlZCgpKQotICAgICAgICAgICAgby0+bWFyaygpOworICAg
IGZvciAoU2NvcGVDaGFpbk5vZGUqIG4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKKyAgICAg
ICAgSlNPYmplY3QqIG8gPSBuLT5vYmplY3Q7CisgICAgICAgIHN0YWNrLnB1c2gobyk7CiAgICAg
fQogfQogCkluZGV4OiBranMvcHJvcGVydHlfbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvcHJv
cGVydHlfbWFwLmNwcAkocmV2aXNpb24gMjc1NjYpCisrKyBranMvcHJvcGVydHlfbWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjE4LDI1ICs2MTgsMTkgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6cmVt
b3ZlKGNvbnN0IElkZW50aWZpZQogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotdm9pZCBQ
cm9wZXJ0eU1hcDo6bWFyaygpIGNvbnN0Cit2b2lkIFByb3BlcnR5TWFwOjptYXJrQ2hpbGRyZW4o
TWFya1N0YWNrJiBzdGFjaykgY29uc3QKIHsKICAgICBpZiAoIW1fdXNpbmdUYWJsZSkgewogI2lm
IFVTRV9TSU5HTEVfRU5UUlkKLSAgICAgICAgaWYgKG1fc2luZ2xlRW50cnlLZXkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIHYgPSBtX3Uuc2luZ2xlRW50cnlWYWx1ZTsKLSAgICAgICAgICAgIGlm
ICghdi0+bWFya2VkKCkpCi0gICAgICAgICAgICAgICAgdi0+bWFyaygpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChtX3NpbmdsZUVudHJ5S2V5KQorICAgICAgICAgICAgc3RhY2sucHVzaChtX3Uu
c2luZ2xlRW50cnlWYWx1ZSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IHVuc2lnbmVkIGVudHJ5Q291bnQgPSBtX3UudGFibGUtPmtleUNvdW50ICsgbV91LnRhYmxlLT5k
ZWxldGVkU2VudGluZWxDb3VudDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5
Q291bnQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlKiB2ID0gbV91LnRhYmxlLT5lbnRyaWVzKClb
aV0udmFsdWU7Ci0gICAgICAgIGlmICghdi0+bWFya2VkKCkpCi0gICAgICAgICAgICB2LT5tYXJr
KCk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gZW50cnlDb3VudDsgaSsr
KQorICAgICAgICBzdGFjay5wdXNoKG1fdS50YWJsZS0+ZW50cmllcygpW2ldLnZhbHVlKTsKIH0K
IAogc3RhdGljIGludCBjb21wYXJlUHJvcGVydHlNYXBFbnRyeUluZGljZXMoY29uc3Qgdm9pZCog
YSwgY29uc3Qgdm9pZCogYikKSW5kZXg6IGtqcy9wcm9wZXJ0eV9tYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBranMvcHJvcGVydHlfbWFwLmgJKHJldmlzaW9uIDI3NTY2KQorKysga2pzL3Byb3BlcnR5X21h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBNYXJrU3Rh
Y2s7CiAgICAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiAgICAgCiAgICAgc3RydWN0IFByb3Bl
cnR5TWFwRW50cnk7CkBAIC01OSw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBK
U1ZhbHVlKiBnZXQoY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25z
dDsKICAgICAgICAgSlNWYWx1ZSoqIGdldExvY2F0aW9uKGNvbnN0IElkZW50aWZpZXImIG5hbWUp
OwogCi0gICAgICAgIHZvaWQgbWFyaygpIGNvbnN0OworICAgICAgICB2b2lkIG1hcmtDaGlsZHJl
bihNYXJrU3RhY2smKSBjb25zdDsKICAgICAgICAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlO
YW1lcyhQcm9wZXJ0eU5hbWVBcnJheSYpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2F2ZShTYXZl
ZFByb3BlcnRpZXMmKSBjb25zdDsKSW5kZXg6IGtqcy9zY29wZV9jaGFpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9zY29wZV9jaGFpbi5oCShyZXZpc2lvbiAyNzU2NikKKysrIGtqcy9zY29wZV9jaGFp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB2b2lkIHB1c2goY29uc3QgU2NvcGVDaGFpbiAmKTsKICAgICAgICAgdm9pZCBwb3AoKTsK
ICAgICAgICAgCi0gICAgICAgIHZvaWQgbWFyaygpOworICAgICAgICB2b2lkIG1hcmtDaGlsZHJl
bihNYXJrU3RhY2smKTsKIAogI2lmbmRlZiBOREVCVUcgICAgICAgIAogICAgICAgICB2b2lkIHBy
aW50KCk7CkluZGV4OiBranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL3N0
cmluZ19vYmplY3QuY3BwCShyZXZpc2lvbiAyNzU2NikKKysrIGtqcy9zdHJpbmdfb2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSwxMiBAQCB2b2lkIFN0cmluZ0luc3RhbmNl
OjpnZXRQcm9wZXJ0eU5hbWVzKEV4CiAgIHJldHVybiBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1l
cyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAordm9pZCBTdHJpbmdJbnN0YW5jZTo6bWFya0No
aWxkcmVuKE1hcmtTdGFjayYgc3RhY2spIAoreworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4o
c3RhY2spOworICAgIHN0YWNrLnB1c2hBdG9tKGludGVybmFsVmFsdWUoKSk7Cit9CisKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdHJpbmdQcm90b3R5cGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiBjb25zdCBDbGFzc0luZm8gU3RyaW5nUHJvdG90eXBlOjppbmZvID0g
eyAiU3RyaW5nIiwgJlN0cmluZ0luc3RhbmNlOjppbmZvLCAmc3RyaW5nVGFibGUgfTsKIC8qIFNv
dXJjZSBmb3Igc3RyaW5nX29iamVjdC5sdXQuaApJbmRleDoga2pzL3N0cmluZ19vYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBranMvc3RyaW5nX29iamVjdC5oCShyZXZpc2lvbiAyNzU2NikKKysrIGtq
cy9zdHJpbmdfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCiAgICAgU3RyaW5n
SW1wKiBpbnRlcm5hbFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nSW1w
Kj4oSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlKCkpO30KKyAgICB2aXJ0dWFsIHZvaWQg
bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spOwogCiAgIHByaXZhdGU6CiAgICAgYm9vbCBp
bmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5U2xv
dCYpOwpJbmRleDoga2pzL3ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL3ZhbHVlLmgJKHJldmlz
aW9uIDI3NTY2KQorKysga2pzL3ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU09iamVjdDsKIGNs
YXNzIEpTQ2VsbDsKK2NsYXNzIE1hcmtTdGFjazsKIAogc3RydWN0IENsYXNzSW5mbzsKIApAQCAt
NDcsNiArNDgsNyBAQCBzdHJ1Y3QgQ2xhc3NJbmZvOwogY2xhc3MgSlNWYWx1ZSA6IE5vbmNvcHlh
YmxlIHsKICAgICBmcmllbmQgY2xhc3MgSlNDZWxsOyAvLyBzbyBpdCBjYW4gZGVyaXZlIGZyb20g
dGhpcyBjbGFzcwogICAgIGZyaWVuZCBjbGFzcyBDb2xsZWN0b3I7IC8vIHNvIGl0IGNhbiBjYWxs
IGFzQ2VsbCgpCisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFjazsgLy8gc28gaXQgY2FuIGNhbGwg
YXNDZWxsKCkKIAogcHJpdmF0ZToKICAgICBKU1ZhbHVlKCk7CkBAIC0xMDEsNyArMTAzLDcgQEAg
cHVibGljOgogICAgIGZsb2F0IHRvRmxvYXQoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAvLyBH
YXJiYWdlIGNvbGxlY3Rpb24uCi0gICAgdm9pZCBtYXJrKCk7CisgICAgdm9pZCBtYXJrQ2hpbGRy
ZW4oTWFya1N0YWNrJik7CiAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKIAogcHJpdmF0ZToKQEAg
LTE1Nyw4ICsxNTksOSBAQCBwdWJsaWM6CiAKICAgICAvLyBHYXJiYWdlIGNvbGxlY3Rpb24uCiAg
ICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCk7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogICAgIGJvb2wgbWFy
a2VkKCkgY29uc3Q7CisgICAgYm9vbCBpc0F0b21pYygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA8
IDY7IH0KIH07CiAKIEpTVmFsdWUgKmpzTnVtYmVyQ2VsbChkb3VibGUpOwpAQCAtMjM2LDkgKzIz
OSw5IEBAIGlubGluZSBib29sIEpTQ2VsbDo6bWFya2VkKCkgY29uc3QKICAgICByZXR1cm4gQ29s
bGVjdG9yOjppc0NlbGxNYXJrZWQodGhpcyk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6bWFy
aygpCitpbmxpbmUgdm9pZCBKU0NlbGw6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smKQogewotICAg
IHJldHVybiBDb2xsZWN0b3I6Om1hcmtDZWxsKHRoaXMpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiBpbmxpbmUgSlNDZWxsICpKU1ZhbHVlOjphc0NlbGwoKQpAQCAtMzUyLDEwICsz
NTUsMTAgQEAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKAogICAgIHJl
dHVybiBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykgPyBKU0ltbWVkaWF0ZTo6Z2V0VHJ1
bmNhdGVkVUludDMyKHRoaXMsIHYpIDogYXNDZWxsKCktPmdldFRydW5jYXRlZFVJbnQzMih2KTsK
IH0KIAotaW5saW5lIHZvaWQgSlNWYWx1ZTo6bWFyaygpCitpbmxpbmUgdm9pZCBKU1ZhbHVlOjpt
YXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBBU1NFUlQoIUpTSW1tZWRpYXRl
Ojppc0ltbWVkaWF0ZSh0aGlzKSk7IC8vIGNhbGxlcnMgc2hvdWxkIGNoZWNrICFtYXJrZWQoKSBi
ZWZvcmUgY2FsbGluZyBtYXJrKCkKLSAgICBhc0NlbGwoKS0+bWFyaygpOworICAgIEFTU0VSVCgh
SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHRoaXMpKTsgLy8gY2FsbGVycyBzaG91bGQgY2hlY2sg
IW1hcmtlZCgpIGJlZm9yZSBjYWxsaW5nIG1hcmtDaGlsZHJlbigpCisgICAgYXNDZWxsKCktPm1h
cmtDaGlsZHJlbihzdGFjayk7CiB9CiAKIGlubGluZSBib29sIEpTVmFsdWU6Om1hcmtlZCgpIGNv
bnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17544</attachid>
            <date>2007-11-27 00:50:07 -0800</date>
            <delta_ts>2007-11-27 01:02:15 -0800</delta_ts>
            <desc>[1/4]         Not reviewed.</desc>
            <filename>-Not-reviewed..patch</filename>
            <type>text/plain</type>
            <size>1725</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">Y2Y3ZDA1ZGJlMDVkOTYzZmUxZTk5YmIzMjE5OTgwZTk5OGJkMzg3MApkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEzNDFmYTgu
LjMxNWVhZjggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5IEBACisyMDA3LTExLTI2ICBNYWNpZWogU3RhY2hv
d2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgTm90IHJldmlld2VkLgorCisgICAgICAg
IEZpeCBEdW1wUmVuZGVyVHJlZSBPYmpDIGJ1ZyBjb21wYXJpbmcgc3RyaW5ncy4KKwogMjAwNy0x
MS0yNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIC0gVGlnZXIg
YnVpbGQgZml4LgpAQCAtMTQxLDcgKzE0NywxMCBAQAogICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbToKICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
SmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CiAgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorPT09PT09PQorPj4+Pj4+PiBkYWVmOTYyLi4uICAg
ICAgICAgTm90IHJldmlld2VkLjpXZWJLaXRUb29scy9DaGFuZ2VMb2cKICAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9tYWMvT2JqQ0NvbnRyb2xsZXIubToKKzw8PDw8PDwgSEVBRDpXZWJLaXRUb29s
cy9DaGFuZ2VMb2cKICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbToK
ICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvV29ya1F1ZXVlSXRlbU1hYy5tbToKIApAQCAt
NTAzLDYgKzUxMiwxMCBAQAogICAgICAgICAoY3JlYXRlX3dpbmRvdyk6CiAgICAgICAgIChtYWlu
KToKICAgICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmNwcDogUmVtb3ZlZC4KKz09PT09PT0KKyAg
ICAgICAgKC1bT2JqQ0NvbnRyb2xsZXIgaWRlbnRpdHlJc0VxdWFsOjpdKTogQ29tcGFyZSBzdHJp
bmdzIHdpdGggc3RyaW5nCisgICAgICAgIGVxdWFsaXR5IGluc3RlYWQgb2YgaWRlbnRpeSBlcXVh
bGl0eS4KKz4+Pj4+Pj4gZGFlZjk2Mi4uLiAgICAgICAgIE5vdCByZXZpZXdlZC46V2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCiAKIDIwMDctMTEtMTkgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9PYmpDQ29udHJvbGxlci5tIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL09iakND
b250cm9sbGVyLm0KaW5kZXggYjVmMmM0Mi4uMWI5YWJiNyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL09iakNDb250cm9sbGVyLm0KKysrIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL09iakNDb250cm9sbGVyLm0KQEAgLTEwMCw2ICsxMDAsOCBAQAog
CiAtIChCT09MKWlkZW50aXR5SXNFcXVhbDooV2ViU2NyaXB0T2JqZWN0ICopYSA6KFdlYlNjcmlw
dE9iamVjdCAqKWIKIHsKKyAgICBpZiAoW2EgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSAmJiBbYiBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICByZXR1cm4g
WyhOU1N0cmluZyAqKWEgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWJdOwogICAgIHJldHVy
biBhID09IGI7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17545</attachid>
            <date>2007-11-27 00:50:12 -0800</date>
            <delta_ts>2007-11-27 01:02:20 -0800</delta_ts>
            <desc>[2/4] JavaScriptCore:</desc>
            <filename>-JavaScriptCore-.patch</filename>
            <type>text/plain</type>
            <size>94977</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">MDViNjhjNmE3YmQ5MzNhN2QzMmFhZDdhNmYzODA2MWNkY2EyYjliZgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGZh
ODlkNmMuLjk3OTFjMjkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzEgQEAKKzIwMDctMTEtMjYg
IE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3
ZWQuCisKKyAgICAgICAgLSBwdXNoIHJhbmdlcyBvbnRvIHRoZSBzdGFjayB0byBhdm9pZCBtYWtp
bmcgYSBodWdlIG1hcmsgc3RhY2sgZm9yIGxhcmdlIGFycmF5cy4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgaXMgYW4gMC42JSBTdW5TcGlkZXIgc3BlZWR1cCAoYmFzZWxpbmUgZm9yIHRoaXMgYnJh
bmNoIGJlaW5nCisgICAgICAgIGFib3V0IG9uIHBhciB3aXRoIHRydW5rKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgcGF0Y2ggbG93ZXJzIHRoZSBoaWdoLXdhdGVyIG1hcmsgZm9yIHRoZSBtb3N0
IGFycmF5LWludGVuc2l2ZSB0ZXN0cyBmcm9tCisgICAgICAgIDI2ODcgdG8gMzE2LiBVbmZvcnR1
bmF0ZWx5LCB0aGUgdW5wYWNrLWNvZGUgdGVzdCBjcmVhdGVzIGEgdmVyeSBsYXJnZSBvYmplY3Qg
YW5kCisgICAgICAgIGhhcyBhIGhpZ2gtd2F0ZXIgbWFyayBvZiAxOTc5LgorICAgICAgICAKKyAg
ICAgICAgV2UgbmVlZCB0byBnZXQgdGhlIGhpZ2gtd2F0ZXIgbWFyayBhcyBsb3cgYXMgcG9zc2li
bGUgc28gdGhhdCB3ZQorICAgICAgICBjYW4gdXNlIGEgZml4ZWQtc2l6ZSBtYXJrIHN0YWNrIHdp
dGggYSBzbG93IGZhbGxiYWNrIGFsZ29yaXRobSBmb3IKKyAgICAgICAgdGhlIHJhcmUgY2FzZXMg
dGhhdCBpdCBmYWlscy4KKworICAgICAgICBSZW1haW5pbmcgb3Blbi1lbmRlZCBzdG9yYWdlcyB0
aGF0IGNhbiBibG93IG91dCB0aGUgbWFyayBzdGFjayBpbmNsdWRlOgorICAgICAgICAKKyAgICAg
ICAgLSBQcm9wZXJ0eU1hcAorICAgICAgICAtIExvY2FsU3RvcmFnZQorICAgICAgICAtIFNwYXJz
ZUFycmF5VmFsdWVNYXAKKyAgICAgICAgCisgICAgICAgIFNvbWV3aGF0IGFubm95aW5nbHksIGVh
Y2ggaGFzIGRpZmZlcmVudCBydWxlcyBmb3IgdHJhdmVyc2FsLiBPbmx5CisgICAgICAgIHRoZSBQ
cm9wZXJ0eU1hcCBzZWVtcyBsaWtlbHkgdG8gZ2V0IGh1Z2UgaW4gcmVsYXRpdmVseSBjb21tb24K
KyAgICAgICAgY2FzZXMgc28gdGhlIG5leHQgc3RlcCB3aWxsIGJlIHRvIHRha2UgY2FyZSBvZiB0
aGF0LgorICAgICAgICAKKyAgICAgICAgKiBranMvTWFya1N0YWNrLmg6CisgICAgICAgIChLSlM6
Ok1hcmtTdGFjazo6cHVzaCk6IERlZmluZSB0aGlzIGFzIGEgc2VwYXJhdGUgaW5saW5lIG91dHNp
ZGUgb2YgdGhlIGNsYXNzCisgICAgICAgIGRlY2xhcmF0aW9uLgorICAgICAgICAoS0pTOjpNYXJr
U3RhY2s6OnB1c2hBdG9tKTogZGl0dG8KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjppc0VtcHR5
KTogZGl0dG8KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpyZXNlcnZlQ2FwYWNpdHkpOiBkaXR0
bworCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cHVzaFJhbmdlKTogTmV3IGZ1bmN0aW9uIHRv
IGhhbmRsZSBwdXNoaW5nIGEKKyAgICAgICAgcmFuZ2UuIEZvciBzbWFsbCBlbm91Z2ggcmFuZ2Vz
IG9yIHJhbmdlcyB0aGF0IG9ubHkgY29udGFpbiBrbm93bgorICAgICAgICBhdG9taWMgdmFsdWVz
LCB0aGV5IGFyZSBoYW5kbGVkIGltbWVkaWF0ZWx5LiBCaWdnZXIgcmFuZ2VzIGFyZSBzYXZlZCBv
bgorICAgICAgICB0aGUgc3RhY2sgYW5kIG9ubHkgdGhlIGZpcnN0IGNodW5rIGlzIHB1c2hlZC4K
KyAgICAgICAgCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cG9wKTogQWNjb21vZGF0ZSB0aGUg
cG9zc2liaWxpdHkgb2YgcmFuZ2VzIG9uIHRoZQorICAgICAgICBzdGFjay4gV2UgaGFuZGxlIHRo
aXMgYnkgcHVsbGluZyBvdXQgdGhlIHJhbmdlLCByZXB1c2hpbmcgaXQsIGFuZCB0aGVuCisgICAg
ICAgIHBvcHBpbmcuCisKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpzaXplKTogQWRkZWQuIFVz
ZWZ1bCBmb3IgZGVidWdnaW5nLgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OmFkdmFuY2VSYW5n
ZVN0YXJ0VG9DZWxsV2l0aFJlZnMpOiBIZWxwZXIgZm9yCisgICAgICAgIHB1c2hSYW5nZQorICAg
ICAgICAoS0pTOjpNYXJrU3RhY2s6OnB1c2hXaG9sZVJhbmdlKTogZGl0dG8KKyAgICAgICAgKEtK
Uzo6TWFya1N0YWNrOjpwdXNoT25lSXRlbUFuZEFkdmFuY2UpOiBkaXR0bworICAgICAgICAoS0pT
OjpNYXJrU3RhY2s6OmFkdmFuY2VVbnRpbDEyNkl0ZW1zUHVzaGVkKTogZGl0dG8gCisgICAgICAg
ICoga2pzL2FycmF5X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEtKUzo6QXJyYXlJbnN0YW5jZTo6
bWFya0NoaWxkcmVuKTogVXNlIHB1c2hSYW5nZS4KKworMjAwNy0xMS0yNiAgTWFjaWVqIFN0YWNo
b3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdlZC4KKyAgICAgICAg
CisgICAgICAgIENoYW5nZSB0aGluZ3MgYXJvdW5kIHNvIEpTV3JhcHBlck9iamVjdCB0YWtlcyB0
aGUgaW50ZXJuYWwgdmFsdWUKKyAgICAgICAgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudCwgaW5z
dGVhZCBvZiBpbml0aWFsbHkgZmlsbGluZyBpbgorICAgICAgICBqc1VuZGVmaW5lZCgpLiBQbHVz
IGNvcnJlc3BvbmRpbmcgY2xlYW51cC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoK
KyAgICAgICAgKiBranMvSlNXcmFwcGVyT2JqZWN0Lmg6CisgICAgICAgICoga2pzL2Jvb2xfb2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5cGUpOgor
ICAgICAgICAoQm9vbGVhbk9iamVjdEltcDo6Y29uc3RydWN0KToKKyAgICAgICAgKiBranMvYm9v
bF9vYmplY3QuaDoKKyAgICAgICAgKiBranMvZGF0ZV9vYmplY3QuY3BwOgorICAgICAgICAoS0pT
OjpEYXRlT2JqZWN0SW1wOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGtqcy9kYXRlX29iamVjdC5o
OgorICAgICAgICAqIGtqcy9udW1iZXJfb2JqZWN0LmNwcDoKKyAgICAgICAgKE51bWJlclByb3Rv
dHlwZTo6TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKE51bWJlck9iamVjdEltcDo6Y29uc3Ry
dWN0KToKKyAgICAgICAgKiBranMvbnVtYmVyX29iamVjdC5oOgorICAgICAgICAqIGtqcy9zdHJp
bmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6U3RyaW5nSW5zdGFuY2U6OlN0cmluZ0luc3Rh
bmNlKToKKyAgICAgICAgKEtKUzo6U3RyaW5nT2JqZWN0SW1wOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAqIGtqcy9zdHJpbmdfb2JqZWN0Lmg6CisKKzIwMDctMTEtMjYgIE1hY2llaiBTdGFjaG93aWFr
ICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3ZWQuCisKKyAgICAgICAgSW1w
bGVtZW50IG1hcmsgc3RhY2suIFRoaXMgdmVyc2lvbiBpcyBub3Qgc3VpdGFibGUgZm9yIHByaW1l
IHRpbWUgYmVjYXVzZSBpdCBtYWtlcyBhCisgICAgICAgIGh1Z2UgYWxsb2NhdGlvbiBvbiBldmVy
eSBjb2xsZWN0LCBhbmQgcG90ZW50aWFsbHkgbWFrZXMgbWFya2luZyBvZiBkZXRhY2hlZCBzdWJ0
cmVlcworICAgICAgICBzbG93LiBCdXQgaXQgaXMgYSAuMiUgLSAuNCUgc3BlZWR1cCBldmVuIHdp
dGhvdXQgbXVjaCB0d2Vha2luZy4KKyAgICAgICAgCisgICAgICAgIFRoZSBiYXNpYyBhcHByb2Fj
aCBpcyB0byByZXBsYWNlIG1hcmsoKSBtZXRob2RzIHdpdGgKKyAgICAgICAgbWFya0NoaWxkcmVu
KE1hcmtTdGFjayYpIG1ldGhvZHMuIFJlYWNoYWJsZSByZWZlcmVuY2VzIGFyZSBwdXNoZWQKKyAg
ICAgICAgb250byBhIG1hcmsgc3RhY2sgKHdoaWNoIGVuY2Fwc3VsYXRlcyBpZ25vcmluZyBhbHJl
YWR5LW1hcmtlZAorICAgICAgICByZWZlcmVuY2VzKS4gCisgICAgICAgIAorICAgICAgICBPYmpl
Y3RzIGFyZSBubyBsb25nZXIgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNldHRpbmcgdGhlaXIg
b3duCisgICAgICAgIG1hcmsgYml0cywgdGhlIGNvbGxlY3RvciBkb2VzIHRoYXQuIFRoaXMgbWVh
bnMgdGhhdCBmb3Igb2JqZWN0cyBvbgorICAgICAgICB0aGUgbnVtYmVyIGhlYXAgd2UgZG9uJ3Qg
aGF2ZSB0byBjYWxsIG1hcmtDaGlsZHJlbigpIGF0IGFsbCBzaW5jZQorICAgICAgICB3ZSBrbm93
IHRoZXJlIGFyZW4ndCBhbnkuCisgICAgICAgIAorICAgICAgICBUaGUgbWFyayBwaGFzZSBvZiBj
b2xsZWN0IHB1c2hlcyByb290cyBvbnRvIHRoZSBtYXJrIHN0YWNrCisgICAgICAgIGFuZCBkcmFp
bnMgaXQgYXMgb2Z0ZW4gYXMgcG9zc2libGUuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHRo
aXMgYXBwcm9hY2ggdmlhYmxlIHJlcXVpcmVzIGEgY29uc3RhbnQtc2l6ZSBtYXJrIHN0YWNrCisg
ICAgICAgIGFuZCBhIHNsb3cgZmFsbGJhY2sgYXBwcm9hY2ggZm9yIHdoZW4gdGhlIHN0YWNrIHNp
emUgaXMgZXhjZWVkZWQsCisgICAgICAgIHBsdXMgb3B0aW1pemF0aW9ucyB0byBtYWtlIHRoZSBy
ZXF1aXJlZCBzdGFjayBzbWFsbCBpbiBjb21tb24KKyAgICAgICAgY2FzZXMuIFRoaXMgc2hvdWxk
IGJlIGRvYWJsZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IG5ldyBz
eW1ib2xzLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IEFkZCBuZXcgZmlsZS4KKyAgICAgICAgKiBranMvY29sbGVjdG9yLmNwcDoKKyAgICAgICAg
KEtKUzo6Q29sbGVjdG9yOjpoZWFwQWxsb2NhdGUpOgorICAgICAgICAoS0pTOjpkcmFpbk1hcmtT
dGFjayk6IEhlbHBlciBmb3IgYWxsIG9mIHRoZSBiZWxvdy4KKyAgICAgICAgKEtKUzo6Q29sbGVj
dG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkpOiBVc2UgbWFyayBzdGFjay4KKyAg
ICAgICAgKEtKUzo6Q29sbGVjdG9yOjptYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KTog
ZGl0dG8KKyAgICAgICAgKEtKUzo6Q29sbGVjdG9yOjptYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRp
dmVseSk6IGRpdHRvCisgICAgICAgIChLSlM6OkNvbGxlY3Rvcjo6bWFya1Byb3RlY3RlZE9iamVj
dHMpOiBkaXR0bworICAgICAgICAoS0pTOjpDb2xsZWN0b3I6Om1hcmtNYWluVGhyZWFkT25seU9i
amVjdHMpOiBkaXR0bworICAgICAgICAoS0pTOjpDb2xsZWN0b3I6OmNvbGxlY3QpOiBkaXR0bwor
ICAgICAgICAqIGtqcy9jb2xsZWN0b3IuaDoKKyAgICAgICAgKEtKUzo6Q29sbGVjdG9yOjpjZWxs
TWF5SGF2ZVJlZnMpOiBIZWxwZXIgZm9yIE1hcmtTdGFjay4KKworICAgICAgICAqIGtqcy9NYXJr
U3RhY2suaDogQWRkZWQuIFRoZSBhY3R1YWwgbWFyayBzdGFjayBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoKToKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpw
dXNoQXRvbSk6CisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cG9wKToKKyAgICAgICAgKEtKUzo6
TWFya1N0YWNrOjppc0VtcHR5KToKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpyZXNlcnZlQ2Fw
YWNpdHkpOgorCisgICAgICAgIENoYW5nZWQgbWFyaygpIG1ldGhvZHMgdG8gbWFya0NoaWxkcmVu
KCkgbWV0aG9kczoKKyAgICAgICAgCisgICAgICAgICoga2pzL0V4ZWNTdGF0ZS5jcHA6CisgICAg
ICAgIChLSlM6OkV4ZWNTdGF0ZTo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBranMvRXhlY1N0
YXRlLmg6CisgICAgICAgICoga2pzL0pTV3JhcHBlck9iamVjdC5jcHA6CisgICAgICAgIChLSlM6
OkpTV3JhcHBlck9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBranMvSlNXcmFwcGVy
T2JqZWN0Lmg6CisgICAgICAgICoga2pzL2FycmF5X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEtK
Uzo6QXJyYXlJbnN0YW5jZTo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBranMvYXJyYXlfaW5z
dGFuY2UuaDoKKyAgICAgICAgKiBranMvYm9vbF9vYmplY3QuY3BwOgorICAgICAgICAoQm9vbGVh
bkluc3RhbmNlOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGtqcy9ib29sX29iamVjdC5oOgor
ICAgICAgICAqIGtqcy9lcnJvcl9vYmplY3QuY3BwOgorICAgICAgICAqIGtqcy9lcnJvcl9vYmpl
Y3QuaDoKKyAgICAgICAgKiBranMvZnVuY3Rpb24uY3BwOgorICAgICAgICAoS0pTOjpGdW5jdGlv
bkltcDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKEtKUzo6QXJndW1lbnRzOjpBcmd1bWVudHMp
OgorICAgICAgICAoS0pTOjpBcmd1bWVudHM6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChLSlM6
OkFjdGl2YXRpb25JbXA6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICoga2pzL2Z1bmN0aW9uLmg6
CisgICAgICAgICoga2pzL2ludGVybmFsLmNwcDoKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVy
SW1wOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGtqcy9pbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChLSlM6OkludGVycHJldGVyOjptYXJrUm9vdHMpOgorICAgICAgICAqIGtqcy9pbnRlcnBy
ZXRlci5oOgorICAgICAgICAqIGtqcy9saXN0LmNwcDoKKyAgICAgICAgKEtKUzo6TGlzdDo6bWFy
a1Byb3RlY3RlZExpc3RzU2xvd0Nhc2UpOgorICAgICAgICAqIGtqcy9saXN0Lmg6CisgICAgICAg
IChLSlM6Okxpc3Q6Om1hcmtQcm90ZWN0ZWRMaXN0cyk6CisgICAgICAgICoga2pzL29iamVjdC5j
cHA6CisgICAgICAgIChLSlM6OkpTT2JqZWN0OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGtq
cy9vYmplY3QuaDoKKyAgICAgICAgKEtKUzo6U2NvcGVDaGFpbjo6bWFya0NoaWxkcmVuKToKKyAg
ICAgICAgKiBranMvcHJvcGVydHlfbWFwLmNwcDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6
Om1hcmtDaGlsZHJlbik6CisgICAgICAgICoga2pzL3Byb3BlcnR5X21hcC5oOgorICAgICAgICAq
IGtqcy9zY29wZV9jaGFpbi5oOgorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAg
ICAgICAgKEtKUzo6U3RyaW5nSW5zdGFuY2U6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICoga2pz
L3N0cmluZ19vYmplY3QuaDoKKwogMjAwNy0xMS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAppbmRleCAzNWYwMWI3Li40MjhiMzUyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC0xMjIsMTAgKzEyMiwxMCBAQCBfX1pOM0tKUzExSW50ZXJwcmV0ZXIxN3N0YXJ0VGltZW91
dENoZWNrRXYKIF9fWk4zS0pTMTFJbnRlcnByZXRlcjIxc2hvdWxkUHJpbnRFeGNlcHRpb25zRXYK
IF9fWk4zS0pTMTFJbnRlcnByZXRlcjI0c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zRWIKIF9fWk4z
S0pTMTFJbnRlcnByZXRlcjI3cmVzZXRHbG9iYWxPYmplY3RQcm9wZXJ0aWVzRXYKLV9fWk4zS0pT
MTFJbnRlcnByZXRlcjRtYXJrRXYKIF9fWk4zS0pTMTFJbnRlcnByZXRlcjZzX2hvb2tFCiBfX1pO
M0tKUzExSW50ZXJwcmV0ZXI4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VpUEtOU181VUNoYXJFaVBO
U183SlNWYWx1ZUUKIF9fWk4zS0pTMTFJbnRlcnByZXRlcjhldmFsdWF0ZUVSS05TXzdVU3RyaW5n
RWlTM19QTlNfN0pTVmFsdWVFCitfX1pOM0tKUzExSW50ZXJwcmV0ZXI5bWFya1Jvb3RzRVJOU185
TWFya1N0YWNrRQogX19aTjNLSlMxMUludGVycHJldGVyQzFFdgogX19aTjNLSlMxMUludGVycHJl
dGVyQzJFdgogX19aTjNLSlMxMUludGVycHJldGVyRDFFdgpAQCAtMTQ0LDE1ICsxNDQsMTQgQEAg
X19aTjNLSlMxM0FycmF5SW5zdGFuY2U0aW5mb0UKIF9fWk4zS0pTMTNTYXZlZEJ1aWx0aW5zQzFF
dgogX19aTjNLSlMxM1NhdmVkQnVpbHRpbnNEMUV2CiBfX1pOM0tKUzEzanNPd25lZFN0cmluZ0VS
S05TXzdVU3RyaW5nRQorX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlMTJtYXJrQ2hpbGRyZW5FUk5T
XzlNYXJrU3RhY2tFCiBfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2UxNGRlbGV0ZVByb3BlcnR5RVBO
U185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNl
MTZnZXRQcm9wZXJ0eU5hbWVzRVBOU185RXhlY1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5
RQogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVj
U3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNLSlMxNFN0
cmluZ0luc3RhbmNlMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlBy
b3BlcnR5U2xvdEUKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTNwdXRFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWkKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5j
ZTRpbmZvRQotX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlQzFFUE5TXzhKU09iamVjdEVSS05TXzdV
U3RyaW5nRQotX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlQzJFUE5TXzhKU09iamVjdEVSS05TXzdV
U3RyaW5nRQotX19aTjNLSlMxNUpTV3JhcHBlck9iamVjdDRtYXJrRXYKK19fWk4zS0pTMTRTdHJp
bmdJbnN0YW5jZUMyRVBOU184SlNPYmplY3RFUE5TXzZKU0NlbGxFCiBfX1pOM0tKUzE1U2F2ZWRQ
cm9wZXJ0aWVzQzFFdgogX19aTjNLSlMxNVNhdmVkUHJvcGVydGllc0QxRXYKIF9fWk4zS0pTMTZS
dW50aW1lT2JqZWN0SW1wNGluZm9FCkBAIC0yMDEsNiArMjAwLDcgQEAgX19aTjNLSlM4RGVidWdn
ZXI5ZXhjZXB0aW9uRVBOU185RXhlY1N0YXRlRWlpUE5TXzdKU1ZhbHVlRQogX19aTjNLSlM4RGVi
dWdnZXJDMkV2CiBfX1pOM0tKUzhEZWJ1Z2dlckQyRXYKIF9fWk4zS0pTOEpTT2JqZWN0MTFoYXNJ
bnN0YW5jZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfN0pTVmFsdWVFCitfX1pOM0tKUzhKU09iamVjdDEy
bWFya0NoaWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTjNLSlM4SlNPYmplY3QxMnJlbW92ZURp
cmVjdEVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zS0pTOEpTT2JqZWN0MTRjYWxsQXNGdW5jdGlv
bkVQTlNfOUV4ZWNTdGF0ZUVQUzBfUktOU180TGlzdEUKIF9fWk4zS0pTOEpTT2JqZWN0MTRkZWxl
dGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKQEAgLTIxMiw3ICsy
MTIsNiBAQCBfX1pOM0tKUzhKU09iamVjdDIyZmlsbEdldHRlclByb3BlcnR5U2xvdEVSTlNfMTJQ
cm9wZXJ0eVNsb3RFUFBOU183SlNWYWx1ZUUKIF9fWk4zS0pTOEpTT2JqZWN0M3B1dEVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFaQogX19aTjNLSlM4SlNPYmpl
Y3QzcHV0RVBOU185RXhlY1N0YXRlRWpQTlNfN0pTVmFsdWVFaQogX19aTjNLSlM4SlNPYmplY3Q0
Y2FsbEVQTlNfOUV4ZWNTdGF0ZUVQUzBfUktOU180TGlzdEUKLV9fWk4zS0pTOEpTT2JqZWN0NG1h
cmtFdgogX19aTjNLSlM4SlNPYmplY3Q5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRVJLTlNfNExp
c3RFCiBfX1pOM0tKUzhKU09iamVjdDljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFUktOU180TGlz
dEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3RyaW5nRWkKIF9fWk4zS0pTOEpTT2JqZWN0OXB1
dERpcmVjdEVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFaQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggOTlhMGUyZi4uZDgxZDQ5NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05OSw2ICs5OSw3IEBACiAJ
CTY1OTJDMzE4MDk4QjdERTEwMDAzRDRGNiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1OTJDMzE2MDk4QjdERTEwMDAzRDRGNiAvKiBW
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2NTkyQzMxOTA5OEI3REUxMDAwM0Q0RjYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTkyQzMxNzA5OEI3REUxMDAwM0Q0
RjYgLyogVmVjdG9yVHJhaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNjVBN0E1RTAwQ0QxRDUwRTAwMDYxRjhFIC8qIExhYmVsU3RhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QjgxM0E4MENE
MUQwMTkwMERGNTlENiAvKiBMYWJlbFN0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjVBOEI4REIwQ0Y0MDhGNDAwREM3QzI3IC8qIE1hcmtT
dGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVB
OEI4RDgwQ0Y0MDhFOTAwREM3QzI3IC8qIE1hcmtTdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1QjE3NDlBMDlEMEZFQjcwMDgyMDMzOSAv
KiBhcnJheV9vYmplY3QubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NUIxNzQ5OTA5RDBGRUI3MDA4MjAzMzkgLyogYXJyYXlfb2JqZWN0Lmx1dC5o
ICovOyB9OwogCQk2NUIxNzRGNTA5RDEwMEZBMDA4MjAzMzkgLyogbWF0aF9vYmplY3QubHV0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUIxNzRGMTA5
RDEwMEZBMDA4MjAzMzkgLyogbWF0aF9vYmplY3QubHV0LmggKi87IH07CiAJCTY1QjE3NEY2MDlE
MTAwRkEwMDgyMDMzOSAvKiBudW1iZXJfb2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCMTc0RjIwOUQxMDBGQTAwODIwMzM5IC8qIG51
bWJlcl9vYmplY3QubHV0LmggKi87IH07CkBAIC01MTAsNiArNTExLDcgQEAKIAkJNjU5MTI2QkMw
QkREMTcyODAwMTkyMUZCIC8qIEFsbEluT25lRmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQWxsSW5PbmVGaWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjU5MkMzMTYwOThCN0RFMTAwMDNENEY2IC8qIFZlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY1OTJDMzE3MDk4QjdERTEwMDAzRDRGNiAvKiBWZWN0b3JUcmFpdHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlY3RvclRyYWl0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2NUE4QjhEODBDRjQwOEU5MDBEQzdDMjcgLyogTWFya1N0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUIxNzQ5OTA5RDBGRUI3MDA4MjAzMzkgLyogYXJyYXlfb2Jq
ZWN0Lmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBhcnJheV9vYmplY3QubHV0Lmg7IHBh
dGggPSAuLi8uLi8uLi8uLi8uLi9zeW1yb290cy9EZWJ1Zy9EZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZS9hcnJheV9vYmplY3QubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTY1QjE3NEJFMDlEMTAwMDIwMDgyMDMzOSAvKiBjaGFydGFibGVzLmMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBmaWxlRW5j
b2RpbmcgPSAzMDsgcGF0aCA9IGNoYXJ0YWJsZXMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjVCMTc0RjEwOUQxMDBGQTAwODIwMzM5IC8qIG1hdGhfb2JqZWN0Lmx1dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IGZpbGU7IG5hbWUgPSBtYXRoX29iamVjdC5sdXQuaDsgcGF0aCA9IC4uLy4uLy4uLy4u
Ly4uL3N5bXJvb3RzL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL21hdGhfb2Jq
ZWN0Lmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwOCw2ICsxMDEwLDcg
QEAKIAkJCQlGNjkyQTg2ODAyNTU1OTdEMDFGRjYwRjcgLyogbG9va3VwLmNwcCAqLywKIAkJCQlG
NjkyQTg2OTAyNTU1OTdEMDFGRjYwRjcgLyogbG9va3VwLmggKi8sCiAJCQkJRjY5MkE4NkEwMjU1
NTk3RDAxRkY2MEY3IC8qIG1hdGhfb2JqZWN0LmNwcCAqLywKKwkJCQk2NUE4QjhEODBDRjQwOEU5
MDBEQzdDMjcgLyogTWFya1N0YWNrLmggKi8sCiAJCQkJRjY5MkE4NkIwMjU1NTk3RDAxRkY2MEY3
IC8qIG1hdGhfb2JqZWN0LmggKi8sCiAJCQkJRjY5MkE4NkQwMjU1NTk3RDAxRkY2MEY3IC8qIG5v
ZGVzLmNwcCAqLywKIAkJCQlGNjkyQTg2RTAyNTU1OTdEMDFGRjYwRjcgLyogbm9kZXMuaCAqLywK
QEAgLTExNzAsNiArMTE3Myw3IEBACiAJCQkJMTQ4QTE2MjcwOTVEMTZCQjAwNjY2RDBEIC8qIExp
c3RSZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1RjM0MDk0MENENkMxQzAwMEMwQ0E4QiAv
KiBMb2NhbFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTVEQkQxOEIwMEM1NDAxQTcwMEMx
NUVBRSAvKiBNYWxsb2Nab25lU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjVBOEI4REIw
Q0Y0MDhGNDAwREM3QzI3IC8qIE1hcmtTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNjU1
NTkwQTIwNDk3MTAwMzhBMTk0IC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
MkY1Qjg0MDgyMkExQzcwMDczNjk3NSAvKiBOUF9qc29iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMwM0Y1NkEwOTkxMTkwMDAwQUQ3MUI4IC8qIE5vbmNvcHlhYmxlLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwIGIvSmF2YVNj
cmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKaW5kZXggZjgyOGE2OS4uNWEyMmU2OSAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKKysrIGIvSmF2YVNjcmlwdENv
cmUva2pzL0V4ZWNTdGF0ZS5jcHAKQEAgLTg4LDEwICs4OCwxMCBAQCBFeGVjU3RhdGU6On5FeGVj
U3RhdGUoKQogICAgIG1faW50ZXJwcmV0ZXItPnNldEN1cnJlbnRFeGVjKG1fc2F2ZWRFeGVjU3Rh
dGUpOwogfQogCi12b2lkIEV4ZWNTdGF0ZTo6bWFyaygpCit2b2lkIEV4ZWNTdGF0ZTo6bWFya0No
aWxkcmVuKE1hcmtTdGFjayYgc3RhY2spCiB7CiAgICAgZm9yIChFeGVjU3RhdGUqIGV4ZWMgPSB0
aGlzOyBleGVjOyBleGVjID0gZXhlYy0+bV9jYWxsaW5nRXhlY1N0YXRlKQotICAgICAgICBleGVj
LT5tX3Njb3BlQ2hhaW4ubWFyaygpOworICAgICAgICBleGVjLT5tX3Njb3BlQ2hhaW4ubWFya0No
aWxkcmVuKHN0YWNrKTsKIH0KIAogdm9pZCBFeGVjU3RhdGU6OnNldEdsb2JhbE9iamVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pz
L0V4ZWNTdGF0ZS5oIGIvSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCmluZGV4IDUwMTIz
NTAuLjY1ZjIzM2YgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBu
YW1lc3BhY2UgS0pTICB7CiAKICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxP
YmplY3QqKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgbWFyaygpOworICAgICAgICB2b2lkIG1h
cmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgYSB3
b3JrYXJvdW5kIHRvIGF2b2lkIGFjY2Vzc2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhl
c2UgaWRlbnRpZmllcnMgaW4KICAgICAgICAgLy8gaW1wb3J0YW50IHByb3BlcnR5IGxvb2t1cCBm
dW5jdGlvbnMsIHRvIGF2b2lkIHRha2luZyBQSUMgYnJhbmNoZXMgaW4gTWFjaC1PIGJpbmFyaWVz
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmNwcCBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9KU1dyYXBwZXJPYmplY3QuY3BwCmluZGV4IGRkMTYxZjcuLjM2ZTc1
ODQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9KU1dyYXBwZXJPYmplY3QuY3BwCisr
KyBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU1dyYXBwZXJPYmplY3QuY3BwCkBAIC0yNCwxMSArMjQs
MTAgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKLXZvaWQgSlNXcmFwcGVyT2JqZWN0OjptYXJrKCkg
Cit2b2lkIEpTV3JhcHBlck9iamVjdDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spIAog
ewotICAgIEpTT2JqZWN0OjptYXJrKCk7Ci0gICAgaWYgKG1faW50ZXJuYWxWYWx1ZSAmJiAhbV9p
bnRlcm5hbFZhbHVlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbFZhbHVlLT5tYXJrKCk7
CisgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihzdGFjayk7CisgICAgc3RhY2sucHVzaEF0b20o
bV9pbnRlcm5hbFZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgS0pTCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ranMv
SlNXcmFwcGVyT2JqZWN0LmgKaW5kZXggMGEwNmM5Zi4uZWRiYjY1YiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tq
cy9KU1dyYXBwZXJPYmplY3QuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAqLyAKICAgICBjbGFzcyBKU1dyYXBwZXJPYmplY3QgOiBwdWJsaWMgSlNPYmplY3QgewogICAg
IHB1YmxpYzoKLSAgICAgICAgSlNXcmFwcGVyT2JqZWN0KEpTVmFsdWUqIHByb3RvKTsKKyAgICAg
ICAgSlNXcmFwcGVyT2JqZWN0KEpTT2JqZWN0KiBwcm90bywgSlNWYWx1ZSopIDsKICAgICAgICAg
CiAgICAgICAgIC8qKgogICAgICAgICAgKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCB2YWx1ZSBvZiB0
aGUgb2JqZWN0LiBUaGlzIGlzIHVzZWQgZm9yIG9iamVjdHMgc3VjaApAQCAtNTYsMTUgKzU2LDE1
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgKi8KICAgICAgICAgdm9pZCBzZXRJbnRlcm5h
bFZhbHVlKEpTVmFsdWUqIHYpOwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmso
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKTsK
ICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNWYWx1ZSogbV9pbnRlcm5hbFZhbHVl
OwogICAgIH07CiAgICAgCi0gICAgaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2Jq
ZWN0KEpTVmFsdWUqIHByb3RvKQorICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBl
ck9iamVjdChKU09iamVjdCogcHJvdG8sIEpTVmFsdWUqIGludGVybmFsVmFsdWUpCiAgICAgICAg
IDogSlNPYmplY3QocHJvdG8pCi0gICAgICAgICwgbV9pbnRlcm5hbFZhbHVlKDApCisgICAgICAg
ICwgbV9pbnRlcm5hbFZhbHVlKGludGVybmFsVmFsdWUpCiAgICAgewogICAgIH0KICAgICAKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9NYXJrU3RhY2suaCBiL0phdmFTY3JpcHRDb3Jl
L2tqcy9NYXJrU3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Uy
YTg1Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL01hcmtTdGFjay5oCkBA
IC0wLDAgKzEsMjI5IEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0K
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgTWFya1N0YWNrX2gKKyNkZWZpbmUgTWFya1N0YWNr
X2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJjb2xsZWN0b3IuaCIKKyNp
bmNsdWRlICJ2YWx1ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBLSlMgewor
CisgICAgY2xhc3MgTWFya1N0YWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgcHVzaChK
U1ZhbHVlKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgcHVzaChKU0NlbGwqIGNlbGwpOworCisgICAg
ICAgIC8vIG1vcmUgZWZmaWNpZW50IHdoZW4gYSB2YWx1ZSBvciBjZWxsIGlzIGtub3duIHRvIGJl
IGF0b21pYworICAgICAgICB2b2lkIHB1c2hBdG9tKEpTVmFsdWUqIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBwdXNoQXRvbShKU0NlbGwqIGNlbGwpOworCisgICAgICAgIHZvaWQgcHVzaFJhbmdlKEpT
VmFsdWUqKiBzdGFydCwgSlNWYWx1ZSoqIGVuZCk7CisKKyAgICAgICAgSlNDZWxsKiBwb3AoKTsK
KworICAgICAgICBib29sIGlzRW1wdHkoKTsKKyAgICAgICAgc2l6ZV90IHNpemUoKTsKKyAgICAg
ICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IHNpemUpOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgaW5saW5lIHZvaWQgcHVzaFdob2xlUmFuZ2UoSlNWYWx1ZSoqJiBzdGFydCwgSlNWYWx1
ZSoqJiBlbmQpOworICAgICAgICBpbmxpbmUgdm9pZCBhZHZhbmNlUmFuZ2VTdGFydFRvQ2VsbFdp
dGhSZWZzKEpTVmFsdWUqKiYgc3RhcnQsIEpTVmFsdWUqKiYgZW5kKTsKKyAgICAgICAgaW5saW5l
IHZvaWQgcHVzaE9uZUl0ZW1BbmRBZHZhbmNlKEpTVmFsdWUqKiYgc3RhcnQpOworICAgICAgICBp
bmxpbmUgdm9pZCBhZHZhbmNlVW50aWwxMjZJdGVtc1B1c2hlZChzaXplX3QgY291bnQsIEpTVmFs
dWUqKiYgc3RhcnQsIEpTVmFsdWUqKiYgZW5kKTsKKworICAgICAgICBWZWN0b3I8SlNDZWxsKj4g
bV9zdGFjazsKKyAgICB9OworCisKKyAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OnB1c2goSlNW
YWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPm1hcmtlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS0+YXNDZWxsKCk7Cisg
ICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CisgICAgICAgIGlmICghQ29sbGVjdG9y
OjpjZWxsTWF5SGF2ZVJlZnMoY2VsbCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFT
U0VSVChtX3N0YWNrLnNpemUoKSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7CisgICAgICAgIG1fc3Rh
Y2sudW5jaGVja2VkQXBwZW5kKGNlbGwpOworICAgIH0KKworICAgIC8vIHRoaXMgZXh0cmEgZnVu
Y3Rpb24gaXMgd29ydGggaXQgdG8gYXZvaWQgSlNJbW1lZGlhdGUgCisgICAgLy8gY2hlY2tzIG9u
IGtub3duIGNlbGxzCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoKEpTQ2VsbCogY2Vs
bCkKKyAgICB7CisgICAgICAgIGlmIChjZWxsLT5tYXJrZWQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICAgICAgaWYgKCFDb2xs
ZWN0b3I6OmNlbGxNYXlIYXZlUmVmcyhjZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgpKTsKKyAgICAgICAg
bV9zdGFjay51bmNoZWNrZWRBcHBlbmQoY2VsbCk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQg
TWFya1N0YWNrOjpwdXNoQXRvbShKU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS0+bWFya2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHZhbHVlLT5hc0NlbGwoKTsKKyAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OnB1c2hBdG9tKEpTQ2VsbCogY2Vs
bCkKKyAgICB7CisgICAgICAgIGlmIChjZWxsLT5tYXJrZWQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICB9CisKKyAgICBpbmxp
bmUgdm9pZCBNYXJrU3RhY2s6OmFkdmFuY2VSYW5nZVN0YXJ0VG9DZWxsV2l0aFJlZnMoSlNWYWx1
ZSoqJiBzdGFydCwgSlNWYWx1ZSoqJiBlbmQpCisgICAgeworICAgICAgICB3aGlsZSAoc3RhcnQg
IT0gZW5kKSB7CisgICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9ICpzdGFydDsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZSAmJiAhdmFsdWUtPm1hcmtlZCgpKSB7CisgICAgICAgICAgICAgICAgSlND
ZWxsKiBjZWxsID0gdmFsdWUtPmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChDb2xsZWN0
b3I6OmNlbGxNYXlIYXZlUmVmcyhjZWxsKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICsrc3RhcnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbmxpbmUgdm9p
ZCBNYXJrU3RhY2s6OnB1c2hXaG9sZVJhbmdlKEpTVmFsdWUqKiYgc3RhcnQsIEpTVmFsdWUqKiYg
ZW5kKQorICAgIHsKKyAgICAgICAgd2hpbGUgKHN0YXJ0ICE9IGVuZCkgeworICAgICAgICAgICAg
aWYgKEpTVmFsdWUqIHZhbHVlID0gKnN0YXJ0KQorICAgICAgICAgICAgICAgIHB1c2godmFsdWUp
OworICAgICAgICAgICAgKytzdGFydDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlubGluZSB2
b2lkIE1hcmtTdGFjazo6cHVzaE9uZUl0ZW1BbmRBZHZhbmNlKEpTVmFsdWUqKiYgc3RhcnQpCisg
ICAgeworICAgICAgICBKU0NlbGwqIGNlbGwgPSAoKnN0YXJ0KS0+YXNDZWxsKCk7CisgICAgICAg
IENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLnNpemUo
KSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7CisgICAgICAgIG1fc3RhY2sudW5jaGVja2VkQXBwZW5k
KGNlbGwpOworICAgICAgICArK3N0YXJ0OworICAgIH0KKworICAgIGlubGluZSB2b2lkIE1hcmtT
dGFjazo6YWR2YW5jZVVudGlsMTI2SXRlbXNQdXNoZWQoc2l6ZV90IGNvdW50LCBKU1ZhbHVlKiom
IHN0YXJ0LCBKU1ZhbHVlKiomIGVuZCkKKyAgICB7CisgICAgICAgIHdoaWxlIChzdGFydCAhPSBl
bmQgJiYgY291bnQgPD0gMTI2KSB7CisgICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9ICpzdGFy
dDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWUtPm1hcmtlZCgpKSB7CisgICAgICAg
ICAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUtPmFzQ2VsbCgpOworICAgICAgICAgICAgICAg
IENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CisgICAgICAgICAgICAgICAgaWYgKENvbGxlY3Rv
cjo6Y2VsbE1heUhhdmVSZWZzKGNlbGwpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0YWNrLnNpemUoKSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fc3RhY2sudW5jaGVja2VkQXBwZW5kKGNlbGwpOworICAgICAgICAgICAgICAgICAgICArK2Nv
dW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrc3Rh
cnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpw
dXNoUmFuZ2UoSlNWYWx1ZSoqIHN0YXJ0LCBKU1ZhbHVlKiogZW5kKQorICAgIHsKKyAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBhdm9pZCBwdXNoaW5nIHRvbyBtYW55IHZhbHVlcyBv
bnRvCisgICAgICAgIC8vIHRoZSBzdGFjayBhdCBvbmNlIHRvIGtlZXAgdGhlIGhpZ2ggd2F0ZXIg
bWFyayByZWFzb25hYmxlIGluCisgICAgICAgIC8vIG1vc3QgY2FzZXMuIFNwZWNpZmljYWxseSBp
dCB0cmllcyB0byBwdXNoIG5vIG1vcmUgdGhhbiAxMjgKKyAgICAgICAgLy8gaXRlbXMuIFRoZSBy
YW5nZSBpdHNlbGYgaXMga2VwdCBvbiB0aGUgc3RhY2sgaWYgd2UnZCBoYXZlCisgICAgICAgIC8v
IHRvIGdvIG92ZXIuIFdlIGFsc28gdHJ5IHRvIG1haW50YWluIHRoZSBpbnZhcmlhbnQgdGhhdAor
ICAgICAgICAvLyBhZnRlciBwcm9jZXNzaW5nIGFyYW5nZSBvbiB0aGUgc3RhY2sgdGhlcmUgaXMg
YWx3YXlzIGF0CisgICAgICAgIC8vIGxlYXN0IG9uZSBpdGVtIHRvIHBvcC4KKworICAgICAgICBh
ZHZhbmNlUmFuZ2VTdGFydFRvQ2VsbFdpdGhSZWZzKHN0YXJ0LCBlbmQpOworCisgICAgICAgIGlm
IChlbmQgLSBzdGFydCA8PSAxMjgpIHsKKyAgICAgICAgICAgIHB1c2hXaG9sZVJhbmdlKHN0YXJ0
LCBlbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
c3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgcHVzaE9uZUl0ZW1BbmRBZHZhbmNlKHN0YXJ0
KTsKKyAgICAgICAgICAgIAorICAgICAgICBBU1NFUlQobV9zdGFjay5zaXplKCkgPCBtX3N0YWNr
LmNhcGFjaXR5KCkpOworICAgICAgICBtX3N0YWNrLnVuY2hlY2tlZEFwcGVuZChyZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KGVuZCkpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgSlNDZWxsKiYg
ZW5kU2xvdCA9IG1fc3RhY2subGFzdCgpOworICAgICAgICBBU1NFUlQobV9zdGFjay5zaXplKCkg
PCBtX3N0YWNrLmNhcGFjaXR5KCkpOworICAgICAgICBtX3N0YWNrLnVuY2hlY2tlZEFwcGVuZChy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFy
dCkgfCAxKSk7ICAgICAgICAgICAgICAgIAorICAgICAgICBKU0NlbGwqJiBzdGFydFNsb3QgPSBt
X3N0YWNrLmxhc3QoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAg
ICAgIGFkdmFuY2VVbnRpbDEyNkl0ZW1zUHVzaGVkKGNvdW50LCBzdGFydCwgZW5kKTsKKyAgICAg
ICAgCisgICAgICAgIGFkdmFuY2VSYW5nZVN0YXJ0VG9DZWxsV2l0aFJlZnMoc3RhcnQsIGVuZCk7
CisgICAgICAgIAorICAgICAgICBpZiAoc3RhcnQgIT0gZW5kKSB7CisgICAgICAgICAgICBzdGFy
dFNsb3QgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihzdGFydCkgfCAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIGl0ZW1zIGxlZnQgdG8gcHVzaCwgdGhlbiBq
dXN0IG92ZXJ3cml0ZSB0aGUgcmFuZ2Ugc2xvdHMKKyAgICAgICAgLy8gd2l0aCB3aGF0IHdvdWxk
IG90aGVyd2lzZSBiZSB0aGUgbGFzdCBpdGVtcy4KKyAgICAgICAgaWYgKGNvdW50ID4gMCkKKyAg
ICAgICAgICAgIGVuZFNsb3QgPSBtX3N0YWNrLmxhc3QoKTsKKyAgICAgICAgbV9zdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgIGlmIChjb3VudCA+IDEpCisgICAgICAgICAgICBzdGFydFNsb3Qg
PSBtX3N0YWNrLmxhc3QoKTsKKyAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgfQor
CisgICAgaW5saW5lIEpTQ2VsbCogTWFya1N0YWNrOjpwb3AoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fc3RhY2suc2l6ZSgpID4gMCk7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1fc3RhY2su
bGFzdCgpOworICAgICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAmIDEpKQorICAgICAgICAg
ICAgcmV0dXJuIGNlbGw7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlKiogc3RhcnQgPSByZWlu
dGVycHJldF9jYXN0PEpTVmFsdWUqKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwp
ICYgfjFMKTsKKyAgICAgICAgSlNWYWx1ZSoqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1
ZSoqPihtX3N0YWNrLmxhc3QoKSk7CisgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOworICAg
ICAgICAgICAgCisgICAgICAgIHB1c2hSYW5nZShzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIAor
ICAgICAgICByZXR1cm4gcG9wKCk7CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIE1hcmtT
dGFjazo6aXNFbXB0eSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7
CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpyZXNlcnZlQ2FwYWNpdHkoc2l6
ZV90IHNpemUpIAorICAgIHsKKyAgICAgICAgbV9zdGFjay5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7
CisgICAgfQorCisgICAgaW5saW5lIHNpemVfdCBNYXJrU3RhY2s6OnNpemUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOworICAgIH0KK30KKworI2VuZGlmIC8vIE1hcmtT
dGFja19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFuY2UuY3Bw
IGIvSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmNwcAppbmRleCAyODI1MTMyLi4z
NDcxYjljIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFuY2UuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5jcHAKQEAgLTQwMiwyNiAr
NDAyLDE5IEBAIHZvaWQgQXJyYXlJbnN0YW5jZTo6c2V0TGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmd0
aCkKICAgICBtX2xlbmd0aCA9IG5ld0xlbmd0aDsKIH0KIAotdm9pZCBBcnJheUluc3RhbmNlOjpt
YXJrKCkKK3ZvaWQgQXJyYXlJbnN0YW5jZTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2sp
CiB7Ci0gICAgSlNPYmplY3Q6Om1hcmsoKTsKKyAgICBKU09iamVjdDo6bWFya0NoaWxkcmVuKHN0
YWNrKTsKIAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKIAogICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIEpTVmFsdWUqIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIGlm
ICh2YWx1ZSAmJiAhdmFsdWUtPm1hcmtlZCgpKQotICAgICAgICAgICAgdmFsdWUtPm1hcmsoKTsK
LSAgICB9CisgICAgc3RhY2sucHVzaFJhbmdlKHN0b3JhZ2UtPm1fdmVjdG9yLCBzdG9yYWdlLT5t
X3ZlY3RvciArIHVzZWRWZWN0b3JMZW5ndGgpOwogCiAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAg
ICAgICBpZiAoIXZhbHVlLT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICB2YWx1ZS0+bWFyaygp
OwotICAgICAgICB9CisgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHN0YWNrLnB1
c2goaXQtPnNlY29uZCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9r
anMvYXJyYXlfaW5zdGFuY2UuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5o
CmluZGV4IDkxM2QwY2QuLmJiMGEzOGUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9h
cnJheV9pbnN0YW5jZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5o
CkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYp
OwogCi0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxk
cmVuKE1hcmtTdGFjayYpOwogCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcCBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9ib29sX29iamVjdC5jcHAKaW5kZXggOTE2ZmU1My4uMDNkMjFkMyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwCkBAIC0zMywyMyArMzMsMjggQEAgdXNpbmcg
bmFtZXNwYWNlIEtKUzsKIAogY29uc3QgQ2xhc3NJbmZvIEJvb2xlYW5JbnN0YW5jZTo6aW5mbyA9
IHsiQm9vbGVhbiIsIDAsIDB9OwogCi1Cb29sZWFuSW5zdGFuY2U6OkJvb2xlYW5JbnN0YW5jZShK
U09iamVjdCAqcHJvdG8pCi0gIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvKQorQm9vbGVhbkluc3Rh
bmNlOjpCb29sZWFuSW5zdGFuY2UoSlNPYmplY3QqIHByb3RvLCBKU1ZhbHVlKiB2YWwpCisgICAg
OiBKU1dyYXBwZXJPYmplY3QocHJvdG8sIHZhbCkKIHsKIH0KIAordm9pZCBCb29sZWFuSW5zdGFu
Y2U6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKQoreworICAgIEpTT2JqZWN0OjptYXJr
Q2hpbGRyZW4oc3RhY2spOworICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoaW50
ZXJuYWxWYWx1ZSgpKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBC
b29sZWFuUHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTUu
Ni40CiAKIEJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1By
b3RvKQotICA6IEJvb2xlYW5JbnN0YW5jZShvYmplY3RQcm90bykKKyAgOiBCb29sZWFuSW5zdGFu
Y2Uob2JqZWN0UHJvdG8sIGpzQm9vbGVhbihmYWxzZSkpCiB7CiAgIC8vIFRoZSBjb25zdHJ1Y3Rv
ciB3aWxsIGJlIGFkZGVkIGxhdGVyIGJ5IEludGVycHJldGVyOjpJbnRlcnByZXRlcigpCiAKICAg
cHV0RGlyZWN0RnVuY3Rpb24obmV3IEJvb2xlYW5Qcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBC
b29sZWFuUHJvdG9GdW5jOjpUb1N0cmluZywgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3Ry
aW5nKSwgRG9udEVudW0pOwogICBwdXREaXJlY3RGdW5jdGlvbihuZXcgQm9vbGVhblByb3RvRnVu
YyhleGVjLCBmdW5jUHJvdG8sIEJvb2xlYW5Qcm90b0Z1bmM6OlZhbHVlT2YsIDAsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS52YWx1ZU9mKSwgIERvbnRFbnVtKTsKLSAgc2V0SW50ZXJuYWxWYWx1ZShq
c0Jvb2xlYW4oZmFsc2UpKTsKIH0KIAogCkBAIC0xMDEsMTcgKzEwNiwxMyBAQCBib29sIEJvb2xl
YW5PYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdAogLy8gRUNNQSAxNS42LjIK
IEpTT2JqZWN0ICpCb29sZWFuT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKQogewotICBCb29sZWFuSW5zdGFuY2UgKm9iaihuZXcgQm9vbGVhbklu
c3RhbmNlKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQm9vbGVhblByb3RvdHlw
ZSgpKSk7Ci0KICAgYm9vbCBiOwogICBpZiAoYXJncy5zaXplKCkgPiAwKQogICAgIGIgPSBhcmdz
WzBdLT50b0Jvb2xlYW4oZXhlYyk7CiAgIGVsc2UKICAgICBiID0gZmFsc2U7CiAKLSAgb2JqLT5z
ZXRJbnRlcm5hbFZhbHVlKGpzQm9vbGVhbihiKSk7Ci0KLSAgcmV0dXJuIG9iajsKKyAgcmV0dXJu
IG5ldyBCb29sZWFuSW5zdGFuY2UoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5C
b29sZWFuUHJvdG90eXBlKCksIGpzQm9vbGVhbihiKSk7CiB9CiAKIC8vIEVDTUEgMTUuNi4xCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuaCBiL0phdmFTY3JpcHRD
b3JlL2tqcy9ib29sX29iamVjdC5oCmluZGV4IDNhYjA0YTcuLjgxZDQ1YzkgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2tqcy9ib29sX29iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tq
cy9ib29sX29iamVjdC5oCkBAIC0yOSw5ICsyOSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBj
bGFzcyBCb29sZWFuSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgcHVibGlj
OgotICAgIEJvb2xlYW5JbnN0YW5jZShKU09iamVjdCAqcHJvdG8pOworICAgIEJvb2xlYW5JbnN0
YW5jZShKU09iamVjdCogcHJvdG8sIEpTVmFsdWUqKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgIHZpcnR1YWwg
dm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjayk7CiAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogICB9OwogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvY29s
bGVjdG9yLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCmluZGV4IDdhZGZi
ODIuLjM0OTM0ZTAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRl
ICJsaXN0LmgiCisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAidmFsdWUuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c2V0am1wLmg+CkBAIC0yNzcsNiArMjc4LDgg
QEAgY29sbGVjdDoKIAogICAgIHRhcmdldEJsb2NrID0gKEJsb2NrKilhbGxvY2F0ZUJsb2NrKCk7
CiAgICAgdGFyZ2V0QmxvY2stPmZyZWVMaXN0ID0gdGFyZ2V0QmxvY2stPmNlbGxzOworICAgIGlm
IChoZWFwVHlwZSA9PSBQcmltYXJ5SGVhcCkKKyAgICAgICAgdGFyZ2V0QmxvY2stPm1heUhhdmVS
ZWZzID0gMTsKICAgICB0YXJnZXRCbG9ja1VzZWRDZWxscyA9IDA7CiAgICAgaGVhcC5ibG9ja3Nb
dXNlZEJsb2Nrc10gPSAoQ29sbGVjdG9yQmxvY2sqKXRhcmdldEJsb2NrOwogICAgIGhlYXAudXNl
ZEJsb2NrcyA9IHVzZWRCbG9ja3MgKyAxOwpAQCAtNDc5LDcgKzQ4MiwxNCBAQCB2b2lkIENvbGxl
Y3Rvcjo6cmVnaXN0ZXJUaHJlYWQoKQogLy8gY2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIg
b2YgdHdvIGZvciB0aGlzIHRvIGJlIHZhbGlkCiAjZGVmaW5lIElTX0hBTEZfQ0VMTF9BTElHTkVE
KHApICgoKGludHB0cl90KShwKSAmIChDRUxMX01BU0sgPj4gMSkpID09IDApCiAKLXZvaWQgQ29s
bGVjdG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkodm9pZCAqc3RhcnQsIHZvaWQg
KmVuZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmFpbk1hcmtTdGFjayhNYXJrU3RhY2smIHN0YWNr
KQoreworICAgIHdoaWxlICghc3RhY2suaXNFbXB0eSgpKQorICAgICAgICBzdGFjay5wb3AoKS0+
bWFya0NoaWxkcmVuKHN0YWNrKTsKK30KKworCit2b2lkIENvbGxlY3Rvcjo6bWFya1N0YWNrT2Jq
ZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgc3RhY2ssIHZvaWQgKnN0YXJ0LCB2b2lkICpl
bmQpCiB7CiAgIGlmIChzdGFydCA+IGVuZCkgewogICAgIHZvaWQqIHRtcCA9IHN0YXJ0OwpAQCAt
NTIxLDggKzUzMSw4IEBAIHZvaWQgQ29sbGVjdG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0
aXZlbHkodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKICAgICAgICAgICAgICAgaWYgKChwcmltYXJ5
QmxvY2tzW2Jsb2NrXSA9PSBibG9ja0FkZHIpICYgKG9mZnNldCA8PSBsYXN0Q2VsbE9mZnNldCkp
IHsKICAgICAgICAgICAgICAgICAgIGlmICgoKENvbGxlY3RvckNlbGwqKXhBc0JpdHMpLT51LmZy
ZWVDZWxsLnplcm9JZkZyZWUgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgIEpTQ2VsbCog
aW1wID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKLSAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWltcC0+bWFya2VkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlt
cC0+bWFyaygpOworICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goaW1wKTsKKyAgICAg
ICAgICAgICAgICAgICAgICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CiAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQpAQCAtNTMzLDcg
KzU0Myw3IEBAIHZvaWQgQ29sbGVjdG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHko
dm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKICAgfQogfQogCi12b2lkIENvbGxlY3Rvcjo6bWFya0N1
cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSgpCit2b2lkIENvbGxlY3Rvcjo6bWFya0N1cnJlbnRU
aHJlYWRDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smIHN0YWNrKQogewogICAgIC8vIHNldGptcCBm
b3JjZXMgdm9sYXRpbGUgcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrCiAgICAgam1wX2J1ZiByZWdp
c3RlcnM7CkBAIC01NTAsNyArNTYwLDcgQEAgdm9pZCBDb2xsZWN0b3I6Om1hcmtDdXJyZW50VGhy
ZWFkQ29uc2VydmF0aXZlbHkoKQogICAgIHZvaWQqIHN0YWNrUG9pbnRlciA9ICZkdW1teTsKICAg
ICB2b2lkKiBzdGFja0Jhc2UgPSBjdXJyZW50VGhyZWFkU3RhY2tCYXNlKCk7CiAKLSAgICBtYXJr
U3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UpOworICAg
IG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShzdGFjaywgc3RhY2tQb2ludGVyLCBzdGFj
a0Jhc2UpOwogfQogCiAjaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCkBAIC02OTMsNyArNzAzLDcg
QEAgc3RhdGljIGlubGluZSB2b2lkKiBvdGhlclRocmVhZFN0YWNrQmFzZShjb25zdCBQbGF0Zm9y
bVRocmVhZFJlZ2lzdGVycyYgcmVncywgQ28KICNlbmRpZgogfQogCi12b2lkIENvbGxlY3Rvcjo6
bWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoVGhyZWFkKiB0aHJlYWQpCit2b2lkIENvbGxl
Y3Rvcjo6bWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiBzdGFjaywgVGhy
ZWFkKiB0aHJlYWQpCiB7CiAgIHN1c3BlbmRUaHJlYWQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCk7
CiAKQEAgLTcwMSwyNSArNzExLDI1IEBAIHZvaWQgQ29sbGVjdG9yOjptYXJrT3RoZXJUaHJlYWRD
b25zZXJ2YXRpdmVseShUaHJlYWQqIHRocmVhZCkKICAgc2l6ZV90IHJlZ1NpemUgPSBnZXRQbGF0
Zm9ybVRocmVhZFJlZ2lzdGVycyh0aHJlYWQtPnBsYXRmb3JtVGhyZWFkLCByZWdzKTsKIAogICAv
LyBtYXJrIHRoZSB0aHJlYWQncyByZWdpc3RlcnMKLSAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZh
dGl2ZWx5KCh2b2lkKikmcmVncywgKHZvaWQqKSgoY2hhciopJnJlZ3MgKyByZWdTaXplKSk7Cisg
IG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShzdGFjaywgKHZvaWQqKSZyZWdzLCAodm9p
ZCopKChjaGFyKikmcmVncyArIHJlZ1NpemUpKTsKICAKICAgdm9pZCogc3RhY2tQb2ludGVyID0g
b3RoZXJUaHJlYWRTdGFja1BvaW50ZXIocmVncyk7CiAgIHZvaWQqIHN0YWNrQmFzZSA9IG90aGVy
VGhyZWFkU3RhY2tCYXNlKHJlZ3MsIHRocmVhZCk7Ci0gIG1hcmtTdGFja09iamVjdHNDb25zZXJ2
YXRpdmVseShzdGFja1BvaW50ZXIsIHN0YWNrQmFzZSk7CisgIG1hcmtTdGFja09iamVjdHNDb25z
ZXJ2YXRpdmVseShzdGFjaywgc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UpOwogCiAgIHJlc3VtZVRo
cmVhZCh0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKTsKIH0KIAogI2VuZGlmCiAKLXZvaWQgQ29sbGVj
dG9yOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoKQordm9pZCBDb2xsZWN0b3I6Om1h
cmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smIHN0YWNrKQogewotICBtYXJr
Q3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KCk7CisgIG1hcmtDdXJyZW50VGhyZWFkQ29uc2Vy
dmF0aXZlbHkoc3RhY2spOwogCiAjaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCiAgIGZvciAoVGhy
ZWFkICp0aHJlYWQgPSByZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkICE9IE5VTEw7IHRocmVhZCA9
IHRocmVhZC0+bmV4dCkgewogICAgIGlmICghcHRocmVhZF9lcXVhbCh0aHJlYWQtPnBvc2l4VGhy
ZWFkLCBwdGhyZWFkX3NlbGYoKSkpIHsKLSAgICAgIG1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2
ZWx5KHRocmVhZCk7CisgICAgICAgIG1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KHN0YWNr
LCB0aHJlYWQpOwogICAgIH0KICAgfQogI2VuZGlmCkBAIC03NzEsMTggKzc4MSwxNyBAQCB2b2lk
IENvbGxlY3Rvcjo6Y29sbGVjdE9uTWFpblRocmVhZE9ubHkoSlNWYWx1ZSogdmFsdWUpCiAgICAg
KyttYWluVGhyZWFkT25seU9iamVjdENvdW50OwogfQogCi12b2lkIENvbGxlY3Rvcjo6bWFya1By
b3RlY3RlZE9iamVjdHMoKQordm9pZCBDb2xsZWN0b3I6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKE1h
cmtTdGFjayYgc3RhY2spCiB7CiAgIFByb3RlY3RDb3VudFNldCYgcHJvdGVjdGVkVmFsdWVzID0g
S0pTOjpwcm90ZWN0ZWRWYWx1ZXMoKTsKICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQg
PSBwcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CiAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRv
ciBpdCA9IHByb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICBK
U0NlbGwgKnZhbCA9IGl0LT5maXJzdDsKLSAgICBpZiAoIXZhbC0+bWFya2VkKCkpCi0gICAgICB2
YWwtPm1hcmsoKTsKKyAgICBzdGFjay5wdXNoKGl0LT5maXJzdCk7CisgICAgZHJhaW5NYXJrU3Rh
Y2soc3RhY2spOwogICB9CiB9CiAKLXZvaWQgQ29sbGVjdG9yOjptYXJrTWFpblRocmVhZE9ubHlP
YmplY3RzKCkKK3ZvaWQgQ29sbGVjdG9yOjptYXJrTWFpblRocmVhZE9ubHlPYmplY3RzKE1hcmtT
dGFjayYgc3RhY2spCiB7CiAjaWYgVVNFKE1VTFRJUExFX1RIUkVBRFMpCiAgICAgQVNTRVJUKCFv
bk1haW5UaHJlYWQoKSk7CkBAIC04MTQsNyArODIzLDggQEAgdm9pZCBDb2xsZWN0b3I6Om1hcmtN
YWluVGhyZWFkT25seU9iamVjdHMoKQogICAgICAgICAgICAgICAgIGlmIChjdXJCbG9jay0+Y29s
bGVjdE9uTWFpblRocmVhZE9ubHkuZ2V0KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
Y3VyQmxvY2stPm1hcmtlZC5nZXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2Vs
bCogaW1wID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihjZWxsKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGltcC0+bWFyaygpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVz
aChpbXApOworICAgICAgICAgICAgICAgICAgICAgICAgZHJhaW5NYXJrU3RhY2soc3RhY2spOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICgrK2NvdW50ID09
IG1haW5UaHJlYWRPbmx5T2JqZWN0Q291bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CkBAIC05NTAsOSArOTYwLDE0IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKIAogICAv
LyBNQVJLOiBmaXJzdCBtYXJrIGFsbCByZWZlcmVuY2VkIG9iamVjdHMgcmVjdXJzaXZlbHkgc3Rh
cnRpbmcgb3V0IGZyb20gdGhlIHNldCBvZiByb290IG9iamVjdHMKIAorICBzaXplX3Qgb3JpZ2lu
YWxMaXZlT2JqZWN0cyA9IHByaW1hcnlIZWFwLm51bUxpdmVPYmplY3RzICsgbnVtYmVySGVhcC5u
dW1MaXZlT2JqZWN0czsKKworICBNYXJrU3RhY2sgc3RhY2s7CisgIHN0YWNrLnJlc2VydmVDYXBh
Y2l0eShwcmltYXJ5SGVhcC5udW1MaXZlT2JqZWN0cyk7CisKICNpZm5kZWYgTkRFQlVHCiAgIC8v
IEZvcmJpZCBtYWxsb2MgZHVyaW5nIHRoZSBtYXJrIHBoYXNlLiBNYXJraW5nIGEgdGhyZWFkIHN1
c3BlbmRzIGl0LCBzbyAKLSAgLy8gYSBtYWxsb2MgaW5zaWRlIG1hcmsoKSB3b3VsZCByaXNrIGEg
ZGVhZGxvY2sgd2l0aCBhIHRocmVhZCB0aGF0IGhhZCBiZWVuIAorICAvLyBhIG1hbGxvYyBpbnNp
ZGUgbWFya0NoaWxkcmVuKCkgd291bGQgcmlzayBhIGRlYWRsb2NrIHdpdGggYSB0aHJlYWQgdGhh
dCBoYWQgYmVlbiAKICAgLy8gc3VzcGVuZGVkIHdoaWxlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2Nr
LgogICBmYXN0TWFsbG9jRm9yYmlkKCk7CiAjZW5kaWYKQEAgLTk2MCwyNCArOTc1LDI1IEBAIGJv
b2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKICAgaWYgKEludGVycHJldGVyOjpzX2hvb2spIHsKICAg
ICBJbnRlcnByZXRlciogc2NyID0gSW50ZXJwcmV0ZXI6OnNfaG9vazsKICAgICBkbyB7Ci0gICAg
ICBzY3ItPm1hcmsoKTsKKyAgICAgIHNjci0+bWFya1Jvb3RzKHN0YWNrKTsKKyAgICAgIGRyYWlu
TWFya1N0YWNrKHN0YWNrKTsKICAgICAgIHNjciA9IHNjci0+bmV4dDsKICAgICB9IHdoaWxlIChz
Y3IgIT0gSW50ZXJwcmV0ZXI6OnNfaG9vayk7CiAgIH0KIAotICBtYXJrU3RhY2tPYmplY3RzQ29u
c2VydmF0aXZlbHkoKTsKLSAgbWFya1Byb3RlY3RlZE9iamVjdHMoKTsKLSAgTGlzdDo6bWFya1By
b3RlY3RlZExpc3RzKCk7CisgIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShzdGFjayk7
CisgIG1hcmtQcm90ZWN0ZWRPYmplY3RzKHN0YWNrKTsKKyAgTGlzdDo6bWFya1Byb3RlY3RlZExp
c3RzKHN0YWNrKTsKKyAgZHJhaW5NYXJrU3RhY2soc3RhY2spOwogI2lmIFVTRShNVUxUSVBMRV9U
SFJFQURTKQogICBpZiAoIWN1cnJlbnRUaHJlYWRJc01haW5UaHJlYWQpCi0gICAgbWFya01haW5U
aHJlYWRPbmx5T2JqZWN0cygpOworICAgIG1hcmtNYWluVGhyZWFkT25seU9iamVjdHMoc3RhY2sp
OwogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCiAgIGZhc3RNYWxsb2NBbGxvdygpOwogI2VuZGlm
CiAgICAgCi0gIHNpemVfdCBvcmlnaW5hbExpdmVPYmplY3RzID0gcHJpbWFyeUhlYXAubnVtTGl2
ZU9iamVjdHMgKyBudW1iZXJIZWFwLm51bUxpdmVPYmplY3RzOwogICBzaXplX3QgbnVtTGl2ZU9i
amVjdHMgPSBzd2VlcDxQcmltYXJ5SGVhcD4oY3VycmVudFRocmVhZElzTWFpblRocmVhZCk7CiAg
IG51bUxpdmVPYmplY3RzICs9IHN3ZWVwPE51bWJlckhlYXA+KGN1cnJlbnRUaHJlYWRJc01haW5U
aHJlYWQpOwogICAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuaCBi
L0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuaAppbmRleCBjODM3MmY3Li42MDk5MGE2IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmgKKysrIGIvSmF2YVNjcmlw
dENvcmUva2pzL2NvbGxlY3Rvci5oCkBAIC0zMSw5ICszMSwxMCBAQAogCiBuYW1lc3BhY2UgS0pT
IHsKIAorICBjbGFzcyBDb2xsZWN0b3JCbG9jazsKICAgY2xhc3MgSlNDZWxsOwogICBjbGFzcyBK
U1ZhbHVlOwotICBjbGFzcyBDb2xsZWN0b3JCbG9jazsKKyAgY2xhc3MgTWFya1N0YWNrOwogCiAg
IGNsYXNzIENvbGxlY3RvciB7CiAgIHB1YmxpYzoKQEAgLTY1LDYgKzY2LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAKICAgICBzdGF0aWMgYm9vbCBpc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKik7CiAg
ICAgc3RhdGljIHZvaWQgbWFya0NlbGwoSlNDZWxsKik7CisgICAgc3RhdGljIGJvb2wgY2VsbE1h
eUhhdmVSZWZzKGNvbnN0IEpTQ2VsbCopOwogCiAgICAgZW51bSBIZWFwVHlwZSB7IFByaW1hcnlI
ZWFwLCBOdW1iZXJIZWFwIH07CiAKQEAgLTc4LDEyICs4MCwxMiBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBDb2xsZWN0b3IoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlY29yZEV4dHJhQ29zdChzaXpl
X3QpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtQcm90ZWN0ZWRPYmplY3RzKCk7Ci0gICAgc3RhdGlj
IHZvaWQgbWFya01haW5UaHJlYWRPbmx5T2JqZWN0cygpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtD
dXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHkoKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJrT3RoZXJU
aHJlYWRDb25zZXJ2YXRpdmVseShUaHJlYWQqKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJrU3RhY2tP
YmplY3RzQ29uc2VydmF0aXZlbHkoKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJrU3RhY2tPYmplY3Rz
Q29uc2VydmF0aXZlbHkodm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CisgICAgc3RhdGljIHZvaWQg
bWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0YWNrJik7CisgICAgc3RhdGljIHZvaWQgbWFya01h
aW5UaHJlYWRPbmx5T2JqZWN0cyhNYXJrU3RhY2smKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrQ3Vy
cmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYpOworICAgIHN0YXRpYyB2b2lkIG1h
cmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYsIFRocmVhZCopOworICAgIHN0
YXRpYyB2b2lkIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smKTsKKyAg
ICBzdGF0aWMgdm9pZCBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiwg
dm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CiAKICAgICBzdGF0aWMgc2l6ZV90IG1haW5UaHJlYWRP
bmx5T2JqZWN0Q291bnQ7CiAgICAgc3RhdGljIGJvb2wgbWVtb3J5RnVsbDsKQEAgLTEwNyw3ICsx
MDksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY29uc3Qgc2l6ZV90IFNNQUxMX0NFTExfU0laRSA9
IENFTExfU0laRSAvIDI7CiAgIGNvbnN0IHNpemVfdCBDRUxMX01BU0sgPSBDRUxMX1NJWkUgLSAx
OwogICBjb25zdCBzaXplX3QgQ0VMTF9BTElHTl9NQVNLID0gfkNFTExfTUFTSzsKLSAgY29uc3Qg
c2l6ZV90IENFTExTX1BFUl9CTE9DSyA9IChCTE9DS19TSVpFICogOCAtIHNpemVvZih1aW50MzJf
dCkgKiA4IC0gc2l6ZW9mKHZvaWQgKikgKiA4IC0gMiAqICg3ICsgMyAqIDgpKSAvIChDRUxMX1NJ
WkUgKiA4ICsgMik7CisgIGNvbnN0IHNpemVfdCBDRUxMU19QRVJfQkxPQ0sgPSAoQkxPQ0tfU0la
RSAqIDggLSBzaXplb2YodWludDMyX3QpICogOCAtIHNpemVvZih1aW50MzJfdCkgKiA4IC0gc2l6
ZW9mKHZvaWQgKikgKiA4IC0gMiAqICg3ICsgMyAqIDgpKSAvIChDRUxMX1NJWkUgKiA4ICsgMik7
CiAgIGNvbnN0IHNpemVfdCBTTUFMTF9DRUxMU19QRVJfQkxPQ0sgPSAyICogQ0VMTFNfUEVSX0JM
T0NLOwogICBjb25zdCBzaXplX3QgQklUTUFQX1NJWkUgPSAoQ0VMTFNfUEVSX0JMT0NLICsgNykg
LyA4OwogICBjb25zdCBzaXplX3QgQklUTUFQX1dPUkRTID0gKEJJVE1BUF9TSVpFICsgMykgLyBz
aXplb2YodWludDMyX3QpOwpAQCAtMTQ1LDYgKzE0Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IENvbGxlY3RvckNlbGwgY2VsbHNbQ0VMTFNfUEVSX0JMT0NLXTsKICAgICB1aW50MzJfdCB1c2Vk
Q2VsbHM7CiAgICAgQ29sbGVjdG9yQ2VsbCogZnJlZUxpc3Q7CisgICAgdWludDMyX3QgbWF5SGF2
ZVJlZnM7CiAgICAgQ29sbGVjdG9yQml0bWFwIG1hcmtlZDsKICAgICBDb2xsZWN0b3JCaXRtYXAg
Y29sbGVjdE9uTWFpblRocmVhZE9ubHk7CiAgIH07CkBAIC0xNTQsNiArMTU3LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgU21hbGxDb2xsZWN0b3JDZWxsIGNlbGxzW1NNQUxMX0NFTExTX1BFUl9C
TE9DS107CiAgICAgdWludDMyX3QgdXNlZENlbGxzOwogICAgIFNtYWxsQ29sbGVjdG9yQ2VsbCog
ZnJlZUxpc3Q7CisgICAgdWludDMyX3QgbWF5SGF2ZVJlZnM7CiAgICAgQ29sbGVjdG9yQml0bWFw
IG1hcmtlZDsKICAgICBDb2xsZWN0b3JCaXRtYXAgY29sbGVjdE9uTWFpblRocmVhZE9ubHk7CiAg
IH07CkBAIC0xODMsNiArMTg3LDExIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNlbGxCbG9jayhj
ZWxsKS0+bWFya2VkLnNldChjZWxsT2Zmc2V0KGNlbGwpKTsKICAgfQogCisgIGlubGluZSBib29s
IENvbGxlY3Rvcjo6Y2VsbE1heUhhdmVSZWZzKGNvbnN0IEpTQ2VsbCogY2VsbCkKKyAgeworICAg
IHJldHVybiBjZWxsQmxvY2soY2VsbCktPm1heUhhdmVSZWZzOworICB9CisKICAgaW5saW5lIHZv
aWQgQ29sbGVjdG9yOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpCiAgIHsgCiAg
ICAgaWYgKGNvc3QgPiBtaW5FeHRyYUNvc3RTaXplKSAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2tqcy9kYXRlX29iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3Qu
Y3BwCmluZGV4IDIxMDdmYWUuLmJkOWYyMmYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tq
cy9kYXRlX29iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNw
cApAQCAtMzE2LDggKzMxNiw4IEBAIHN0YXRpYyB2b2lkIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRl
QXJncyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGludCBtCiAKIGNvbnN0IENs
YXNzSW5mbyBEYXRlSW5zdGFuY2U6OmluZm8gPSB7IkRhdGUiLCAwLCAwfTsKIAotRGF0ZUluc3Rh
bmNlOjpEYXRlSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKQotICA6IEpTV3JhcHBlck9iamVjdChw
cm90bykKK0RhdGVJbnN0YW5jZTo6RGF0ZUluc3RhbmNlKEpTT2JqZWN0KiBwcm90bywgSlNWYWx1
ZSogdmFsKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvLCB2YWwpCiB7CiB9CiAKQEAgLTQy
NCwxMCArNDI0LDkgQEAgY29uc3QgQ2xhc3NJbmZvIERhdGVQcm90b3R5cGU6OmluZm8gPSB7IkRh
dGUiLCAmRGF0ZUluc3RhbmNlOjppbmZvLCAmZGF0ZVRhYmxlfTsKICovCiAvLyBFQ01BIDE1Ljku
NAogCi1EYXRlUHJvdG90eXBlOjpEYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSAqLCBPYmplY3RQcm90
b3R5cGUgKm9iamVjdFByb3RvKQotICA6IERhdGVJbnN0YW5jZShvYmplY3RQcm90bykKK0RhdGVQ
cm90b3R5cGU6OkRhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKiBvYmpl
Y3RQcm90bywgSlNWYWx1ZSogbmFuVmFsKQorICAgIDogRGF0ZUluc3RhbmNlKG9iamVjdFByb3Rv
LCBuYW5WYWwpCiB7Ci0gICAgc2V0SW50ZXJuYWxWYWx1ZShqc05hTigpKTsKICAgICAvLyBUaGUg
Y29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRlciwgYWZ0ZXIgRGF0ZU9iamVjdEltcCBoYXMg
YmVlbiBidWlsdC4KIH0KIApAQCAtNTAyLDkgKzUwMSw3IEBAIEpTT2JqZWN0ICpEYXRlT2JqZWN0
SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQogICAgIH0K
ICAgfQogICAKLSAgRGF0ZUluc3RhbmNlICpyZXQgPSBuZXcgRGF0ZUluc3RhbmNlKGV4ZWMtPmxl
eGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluRGF0ZVByb3RvdHlwZSgpKTsKLSAgcmV0LT5zZXRJ
bnRlcm5hbFZhbHVlKGpzTnVtYmVyKHRpbWVDbGlwKHZhbHVlKSkpOwotICByZXR1cm4gcmV0Owor
ICByZXR1cm4gbmV3IERhdGVJbnN0YW5jZShleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbkRhdGVQcm90b3R5cGUoKSwganNOdW1iZXIodGltZUNsaXAodmFsdWUpKSk7CiB9CiAKIC8v
IEVDTUEgMTUuOS4yCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3Qu
aCBiL0phdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5oCmluZGV4IDZjMzhlOTIuLjlmOWI5
ZDIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogCiAgICAgY2xhc3MgRGF0ZUluc3RhbmNlIDogcHVibGljIEpTV3JhcHBlck9iamVj
dCB7CiAgICAgcHVibGljOgotICAgICAgICBEYXRlSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKTsK
KyAgICAgICAgRGF0ZUluc3RhbmNlKEpTT2JqZWN0KiBwcm90bywgSlNWYWx1ZSopOwogICAgICAg
ICAKICAgICAgICAgYm9vbCBnZXRUaW1lKEdyZWdvcmlhbkRhdGVUaW1lJiwgaW50JiBvZmZzZXQp
IGNvbnN0OwogICAgICAgICBib29sIGdldFVUQ1RpbWUoR3JlZ29yaWFuRGF0ZVRpbWUmKSBjb25z
dDsKQEAgLTUzLDcgKzUzLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICovCiAgICAgY2xhc3Mg
RGF0ZVByb3RvdHlwZSA6IHB1YmxpYyBEYXRlSW5zdGFuY2UgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRGF0ZVByb3RvdHlwZShFeGVjU3RhdGUgKiwgT2JqZWN0UHJvdG90eXBlICopOworICAgICAg
ICAvLyB3ZSBuZWVkIHRoZSBOYU4gdmFsdWUgcGFzc2VkIGZyb20gdGhlIGNhbGxlciB0byBhdm9p
ZCBHQyBhbGxvY2F0aW5nIGJlZm9yZSAKKyAgICAgICAgLy8gYmFzZSBjbGFzcyBjb25zdHJ1Y3Rp
b24KKyAgICAgICAgRGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqLCBK
U1ZhbHVlKiBuYW5WYWwgPSBqc05hTigpKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciAmLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9lcnJvcl9vYmplY3QuY3BwIGIvSmF2YVNjcmlw
dENvcmUva2pzL2Vycm9yX29iamVjdC5jcHAKaW5kZXggMDY5N2YxMC4uNjlhNjE1MSAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUva2pzL2Vycm9yX29iamVjdC5jcHAKQEAgLTE1Niw5ICsxNTYsMyBAQCBKU1ZhbHVlKiBO
YXRpdmVFcnJvckltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IExpc3QmCiAgIHJldHVybiBjb25zdHJ1Y3QoZXhlYywgYXJncyk7CiB9CiAKLXZvaWQg
TmF0aXZlRXJyb3JJbXA6Om1hcmsoKQotewotICBKU09iamVjdDo6bWFyaygpOwotICBpZiAocHJv
dG8gJiYgIXByb3RvLT5tYXJrZWQoKSkKLSAgICBwcm90by0+bWFyaygpOwotfQpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUva2pz
L2Vycm9yX29iamVjdC5oCmluZGV4IDNlMWFjOGEuLjY1MTU0YTcgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9lcnJvcl9vYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvZXJy
b3Jfb2JqZWN0LmgKQEAgLTc1LDggKzc1LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVh
bCBKU09iamVjdCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7
CiAgICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpT
T2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAotICAgIHZpcnR1YWwgdm9pZCBt
YXJrKCk7Ci0KICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwIGIvSmF2
YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAppbmRleCAxZGM0MGE0Li40OWViZDg5IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAKQEAgLTYxLDEwICs2MSwxMCBAQCBGdW5jdGlvbkltcDo6RnVu
Y3Rpb25JbXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBGdW5jdGlv
bkJvZHlObwogewogfQogCi12b2lkIEZ1bmN0aW9uSW1wOjptYXJrKCkKK3ZvaWQgRnVuY3Rpb25J
bXA6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKQogewotICAgIEludGVybmFsRnVuY3Rp
b25JbXA6Om1hcmsoKTsKLSAgICBfc2NvcGUubWFyaygpOworICAgIEludGVybmFsRnVuY3Rpb25J
bXA6Om1hcmtDaGlsZHJlbihzdGFjayk7CisgICAgX3Njb3BlLm1hcmtDaGlsZHJlbihzdGFjayk7
CiB9CiAKIEpTVmFsdWUqIEZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtMzMxLDkgKzMzMSw5
IEBAIGNvbnN0IENsYXNzSW5mbyBBcmd1bWVudHM6OmluZm8gPSB7ICJBcmd1bWVudHMiLCAwLCAw
IH07CiAKIC8vIEVDTUEgMTAuMS44CiBBcmd1bWVudHM6OkFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4
ZWMsIEZ1bmN0aW9uSW1wKiBmdW5jLCBjb25zdCBMaXN0JiBhcmdzLCBBY3RpdmF0aW9uSW1wKiBh
Y3QpCi06IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCkpLCAKLV9hY3RpdmF0aW9uT2JqZWN0KGFjdCksCi1pbmRleFRvTmFtZU1hcChm
dW5jLCBhcmdzKQorICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCkpIAorICAsIF9hY3RpdmF0aW9uT2JqZWN0KGFjdCkKKyAgLCBp
bmRleFRvTmFtZU1hcChmdW5jLCBhcmdzKQogewogICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlO
YW1lcygpLmNhbGxlZSwgZnVuYywgRG9udEVudW0pOwogICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwgYXJncy5zaXplKCksIERvbnRFbnVtKTsKQEAgLTM0NywxMSArMzQ3
LDEwIEBAIGluZGV4VG9OYW1lTWFwKGZ1bmMsIGFyZ3MpCiAgIH0KIH0KIAotdm9pZCBBcmd1bWVu
dHM6Om1hcmsoKSAKK3ZvaWQgQXJndW1lbnRzOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFj
aykgCiB7Ci0gIEpTT2JqZWN0OjptYXJrKCk7Ci0gIGlmIChfYWN0aXZhdGlvbk9iamVjdCAmJiAh
X2FjdGl2YXRpb25PYmplY3QtPm1hcmtlZCgpKQotICAgIF9hY3RpdmF0aW9uT2JqZWN0LT5tYXJr
KCk7CisgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOworICBzdGFjay5wdXNoKF9hY3Rp
dmF0aW9uT2JqZWN0KTsKIH0KIAogSlNWYWx1ZSogQXJndW1lbnRzOjptYXBwZWRJbmRleEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC00ODQsMjMgKzQ4MywxNyBAQCB2b2lk
IEFjdGl2YXRpb25JbXA6OnB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqIHZhbAogICBfcHJvcC5wdXQocHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0
ciwgKGF0dHIgPT0gTm9uZSB8fCBhdHRyID09IERvbnREZWxldGUpKTsKIH0KIAotdm9pZCBBY3Rp
dmF0aW9uSW1wOjptYXJrKCkKK3ZvaWQgQWN0aXZhdGlvbkltcDo6bWFya0NoaWxkcmVuKE1hcmtT
dGFjayYgc3RhY2spCiB7Ci0gICAgSlNPYmplY3Q6Om1hcmsoKTsKKyAgICBKU09iamVjdDo6bWFy
a0NoaWxkcmVuKHN0YWNrKTsKIAogICAgIHNpemVfdCBzaXplID0gZC0+bG9jYWxTdG9yYWdlLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBK
U1ZhbHVlKiB2YWx1ZSA9IGQtPmxvY2FsU3RvcmFnZVtpXS52YWx1ZTsKLSAgICAgICAgaWYgKCF2
YWx1ZS0+bWFya2VkKCkpCi0gICAgICAgICAgICB2YWx1ZS0+bWFyaygpOwotICAgIH0KKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgc3RhY2sucHVzaChkLT5s
b2NhbFN0b3JhZ2VbaV0udmFsdWUpOwogICAgIAotICAgIEFTU0VSVChkLT5mdW5jdGlvbik7Ci0g
ICAgaWYgKCFkLT5mdW5jdGlvbi0+bWFya2VkKCkpCi0gICAgICAgIGQtPmZ1bmN0aW9uLT5tYXJr
KCk7Ci0KLSAgICBpZiAoZC0+YXJndW1lbnRzT2JqZWN0ICYmICFkLT5hcmd1bWVudHNPYmplY3Qt
Pm1hcmtlZCgpKQotICAgICAgICBkLT5hcmd1bWVudHNPYmplY3QtPm1hcmsoKTsKKyAgICBzdGFj
ay5wdXNoKGQtPmZ1bmN0aW9uKTsKKyAgICBpZiAoZC0+YXJndW1lbnRzT2JqZWN0KQorICAgICAg
c3RhY2sucHVzaChkLT5hcmd1bWVudHNPYmplY3QpOwogfQogCiB2b2lkIEFjdGl2YXRpb25JbXA6
OmNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5o
CmluZGV4IDU2NTdiMWUuLjM5MjEyN2UgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9m
dW5jdGlvbi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCkBAIC05NSw3ICs5
NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZvaWQgc2V0U2NvcGUoY29uc3QgU2NvcGVDaGFp
biYgcykgeyBfc2NvcGUgPSBzOyB9CiAgICAgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGUoKSBjb25z
dCB7IHJldHVybiBfc2NvcGU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmly
dHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICBwcml2YXRlOgogICAgIFNj
b3BlQ2hhaW4gX3Njb3BlOwpAQCAtMTI0LDcgKzEyNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBj
bGFzcyBBcmd1bWVudHMgOiBwdWJsaWMgSlNPYmplY3QgewogICBwdWJsaWM6CiAgICAgQXJndW1l
bnRzKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uSW1wKiBmdW5jLCBjb25zdCBMaXN0JiBhcmdzLCBBY3Rp
dmF0aW9uSW1wKiBhY3QpOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2
b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBi
b29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSk7CkBAIC0xNjQsNyArMTY0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgYm9vbCBp
c0FjdGl2YXRpb24oKSB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcm5hbC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCmlu
ZGV4IDEyNTI0NGUuLmZhZjlmOTggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9pbnRl
cm5hbC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcApAQCAtMTQ0LDE0
ICsxNDQsMTIgQEAgYm9vbCBOdW1iZXJJbXA6OmdldFRydW5jYXRlZFVJbnQzMih1aW50MzJfdCYg
dWludDMyKSBjb25zdAogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2V0dGVy
U2V0dGVySW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBHZXR0ZXJT
ZXR0ZXJJbXA6Om1hcmsoKQordm9pZCBHZXR0ZXJTZXR0ZXJJbXA6Om1hcmtDaGlsZHJlbihNYXJr
U3RhY2smIHN0YWNrKQogewotICAgIEpTQ2VsbDo6bWFyaygpOwotICAgIAotICAgIGlmIChnZXR0
ZXIgJiYgIWdldHRlci0+bWFya2VkKCkpCi0gICAgICAgIGdldHRlci0+bWFyaygpOwotICAgIGlm
IChzZXR0ZXIgJiYgIXNldHRlci0+bWFya2VkKCkpCi0gICAgICAgIHNldHRlci0+bWFyaygpOwor
ICAgIGlmIChnZXR0ZXIpCisgICAgICAgIHN0YWNrLnB1c2goZ2V0dGVyKTsKKyAgICBpZiAoc2V0
dGVyKQorICAgICAgICBzdGFjay5wdXNoKHNldHRlcik7CiB9CiAKIEpTVmFsdWUqIEdldHRlclNl
dHRlckltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlKSBjb25zdApkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tq
cy9pbnRlcnByZXRlci5jcHAKaW5kZXggMmQzODFiMi4uZWIyYmJjOCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMv
aW50ZXJwcmV0ZXIuY3BwCkBAIC01NDQsODAgKzU0NCw4MCBAQCBKU09iamVjdCAqSW50ZXJwcmV0
ZXI6OmJ1aWx0aW5VUklFcnJvclByb3RvdHlwZSgpIGNvbnN0CiAgIHJldHVybiBtX1VyaUVycm9y
UHJvdG90eXBlOwogfQogCi12b2lkIEludGVycHJldGVyOjptYXJrKCkKK3ZvaWQgSW50ZXJwcmV0
ZXI6Om1hcmtSb290cyhNYXJrU3RhY2smIHN0YWNrKQogewogICAgIGlmIChtX2N1cnJlbnRFeGVj
KQotICAgICAgICBtX2N1cnJlbnRFeGVjLT5tYXJrKCk7Ci0KLSAgICBpZiAobV9nbG9iYWxFeGVj
LmV4Y2VwdGlvbigpICYmICFtX2dsb2JhbEV4ZWMuZXhjZXB0aW9uKCktPm1hcmtlZCgpKQotICAg
ICAgICBtX2dsb2JhbEV4ZWMuZXhjZXB0aW9uKCktPm1hcmsoKTsKLQotICAgIGlmIChtX2dsb2Jh
bE9iamVjdCAmJiAhbV9nbG9iYWxPYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBtX2dsb2JhbE9i
amVjdC0+bWFyaygpOwotCi0gICAgaWYgKG1fT2JqZWN0ICYmICFtX09iamVjdC0+bWFya2VkKCkp
Ci0gICAgICAgIG1fT2JqZWN0LT5tYXJrKCk7Ci0gICAgaWYgKG1fRnVuY3Rpb24gJiYgIW1fRnVu
Y3Rpb24tPm1hcmtlZCgpKQotICAgICAgICBtX0Z1bmN0aW9uLT5tYXJrKCk7Ci0gICAgaWYgKG1f
QXJyYXkgJiYgIW1fQXJyYXktPm1hcmtlZCgpKQotICAgICAgICBtX0FycmF5LT5tYXJrKCk7Ci0g
ICAgaWYgKG1fQm9vbGVhbiAmJiAhbV9Cb29sZWFuLT5tYXJrZWQoKSkKLSAgICAgICAgbV9Cb29s
ZWFuLT5tYXJrKCk7Ci0gICAgaWYgKG1fU3RyaW5nICYmICFtX1N0cmluZy0+bWFya2VkKCkpCi0g
ICAgICAgIG1fU3RyaW5nLT5tYXJrKCk7Ci0gICAgaWYgKG1fTnVtYmVyICYmICFtX051bWJlci0+
bWFya2VkKCkpCi0gICAgICAgIG1fTnVtYmVyLT5tYXJrKCk7Ci0gICAgaWYgKG1fRGF0ZSAmJiAh
bV9EYXRlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9EYXRlLT5tYXJrKCk7Ci0gICAgaWYgKG1fUmVn
RXhwICYmICFtX1JlZ0V4cC0+bWFya2VkKCkpCi0gICAgICAgIG1fUmVnRXhwLT5tYXJrKCk7Ci0g
ICAgaWYgKG1fRXJyb3IgJiYgIW1fRXJyb3ItPm1hcmtlZCgpKQotICAgICAgICBtX0Vycm9yLT5t
YXJrKCk7Ci0gICAgCi0gICAgaWYgKG1fT2JqZWN0UHJvdG90eXBlICYmICFtX09iamVjdFByb3Rv
dHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fT2JqZWN0UHJvdG90eXBlLT5tYXJrKCk7Ci0gICAg
aWYgKG1fRnVuY3Rpb25Qcm90b3R5cGUgJiYgIW1fRnVuY3Rpb25Qcm90b3R5cGUtPm1hcmtlZCgp
KQotICAgICAgICBtX0Z1bmN0aW9uUHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgaWYgKG1fQXJyYXlQ
cm90b3R5cGUgJiYgIW1fQXJyYXlQcm90b3R5cGUtPm1hcmtlZCgpKQotICAgICAgICBtX0FycmF5
UHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgaWYgKG1fQm9vbGVhblByb3RvdHlwZSAmJiAhbV9Cb29s
ZWFuUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9Cb29sZWFuUHJvdG90eXBlLT5tYXJr
KCk7Ci0gICAgaWYgKG1fU3RyaW5nUHJvdG90eXBlICYmICFtX1N0cmluZ1Byb3RvdHlwZS0+bWFy
a2VkKCkpCi0gICAgICAgIG1fU3RyaW5nUHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgaWYgKG1fTnVt
YmVyUHJvdG90eXBlICYmICFtX051bWJlclByb3RvdHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1f
TnVtYmVyUHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgaWYgKG1fRGF0ZVByb3RvdHlwZSAmJiAhbV9E
YXRlUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9EYXRlUHJvdG90eXBlLT5tYXJrKCk7
Ci0gICAgaWYgKG1fUmVnRXhwUHJvdG90eXBlICYmICFtX1JlZ0V4cFByb3RvdHlwZS0+bWFya2Vk
KCkpCi0gICAgICAgIG1fUmVnRXhwUHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgaWYgKG1fRXJyb3JQ
cm90b3R5cGUgJiYgIW1fRXJyb3JQcm90b3R5cGUtPm1hcmtlZCgpKQotICAgICAgICBtX0Vycm9y
UHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgCi0gICAgaWYgKG1fRXZhbEVycm9yICYmICFtX0V2YWxF
cnJvci0+bWFya2VkKCkpCi0gICAgICAgIG1fRXZhbEVycm9yLT5tYXJrKCk7Ci0gICAgaWYgKG1f
UmFuZ2VFcnJvciAmJiAhbV9SYW5nZUVycm9yLT5tYXJrZWQoKSkKLSAgICAgICAgbV9SYW5nZUVy
cm9yLT5tYXJrKCk7Ci0gICAgaWYgKG1fUmVmZXJlbmNlRXJyb3IgJiYgIW1fUmVmZXJlbmNlRXJy
b3ItPm1hcmtlZCgpKQotICAgICAgICBtX1JlZmVyZW5jZUVycm9yLT5tYXJrKCk7Ci0gICAgaWYg
KG1fU3ludGF4RXJyb3IgJiYgIW1fU3ludGF4RXJyb3ItPm1hcmtlZCgpKQotICAgICAgICBtX1N5
bnRheEVycm9yLT5tYXJrKCk7Ci0gICAgaWYgKG1fVHlwZUVycm9yICYmICFtX1R5cGVFcnJvci0+
bWFya2VkKCkpCi0gICAgICAgIG1fVHlwZUVycm9yLT5tYXJrKCk7Ci0gICAgaWYgKG1fVXJpRXJy
b3IgJiYgIW1fVXJpRXJyb3ItPm1hcmtlZCgpKQotICAgICAgICBtX1VyaUVycm9yLT5tYXJrKCk7
Ci0gICAgCi0gICAgaWYgKG1fRXZhbEVycm9yUHJvdG90eXBlICYmICFtX0V2YWxFcnJvclByb3Rv
dHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fRXZhbEVycm9yUHJvdG90eXBlLT5tYXJrKCk7Ci0g
ICAgaWYgKG1fUmFuZ2VFcnJvclByb3RvdHlwZSAmJiAhbV9SYW5nZUVycm9yUHJvdG90eXBlLT5t
YXJrZWQoKSkKLSAgICAgICAgbV9SYW5nZUVycm9yUHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgaWYg
KG1fUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUgJiYgIW1fUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUt
Pm1hcmtlZCgpKQotICAgICAgICBtX1JlZmVyZW5jZUVycm9yUHJvdG90eXBlLT5tYXJrKCk7Ci0g
ICAgaWYgKG1fU3ludGF4RXJyb3JQcm90b3R5cGUgJiYgIW1fU3ludGF4RXJyb3JQcm90b3R5cGUt
Pm1hcmtlZCgpKQotICAgICAgICBtX1N5bnRheEVycm9yUHJvdG90eXBlLT5tYXJrKCk7Ci0gICAg
aWYgKG1fVHlwZUVycm9yUHJvdG90eXBlICYmICFtX1R5cGVFcnJvclByb3RvdHlwZS0+bWFya2Vk
KCkpCi0gICAgICAgIG1fVHlwZUVycm9yUHJvdG90eXBlLT5tYXJrKCk7Ci0gICAgaWYgKG1fVXJp
RXJyb3JQcm90b3R5cGUgJiYgIW1fVXJpRXJyb3JQcm90b3R5cGUtPm1hcmtlZCgpKQotICAgICAg
ICBtX1VyaUVycm9yUHJvdG90eXBlLT5tYXJrKCk7CisgICAgICAgIG1fY3VycmVudEV4ZWMtPm1h
cmtDaGlsZHJlbihzdGFjayk7CisKKyAgICBpZiAobV9nbG9iYWxFeGVjLmV4Y2VwdGlvbigpKQor
ICAgICAgICBzdGFjay5wdXNoKG1fZ2xvYmFsRXhlYy5leGNlcHRpb24oKSk7CisKKyAgICBpZiAo
bV9nbG9iYWxPYmplY3QpCisgICAgICAgIHN0YWNrLnB1c2gobV9nbG9iYWxPYmplY3QpOworCisg
ICAgaWYgKG1fT2JqZWN0KQorICAgICAgIHN0YWNrLnB1c2gobV9PYmplY3QpOworICAgIGlmICht
X0Z1bmN0aW9uKQorICAgICAgICBzdGFjay5wdXNoKG1fRnVuY3Rpb24pOworICAgIGlmIChtX0Fy
cmF5KQorICAgICAgICBzdGFjay5wdXNoKG1fQXJyYXkpOworICAgIGlmIChtX0Jvb2xlYW4pCisg
ICAgICAgIHN0YWNrLnB1c2gobV9Cb29sZWFuKTsKKyAgICBpZiAobV9TdHJpbmcpCisgICAgICAg
IHN0YWNrLnB1c2gobV9TdHJpbmcpOworICAgIGlmIChtX051bWJlcikKKyAgICAgICAgc3RhY2su
cHVzaChtX051bWJlcik7CisgICAgaWYgKG1fRGF0ZSkKKyAgICAgICAgc3RhY2sucHVzaChtX0Rh
dGUpOworICAgIGlmIChtX1JlZ0V4cCkKKyAgICAgICAgc3RhY2sucHVzaChtX1JlZ0V4cCk7Cisg
ICAgaWYgKG1fRXJyb3IpCisgICAgICAgIHN0YWNrLnB1c2gobV9FcnJvcik7CisgICAgCisgICAg
aWYgKG1fT2JqZWN0UHJvdG90eXBlKQorICAgICAgICBzdGFjay5wdXNoKG1fT2JqZWN0UHJvdG90
eXBlKTsKKyAgICBpZiAobV9GdW5jdGlvblByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaCht
X0Z1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBpZiAobV9BcnJheVByb3RvdHlwZSkKKyAgICAgICAg
c3RhY2sucHVzaChtX0FycmF5UHJvdG90eXBlKTsKKyAgICBpZiAobV9Cb29sZWFuUHJvdG90eXBl
KQorICAgICAgICBzdGFjay5wdXNoKG1fQm9vbGVhblByb3RvdHlwZSk7CisgICAgaWYgKG1fU3Ry
aW5nUHJvdG90eXBlKQorICAgICAgICBzdGFjay5wdXNoKG1fU3RyaW5nUHJvdG90eXBlKTsKKyAg
ICBpZiAobV9OdW1iZXJQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9OdW1iZXJQcm90
b3R5cGUpOworICAgIGlmIChtX0RhdGVQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9E
YXRlUHJvdG90eXBlKTsKKyAgICBpZiAobV9SZWdFeHBQcm90b3R5cGUpCisgICAgICAgIHN0YWNr
LnB1c2gobV9SZWdFeHBQcm90b3R5cGUpOworICAgIGlmIChtX0Vycm9yUHJvdG90eXBlKQorICAg
ICAgICBzdGFjay5wdXNoKG1fRXJyb3JQcm90b3R5cGUpOworICAgIAorICAgIGlmIChtX0V2YWxF
cnJvcikKKyAgICAgICAgc3RhY2sucHVzaChtX0V2YWxFcnJvcik7CisgICAgaWYgKG1fUmFuZ2VF
cnJvcikKKyAgICAgICAgc3RhY2sucHVzaChtX1JhbmdlRXJyb3IpOworICAgIGlmIChtX1JlZmVy
ZW5jZUVycm9yKQorICAgICAgICBzdGFjay5wdXNoKG1fUmVmZXJlbmNlRXJyb3IpOworICAgIGlm
IChtX1N5bnRheEVycm9yKQorICAgICAgICBzdGFjay5wdXNoKG1fU3ludGF4RXJyb3IpOworICAg
IGlmIChtX1R5cGVFcnJvcikKKyAgICAgICAgc3RhY2sucHVzaChtX1R5cGVFcnJvcik7CisgICAg
aWYgKG1fVXJpRXJyb3IpCisgICAgICAgIHN0YWNrLnB1c2gobV9VcmlFcnJvcik7CisgICAgCisg
ICAgaWYgKG1fRXZhbEVycm9yUHJvdG90eXBlKQorICAgICAgICBzdGFjay5wdXNoKG1fRXZhbEVy
cm9yUHJvdG90eXBlKTsKKyAgICBpZiAobV9SYW5nZUVycm9yUHJvdG90eXBlKQorICAgICAgICBz
dGFjay5wdXNoKG1fUmFuZ2VFcnJvclByb3RvdHlwZSk7CisgICAgaWYgKG1fUmVmZXJlbmNlRXJy
b3JQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9SZWZlcmVuY2VFcnJvclByb3RvdHlw
ZSk7CisgICAgaWYgKG1fU3ludGF4RXJyb3JQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2go
bV9TeW50YXhFcnJvclByb3RvdHlwZSk7CisgICAgaWYgKG1fVHlwZUVycm9yUHJvdG90eXBlKQor
ICAgICAgICBzdGFjay5wdXNoKG1fVHlwZUVycm9yUHJvdG90eXBlKTsKKyAgICBpZiAobV9VcmlF
cnJvclByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX1VyaUVycm9yUHJvdG90eXBlKTsK
IH0KIAogc3RhdGljIGJvb2wgcHJpbnRFeGNlcHRpb25zID0gZmFsc2U7CmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9pbnRl
cnByZXRlci5oCmluZGV4IDNjYjg2YzIuLjlmNTRkM2EgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcnByZXRlci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRl
ci5oCkBAIC0yOTAsNyArMjkwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogQ2FsbGVkIGR1
cmluZyB0aGUgbWFyayBwaGFzZSBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFN1YmNsYXNzZXMg
CiAgICAgICogaW1wbGVtZW50aW5nIGN1c3RvbSBtYXJrIG1ldGhvZHMgbXVzdCBtYWtlIHN1cmUg
dG8gY2hhaW4gdG8gdGhpcyBvbmUuCiAgICAgICovCi0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbWFya1Jvb3RzKE1hcmtTdGFjayYpOwogCiAgICAgc3RhdGljIGJv
b2wgc2hvdWxkUHJpbnRFeGNlcHRpb25zKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkUHJp
bnRFeGNlcHRpb25zKGJvb2wpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL2xpc3Qu
Y3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuY3BwCmluZGV4IGVlYzcwM2UuLmY2MDA1MWYg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ranMvbGlzdC5jcHAKQEAgLTQzLDE4ICs0MywxNSBAQCBMaXN0OjpMaXN0U2V0JiBMaXN0
OjptYXJrU2V0KCkKICAgICByZXR1cm4gc3RhdGljTWFya1NldDsKIH0KIAotdm9pZCBMaXN0Ojpt
YXJrUHJvdGVjdGVkTGlzdHNTbG93Q2FzZSgpCit2b2lkIExpc3Q6Om1hcmtQcm90ZWN0ZWRMaXN0
c1Nsb3dDYXNlKE1hcmtTdGFjayYgc3RhY2spCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0b3IgZW5k
ID0gbWFya1NldCgpLmVuZCgpOwogICAgIGZvciAoTGlzdFNldDo6aXRlcmF0b3IgaXQgPSBtYXJr
U2V0KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIExpc3QqIGxpc3QgPSAq
aXQ7CiAKICAgICAgICAgaXRlcmF0b3IgZW5kMiA9IGxpc3QtPmVuZCgpOwotICAgICAgICBmb3Ig
KGl0ZXJhdG9yIGl0MiA9IGxpc3QtPmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikgewotICAg
ICAgICAgICAgSlNWYWx1ZSogdiA9ICppdDI7Ci0gICAgICAgICAgICBpZiAoIXYtPm1hcmtlZCgp
KQotICAgICAgICAgICAgICAgIHYtPm1hcmsoKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGl0
ZXJhdG9yIGl0MiA9IGxpc3QtPmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikKKyAgICAgICAg
ICAgIHN0YWNrLnB1c2goKml0Mik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ranMvbGlzdC5oIGIvSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuaAppbmRleCBiNjZlNzEw
Li40OTY5YjNhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvbGlzdC5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9saXN0LmgKQEAgLTg1LDE4ICs4NSwxOCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rv
ci5iZWdpbigpOyB9CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmVjdG9yLmVuZCgpOyB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgbWFya1Byb3RlY3RlZExp
c3RzKCkKKyAgICAgICAgc3RhdGljIHZvaWQgbWFya1Byb3RlY3RlZExpc3RzKE1hcmtTdGFjayYg
c3RhY2spCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbWFya1NldCgpLnNpemUoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtYXJrUHJvdGVjdGVkTGlzdHNTbG93
Q2FzZSgpOworICAgICAgICAgICAgbWFya1Byb3RlY3RlZExpc3RzU2xvd0Nhc2Uoc3RhY2spOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IExpc3QmIGVtcHR5KCk7IC8vIEZhc3Qg
cGF0aCBmb3IgYW4gZW1wdHkgbGlzdC4KIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBM
aXN0U2V0JiBtYXJrU2V0KCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIG1hcmtQcm90ZWN0ZWRMaXN0
c1Nsb3dDYXNlKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIG1hcmtQcm90ZWN0ZWRMaXN0c1Nsb3dD
YXNlKE1hcmtTdGFjayYpOwogCiAgICAgICAgIHZvaWQgZXhwYW5kQW5kQXBwZW5kKEpTVmFsdWUq
KTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwIGIv
SmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCmluZGV4IGFkNjhmOTAuLjczMmJh
YzYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAKQEAgLTM3LDggKzM3LDggQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogY29uc3QgQ2xhc3NJbmZvIE51bWJlckluc3RhbmNlOjpp
bmZvID0geyAiTnVtYmVyIiwgMCwgMCB9OwogCi1OdW1iZXJJbnN0YW5jZTo6TnVtYmVySW5zdGFu
Y2UoSlNPYmplY3QgKnByb3RvKQotICA6IEpTV3JhcHBlck9iamVjdChwcm90bykKK051bWJlcklu
c3RhbmNlOjpOdW1iZXJJbnN0YW5jZShKU09iamVjdCogcHJvdG8sIEpTVmFsdWUqIHZhbCkKKyAg
OiBKU1dyYXBwZXJPYmplY3QocHJvdG8sIHZhbCkKIHsKIH0KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBOdW1iZXJQcm90b3R5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC00OCwxMCArNDgsOCBAQCBOdW1iZXJJbnN0YW5jZTo6TnVtYmVySW5zdGFuY2UoSlNPYmpl
Y3QgKnByb3RvKQogTnVtYmVyUHJvdG90eXBlOjpOdW1iZXJQcm90b3R5cGUoRXhlY1N0YXRlICpl
eGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90
eXBlICpvYmpQcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1
bmN0aW9uUHJvdG90eXBlICpmdW5jUHJvdG8pCi0gIDogTnVtYmVySW5zdGFuY2Uob2JqUHJvdG8p
CisgIDogTnVtYmVySW5zdGFuY2Uob2JqUHJvdG8sIGpzTnVtYmVyKDApKQogewotICBzZXRJbnRl
cm5hbFZhbHVlKGpzTnVtYmVyKDApKTsKLQogICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBh
ZGRlZCBsYXRlciwgYWZ0ZXIgTnVtYmVyT2JqZWN0SW1wIGhhcyBiZWVuIGNvbnN0cnVjdGVkCiAK
ICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8s
IE51bWJlclByb3RvRnVuYzo6VG9TdHJpbmcsICAgICAgIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b1N0cmluZyksIERvbnRFbnVtKTsKQEAgLTQ2MywxOCArNDYxLDE0IEBAIGJvb2wgTnVtYmVy
T2JqZWN0SW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKIC8vIEVDTUEgMTUuNy4xCiBK
U09iamVjdCAqTnVtYmVyT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBMaXN0ICZhcmdzKQogewotICBKU09iamVjdCAqcHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk51bWJlclByb3RvdHlwZSgpOwotICBOdW1iZXJJbnN0YW5jZSAqb2Jq
KG5ldyBOdW1iZXJJbnN0YW5jZShwcm90bykpOwotCiAgIGRvdWJsZSBuOwogICBpZiAoYXJncy5p
c0VtcHR5KCkpCiAgICAgbiA9IDA7CiAgIGVsc2UKICAgICBuID0gYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYyk7CiAKLSAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGpzTnVtYmVyKG4pKTsKLQotICByZXR1
cm4gb2JqOworICBKU09iamVjdCAqcHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk51bWJlclByb3RvdHlwZSgpOworICByZXR1cm4gbmV3IE51bWJlckluc3RhbmNlKHBy
b3RvLCBqc051bWJlcihuKSk7CiB9CiAKIC8vIEVDTUEgMTUuNy4yCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUva2pzL251bWJl
cl9vYmplY3QuaAppbmRleCA4YTNlMzljLi44YjBmMjliIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ranMvbnVtYmVyX29iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJf
b2JqZWN0LmgKQEAgLTI5LDkgKzI5LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgTnVt
YmVySW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgcHVibGljOgotICAgIE51
bWJlckluc3RhbmNlKEpTT2JqZWN0ICpwcm90byk7CisgICAgTnVtYmVySW5zdGFuY2UoSlNPYmpl
Y3QqIHByb3RvLCBKU1ZhbHVlKik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIGluZm87CiAgIH07CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKaW5kZXggMTNkNWU2
NS4uODUxNGIwYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKQEAgLTExMywxMCArMTEzLDggQEAgSlNW
YWx1ZSAqSlNPYmplY3Q6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEpT
T2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEpTT2Jq
ZWN0OjptYXJrKCkKK3ZvaWQgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNr
KQogewotICBKU0NlbGw6Om1hcmsoKTsKLQogI2lmIEpBVkFTQ1JJUFRfTUFSS19UUkFDSU5HCiAg
IHN0YXRpYyBpbnQgbWFya1N0YWNrRGVwdGggPSAwOwogICBtYXJrU3RhY2tEZXB0aCsrOwpAQCAt
MTI2LDExICsxMjQsOCBAQCB2b2lkIEpTT2JqZWN0OjptYXJrKCkKICAgcHJpbnRmKCIlcyAoJXAp
XG4iLCBjbGFzc05hbWUoKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgdGhpcyk7CiAjZW5kaWYKICAg
Ci0gIEpTVmFsdWUgKnByb3RvID0gX3Byb3RvOwotICBpZiAoIXByb3RvLT5tYXJrZWQoKSkKLSAg
ICBwcm90by0+bWFyaygpOwotCi0gIF9wcm9wLm1hcmsoKTsKKyAgc3RhY2sucHVzaChfcHJvdG8p
OworICBfcHJvcC5tYXJrQ2hpbGRyZW4oc3RhY2spOwogICAKICNpZiBKQVZBU0NSSVBUX01BUktf
VFJBQ0lORwogICBtYXJrU3RhY2tEZXB0aC0tOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
a2pzL29iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCmluZGV4IDFmNDVmNWUu
LjUzMWQwZDYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUg
IkpTVHlwZS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiTWFy
a1N0YWNrLmgiCiAjaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJwcm9wZXJ0eV9t
YXAuaCIKICNpbmNsdWRlICJwcm9wZXJ0eV9zbG90LmgiCkBAIC04NCw3ICs4NSw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMp
IGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmplY3QgKnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykg
Y29uc3Q7CiAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAgICAgICAKICAgICBKU09iamVjdCAqZ2V0R2V0
dGVyKCkgeyByZXR1cm4gZ2V0dGVyOyB9CiAgICAgdm9pZCBzZXRHZXR0ZXIoSlNPYmplY3QgKmcp
IHsgZ2V0dGVyID0gZzsgfQpAQCAtMTExLDcgKzExMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAqLwogICAgIEpTT2JqZWN0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgIHZp
cnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAgICAgdmlydHVhbCBKU1R5cGUg
dHlwZSgpIGNvbnN0OwogCiAgICAgLyoqCkBAIC01ODYsMTIgKzU4NywxMSBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZQogCiAvLyBGSVhNRTogUHV0IHRoaXMgZnVuY3Rpb24gaW4gYSBzZXBhcmF0
ZSBmaWxlIG5hbWVkIHNvbWV0aGluZyBsaWtlIHNjb3BlX2NoYWluX21hcmsuaCAtLSBjYW4ndCBw
dXQgaXQgaW4gc2NvcGVfY2hhaW4uaCBzaW5jZSBpdCBkZXBlbmRzIG9uIEpTT2JqZWN0LgogCi1p
bmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrKCkKK2lubGluZSB2b2lkIFNjb3BlQ2hhaW46Om1h
cmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKQogewotICAgIGZvciAoU2NvcGVDaGFpbk5vZGUg
Km4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKLSAgICAgICAgSlNPYmplY3QgKm8gPSBuLT5v
YmplY3Q7Ci0gICAgICAgIGlmICghby0+bWFya2VkKCkpCi0gICAgICAgICAgICBvLT5tYXJrKCk7
CisgICAgZm9yIChTY29wZUNoYWluTm9kZSogbiA9IF9ub2RlOyBuOyBuID0gbi0+bmV4dCkgewor
ICAgICAgICBKU09iamVjdCogbyA9IG4tPm9iamVjdDsKKyAgICAgICAgc3RhY2sucHVzaChvKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAu
Y3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAKaW5kZXggNDVlMzkxYS4u
MTFjNzk2YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAK
KysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAKQEAgLTYyMiwyNSArNjIy
LDE5IEBAIHZvaWQgUHJvcGVydHlNYXA6OnJlbW92ZShjb25zdCBJZGVudGlmaWVyJiBuYW1lKQog
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotdm9pZCBQcm9wZXJ0eU1hcDo6bWFyaygpIGNv
bnN0Cit2b2lkIFByb3BlcnR5TWFwOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykgY29u
c3QKIHsKICAgICBpZiAoIW1fdXNpbmdUYWJsZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKLSAg
ICAgICAgaWYgKG1fc2luZ2xlRW50cnlLZXkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBt
X3Uuc2luZ2xlRW50cnlWYWx1ZTsKLSAgICAgICAgICAgIGlmICghdi0+bWFya2VkKCkpCi0gICAg
ICAgICAgICAgICAgdi0+bWFyaygpOwotICAgICAgICB9CisgICAgICAgIGlmIChtX3NpbmdsZUVu
dHJ5S2V5KQorICAgICAgICAgICAgc3RhY2sucHVzaChtX3Uuc2luZ2xlRW50cnlWYWx1ZSk7CiAj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGVudHJ5Q291bnQg
PSBtX3UudGFibGUtPmtleUNvdW50ICsgbV91LnRhYmxlLT5kZWxldGVkU2VudGluZWxDb3VudDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5Q291bnQ7IGkrKykgewotICAgICAg
ICBKU1ZhbHVlKiB2ID0gbV91LnRhYmxlLT5lbnRyaWVzKClbaV0udmFsdWU7Ci0gICAgICAgIGlm
ICghdi0+bWFya2VkKCkpCi0gICAgICAgICAgICB2LT5tYXJrKCk7Ci0gICAgfQorICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPD0gZW50cnlDb3VudDsgaSsrKQorICAgICAgICBzdGFjay5wdXNo
KG1fdS50YWJsZS0+ZW50cmllcygpW2ldLnZhbHVlKTsKIH0KIAogc3RhdGljIGludCBjb21wYXJl
UHJvcGVydHlNYXBFbnRyeUluZGljZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaCBiL0phdmFTY3JpcHRD
b3JlL2tqcy9wcm9wZXJ0eV9tYXAuaAppbmRleCA4MjE0NGVmLi4wOTdlNWI4IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
a2pzL3Byb3BlcnR5X21hcC5oCkBAIC0yOSw2ICsyOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBNYXJrU3Rh
Y2s7CiAgICAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiAgICAgCiAgICAgc3RydWN0IFByb3Bl
cnR5TWFwRW50cnk7CkBAIC01OSw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBK
U1ZhbHVlKiBnZXQoY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25z
dDsKICAgICAgICAgSlNWYWx1ZSoqIGdldExvY2F0aW9uKGNvbnN0IElkZW50aWZpZXImIG5hbWUp
OwogCi0gICAgICAgIHZvaWQgbWFyaygpIGNvbnN0OworICAgICAgICB2b2lkIG1hcmtDaGlsZHJl
bihNYXJrU3RhY2smKSBjb25zdDsKICAgICAgICAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlO
YW1lcyhQcm9wZXJ0eU5hbWVBcnJheSYpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2F2ZShTYXZl
ZFByb3BlcnRpZXMmKSBjb25zdDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9zY29w
ZV9jaGFpbi5oIGIvSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgKaW5kZXggMjY1YzMx
Yy4uMmUyOTQ2NCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgKQEAgLTc5LDcgKzc5LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZvaWQgcHVzaChjb25zdCBTY29wZUNoYWluICYpOwog
ICAgICAgICB2b2lkIHBvcCgpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBtYXJrKCk7CisgICAg
ICAgIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAjaWZuZGVmIE5ERUJVRyAgICAg
ICAgCiAgICAgICAgIHZvaWQgcHJpbnQoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tq
cy9zdHJpbmdfb2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNw
cAppbmRleCBjNzRmNTQ5Li40OTE5NTg3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMv
c3RyaW5nX29iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3Qu
Y3BwCkBAIC00NSwyNSArNDUsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAKIGNvbnN0IENsYXNzSW5m
byBTdHJpbmdJbnN0YW5jZTo6aW5mbyA9IHsgIlN0cmluZyIsIDAsIDAgfTsKIAotU3RyaW5nSW5z
dGFuY2U6OlN0cmluZ0luc3RhbmNlKEpTT2JqZWN0ICpwcm90bykKLSAgOiBKU1dyYXBwZXJPYmpl
Y3QocHJvdG8pCitTdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5zdGFuY2UoSlNPYmplY3QqIHByb3Rv
LCBKU0NlbGwqIHN0cmluZykKKyAgICA6IEpTV3JhcHBlck9iamVjdChwcm90bywgc3RyaW5nKQog
ewotICBzZXRJbnRlcm5hbFZhbHVlKGpzU3RyaW5nKCIiKSk7CisgICAgQVNTRVJUKHN0cmluZy0+
dHlwZSgpID09IFN0cmluZ1R5cGUpOwogfQogCi1TdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5zdGFu
Y2UoSlNPYmplY3QgKnByb3RvLCBTdHJpbmdJbXAqIHN0cmluZykKLSAgOiBKU1dyYXBwZXJPYmpl
Y3QocHJvdG8pCi17Ci0gIHNldEludGVybmFsVmFsdWUoc3RyaW5nKTsKLX0KLQotU3RyaW5nSW5z
dGFuY2U6OlN0cmluZ0luc3RhbmNlKEpTT2JqZWN0ICpwcm90bywgY29uc3QgVVN0cmluZyAmc3Ry
aW5nKQotICA6IEpTV3JhcHBlck9iamVjdChwcm90bykKLXsKLSAgc2V0SW50ZXJuYWxWYWx1ZShq
c1N0cmluZyhzdHJpbmcpKTsKLX0KLQotSlNWYWx1ZSAqU3RyaW5nSW5zdGFuY2U6Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QgJnNsb3QpCitKU1ZhbHVlKiBTdHJpbmdJbnN0YW5jZTo6bGVuZ3RoR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCAmc2xvdCkKIHsKICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFu
Y2UqPihzbG90LnNsb3RCYXNlKCkpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkuc2l6ZSgpKTsK
IH0KQEAgLTEyOSw2ICsxMTcsMTIgQEAgdm9pZCBTdHJpbmdJbnN0YW5jZTo6Z2V0UHJvcGVydHlO
YW1lcyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXIKICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMpOwogfQogCit2
b2lkIFN0cmluZ0luc3RhbmNlOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykgCit7Cisg
ICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihzdGFjayk7CisgICAgc3RhY2sucHVzaEF0b20oaW50
ZXJuYWxWYWx1ZSgpKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0
cmluZ1Byb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGNvbnN0IENsYXNzSW5m
byBTdHJpbmdQcm90b3R5cGU6OmluZm8gPSB7ICJTdHJpbmciLCAmU3RyaW5nSW5zdGFuY2U6Omlu
Zm8sICZzdHJpbmdUYWJsZSB9OwogLyogU291cmNlIGZvciBzdHJpbmdfb2JqZWN0Lmx1dC5oCkBA
IC0xNzIsOCArMTY2LDggQEAgY29uc3QgQ2xhc3NJbmZvIFN0cmluZ1Byb3RvdHlwZTo6aW5mbyA9
IHsgIlN0cmluZyIsICZTdHJpbmdJbnN0YW5jZTo6aW5mbywgJnN0cmkKIEBlbmQKICovCiAvLyBF
Q01BIDE1LjUuNAotU3RyaW5nUHJvdG90eXBlOjpTdHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjLCBPYmplY3RQcm90b3R5cGUqIG9ialByb3RvKQotICA6IFN0cmluZ0luc3RhbmNlKG9ialBy
b3RvKQorU3RyaW5nUHJvdG90eXBlOjpTdHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBP
YmplY3RQcm90b3R5cGUqIG9ialByb3RvLCBKU0NlbGwqIGVtcHR5U3RyaW5nKQorICA6IFN0cmlu
Z0luc3RhbmNlKG9ialByb3RvLCBlbXB0eVN0cmluZykKIHsKICAgLy8gVGhlIGNvbnN0cnVjdG9y
IHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIFN0cmluZ09iamVjdEltcCBoYXMgYmVlbiBidWls
dAogICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKQEAgLTEwMTYsMTIgKzEwMTAsMTIg
QEAgYm9vbCBTdHJpbmdPYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdAogfQog
CiAvLyBFQ01BIDE1LjUuMgotSlNPYmplY3QgKlN0cmluZ09iamVjdEltcDo6Y29uc3RydWN0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKK0pTT2JqZWN0KiBTdHJpbmdPYmplY3RJ
bXA6OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gIEpT
T2JqZWN0ICpwcm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluU3RyaW5n
UHJvdG90eXBlKCk7CisgIEpTT2JqZWN0KiBwcm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRl
cigpLT5idWlsdGluU3RyaW5nUHJvdG90eXBlKCk7CiAgIGlmIChhcmdzLnNpemUoKSA9PSAwKQot
ICAgIHJldHVybiBuZXcgU3RyaW5nSW5zdGFuY2UocHJvdG8pOwotICByZXR1cm4gbmV3IFN0cmlu
Z0luc3RhbmNlKHByb3RvLCBhcmdzWzBdLT50b1N0cmluZyhleGVjKSk7CisgICAgcmV0dXJuIG5l
dyBTdHJpbmdJbnN0YW5jZShwcm90bywganNTdHJpbmcoKSk7CisgIHJldHVybiBuZXcgU3RyaW5n
SW5zdGFuY2UocHJvdG8sIGpzU3RyaW5nKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAK
IC8vIEVDTUEgMTUuNS4xCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29i
amVjdC5oIGIvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAppbmRleCBhZDNjNTJh
Li5jNWY4OGM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5o
CisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgKQEAgLTMxLDkgKzMxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgU3RyaW5nSW5zdGFuY2UgOiBwdWJsaWMgSlNX
cmFwcGVyT2JqZWN0IHsKICAgcHVibGljOgotICAgIFN0cmluZ0luc3RhbmNlKEpTT2JqZWN0ICpw
cm90byk7Ci0gICAgU3RyaW5nSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvLCBTdHJpbmdJbXAqKTsK
LSAgICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCAqcHJvdG8sIGNvbnN0IFVTdHJpbmcmKTsKKyAg
ICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCogcHJvdG8sIEpTQ2VsbCopOwogCiAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNDYsNiAr
NDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CiAKICAgICBTdHJpbmdJbXAqIGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxTdHJpbmdJbXAqPihKU1dyYXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWUoKSk7fQorICAg
IHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjayk7CiAKICAgcHJpdmF0
ZToKICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCwgUHJvcGVydHlTbG90Jik7CkBAIC01Nyw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAv
LyBXZWJDb3JlIHVzZXMgdGhpcyB0byBtYWtlIHN0eWxlLmZpbHRlciB1bmRldGVjdGFibGUKICAg
Y2xhc3MgU3RyaW5nSW5zdGFuY2VUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA6IHB1YmxpYyBT
dHJpbmdJbnN0YW5jZSB7CiAgIHB1YmxpYzoKLSAgICAgIFN0cmluZ0luc3RhbmNlVGhhdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQoSlNPYmplY3QqIHByb3RvLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcp
CisgICAgICBTdHJpbmdJbnN0YW5jZVRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTT2JqZWN0
KiBwcm90bywgSlNDZWxsKiBzdHJpbmcpCiAgICAgICAgICAgOiBTdHJpbmdJbnN0YW5jZShwcm90
bywgc3RyaW5nKSB7IH0KICAgICAgIHZpcnR1YWwgYm9vbCBtYXNxdWVyYWRlQXNVbmRlZmluZWQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC03MSw4ICs3MCw5IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgKi8KICAgY2xhc3MgU3RyaW5nUHJvdG90eXBlIDogcHVibGljIFN0cmlu
Z0luc3RhbmNlIHsKICAgcHVibGljOgotICAgIFN0cmluZ1Byb3RvdHlwZShFeGVjU3RhdGUgKmV4
ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFByb3RvdHlwZSAqb2JqUHJvdG8pOwor
ICAgIC8vIHdlIG5lZWQgdGhlIGVtcHR5IHN0cmluZyBwYXNzZWQgZnJvbSB0aGUgY2FsbGVyIHRv
IGF2b2lkIEdDIGFsbG9jYXRpbmcgYmVmb3JlIAorICAgIC8vIGJhc2UgY2xhc3MgY29uc3RydWN0
aW9uCisgICAgU3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE9iamVjdFByb3RvdHlwZSosIEpT
Q2VsbCogZW1wdHlTdHJpbmcgPSBqc1N0cmluZygpKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
Jik7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmggYi9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUu
aAppbmRleCA1ZWJiNTc1Li5iODI2YTQwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMv
dmFsdWUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaApAQCAtMzMsNiArMzMsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xh
c3MgSlNDZWxsOworY2xhc3MgTWFya1N0YWNrOwogCiBzdHJ1Y3QgQ2xhc3NJbmZvOwogCkBAIC00
Nyw2ICs0OCw3IEBAIHN0cnVjdCBDbGFzc0luZm87CiBjbGFzcyBKU1ZhbHVlIDogTm9uY29weWFi
bGUgewogICAgIGZyaWVuZCBjbGFzcyBKU0NlbGw7IC8vIHNvIGl0IGNhbiBkZXJpdmUgZnJvbSB0
aGlzIGNsYXNzCiAgICAgZnJpZW5kIGNsYXNzIENvbGxlY3RvcjsgLy8gc28gaXQgY2FuIGNhbGwg
YXNDZWxsKCkKKyAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOyAvLyBzbyBpdCBjYW4gY2FsbCBh
c0NlbGwoKQogCiBwcml2YXRlOgogICAgIEpTVmFsdWUoKTsKQEAgLTEwNSw3ICsxMDcsNyBAQCBw
dWJsaWM6CiAgICAgZmxvYXQgdG9GbG9hdChFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgIC8vIEdh
cmJhZ2UgY29sbGVjdGlvbi4KLSAgICB2b2lkIG1hcmsoKTsKKyAgICB2b2lkIG1hcmtDaGlsZHJl
bihNYXJrU3RhY2smKTsKICAgICBib29sIG1hcmtlZCgpIGNvbnN0OwogCiAgICAgc3RhdGljIGlu
dDMyX3QgdG9JbnQzMlNsb3dDYXNlKGRvdWJsZSwgYm9vbCYgb2spOwpAQCAtMTY0LDcgKzE2Niw3
IEBAIHB1YmxpYzoKIAogICAgIC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KICAgICB2b2lkICpvcGVy
YXRvciBuZXcoc2l6ZV90KTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgIHZpcnR1YWwg
dm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsK
IH07CiAKQEAgLTI5MCw5ICsyOTIsOCBAQCBpbmxpbmUgYm9vbCBKU0NlbGw6Om1hcmtlZCgpIGNv
bnN0CiAgICAgcmV0dXJuIENvbGxlY3Rvcjo6aXNDZWxsTWFya2VkKHRoaXMpOwogfQogCi1pbmxp
bmUgdm9pZCBKU0NlbGw6Om1hcmsoKQoraW5saW5lIHZvaWQgSlNDZWxsOjptYXJrQ2hpbGRyZW4o
TWFya1N0YWNrJikKIHsKLSAgICByZXR1cm4gQ29sbGVjdG9yOjptYXJrQ2VsbCh0aGlzKTsKIH0K
IAogQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpCkBAIC00MDYsMTAgKzQw
NywxMCBAQCBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRUcnVuY2F0ZWRVSW50MzIodWludDMyX3Qm
IHYpIGNvbnN0CiAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSA/IEpT
SW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIodGhpcywgdikgOiBhc0NlbGwoKS0+Z2V0VHJ1
bmNhdGVkVUludDMyKHYpOwogfQogCi1pbmxpbmUgdm9pZCBKU1ZhbHVlOjptYXJrKCkKK2lubGlu
ZSB2b2lkIEpTVmFsdWU6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKQogewotICAgIEFT
U0VSVCghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHRoaXMpKTsgLy8gY2FsbGVycyBzaG91bGQg
Y2hlY2sgIW1hcmtlZCgpIGJlZm9yZSBjYWxsaW5nIG1hcmsoKQotICAgIGFzQ2VsbCgpLT5tYXJr
KCk7CisgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykpOyAvLyBjYWxs
ZXJzIHNob3VsZCBjaGVjayAhbWFya2VkKCkgYmVmb3JlIGNhbGxpbmcgbWFya0NoaWxkcmVuKCkK
KyAgICBhc0NlbGwoKS0+bWFya0NoaWxkcmVuKHN0YWNrKTsKIH0KIAogaW5saW5lIGJvb2wgSlNW
YWx1ZTo6bWFya2VkKCkgY29uc3QKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxv
ZyBiL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwppbmRleCBjODljMzA5Li41MWY4Y2NmIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMTEtMjEgIE1hY2llaiBTdGFjaG93aWFrICA8
bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3ZWQuCisKKyAgICAgICAgRml4dXBz
IGZvciBKYXZhU2NyaXB0Q29yZSBtYXJrIHN0YWNrLgorCisgICAgICAgICogSlNPYmplY3QuY3Bw
OgorICAgICAgICAoSlNVc2VyT2JqZWN0OjpNYXJrKToKKyAgICAgICAgKiBKU09iamVjdC5oOgor
ICAgICAgICAqIEpTVmFsdWVXcmFwcGVyLmNwcDoKKyAgICAgICAgKEpTVmFsdWVXcmFwcGVyOjpK
U09iamVjdE1hcmspOgorICAgICAgICAqIEpTVmFsdWVXcmFwcGVyLmg6CisgICAgICAgICogVXNl
ck9iamVjdEltcC5jcHA6CisgICAgICAgICogVXNlck9iamVjdEltcC5oOgorCiAyMDA3LTExLTIx
ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
Yy4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0pTT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRH
bHVlL0pTT2JqZWN0LmNwcAppbmRleCAxMjkwY2IzLi5kNDU4OTM2IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0R2x1ZS9KU09iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuY3Bw
CkBAIC0xMjIsMTEgKzEyMiwxMSBAQCBVSW50OCBKU1VzZXJPYmplY3Q6OkVxdWFsKEpTQmFzZSog
b3RoZXIpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBKU1VzZXJPYmplY3Q6Ok1hcmso
KQordm9pZCBKU1VzZXJPYmplY3Q6Ok1hcmsoS0pTOjpNYXJrU3RhY2smIHN0YWNrKQogewogICAg
IGlmIChmTWFya1Byb2MpCiAgICAgewotICAgICAgICBmTWFya1Byb2MoZkRhdGEpOworICAgICAg
ICBmTWFya1Byb2Moc3RhY2ssIGZEYXRhKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRHbHVlL0pTT2JqZWN0LmggYi9KYXZhU2NyaXB0R2x1ZS9KU09iamVjdC5oCmluZGV4IGYw
YmUyMmUuLjNkNGIzOTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRHbHVlL0pTT2JqZWN0LmgKKysr
IGIvSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuaApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUg
IkpTQmFzZS5oIgogI2luY2x1ZGUgIkpTVXRpbHMuaCIKIAotdHlwZWRlZiB2b2lkICgqSlNPYmpl
Y3RNYXJrUHJvY1B0cikodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpKU09iamVjdE1hcmtQ
cm9jUHRyKShNYXJrU3RhY2smLCB2b2lkICpkYXRhKTsKIEpTT2JqZWN0UmVmIEpTT2JqZWN0Q3Jl
YXRlSW50ZXJuYWwodm9pZCAqZGF0YSwgSlNPYmplY3RDYWxsQmFja3NQdHIgY2FsbEJhY2tzLCBK
U09iamVjdE1hcmtQcm9jUHRyIG1hcmtQcm9jLCBpbnQgZGF0YVR5cGUpOwogCiBjbGFzcyBKU1Vz
ZXJPYmplY3QgOiBwdWJsaWMgSlNCYXNlIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgSlNVc2Vy
T2JqZWN0IDogcHVibGljIEpTQmFzZSB7CiAgICAgICAgIENGVHlwZVJlZiBDb3B5Q0ZWYWx1ZSgp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFVJbnQ4IEVxdWFsKEpTQmFzZSogb3RoZXIpOwogICAg
ICAgICB2b2lkICpHZXREYXRhKCk7Ci0gICAgICAgIHZvaWQgTWFyaygpOworICAgICAgICB2b2lk
IE1hcmsoS0pTOjpNYXJrU3RhY2smKTsKIAogICAgICAgICAgICAgICAgIGludCBEYXRhVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGZEYXRhVHlwZTsgfQogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAgYi9KYXZhU2NyaXB0R2x1ZS9KU1ZhbHVl
V3JhcHBlci5jcHAKaW5kZXggOWY4ZmEzZS4uZTFkNTkyNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCisrKyBiL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFw
cGVyLmNwcApAQCAtMjMwLDExICsyMzAsMTEgQEAgQ0ZUeXBlUmVmIEpTVmFsdWVXcmFwcGVyOjpK
U09iamVjdENvcHlDRlZhbHVlKHZvaWQgKmRhdGEpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RNYXJrKHZvaWQgKmRhdGEpCit2b2lkIEpTVmFs
dWVXcmFwcGVyOjpKU09iamVjdE1hcmsoTWFya1N0YWNrJiBzdGFjaywgdm9pZCAqZGF0YSkKIHsK
ICAgICBKU1ZhbHVlV3JhcHBlciogcHRyID0gKEpTVmFsdWVXcmFwcGVyKilkYXRhOwogICAgIGlm
IChwdHIpCiAgICAgewotICAgICAgICBwdHItPmZWYWx1ZS0+bWFyaygpOworICAgICAgICBwdHIt
PmZWYWx1ZS0+bWFya0NoaWxkcmVuKHN0YWNrKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5oIGIvSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBw
ZXIuaAppbmRleCA1YzMzMjk3Li5hOTBmMjYxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0R2x1ZS9K
U1ZhbHVlV3JhcHBlci5oCisrKyBiL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmgKQEAg
LTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBKU09iamVjdFNldFByb3Bl
cnR5KHZvaWQgKmRhdGEsIENGU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNPYmplY3RSZWYganNW
YWx1ZSk7CiAgICAgc3RhdGljIEpTT2JqZWN0UmVmIEpTT2JqZWN0Q2FsbEZ1bmN0aW9uKHZvaWQg
KmRhdGEsIEpTT2JqZWN0UmVmIHRoaXNPYmosIENGQXJyYXlSZWYgYXJncyk7CiAgICAgc3RhdGlj
IENGVHlwZVJlZiBKU09iamVjdENvcHlDRlZhbHVlKHZvaWQgKmRhdGEpOwotICAgIHN0YXRpYyB2
b2lkIEpTT2JqZWN0TWFyayh2b2lkICpkYXRhKTsKKyAgICBzdGF0aWMgdm9pZCBKU09iamVjdE1h
cmsoS0pTOjpNYXJrU3RhY2smLCB2b2lkICpkYXRhKTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAgYi9KYXZhU2NyaXB0R2x1ZS9Vc2Vy
T2JqZWN0SW1wLmNwcAppbmRleCAyMGMwNmMzLi4yNTE3ZTUyIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcAorKysgYi9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0
SW1wLmNwcApAQCAtNDA2LDkgKzQwNiw5IEBAIFVTdHJpbmcgVXNlck9iamVjdEltcDo6dG9TdHJp
bmcoRXhlY1N0YXRlICpleGVjKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
VXNlck9iamVjdEltcDo6bWFyaygpCit2b2lkIFVzZXJPYmplY3RJbXA6Om1hcmtDaGlsZHJlbihN
YXJrU3RhY2smIHN0YWNrKQogewotICAgIEpTT2JqZWN0OjptYXJrKCk7CisgICAgSlNPYmplY3Q6
Om1hcmtDaGlsZHJlbihzdGFjayk7CiAgICAgaWYgKGZKU1VzZXJPYmplY3QpCi0gICAgICAgIGZK
U1VzZXJPYmplY3QtPk1hcmsoKTsKKyAgICAgICAgZkpTVXNlck9iamVjdC0+TWFyayhzdGFjayk7
CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmggYi9KYXZhU2Ny
aXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgKaW5kZXggNTRlNWFiNi4uMGI5OTUwOCAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCisrKyBiL0phdmFTY3JpcHRHbHVlL1Vz
ZXJPYmplY3RJbXAuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBkb3Vi
bGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcg
dG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBtYXJr
KCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKTsKIAog
ICAgIEpTVXNlck9iamVjdCAqR2V0SlNVc2VyT2JqZWN0KCkgY29uc3Q7CiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGFiZGU3NWIuLjhkNmVhYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0xMS0yMSAg
TWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdl
ZC4KKyAgICAgICAgCisgICAgICAgIC0gVGVzdCBjYXNlcyBmb3IgIlN0YWNrIG92ZXJmbG93IGNy
YXNoIGluIEphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0b3IgbWFyayBwYXNzIgorICAgICAgICBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIxNgorCisgICAgICAgIEkg
aGF2ZSBmaXhlZCB0aGlzIHdpdGggdGhlIG1hcmsgc3RhY2sgd29yay4KKyAgICAgICAgCisgICAg
ICAgICogZmFzdC9qcy9nYy1icmVhZHRoLTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2pzL2djLWJyZWFkdGgtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2dj
LWJyZWFkdGgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2djLWJyZWFk
dGguaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9nYy1kZXB0aC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvZ2MtZGVwdGguaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9qcy9yZXNvdXJjZXMvZ2MtYnJlYWR0aC0yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL3Jlc291cmNlcy9nYy1icmVhZHRoLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L3Jlc291cmNlcy9nYy1kZXB0aC5qczogQWRkZWQuCisKIDIwMDctMTEtMjYgIEZlbmcgUWlhbiA8
aWFuLmVuZy53ZWJraXRAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLWJyZWFkdGgtMi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLWJyZWFkdGgtMi1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1MTBkNwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtYnJlYWR0aC0yLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDkgQEAKK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgd2lkZSBvYmplY3Qgc3RydWN0dXJl
cyBkb24ndCBsZWFkIHRvIEdDIGNyYXNoZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLTIuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvanMvZ2MtYnJlYWR0aC0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWQyZTUwMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
anMvZ2MtYnJlYWR0aC0yLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9nYy1icmVhZHRoLTIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtYnJlYWR0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1MTBkNwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvZ2MtYnJlYWR0aC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBA
CitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IHdpZGUgb2JqZWN0IHN0cnVjdHVyZXMgZG9uJ3Qg
bGVhZCB0byBHQyBjcmFzaGVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtYnJlYWR0aC5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9qcy9nYy1icmVhZHRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MGFkMGM2OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtYnJlYWR0
aC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZ2MtYnJlYWR0aC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2pzL2djLWRlcHRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvanMvZ2MtZGVwdGgtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjY0MDNjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL2dj
LWRlcHRoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1RoaXMgdGVzdCBtYWtlcyBzdXJl
IHRoYXQgZGVlcCBvYmplY3Qgc3RydWN0dXJlcyBkb24ndCBsZWFkIHRvIEdDIGNyYXNoZXMuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9q
cy9nYy1kZXB0aC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1kZXB0aC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzRiODYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLWRlcHRoLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9nYy1kZXB0aC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9n
Yy1icmVhZHRoLTIuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9nYy1icmVhZHRo
LTIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiNGM0ZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2djLWJyZWFkdGgtMi5q
cwpAQCAtMCwwICsxLDEzIEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhh
dCB3aWRlIG9iamVjdCBzdHJ1Y3R1cmVzIGRvbid0IGxlYWQgdG8gR0MgY3Jhc2hlcy4iKQorCit2
YXIgYSA9IHt9OworZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDA7IGkrKykgeworICAgIGFbaV0g
PSB7fTsKK30KKwordmFyIGIgPSAiIjsKK2ZvciAodmFyIGkgPSAwOyBpIDwgODAwMDA7IGkrKykg
eworICAgIGIgKz0gImIiOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2djLWJyZWFkdGguanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9nYy1icmVhZHRoLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZGQ4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9nYy1icmVhZHRoLmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Rl
c2NyaXB0aW9uKCJUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IHdpZGUgb2JqZWN0IHN0cnVjdHVy
ZXMgZG9uJ3QgbGVhZCB0byBHQyBjcmFzaGVzLiIpCisKK3ZhciBhID0gW107Citmb3IgKHZhciBp
ID0gMDsgaSA8IDIwMDAwMDsgaSsrKSB7CisgICAgYVtpXSA9IFtdOworfQorCit2YXIgYiA9ICIi
OworZm9yICh2YXIgaSA9IDA7IGkgPCA4MDAwMDsgaSsrKSB7CisgICAgYiArPSAiYiI7Cit9CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9qcy9yZXNvdXJjZXMvZ2MtZGVwdGguanMgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291
cmNlcy9nYy1kZXB0aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDI1
YWNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvZ2Mt
ZGVwdGguanMKQEAgLTAsMCArMSwxMyBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBtYWtlcyBz
dXJlIHRoYXQgZGVlcCBvYmplY3Qgc3RydWN0dXJlcyBkb24ndCBsZWFkIHRvIEdDIGNyYXNoZXMu
IikKKwordmFyIGEgPSBbXTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDAwOyBpKyspIHsKKyAg
ICBhID0gW2FdOworfQorCit2YXIgYiA9ICIiOworZm9yICh2YXIgaSA9IDA7IGkgPCA4MDAwMDsg
aSsrKSB7CisgICAgYiArPSAiYiI7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAxMjVmYzliLi44YWFkYTI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDA3LTExLTIyICBNYWNpZWogU3Rh
Y2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgTm90IHJldmlld2VkLgorCisgICAg
ICAgIENoYW5nZSB0aGluZ3MgYXJvdW5kIHNvIEpTV3JhcHBlck9iamVjdCB0YWtlcyB0aGUgaW50
ZXJuYWwgdmFsdWUKKyAgICAgICAgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudCwgaW5zdGVhZCBv
ZiBpbml0aWFsbHkgZmlsbGluZyBpbgorICAgICAgICBqc1VuZGVmaW5lZCgpLiBQbHVzIGNvcnJl
c3BvbmRpbmcgY2xlYW51cC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNs
YXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRp
b246Om5hbWVHZXR0ZXIpOgorCisyMDA3LTExLTIxICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0Bh
cHBsZS5jb20+CisKKyAgICAgICAgTm90IHJldmlld2VkLgorCisgICAgICAgIEltcGxlbWVudCBt
YXJrIHN0YWNrLiBUaGlzIHZlcnNpb24gaXMgbm90IHN1aXRhYmxlIGZvciBwcmltZSB0aW1lIGJl
Y2F1c2UgaXQgbWFrZXMgYQorICAgICAgICBodWdlIGFsbG9jYXRpb24gb24gZXZlcnkgY29sbGVj
dCwgYW5kIHBvdGVudGlhbGx5IG1ha2VzIG1hcmtpbmcgb2YgZGV0YWNoZWQgc3VidHJlZXMKKyAg
ICAgICAgc2xvdy4gQnV0IGl0IGlzIGEgLjIlIC0gLjQlIHNwZWVkdXAgZXZlbiB3aXRob3V0IG11
Y2ggdHdlYWtpbmcuCisKKyAgICAgICAgSSByZXBsYWNlZCBtYXJrKCkgbWV0aG9kcyB3aXRoIG1h
cmtDaGlsZHJlbigpIGFzIHVzdWFsLiBPbmUKKyAgICAgICAgb3B0aW1pemF0aW9uIHRoYXQgaXMg
bG9zdCBpcyBhdm9pZGluZyB3YWxraW5nIGRldGFjaGVkIERPTQorICAgICAgICBzdWJ0cmVlcyBt
b3JlIHRoYW4gb25jZSB0byBtYXJrIHRoZW07IHNpbmNlIG1hcmtpbmcgaXMgbm90CisgICAgICAg
IHJlY3Vyc2l2ZSB0aGVyZSdzIG5vIG9idmlvdXMgd2F5IHRvIGJyYWNrZXQgb3BlcmF0aW9uIG9u
IHRoZSB0cmVlCisgICAgICAgIGFueSBtb3JlLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3VtZW50OjptYXJrQ2hp
bGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU05vZGU6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjptYXJrQ2hpbGRyZW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVX
YWxrZXI6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdC5jcHA6CisgICAgICAgIChLSlM6OkpTWE1MSHR0cFJlcXVlc3Q6Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5oOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcDoKKyAgICAgICAgKEtKUzo6U2NyaXB0SW50ZXJwcmV0
ZXI6Om1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
YmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6Om1hcmtDaGlsZHJlbik6Cisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L2tqc193aW5kb3cuY3BwOgorICAgICAgICAoS0pTOjpXaW5kb3c6Om1hcmtDaGlsZHJlbik6Cisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAg
ICogZG9tL05vZGVGaWx0ZXIuaDoKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5o
OgorCiAyMDA3LTExLTI2ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAppbmRleCBmYTQ3ZTk3Li40MDVmMTg4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgSlNWYWx1ZSogSlNDU1NTdHlsZURlY2xhcmF0aW9u
OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2IKIAogICAg
IC8vIE1ha2UgdGhlIFNWRyAnZmlsdGVyJyBhdHRyaWJ1dGUgdW5kZXRlY3RhYmxlLCB0byBhdm9p
ZCBjb25mdXNpb24gd2l0aCB0aGUgSUUgJ2ZpbHRlcicgYXR0cmlidXRlLgogICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gImZpbHRlciIpCi0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nSW5zdGFuY2VU
aGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVp
bHRpblN0cmluZ1Byb3RvdHlwZSgpLCB0aGlzT2JqLT5pbXBsKCktPmdldFByb3BlcnR5VmFsdWUo
cHJvcCkpOworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0luc3RhbmNlVGhhdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5TdHJpbmdQcm90
b3R5cGUoKSwganNTdHJpbmcodGhpc09iai0+aW1wbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3Ap
KSk7CiAKICAgICByZXR1cm4ganNTdHJpbmcodGhpc09iai0+aW1wbCgpLT5nZXRQcm9wZXJ0eVZh
bHVlKHByb3ApKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVu
dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCmlu
ZGV4IDIwOTU3ZjAuLjQyM2Q0NGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcApAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEtKUzsKIAotdm9pZCBKU0RvY3VtZW50OjptYXJrKCkKK3ZvaWQgSlNEb2N1bWVu
dDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spCiB7Ci0gICAgRE9NT2JqZWN0OjptYXJr
KCk7Ci0gICAgU2NyaXB0SW50ZXJwcmV0ZXI6Om1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4oaW1wbCgpKSk7CisgICAgRE9NT2JqZWN0OjptYXJrQ2hpbGRyZW4o
c3RhY2spOworICAgIFNjcmlwdEludGVycHJldGVyOjptYXJrRE9NTm9kZXNGb3JEb2N1bWVudChz
dGFjaywgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpbXBsKCkpKTsKIH0KIAogSlNWYWx1ZSogSlNE
b2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiBleGVjKSBjb25zdApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwCmluZGV4IDZhNWNlMWMuLmYyY2E2MTQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUN1c3RvbS5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCBLSlM6OkpTVmFsdWUqIEpTTm9k
ZTo6YXBwZW5kQ2hpbGQoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtKUzo6TGlzdCYgYXJn
cykKICAgICByZXR1cm4gS0pTOjpqc051bGwoKTsKIH0KIAotdm9pZCBKU05vZGU6Om1hcmsoKQor
dm9pZCBKU05vZGU6Om1hcmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYgc3RhY2spCiB7CiAgICAg
QVNTRVJUKCFtYXJrZWQoKSk7CiAKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIEpTTm9kZTo6bWFy
aygpCiAgICAgLy8gTm9kZXMgaW4gdGhlIGRvY3VtZW50IGFyZSBrZXB0IGFsaXZlIGJ5IFNjcmlw
dEludGVycHJldGVyOjptYXJrLAogICAgIC8vIHNvIHdlIGhhdmUgbm8gc3BlY2lhbCByZXNwb25z
aWJpbGl0aWVzIGFuZCBjYW4ganVzdCBjYWxsIHRoZSBiYXNlIGNsYXNzIGhlcmUuCiAgICAgaWYg
KG5vZGUtPmluRG9jdW1lbnQoKSkgewotICAgICAgICBET01PYmplY3Q6Om1hcmsoKTsKKyAgICAg
ICAgRE9NT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMjMsMzEgKzEyMywxMiBAQCB2b2lkIEpTTm9kZTo6bWFyaygpCiAgICAgZm9yIChO
b2RlKiBjdXJyZW50ID0gbV9pbXBsLmdldCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
cGFyZW50Tm9kZSgpKQogICAgICAgICByb290ID0gY3VycmVudDsKIAotICAgIC8vIElmIHdlJ3Jl
IGFscmVhZHkgbWFya2luZyB0aGlzIHRyZWUsIHRoZW4gd2UgY2FuIHNpbXBseSBtYXJrIHRoaXMg
d3JhcHBlcgotICAgIC8vIGJ5IGNhbGxpbmcgdGhlIGJhc2UgY2xhc3M7IG91ciBjYWxsZXIgaXMg
aXRlcmF0aW5nIHRoZSB0cmVlLgotICAgIGlmIChyb290LT5tX2luU3VidHJlZU1hcmspIHsKLSAg
ICAgICAgRE9NT2JqZWN0OjptYXJrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8g
TWFyayB0aGUgd2hvbGUgdHJlZQorICAgIGZvciAoTm9kZSogbm9kZVRvTWFyayA9IHJvb3Q7IG5v
ZGVUb01hcms7IG5vZGVUb01hcmsgPSBub2RlVG9NYXJrLT50cmF2ZXJzZU5leHROb2RlKCkpCisg
ICAgICAgIGlmIChKU05vZGUqIHdyYXBwZXIgPSBLSlM6OlNjcmlwdEludGVycHJldGVyOjpnZXRE
T01Ob2RlRm9yRG9jdW1lbnQobV9pbXBsLT5kb2N1bWVudCgpLCBub2RlVG9NYXJrKSkKKyAgICAg
ICAgICAgIHN0YWNrLnB1c2god3JhcHBlcik7CiAKLSAgICAvLyBNYXJrIHRoZSB3aG9sZSB0cmVl
OyB1c2UgdGhlIGdsb2JhbCBzZXQgb2Ygcm9vdHMgdG8gYXZvaWQgcmVlbnRlcmluZy4KLSAgICBy
b290LT5tX2luU3VidHJlZU1hcmsgPSB0cnVlOwotICAgIGZvciAoTm9kZSogbm9kZVRvTWFyayA9
IHJvb3Q7IG5vZGVUb01hcms7IG5vZGVUb01hcmsgPSBub2RlVG9NYXJrLT50cmF2ZXJzZU5leHRO
b2RlKCkpIHsKLSAgICAgICAgSlNOb2RlKiB3cmFwcGVyID0gS0pTOjpTY3JpcHRJbnRlcnByZXRl
cjo6Z2V0RE9NTm9kZUZvckRvY3VtZW50KG1faW1wbC0+ZG9jdW1lbnQoKSwgbm9kZVRvTWFyayk7
Ci0gICAgICAgIGlmICh3cmFwcGVyKSB7Ci0gICAgICAgICAgICBpZiAoIXdyYXBwZXItPm1hcmtl
ZCgpKQotICAgICAgICAgICAgICAgIHdyYXBwZXItPm1hcmsoKTsKLSAgICAgICAgfSBlbHNlIGlm
IChub2RlVG9NYXJrID09IG5vZGUpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ug
d2hlcmUgdGhlIG1hcCBmcm9tIHRoZSBkb2N1bWVudCB0byB3cmFwcGVycyBoYXMKLSAgICAgICAg
ICAgIC8vIGJlZW4gY2xlYXJlZCBvdXQsIGJ1dCBhIHdyYXBwZXIgaXMgYmVpbmcgbWFya2VkLiBG
b3Igbm93LCB3ZSdsbAotICAgICAgICAgICAgLy8gbGV0IHRoZSByZXN0IG9mIHRoZSB0cmVlIG9m
IHdyYXBwZXJzIGdldCBjb2xsZWN0ZWQsIGJlY2F1c2Ugd2UgaGF2ZQotICAgICAgICAgICAgLy8g
bm8gZ29vZCB3YXkgb2YgZmluZGluZyB0aGVtLiBMYXRlciB3ZSBzaG91bGQgdGVzdCBiZWhhdmlv
ciBvZiBvdGhlcgotICAgICAgICAgICAgLy8gYnJvd3NlcnMgYW5kIHNlZSBpZiB3ZSBuZWVkIHRv
IHByZXNlcnZlIG90aGVyIHdyYXBwZXJzIGluIHRoaXMgY2FzZS4KLSAgICAgICAgICAgIGlmICgh
bWFya2VkKCkpCi0gICAgICAgICAgICAgICAgbWFyaygpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJvb3QtPm1faW5TdWJ0cmVlTWFyayA9IGZhbHNlOworICAgIERPTU9iamVjdDo6bWFya0NoaWxk
cmVuKHN0YWNrKTsKIAogICAgIC8vIERvdWJsZSBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGVuZGVk
IHVwIG1hcmtlZC4gVGhpcyBhc3NlcnQgY2F1Z2h0IHByb2JsZW1zIGluIHRoZSBwYXN0LgogICAg
IEFTU0VSVChtYXJrZWQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKaW5kZXggYTQ4YTYxZS4uMmEwZTJlMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcApAQCAtMzQsOSArMzQsOSBAQCBKU05vZGVG
aWx0ZXJDb25kaXRpb246OkpTTm9kZUZpbHRlckNvbmRpdGlvbihLSlM6OkpTT2JqZWN0KiBmaWx0
ZXIpCiB7CiB9CiAKLXZvaWQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjptYXJrKCkKK3ZvaWQgSlNO
b2RlRmlsdGVyQ29uZGl0aW9uOjptYXJrQ2hpbGRyZW4oS0pTOjpNYXJrU3RhY2smIHN0YWNrKQog
ewotICAgIG1fZmlsdGVyLT5tYXJrKCk7CisgICAgc3RhY2sucHVzaChtX2ZpbHRlcik7CiB9CiAK
IHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBmaWx0ZXJOb2Rl
KSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKaW5k
ZXggYmQxNzJiOS4uMjZjMDhmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDb25kaXRpb24uaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5oCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihLSlM6OkpTT2JqZWN0KiBmaWx0
ZXIpOwogICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoTm9kZSopIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxk
cmVuKEtKUzo6TWFya1N0YWNrJik7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEtKUzo6SlNP
YmplY3QqIG1fZmlsdGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20u
Y3BwCmluZGV4IDI1ODA1OWMuLjA0NDgxZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUZpbHRlckN1c3RvbS5jcHAKQEAgLTMyLDEwICszMiwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNOb2RlRmlsdGVyOjptYXJrKCkKKyAgICB2b2lkIEpTTm9kZUZpbHRlcjo6
bWFya0NoaWxkcmVuKEtKUzo6TWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBpbXBsKCktPm1hcmso
KTsKLSAgICBET01PYmplY3Q6Om1hcmsoKTsKKyAgICBpbXBsKCktPm1hcmtDaGlsZHJlbihzdGFj
ayk7CisgICAgRE9NT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwogfQogCiBOb2RlRmlsdGVy
KiB0b05vZGVGaWx0ZXIoS0pTOjpKU1ZhbHVlKiB2YWwpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCmluZGV4IGRlYjBmZmUuLjE4OWU3MGMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCkBAIC0yNCwxMiArMjQs
MTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTm9kZUl0ZXJhdG9yOjptYXJr
KCkKK3ZvaWQgSlNOb2RlSXRlcmF0b3I6Om1hcmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYgc3Rh
Y2spCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IG1faW1wbC0+ZmlsdGVyKCkpCi0g
ICAgICAgIGZpbHRlci0+bWFyaygpOworICAgICAgICBmaWx0ZXItPm1hcmtDaGlsZHJlbihzdGFj
ayk7CiAgICAgCi0gICAgRE9NT2JqZWN0OjptYXJrKCk7CisgICAgRE9NT2JqZWN0OjptYXJrQ2hp
bGRyZW4oc3RhY2spOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VHJlZVdhbGtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1
c3RvbS5jcHAKaW5kZXggYzczZmU0MC4uNDdiNTE4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcApAQCAtMjQsMTIgKzI0LDEyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLXZvaWQgSlNUcmVlV2Fsa2VyOjptYXJrKCkKK3ZvaWQgSlNUcmVlV2Fs
a2VyOjptYXJrQ2hpbGRyZW4oS0pTOjpNYXJrU3RhY2smIHN0YWNrKQogewogICAgIGlmIChOb2Rl
RmlsdGVyKiBmaWx0ZXIgPSBtX2ltcGwtPmZpbHRlcigpKQotICAgICAgICBmaWx0ZXItPm1hcmso
KTsKKyAgICAgICAgZmlsdGVyLT5tYXJrQ2hpbGRyZW4oc3RhY2spOwogICAgIAotICAgIERPTU9i
amVjdDo6bWFyaygpOworICAgIERPTU9iamVjdDo6bWFya0NoaWxkcmVuKHN0YWNrKTsKIH0KICAg
ICAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDUwOTg3
ODUuLmQ3MzQ1ZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcApA
QCAtMTcwLDE4ICsxNzAsMTggQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlKiB2YWwKICAgICB9CiB9CiAK
LXZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6bWFyaygpCit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6Om1h
cmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYgc3RhY2spCiB7Ci0gICAgRE9NT2JqZWN0OjptYXJr
KCk7CisgICAgRE9NT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwogCiAgICAgSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIqIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uUmVhZHlTdGF0ZUNoYW5n
ZUxpc3RlbmVyKCkpOwogICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBvbkxvYWRMaXN0
ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5v
bkxvYWRMaXN0ZW5lcigpKTsKIAogICAgIGlmIChvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcikK
LSAgICAgICAgb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXItPm1hcmsoKTsKKyAgICAgICAgb25S
ZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXItPm1hcmtDaGlsZHJlbihzdGFjayk7CiAKICAgICBpZiAo
b25Mb2FkTGlzdGVuZXIpCi0gICAgICAgIG9uTG9hZExpc3RlbmVyLT5tYXJrKCk7CisgICAgICAg
IG9uTG9hZExpc3RlbmVyLT5tYXJrQ2hpbGRyZW4oc3RhY2spOwogICAgIAogICAgIHR5cGVkZWYg
WE1MSHR0cFJlcXVlc3Q6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFwOwogICAg
IHR5cGVkZWYgWE1MSHR0cFJlcXVlc3Q6Okxpc3RlbmVyVmVjdG9yIExpc3RlbmVyVmVjdG9yOwpA
QCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6bWFyaygpCiAgICAgZm9y
IChFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlzdGVuZXJzLmJl
Z2luKCk7IG1hcEl0ZXIgIT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRlcikgewogICAg
ICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFwSXRlci0+c2Vj
b25kLmJlZ2luKCk7IHZlY0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyArK3ZlY0l0ZXIp
IHsKICAgICAgICAgICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4odmVjSXRlci0+Z2V0KCkpOwot
ICAgICAgICAgICAgbGlzdGVuZXItPm1hcmsoKTsKKyAgICAgICAgICAgIGxpc3RlbmVyLT5tYXJr
Q2hpbGRyZW4oc3RhY2spOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WE1MSHR0cFJlcXVlc3QuaAppbmRleCA2YWZiNjA4Li5lM2Y3ZTVhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3QuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTVmFsdWUqIHZhbHVlLCBpbnQgLyphdHRyKi8p
OwogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtD
aGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAgIFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0KiBpbXBs
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmlu
ZGluZy5jcHAKaW5kZXggMmRjYzlmZS4uZWQ3YjRlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfYmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmlu
ZGluZy5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIFNjcmlwdEludGVycHJldGVyOjpmb3Jn
ZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAgICBkZWxldGUg
bWFwOwogfQogCi12b2lkIFNjcmlwdEludGVycHJldGVyOjptYXJrRE9NTm9kZXNGb3JEb2N1bWVu
dChEb2N1bWVudCogZG9jKQordm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6bWFya0RPTU5vZGVzRm9y
RG9jdW1lbnQoTWFya1N0YWNrJiBzdGFjaywgRG9jdW1lbnQqIGRvYykKIHsKICAgICBOb2RlUGVy
RG9jTWFwOjppdGVyYXRvciBkaWN0SXQgPSBkb21Ob2Rlc1BlckRvY3VtZW50KCkuZmluZChkb2Mp
OwogICAgIGlmIChkaWN0SXQgIT0gZG9tTm9kZXNQZXJEb2N1bWVudCgpLmVuZCgpKSB7CkBAIC0y
MjUsOSArMjI1LDkgQEAgdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6bWFya0RPTU5vZGVzRm9yRG9j
dW1lbnQoRG9jdW1lbnQqIGRvYykKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZWFjaGFibGUg
ZnJvbSBKUy4KICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGltYWdlIGVsZW1lbnRzIHRoYXQgYXJl
bid0IGluIHRoZSBkb2N1bWVudCBhcmUgYWxzbwogICAgICAgICAgICAgLy8gbWFya2VkLCBpZiB0
aGV5IGFyZSBub3QgZG9uZSBsb2FkaW5nIHlldC4KLSAgICAgICAgICAgIGlmICghanNOb2RlLT5t
YXJrZWQoKSAmJiAobm9kZS0+aW5Eb2N1bWVudCgpIHx8IChub2RlLT5oYXNUYWdOYW1lKGltZ1Rh
ZykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG5vZGUpLT5oYXZlRmly
ZWRMb2FkRXZlbnQoKSkpKQotICAgICAgICAgICAgICAgIGpzTm9kZS0+bWFyaygpOworICAgICAg
ICAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQoKSB8fCAobm9kZS0+aGFzVGFnTmFtZShpbWdUYWcp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc3RhdGljX2Nhc3Q8
SFRNTEltYWdlRWxlbWVudCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkpCisgICAgICAg
ICAgICAgICAgc3RhY2sucHVzaChqc05vZGUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfYmluZGluZy5oCmluZGV4IDA2YzhmNzIuLmM3NDAyMjUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19iaW5kaW5nLmgKQEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGZvcmdldERPTU5vZGVGb3JEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVudCos
IFdlYkNvcmU6Ok5vZGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgZm9yZ2V0QWxsRE9NTm9kZXNG
b3JEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVudCopOwogICAgICAgICBzdGF0aWMgdm9pZCB1cGRh
dGVET01Ob2RlRG9jdW1lbnQoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OkRvY3VtZW50KiBvbGRE
b2MsIFdlYkNvcmU6OkRvY3VtZW50KiBuZXdEb2MpOwotICAgICAgICBzdGF0aWMgdm9pZCBtYXJr
RE9NTm9kZXNGb3JEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVudCopOworICAgICAgICBzdGF0aWMg
dm9pZCBtYXJrRE9NTm9kZXNGb3JEb2N1bWVudChNYXJrU3RhY2smLCBXZWJDb3JlOjpEb2N1bWVu
dCopOwogCiAgICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWU7IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAKaW5kZXggMTcyOTdiOS4uZTc4
YzhjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCkBAIC0xODcsMTAgKzE4NywxMCBA
QCB2b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpjbGVhcldpbmRvd09iaigpCiAgICAg
bV93aW4gPSAwOwogfQogCi12b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjptYXJrKCkK
K3ZvaWQgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6Om1hcmtDaGlsZHJlbihLSlM6Ok1hcmtT
dGFjayYgc3RhY2spCiB7Ci0gICAgaWYgKG1fbGlzdGVuZXIgJiYgIW1fbGlzdGVuZXItPm1hcmtl
ZCgpKQotICAgICAgICBtX2xpc3RlbmVyLT5tYXJrKCk7CisgICAgaWYgKG1fbGlzdGVuZXIpCisg
ICAgICAgIHN0YWNrLnB1c2gobV9saXN0ZW5lcik7CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2V2ZW50cy5oCmluZGV4IDU0NWUwMDIuLjUyY2ZiNWUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2V2ZW50cy5oCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBLSlM6OkpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIEtKUzo6V2luZG93KiB3aW5kb3dPYmooKSBjb25zdDsKICAgICAgICAgdm9pZCBjbGVh
cldpbmRvd09iaigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFya0NoaWxkcmVuKEtKUzo6TWFya1N0YWNrJik7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgS0pTOjpKU09iamVjdCogbV9saXN0ZW5lcjsKICAgICAgICAgS0pTOjpXaW5kb3cqIG1f
d2luOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKaW5kZXggMTZmMDQ0Ni4uNzg4ZTRjMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCkBAIC0yOTAsMTEgKzI5MCwxMSBAQCBMb2Nh
dGlvbiAqV2luZG93Ojpsb2NhdGlvbigpIGNvbnN0CiB9CiAKIC8vIHJlZmVyZW5jZSBvdXIgc3Bl
Y2lhbCBvYmplY3RzIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24KLXZvaWQgV2luZG93OjptYXJr
KCkKK3ZvaWQgV2luZG93OjptYXJrQ2hpbGRyZW4oS0pTOjpNYXJrU3RhY2smIHN0YWNrKQogewot
ICBKU09iamVjdDo6bWFyaygpOwotICBpZiAoZC0+bG9jICYmICFkLT5sb2MtPm1hcmtlZCgpKQot
ICAgIGQtPmxvYy0+bWFyaygpOworICBKU09iamVjdDo6bWFya0NoaWxkcmVuKHN0YWNrKTsKKyAg
aWYgKGQtPmxvYykKKyAgICAgIHN0YWNrLnB1c2goZC0+bG9jKTsKIH0KIAogc3RhdGljIGJvb2wg
YWxsb3dQb3BVcChFeGVjU3RhdGUgKmV4ZWMsIFdpbmRvdyAqd2luZG93KQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c193aW5kb3cuaAppbmRleCBkNzA1YjI2Li5kN2I0NmFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc193aW5kb3cuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5k
b3cuaApAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiB3YXMgY2FsbGVk
IGZyb20uCiAgICAgICovCiAgICAgc3RhdGljIFdpbmRvdyogcmV0cmlldmVBY3RpdmUoRXhlY1N0
YXRlKik7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0No
aWxkcmVuKE1hcmtTdGFjayYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTVmFs
dWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggNmQxODVjZi4uYTI4NGRi
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0z
NjYsNyArMzY2LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIEN1c3RvbSBtYXJrIGZ1
bmN0aW9uCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU1h
cmtGdW5jdGlvbiJ9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVh
bCB2b2lkIG1hcmsoKTtcblxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYpO1xuXG4iKTsKICAgICB9
CiAKICAgICAjIEN1c3RvbSBwdXNoRXZlbnRIYW5kbGVyU2NvcGUgZnVuY3Rpb24KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZGJh
MDFiZC4uYzI3MTAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKQEAgLTE1Myw4ICsxNTMsNyBAQCBOb2RlOjpOb2RlKERvY3VtZW50
ICpkb2MpCiAgICAgICBtX2hvdmVyZWQoZmFsc2UpLAogICAgICAgbV9pbkFjdGl2ZUNoYWluKGZh
bHNlKSwKICAgICAgIG1faW5EZXRhY2goZmFsc2UpLAotICAgICAgbV9kaXNwYXRjaGluZ1NpbXVs
YXRlZEV2ZW50KGZhbHNlKSwKLSAgICAgIG1faW5TdWJ0cmVlTWFyayhmYWxzZSkKKyAgICAgIG1f
ZGlzcGF0Y2hpbmdTaW11bGF0ZWRFdmVudChmYWxzZSkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAg
aWYgKHNob3VsZElnbm9yZUxlYWtzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5oIGIv
V2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDcyODg2YTAuLjFiZGMwYjAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL05vZGUuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTQ4NCw5ICs0ODQs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2luRGV0YWNoIDogMTsKICAgICBib29sIG1fZGlz
cGF0Y2hpbmdTaW11bGF0ZWRFdmVudCA6IDE7CiAKLXB1YmxpYzoKLSAgICBib29sIG1faW5TdWJ0
cmVlTWFyayA6IDE7Ci0gICAgLy8gMCBiaXRzIGxlZnQKKyAgICAvLyAxIGJpdCBsZWZ0CiAKIHBy
aXZhdGU6CiAgICAgRWxlbWVudCogYW5jZXN0b3JFbGVtZW50KCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKaW5k
ZXggNjZiMTc1ZC4uMzU5ZjIyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5o
CisrKyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaApAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNs
dWRlICJOb2RlRmlsdGVyQ29uZGl0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCitu
YW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBNYXJrU3RhY2s7Cit9CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIE5vZGVGaWx0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlRmls
dGVyPiB7CkBAIC02OCw3ICs3Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBO
b2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24qKTsKICAgICAgICAgc2hvcnQgYWNjZXB0Tm9k
ZShOb2RlKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgbWFyaygpIHsgbV9jb25kaXRpb24tPm1hcmso
KTsgfTsKKyAgICAgICAgdm9pZCBtYXJrQ2hpbGRyZW4oS0pTOjpNYXJrU3RhY2smIHN0YWNrKSB7
IG1fY29uZGl0aW9uLT5tYXJrQ2hpbGRyZW4oc3RhY2spOyB9OwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IG1fY29uZGl0aW9uOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oCmluZGV4IDc0ZmEyZmEuLjRlZTEyZmQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
Q29uZGl0aW9uLmgKQEAgLTI5LDYgKzI5LDEwIEBACiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBNYXJrU3RhY2s7Cit9CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIE5vZGU7CkBAIC0zNyw3ICs0MSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJD
b25kaXRpb24oKSB7IH0KICAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUqKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIG1hcmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYpIHsgfQogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17546</attachid>
            <date>2007-11-27 00:50:14 -0800</date>
            <delta_ts>2007-11-27 01:02:25 -0800</delta_ts>
            <desc>[3/4]         Not reviewed.</desc>
            <filename>-Not-reviewed..patch</filename>
            <type>text/plain</type>
            <size>10346</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">ZmM4NmVkMGU2NzM2MGMzNzBkZWRhMmZhNzdlZWY5MzkwNzNlMDBhZQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDk3
OTFjMjkuLmMxMWFlODkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNiArMSwzNCBAQAogMjAwNy0xMS0yNiAg
TWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdl
ZC4KKyAgICAgICAgCisgICAgICAgIC0gcHVzaCBsYXJnZSBQcm9wZXJ0eU1hcHMgYXMgcmFuZ2Vz
IHRvbworICAgICAgICAKKyAgICAgICAgU2VlbXMgdG8gYmUgYSB3YXNoIG9uIFN1blNwaWRlci4K
KyAgICAgICAgCisgICAgICAgIFRoZSBoaWdoLXdhdGVyIG1hcmsgZm9yIHRoZSBzdGFjayBvbiB0
aGUgU3VuU3BpZGVyIGJlbmNobWFyayBnb2VzCisgICAgICAgIGZyb20gMTk3OSB0byAyMjAuCisK
KyAgICAgICAgKiBranMvTWFya1N0YWNrLmg6CisgICAgICAgIChLSlM6OlJhbmdlVGFnKTogVGVt
cGF0ZSBjbGFzcyB0byBhaWQgdGFnZ2luZyBib3RoIEpTVmFsdWUqKiBhbmQgUHJvcGVydHlNYXAq
CisgICAgICAgIHJhbmdlcy4KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpnZXRWYWx1ZSk6IE92
ZXJsb2FkZWQgaGVscGVyIGZvciBuZXdseSB0ZW1wbGF0aXplZAorICAgICAgICBhbGdvcml0aG1z
LgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OnNhZmVUb0FjY2Vzcyk6IGRpdHRvCisgICAgICAg
IChLSlM6Ok1hcmtTdGFjazo6YWR2YW5jZVJhbmdlU3RhcnRUb0NlbGxXaXRoUmVmcyk6IFRlbXBs
YXRpemVkLgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OnB1c2hXaG9sZVJhbmdlKTogZGl0dG8K
KyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoT25lSXRlbUFuZEFkdmFuY2UpOiBkaXR0bwor
ICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OmFkdmFuY2VVbnRpbDEyNkl0ZW1zUHVzaGVkKTogZGl0
dG8KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoUmFuZ2UpOiBkaXR0bworICAgICAgICAo
S0pTOjpNYXJrU3RhY2s6OnBvcCk6IEhhbmRsZSBib3RoIGtpbmRzIG9mIHJhbmdlcyBub3cuCisg
ICAgICAgICoga2pzL3Byb3BlcnR5X21hcC5jcHA6CisgICAgICAgIChLSlM6OlByb3BlcnR5TWFw
OjptYXJrQ2hpbGRyZW4pOiBVc2UgcHVzaFJhbmdlcy4KKyAgICAgICAgKiBranMvcHJvcGVydHlf
bWFwLmg6CisgICAgICAgIChLSlM6OlByb3BlcnR5TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkp
OiBNYWRlIHRoaXMgcHVibGljIGluIHRoZSBoZWFkZXIuCisKKzIwMDctMTEtMjYgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3ZWQuCiAKICAg
ICAgICAgLSBwdXNoIHJhbmdlcyBvbnRvIHRoZSBzdGFjayB0byBhdm9pZCBtYWtpbmcgYSBodWdl
IG1hcmsgc3RhY2sgZm9yIGxhcmdlIGFycmF5cy4KICAgICAgICAgCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ranMvTWFya1N0YWNrLmggYi9KYXZhU2NyaXB0Q29yZS9ranMvTWFya1N0YWNr
LmgKaW5kZXggZDdlMmE4NS4uNGY5NzgzNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pz
L01hcmtTdGFjay5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9NYXJrU3RhY2suaApAQCAtMjQs
NiArMjQsNyBAQAogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgImNvbGxlY3Rv
ci5oIgorI2luY2x1ZGUgInByb3BlcnR5X21hcC5oIgogI2luY2x1ZGUgInZhbHVlLmgiCiAjaW5j
bHVkZSA8c3RkaW8uaD4KIApAQCAtMzgsNyArMzksOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgdm9pZCBwdXNoQXRvbShKU1ZhbHVlKiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgcHVzaEF0b20o
SlNDZWxsKiBjZWxsKTsKIAotICAgICAgICB2b2lkIHB1c2hSYW5nZShKU1ZhbHVlKiogc3RhcnQs
IEpTVmFsdWUqKiBlbmQpOworICAgICAgICAvLyB1c2VkIHRvIHB1c2ggSlNWYWx1ZSoqIG9yIFBv
cGVydHlNYXBFbnRyeSogcmFuZ2VzCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
cHVzaFJhbmdlKFQqIHN0YXJ0LCBUKiBlbmQpOwogCiAgICAgICAgIEpTQ2VsbCogcG9wKCk7CiAK
QEAgLTQ3LDE0ICs0OSwyOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgdm9pZCByZXNlcnZl
Q2FwYWNpdHkoc2l6ZV90IHNpemUpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW5saW5lIHZv
aWQgcHVzaFdob2xlUmFuZ2UoSlNWYWx1ZSoqJiBzdGFydCwgSlNWYWx1ZSoqJiBlbmQpOwotICAg
ICAgICBpbmxpbmUgdm9pZCBhZHZhbmNlUmFuZ2VTdGFydFRvQ2VsbFdpdGhSZWZzKEpTVmFsdWUq
KiYgc3RhcnQsIEpTVmFsdWUqKiYgZW5kKTsKLSAgICAgICAgaW5saW5lIHZvaWQgcHVzaE9uZUl0
ZW1BbmRBZHZhbmNlKEpTVmFsdWUqKiYgc3RhcnQpOwotICAgICAgICBpbmxpbmUgdm9pZCBhZHZh
bmNlVW50aWwxMjZJdGVtc1B1c2hlZChzaXplX3QgY291bnQsIEpTVmFsdWUqKiYgc3RhcnQsIEpT
VmFsdWUqKiYgZW5kKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUqIGdldFZhbHVlKEpTVmFsdWUq
Kik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBnZXRWYWx1ZShQcm9wZXJ0eU1hcEVudHJ5Kik7
CisgICAgICAgIHN0YXRpYyBib29sIHNhZmVUb0FjY2VzcyhKU1ZhbHVlKiopOworICAgICAgICBz
dGF0aWMgYm9vbCBzYWZlVG9BY2Nlc3MoUHJvcGVydHlNYXBFbnRyeSopOworCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcHVzaFdob2xlUmFuZ2UoVComIHN0YXJ0LCBUKiBlbmQp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkdmFuY2VSYW5nZVN0YXJ0VG9D
ZWxsV2l0aFJlZnMoVComIHN0YXJ0LCBUKiBlbmQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIHB1c2hPbmVJdGVtQW5kQWR2YW5jZShUKiYgc3RhcnQpOworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkdmFuY2VVbnRpbDEyNkl0ZW1zUHVzaGVkKHNpemVfdCYg
Y291bnQsIFQqJiBzdGFydCwgVCogZW5kKTsKIAogICAgICAgICBWZWN0b3I8SlNDZWxsKj4gbV9z
dGFjazsKICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFJhbmdlVGFn
OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgUmFuZ2VUYWc8SlNWYWx1ZSo+IHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHVpbnRwdHJfdCBtX3RhZyA9IDE7CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4gc3RydWN0IFJhbmdlVGFnPFByb3BlcnR5TWFwRW50cnk+IHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnRwdHJfdCBtX3RhZyA9IDM7CisgICAgfTsKIAogICAgIGlubGluZSB2b2lkIE1hcmtT
dGFjazo6cHVzaChKU1ZhbHVlKiB2YWx1ZSkKICAgICB7CkBAIC05NiwxMSArMTEyLDMyIEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwpOwogICAgIH0K
IAotICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6YWR2YW5jZVJhbmdlU3RhcnRUb0NlbGxXaXRo
UmVmcyhKU1ZhbHVlKiomIHN0YXJ0LCBKU1ZhbHVlKiomIGVuZCkKKyAgICBpbmxpbmUgSlNWYWx1
ZSogTWFya1N0YWNrOjpnZXRWYWx1ZShKU1ZhbHVlKiogcCkKKyAgICB7CisgICAgICAgIHJldHVy
biAqcDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZSogTWFya1N0YWNrOjpnZXRWYWx1ZShQ
cm9wZXJ0eU1hcEVudHJ5KiBwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHAtPnZhbHVlOworICAg
IH0KKworICAgIGlubGluZSBib29sIE1hcmtTdGFjazo6c2FmZVRvQWNjZXNzKEpTVmFsdWUqKiBw
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICpwOworICAgIH0KKworICAgIGlubGluZSBib29sIE1h
cmtTdGFjazo6c2FmZVRvQWNjZXNzKFByb3BlcnR5TWFwRW50cnkqKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gCisgICAgaW5s
aW5lIHZvaWQgTWFya1N0YWNrOjphZHZhbmNlUmFuZ2VTdGFydFRvQ2VsbFdpdGhSZWZzKFQqJiBz
dGFydCwgVCogZW5kKQogICAgIHsKICAgICAgICAgd2hpbGUgKHN0YXJ0ICE9IGVuZCkgewotICAg
ICAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSAqc3RhcnQ7Ci0gICAgICAgICAgICBpZiAodmFsdWUg
JiYgIXZhbHVlLT5tYXJrZWQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBnZXRW
YWx1ZShzdGFydCk7CisgICAgICAgICAgICBpZiAoc2FmZVRvQWNjZXNzKHN0YXJ0KSAmJiAhdmFs
dWUtPm1hcmtlZCgpKSB7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUtPmFz
Q2VsbCgpOwogICAgICAgICAgICAgICAgIGlmIChDb2xsZWN0b3I6OmNlbGxNYXlIYXZlUmVmcyhj
ZWxsKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTAsMjkgKzE0NywzMiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlubGluZSB2b2lkIE1hcmtT
dGFjazo6cHVzaFdob2xlUmFuZ2UoSlNWYWx1ZSoqJiBzdGFydCwgSlNWYWx1ZSoqJiBlbmQpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNo
V2hvbGVSYW5nZShUKiYgc3RhcnQsIFQqIGVuZCkKICAgICB7CiAgICAgICAgIHdoaWxlIChzdGFy
dCAhPSBlbmQpIHsKLSAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9ICpzdGFydCkKLSAg
ICAgICAgICAgICAgICBwdXNoKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChzYWZlVG9BY2Nlc3Mo
c3RhcnQpKQorICAgICAgICAgICAgICAgIHB1c2goZ2V0VmFsdWUoc3RhcnQpKTsKICAgICAgICAg
ICAgICsrc3RhcnQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrU3Rh
Y2s6OnB1c2hPbmVJdGVtQW5kQWR2YW5jZShKU1ZhbHVlKiomIHN0YXJ0KQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoT25lSXRlbUFuZEFk
dmFuY2UoVComIHN0YXJ0KQogICAgIHsKLSAgICAgICAgSlNDZWxsKiBjZWxsID0gKCpzdGFydCkt
PmFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNlbGwgPSAoZ2V0VmFsdWUoc3RhcnQpKS0+YXND
ZWxsKCk7CiAgICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CiAgICAgICAgIEFTU0VS
VChtX3N0YWNrLnNpemUoKSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7CiAgICAgICAgIG1fc3RhY2su
dW5jaGVja2VkQXBwZW5kKGNlbGwpOwogICAgICAgICArK3N0YXJ0OwogICAgIH0KIAotICAgIGlu
bGluZSB2b2lkIE1hcmtTdGFjazo6YWR2YW5jZVVudGlsMTI2SXRlbXNQdXNoZWQoc2l6ZV90IGNv
dW50LCBKU1ZhbHVlKiomIHN0YXJ0LCBKU1ZhbHVlKiomIGVuZCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6YWR2YW5jZVVudGlsMTI2SXRlbXNQ
dXNoZWQoc2l6ZV90JiBjb3VudCwgVComIHN0YXJ0LCBUKiBlbmQpCiAgICAgewogICAgICAgICB3
aGlsZSAoc3RhcnQgIT0gZW5kICYmIGNvdW50IDw9IDEyNikgewotICAgICAgICAgICAgSlNWYWx1
ZSogdmFsdWUgPSAqc3RhcnQ7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5tYXJr
ZWQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBnZXRWYWx1ZShzdGFydCk7Cisg
ICAgICAgICAgICBpZiAoc2FmZVRvQWNjZXNzKHN0YXJ0KSAmJiAhdmFsdWUtPm1hcmtlZCgpKSB7
CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUtPmFzQ2VsbCgpOwogICAgICAg
ICAgICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CiAgICAgICAgICAgICAgICAgaWYg
KENvbGxlY3Rvcjo6Y2VsbE1heUhhdmVSZWZzKGNlbGwpKSB7CkBAIC0xNDUsNyArMTg1LDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQg
TWFya1N0YWNrOjpwdXNoUmFuZ2UoSlNWYWx1ZSoqIHN0YXJ0LCBKU1ZhbHVlKiogZW5kKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoUmFu
Z2UoVCogc3RhcnQsIFQqIGVuZCkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdHJp
ZXMgdG8gYXZvaWQgcHVzaGluZyB0b28gbWFueSB2YWx1ZXMgb250bwogICAgICAgICAvLyB0aGUg
c3RhY2sgYXQgb25jZSB0byBrZWVwIHRoZSBoaWdoIHdhdGVyIG1hcmsgcmVhc29uYWJsZSBpbgpA
QCAtMTY5LDcgKzIxMCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBtX3N0YWNrLnVuY2hl
Y2tlZEFwcGVuZChyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KGVuZCkpOyAgICAgICAgICAgICAg
ICAKICAgICAgICAgSlNDZWxsKiYgZW5kU2xvdCA9IG1fc3RhY2subGFzdCgpOwogICAgICAgICBB
U1NFUlQobV9zdGFjay5zaXplKCkgPCBtX3N0YWNrLmNhcGFjaXR5KCkpOwotICAgICAgICBtX3N0
YWNrLnVuY2hlY2tlZEFwcGVuZChyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihzdGFydCkgfCAxKSk7ICAgICAgICAgICAgICAgIAorICAgICAgICBt
X3N0YWNrLnVuY2hlY2tlZEFwcGVuZChyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgfCBSYW5nZVRhZzxUPjo6bV90YWcpKTsKICAgICAg
ICAgSlNDZWxsKiYgc3RhcnRTbG90ID0gbV9zdGFjay5sYXN0KCk7CiAgICAgICAgIAogICAgICAg
ICBzaXplX3QgY291bnQgPSAwOwpAQCAtMTc4LDcgKzIxOSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICBhZHZhbmNlUmFuZ2VTdGFydFRvQ2VsbFdpdGhSZWZzKHN0YXJ0LCBlbmQpOwogICAg
ICAgICAKICAgICAgICAgaWYgKHN0YXJ0ICE9IGVuZCkgewotICAgICAgICAgICAgc3RhcnRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
c3RhcnQpIHwgMSk7CisgICAgICAgICAgICBzdGFydFNsb3QgPSByZWludGVycHJldF9jYXN0PEpT
Q2VsbCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgfCBSYW5nZVRhZzxUPjo6
bV90YWcpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTk4
LDE0ICsyMzksMjMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1f
c3RhY2subGFzdCgpOwogICAgICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAmIDEpKQorICAg
ICAgICB1aW50cHRyX3QgdGFnID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwpICYg
MzsKKyAgICAgICAgaWYgKCF0YWcpCiAgICAgICAgICAgICByZXR1cm4gY2VsbDsKICAgICAgICAg
Ci0gICAgICAgIEpTVmFsdWUqKiBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSoqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgJiB+MUwpOwotICAgICAgICBKU1ZhbHVl
KiogZW5kID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKio+KG1fc3RhY2subGFzdCgpKTsKLSAg
ICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIGlmICh0YWcgPT0gMSkgeworICAg
ICAgICAgICAgSlNWYWx1ZSoqIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKio+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAmIH4zTCk7CisgICAgICAgICAgICBKU1Zh
bHVlKiogZW5kID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKio+KG1fc3RhY2subGFzdCgpKTsK
KyAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgCi0gICAgICAg
IHB1c2hSYW5nZShzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIHB1c2hSYW5nZShzdGFydCwgZW5k
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFByb3BlcnR5TWFwRW50cnkqIHN0YXJ0
ID0gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0eU1hcEVudHJ5Kj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGNlbGwpICYgfjNMKTsKKyAgICAgICAgICAgIFByb3BlcnR5TWFwRW50cnkqIGVu
ZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlNYXBFbnRyeSo+KG1fc3RhY2subGFzdCgpKTsK
KyAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBwdXNoUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICByZXR1cm4gcG9wKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pz
L3Byb3BlcnR5X21hcC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcApp
bmRleCAxMWM3OTZiLi41OTk5NmY0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvcHJv
cGVydHlfbWFwLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcApA
QCAtNzgsMTggKzc4LDYgQEAgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3Bl
cnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIoKQogCiAjZW5kaWYKIAotc3RydWN0IFByb3BlcnR5
TWFwRW50cnkgewotICAgIFVTdHJpbmc6OlJlcCoga2V5OwotICAgIEpTVmFsdWUqIHZhbHVlOwot
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgdW5zaWduZWQgaW5kZXg7Ci0KLSAgICBQcm9w
ZXJ0eU1hcEVudHJ5KFVTdHJpbmc6OlJlcCogaywgSlNWYWx1ZSogdiwgaW50IGEpCi0gICAgICAg
IDoga2V5KGspLCB2YWx1ZSh2KSwgYXR0cmlidXRlcyhhKSwgaW5kZXgoMCkKLSAgICB7Ci0gICAg
fQotfTsKLQogLy8gbGFzdEluZGV4VXNlZCBpcyBhbiBldmVyLWluY3JlYXNpbmcgaW5kZXggdXNl
ZCB0byBpZGVudGlmeSB0aGUgb3JkZXIgaXRlbXMKIC8vIHdlcmUgaW5zZXJ0ZWQgaW50byB0aGUg
cHJvcGVydHkgbWFwLiBJdCdzIHJlcXVpcmVkIHRoYXQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFt
ZXMKIC8vIHJldHVybiB0aGUgcHJvcGVydGllcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVk
IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIKQEAgLTYzMyw4ICs2MjEsOCBAQCB2b2lkIFBy
b3BlcnR5TWFwOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykgY29uc3QKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBlbnRyeUNvdW50ID0gbV91LnRhYmxlLT5rZXlDb3VudCArIG1fdS50YWJs
ZS0+ZGVsZXRlZFNlbnRpbmVsQ291bnQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBl
bnRyeUNvdW50OyBpKyspCi0gICAgICAgIHN0YWNrLnB1c2gobV91LnRhYmxlLT5lbnRyaWVzKClb
aV0udmFsdWUpOworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJpZXMgPSBtX3UudGFibGUtPmVu
dHJpZXMoKSArIDE7CisgICAgc3RhY2sucHVzaFJhbmdlKGVudHJpZXMsIGVudHJpZXMgKyBlbnRy
eUNvdW50KTsKIH0KIAogc3RhdGljIGludCBjb21wYXJlUHJvcGVydHlNYXBFbnRyeUluZGljZXMo
Y29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9wcm9wZXJ0eV9tYXAuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaApp
bmRleCAwOTdlNWI4Li5iMmU5MDgwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvcHJv
cGVydHlfbWFwLmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCkBAIC0z
Miw3ICszMiwxOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBNYXJrU3RhY2s7CiAgICAg
Y2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiAgICAgCi0gICAgc3RydWN0IFByb3BlcnR5TWFwRW50
cnk7CisgICAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgeworICAgICAgICBVU3RyaW5nOjpSZXAq
IGtleTsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWU7CisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICAKKyAgICAgICAgUHJvcGVydHlN
YXBFbnRyeShVU3RyaW5nOjpSZXAqIGssIEpTVmFsdWUqIHYsIGludCBhKQorICAgICAgICAgICAg
OiBrZXkoayksIHZhbHVlKHYpLCBhdHRyaWJ1dGVzKGEpLCBpbmRleCgwKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICB9OworCiAgICAgc3RydWN0IFByb3BlcnR5TWFwSGFzaFRhYmxlOwogICAg
IHN0cnVjdCBTYXZlZFByb3BlcnR5OwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17547</attachid>
            <date>2007-11-27 00:50:16 -0800</date>
            <delta_ts>2007-11-27 01:02:33 -0800</delta_ts>
            <desc>[4/4] JavaScriptCore:</desc>
            <filename>-JavaScriptCore-.patch</filename>
            <type>text/plain</type>
            <size>13224</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">ZjBhYzYwMTljMTM0NGM4MWI4ODM3ZDI4ZTY2YmJiMTNiMmJmZmY2ZApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGMx
MWFlODkuLjg5ZWFhMTkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzOCBAQAogCiAgICAgICAgIE5v
dCByZXZpZXdlZC4KICAgICAgICAgCisgICAgICAgIFVzZSBhIGZpeGVkLXNpemUgbWFyayBzdGFj
ayBzbyB0aGF0IHdlIGRvbid0IHRyaWdnZXIgaHVnZQorICAgICAgICBhbGxvY2F0aW9ucyB3aGVu
IGdhcmJhZ2UgY29sbGVjdGluZy4gSW4gdGhlIHVubGlrZWx5IGNhc2Ugb2YKKyAgICAgICAgb3Zl
cmZsb3dpbmcgdGhlIG1hcmsgc3RhY2ssIHVzZSBhIHNsb3cgZmFsbGJhY2sgcGF0aCB3aGVyZSB3
ZQorICAgICAgICBjcmF3bCB0aGUgd2hvbGUgaGVhcCwgbG9va2luZyBmb3Igb2JqZWN0cyB3aXRo
IHRoZSBtYXJrIGJpdCBzZXQKKyAgICAgICAgYW5kIHB1c2hpbmcgdGhlaXIgY2hpbGRyZW4uCisK
KyAgICAgICAgVGhpcyBpcyBhbiAwLjIlIFN1blNwaWRlciBzcGVlZHVwIChidXQgaW4gcmV0cm9z
cGVjdCBJJ20gbm90IHN1cmUKKyAgICAgICAgdGhlIGxhc3QgcGF0Y2ggd2FzIGEgc3BlZWR1cCku
CisgICAgICAgIAorICAgICAgICAqIGtqcy9KU0xvY2suY3BwOgorICAgICAgICAoS0pTOjpKU0xv
Y2s6OnJlZ2lzdGVyVGhyZWFkKToKKyAgICAgICAgKiBranMvTWFya1N0YWNrLmg6CisgICAgICAg
IChLSlM6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNo
KToKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoT25lSXRlbUFuZEFkdmFuY2UpOgorICAg
ICAgICAoS0pTOjpNYXJrU3RhY2s6OmFkdmFuY2VVbnRpbDEyNkl0ZW1zUHVzaGVkKToKKyAgICAg
ICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoUmFuZ2UpOgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6
OnBvcCk6CisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cmVzZXQpOgorICAgICAgICAoS0pTOjpN
YXJrU3RhY2s6OnNpemUpOgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6Om92ZXJmbG93ZWQpOgor
ICAgICAgICAqIGtqcy9jb2xsZWN0b3IuY3BwOgorICAgICAgICAoS0pTOjopOgorICAgICAgICAo
S0pTOjppbml0aWFsaXplUmVnaXN0ZXJlZFRocmVhZEtleSk6CisgICAgICAgIChLSlM6OkNvbGxl
Y3Rvcjo6cmVnaXN0ZXJUaHJlYWQpOgorICAgICAgICAoS0pTOjpzbG93RmFsbGJhY2tNYXJrSWZO
ZWVkZWQpOgorICAgICAgICAoS0pTOjpDb2xsZWN0b3I6OmNvbGxlY3QpOgorCisyMDA3LTExLTI2
ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgTm90IHJldmll
d2VkLgorICAgICAgICAKICAgICAgICAgLSBwdXNoIGxhcmdlIFByb3BlcnR5TWFwcyBhcyByYW5n
ZXMgdG9vCiAgICAgICAgIAogICAgICAgICBTZWVtcyB0byBiZSBhIHdhc2ggb24gU3VuU3BpZGVy
LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL0pTTG9jay5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9ranMvSlNMb2NrLmNwcAppbmRleCA5ZDUxY2E5Li5kMTBhODNhIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ranMvSlNMb2NrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvSlNM
b2NrLmNwcApAQCAtODAsMTEgKzgwLDYgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkKICAgICByZXR1cm4gISFwdGhyZWFkX2dldHNwZWNpZmljKGRpZExvY2tKU011
dGV4KTsKIH0KIAotdm9pZCBKU0xvY2s6OnJlZ2lzdGVyVGhyZWFkKCkKLXsKLSAgICBDb2xsZWN0
b3I6OnJlZ2lzdGVyVGhyZWFkKCk7Ci19Ci0KIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxs
TG9ja3MoKQogICAgIDogbV9sb2NrQ291bnQoMCkKIHsKQEAgLTEyMSwxMCArMTE2LDYgQEAgdm9p
ZCBKU0xvY2s6OnVubG9jaygpCiB7CiB9CiAKLXZvaWQgSlNMb2NrOjpyZWdpc3RlclRocmVhZCgp
Ci17Ci19Ci0KIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoKQogewogfQpAQCAt
MTM1LDYgKzEyNiwxMSBAQCBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCiAK
ICNlbmRpZiAvLyBVU0UoTVVMVElQTEVfVEhSRUFEUykKIAordm9pZCBKU0xvY2s6OnJlZ2lzdGVy
VGhyZWFkKCkKK3sKKyAgICBDb2xsZWN0b3I6OnJlZ2lzdGVyVGhyZWFkKCk7Cit9CisKIGludCBK
U0xvY2s6OmxvY2tDb3VudCgpCiB7CiAgICAgcmV0dXJuIEpTTG9ja0NvdW50OwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUva2pzL01hcmtTdGFjay5oIGIvSmF2YVNjcmlwdENvcmUva2pzL01h
cmtTdGFjay5oCmluZGV4IDRmOTc4MzUuLjg3YmZiN2IgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2tqcy9NYXJrU3RhY2suaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvTWFya1N0YWNrLmgK
QEAgLTQ2LDkgKzQ2LDEyIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIGJvb2wgaXNFbXB0
eSgpOwogICAgICAgICBzaXplX3Qgc2l6ZSgpOwotICAgICAgICB2b2lkIHJlc2VydmVDYXBhY2l0
eShzaXplX3Qgc2l6ZSk7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAgICAgYm9vbCBvdmVy
Zmxvd2VkKCk7CiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFwcGVuZChKU0NlbGwqKTsK
KwogICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZ2V0VmFsdWUoSlNWYWx1ZSoqKTsKICAgICAgICAg
c3RhdGljIEpTVmFsdWUqIGdldFZhbHVlKFByb3BlcnR5TWFwRW50cnkqKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgc2FmZVRvQWNjZXNzKEpTVmFsdWUqKik7CkBAIC02MCw2ICs2Myw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkdmFuY2VVbnRp
bDEyNkl0ZW1zUHVzaGVkKHNpemVfdCYgY291bnQsIFQqJiBzdGFydCwgVCogZW5kKTsKIAogICAg
ICAgICBWZWN0b3I8SlNDZWxsKj4gbV9zdGFjazsKKyAgICAgICAgYm9vbCBtX292ZXJmbG93ZWQ7
CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBSYW5nZVRhZzsKQEAg
LTcyLDYgKzc2LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBzdGF0aWMgY29uc3QgdWlu
dHB0cl90IG1fdGFnID0gMzsKICAgICB9OwogCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjph
cHBlbmQoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwg
bV9zdGFjay5jYXBhY2l0eSgpKQorICAgICAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQo
Y2VsbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dlZCA9IHRydWU7Cisg
ICAgfQorCiAgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoKEpTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5tYXJrZWQoKSkKQEAgLTgwLDggKzkyLDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CiAgICAgICAg
IGlmICghQ29sbGVjdG9yOjpjZWxsTWF5SGF2ZVJlZnMoY2VsbCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEFTU0VSVChtX3N0YWNrLnNpemUoKSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7
Ci0gICAgICAgIG1fc3RhY2sudW5jaGVja2VkQXBwZW5kKGNlbGwpOworICAgICAgICBhcHBlbmQo
Y2VsbCk7CiAgICAgfQogCiAgICAgLy8gdGhpcyBleHRyYSBmdW5jdGlvbiBpcyB3b3J0aCBpdCB0
byBhdm9pZCBKU0ltbWVkaWF0ZSAKQEAgLTkzLDggKzEwNCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwpOwogICAgICAgICBpZiAoIUNvbGxlY3Rv
cjo6Y2VsbE1heUhhdmVSZWZzKGNlbGwpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBB
U1NFUlQobV9zdGFjay5zaXplKCkgPCBtX3N0YWNrLmNhcGFjaXR5KCkpOwotICAgICAgICBtX3N0
YWNrLnVuY2hlY2tlZEFwcGVuZChjZWxsKTsKKyAgICAgICAgYXBwZW5kKGNlbGwpOwogICAgIH0K
IAogICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6cHVzaEF0b20oSlNWYWx1ZSogdmFsdWUpCkBA
IC0xNjIsOCArMTcyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgewogICAgICAgICBKU0NlbGwq
IGNlbGwgPSAoZ2V0VmFsdWUoc3RhcnQpKS0+YXNDZWxsKCk7CiAgICAgICAgIENvbGxlY3Rvcjo6
bWFya0NlbGwoY2VsbCk7Ci0gICAgICAgIEFTU0VSVChtX3N0YWNrLnNpemUoKSA8IG1fc3RhY2su
Y2FwYWNpdHkoKSk7Ci0gICAgICAgIG1fc3RhY2sudW5jaGVja2VkQXBwZW5kKGNlbGwpOworICAg
ICAgICBhcHBlbmQoY2VsbCk7CiAgICAgICAgICsrc3RhcnQ7CiAgICAgfQogCkBAIC0xNzYsOCAr
MTg1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0g
dmFsdWUtPmFzQ2VsbCgpOwogICAgICAgICAgICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2Vs
bCk7CiAgICAgICAgICAgICAgICAgaWYgKENvbGxlY3Rvcjo6Y2VsbE1heUhhdmVSZWZzKGNlbGwp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YWNrLnNpemUoKSA8IG1fc3RhY2su
Y2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhY2sudW5jaGVja2VkQXBwZW5k
KGNlbGwpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoY2VsbCk7CiAgICAgICAgICAgICAg
ICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTk4
LDE0ICsyMDYsMTYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgYWR2YW5jZVJhbmdlU3Rh
cnRUb0NlbGxXaXRoUmVmcyhzdGFydCwgZW5kKTsKIAotICAgICAgICBpZiAoZW5kIC0gc3RhcnQg
PD0gMTI4KSB7CisgICAgICAgIC8vIGlmIHRoZXJlJ3MgZmV3ZXIgdGhhbiAxMjggaXRlbXMsIG9y
IGlmIHRoZXJlIGlzbid0IHJvb20gb24gdGhlIHN0YWNrCisgICAgICAgIC8vIGZvciBhdCBsZWFz
dCAyLCB3ZSBtYXkgYXMgd2VsbCBtYXJrIGV2ZXJ5dGhpbmcgbm93CisgICAgICAgIGlmIChlbmQg
LSBzdGFydCA8PSAxMjggfHwgbV9zdGFjay5jYXBhY2l0eSgpIC0gbV9zdGFjay5zaXplKCkgPCA0
KSB7CiAgICAgICAgICAgICBwdXNoV2hvbGVSYW5nZShzdGFydCwgZW5kKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHB1c2hPbmVJdGVtQW5kQWR2YW5jZShzdGFydCk7Ci0gICAgICAgICAgICAKKyAg
ICAgIAogICAgICAgICBBU1NFUlQobV9zdGFjay5zaXplKCkgPCBtX3N0YWNrLmNhcGFjaXR5KCkp
OwogICAgICAgICBtX3N0YWNrLnVuY2hlY2tlZEFwcGVuZChyZWludGVycHJldF9jYXN0PEpTQ2Vs
bCo+KGVuZCkpOyAgICAgICAgICAgICAgICAKICAgICAgICAgSlNDZWxsKiYgZW5kU2xvdCA9IG1f
c3RhY2subGFzdCgpOwpAQCAtMjM4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICBBU1NFUlQobV9zdGFjay5zaXplKCkgPiAwKTsKICAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9z
dGFjay5sYXN0KCk7CiAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAKKwog
ICAgICAgICB1aW50cHRyX3QgdGFnID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwp
ICYgMzsKICAgICAgICAgaWYgKCF0YWcpCiAgICAgICAgICAgICByZXR1cm4gY2VsbDsKQEAgLTI0
Nyw3ICsyNTcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIEpTVmFsdWUqKiBzdGFy
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSoqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oY2VsbCkgJiB+M0wpOwogICAgICAgICAgICAgSlNWYWx1ZSoqIGVuZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNWYWx1ZSoqPihtX3N0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICBtX3N0YWNrLnJl
bW92ZUxhc3QoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBwdXNoUmFuZ2Uoc3RhcnQs
IGVuZCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5KiBz
dGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlNYXBFbnRyeSo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihjZWxsKSAmIH4zTCk7CkBAIC0yNjUsMTUgKzI3NSwyMSBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOwogICAgIH0KIAotICAg
IGlubGluZSB2b2lkIE1hcmtTdGFjazo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBzaXplKSAKKyAg
ICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OnJlc2V0KCkgCiAgICAgewotICAgICAgICBtX3N0YWNr
LnJlc2VydmVDYXBhY2l0eShzaXplKTsKKyAgICAgICAgbV9zdGFjay5yZXNlcnZlQ2FwYWNpdHko
NTEyKTsKKyAgICAgICAgbV9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgfQogCiAgICAgaW5saW5l
IHNpemVfdCBNYXJrU3RhY2s6OnNpemUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhY2su
c2l6ZSgpOwogICAgIH0KKworICAgIGlubGluZSBib29sIE1hcmtTdGFjazo6b3ZlcmZsb3dlZCgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9vdmVyZmxvd2VkOworICAgIH0KIH0KIAogI2VuZGlm
IC8vIE1hcmtTdGFja19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9y
LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCmluZGV4IDM0OTM0ZTAuLmFl
YjMzZWUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCkBAIC05OSw2ICs5OSwxMyBAQCBzdHJ1
Y3QgQ29sbGVjdG9ySGVhcCB7CiBzdGF0aWMgQ29sbGVjdG9ySGVhcCBwcmltYXJ5SGVhcCA9IHsg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgTm9PcGVyYXRpb24gfTsKIHN0YXRpYyBDb2xsZWN0b3JIZWFw
IG51bWJlckhlYXAgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIE5vT3BlcmF0aW9uIH07CiAKK3N0
YXRpYyB1bmlvbiB7CisgICAgdm9pZCogYWxpZ247CisgICAgY2hhciBzdG9yYWdlW3NpemVvZihN
YXJrU3RhY2spXTsKK30gbWFya1N0YWNrOworCitzdGF0aWMgYm9vbCBtYXJrU3RhY2tJbml0aWFs
aXplZDsKKwogLy8gRklYTUU6IEkgZG9uJ3QgdGhpbmsgdGhpcyBuZWVkcyB0byBiZSBhIHN0YXRp
YyBkYXRhIG1lbWJlciBvZiB0aGUgQ29sbGVjdG9yIGNsYXNzLgogLy8gSnVzdCBhIHByaXZhdGUg
Z2xvYmFsIGxpa2UgImhlYXAiIGFib3ZlIHdvdWxkIGJlIGZpbmUuCiBzaXplX3QgQ29sbGVjdG9y
OjptYWluVGhyZWFkT25seU9iamVjdENvdW50ID0gMDsKQEAgLTQ1Miw2ICs0NTksOSBAQCBzdGF0
aWMgdm9pZCBkZXN0cm95UmVnaXN0ZXJlZFRocmVhZCh2b2lkKiBkYXRhKQogc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZVJlZ2lzdGVyZWRUaHJlYWRLZXkoKQogewogICBwdGhyZWFkX2tleV9jcmVhdGUo
JnJlZ2lzdGVyZWRUaHJlYWRLZXksIGRlc3Ryb3lSZWdpc3RlcmVkVGhyZWFkKTsKKworICBuZXcg
KHN0YXRpY19jYXN0PHZvaWQqPihtYXJrU3RhY2suc3RvcmFnZSkpIE1hcmtTdGFjazsKKyAgbWFy
a1N0YWNrSW5pdGlhbGl6ZWQgPSB0cnVlOwogfQogCiB2b2lkIENvbGxlY3Rvcjo6cmVnaXN0ZXJU
aHJlYWQoKQpAQCAtNDc1LDEyICs0ODUsMTcgQEAgdm9pZCBDb2xsZWN0b3I6OnJlZ2lzdGVyVGhy
ZWFkKCkKICAgfQogfQogCi0jZW5kaWYKKyNlbHNlIAogCi0jZGVmaW5lIElTX1BPSU5URVJfQUxJ
R05FRChwKSAoKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNoYXIgKikgLSAxKSkgPT0gMCkKK3Zv
aWQgQ29sbGVjdG9yOjpyZWdpc3RlclRocmVhZCgpCit7CisgICAgaWYgKCFtYXJrU3RhY2tJbml0
aWFsaXplZCkgeworICAgICAgICBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihtYXJrU3RhY2suc3Rv
cmFnZSkpIE1hcmtTdGFjazsKKyAgICAgICAgbWFya1N0YWNrSW5pdGlhbGl6ZWQgPSB0cnVlOwor
ICAgIH0KK30KIAotLy8gY2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZvciB0
aGlzIHRvIGJlIHZhbGlkCi0jZGVmaW5lIElTX0hBTEZfQ0VMTF9BTElHTkVEKHApICgoKGludHB0
cl90KShwKSAmIChDRUxMX01BU0sgPj4gMSkpID09IDApCisjZW5kaWYKIAogc3RhdGljIGlubGlu
ZSB2b2lkIGRyYWluTWFya1N0YWNrKE1hcmtTdGFjayYgc3RhY2spCiB7CkBAIC00ODgsNiArNTAz
LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmFpbk1hcmtTdGFjayhNYXJrU3RhY2smIHN0YWNr
KQogICAgICAgICBzdGFjay5wb3AoKS0+bWFya0NoaWxkcmVuKHN0YWNrKTsKIH0KIAorI2RlZmlu
ZSBJU19QT0lOVEVSX0FMSUdORUQocCkgKCgoaW50cHRyX3QpKHApICYgKHNpemVvZihjaGFyICop
IC0gMSkpID09IDApCisKKy8vIGNlbGwgc2l6ZSBuZWVkcyB0byBiZSBhIHBvd2VyIG9mIHR3byBm
b3IgdGhpcyB0byBiZSB2YWxpZAorI2RlZmluZSBJU19IQUxGX0NFTExfQUxJR05FRChwKSAoKChp
bnRwdHJfdCkocCkgJiAoQ0VMTF9NQVNLID4+IDEpKSA9PSAwKQogCiB2b2lkIENvbGxlY3Rvcjo6
bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgc3RhY2ssIHZvaWQgKnN0
YXJ0LCB2b2lkICplbmQpCiB7CkBAIC05NDMsNyArOTYyLDM2IEBAIHRlbXBsYXRlIDxDb2xsZWN0
b3I6OkhlYXBUeXBlIGhlYXBUeXBlPiBzaXplX3QgQ29sbGVjdG9yOjpzd2VlcChib29sIGN1cnJl
bnRUaHJlCiAgICAgaGVhcC5leHRyYUNvc3QgPSAwOwogICAgIHJldHVybiBudW1MaXZlT2JqZWN0
czsKIH0KLSAgICAKKworc3RhdGljIGlubGluZSB2b2lkIHNsb3dGYWxsYmFja01hcmtJZk5lZWRl
ZChNYXJrU3RhY2smIHN0YWNrKQoreworICAgIC8vIGlmIHRoZSBzdGFjayBvdmVybG93cywgd2Ug
Z28gaW50byBhIHNsb3cgZmFsbGJhY2sgcGF0aC4gQXQKKyAgICAvLyBsZWFzdCB0aGUgcm9vdHMg
bXVzdCBiZSBtYXJrZWQuIFNvIHdlIHJlcGVhdGVkbHkgc2NhbiB0aGUgc3RhY2sKKyAgICAvLyBh
bmQgcHVzaCBzdGlsbCB1bm1hcmtlZCBjaGlsZHJlbiBvZiBtYXJrZWQgY2VsbHMuIFRoaXMgaXMK
KyAgICAvLyBndWFyYW50ZWVkIHRvIG1ha2UgcHJvZ3Jlc3MgdW50aWwgYWxsIHJlYWNoYWJsZSBj
ZWxscyBhcmUKKyAgICAvLyBtYXJrZWQuCisKKyAgICB3aGlsZSAoc3RhY2sub3ZlcmZsb3dlZCgp
KSB7CisgICAgICAgIHN0YWNrLnJlc2V0KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0g
MDsgYmxvY2sgPCBwcmltYXJ5SGVhcC51c2VkQmxvY2tzOyBibG9jaysrKSB7CisgICAgICAgICAg
ICBDb2xsZWN0b3JCbG9jayogY3VyQmxvY2sgPSBwcmltYXJ5SGVhcC5ibG9ja3NbYmxvY2tdOwor
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IENFTExTX1BFUl9CTE9DSzsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGN1ckJsb2NrLT5tYXJrZWQuZ2V0KGkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIENvbGxlY3RvckNlbGwqIGNlbGwgPSBjdXJCbG9jay0+Y2VsbHMgKyBp
OworICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxp
emVkIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+dS5mcmVlQ2VsbC56ZXJv
SWZGcmVlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4o
Y2VsbCk7CisgICAgICAgICAgICAgICAgICAgIGpzQ2VsbC0+bWFya0NoaWxkcmVuKHN0YWNrKTsK
KyAgICAgICAgICAgICAgICAgICAgZHJhaW5NYXJrU3RhY2soc3RhY2spOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gIAorfQorCiBib29sIENvbGxl
Y3Rvcjo6Y29sbGVjdCgpCiB7CiAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7CkBA
IC05NjIsOCArMTAxMCw4IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKIAogICBzaXplX3Qg
b3JpZ2luYWxMaXZlT2JqZWN0cyA9IHByaW1hcnlIZWFwLm51bUxpdmVPYmplY3RzICsgbnVtYmVy
SGVhcC5udW1MaXZlT2JqZWN0czsKIAotICBNYXJrU3RhY2sgc3RhY2s7Ci0gIHN0YWNrLnJlc2Vy
dmVDYXBhY2l0eShwcmltYXJ5SGVhcC5udW1MaXZlT2JqZWN0cyk7CisgIE1hcmtTdGFjayYgc3Rh
Y2sgPSByZWludGVycHJldF9jYXN0PE1hcmtTdGFjayY+KG1hcmtTdGFjay5zdG9yYWdlWzBdKTsK
KyAgc3RhY2sucmVzZXQoKTsKIAogI2lmbmRlZiBOREVCVUcKICAgLy8gRm9yYmlkIG1hbGxvYyBk
dXJpbmcgdGhlIG1hcmsgcGhhc2UuIE1hcmtpbmcgYSB0aHJlYWQgc3VzcGVuZHMgaXQsIHNvIApA
QCAtOTkwLDYgKzEwMzgsOCBAQCBib29sIENvbGxlY3Rvcjo6Y29sbGVjdCgpCiAgICAgbWFya01h
aW5UaHJlYWRPbmx5T2JqZWN0cyhzdGFjayk7CiAjZW5kaWYKIAorICBzbG93RmFsbGJhY2tNYXJr
SWZOZWVkZWQoc3RhY2spOworCiAjaWZuZGVmIE5ERUJVRwogICBmYXN0TWFsbG9jQWxsb3coKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDhkNmVhYTYuLmVmN2Y5MTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAwNy0xMS0yNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAg
IE5vdCByZXZpZXdlZC4KKyAgICAgICAgCisgICAgICAgIC0gVGVzdCBjYXNlIHRoYXQgaGl0cyB0
aGUgd29yc3QgY2FzZSBvZiByYW5nZSBzdGFjayBtYXJraW5nLCB0byBlbnN1cmUgdGhhdCB0aGUg
c2xvdworICAgICAgICBmYWxsYmFjayBwYXRoIGhhcyBjb3ZlcmFnZS4KKworICAgICAgICAqIGZh
c3QvanMvZ2MtcGF0aG9sb2dpY2FsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9nYy1wYXRob2xvZ2ljYWwuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZXNv
dXJjZXMvZ2MtcGF0aG9sb2dpY2FsLmpzOiBBZGRlZC4KKwogMjAwNy0xMS0yMSAgTWFjaWVqIFN0
YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtcGF0aG9sb2dpY2FsLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtcGF0aG9sb2dpY2FsLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNhZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1wYXRob2xvZ2ljYWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsOSBAQAorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvYmplY3Qgc3RydWN0dXJlcyB3aGlj
aCBhcmUgYm90aCBkZWVwIGFuZCB3aWRlIGRvbid0IGxlYWQgdG8gR0MgY3Jhc2hlcy4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2dj
LXBhdGhvbG9naWNhbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1wYXRob2xvZ2ljYWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGUwZDk4Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1wYXRob2xvZ2ljYWwuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2djLXBh
dGhvbG9naWNhbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9nYy1wYXRob2xvZ2ljYWwuanMgYi9MYXlvdXRUZXN0cy9m
YXN0L2pzL3Jlc291cmNlcy9nYy1wYXRob2xvZ2ljYWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDJjOTk4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvanMvcmVzb3VyY2VzL2djLXBhdGhvbG9naWNhbC5qcwpAQCAtMCwwICsxLDI1IEBACitkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvYmplY3Qgc3RydWN0dXJlcyB3aGlj
aCBhcmUgYm90aCBkZWVwIGFuZCB3aWRlIGRvbid0IGxlYWQgdG8gR0MgY3Jhc2hlcy4iKQorCit2
YXIgYSA9IFtdOworZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKyAgICBhID0gW1td
LCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCAKKyAgICAgICAgIFtdLCBbXSwg
W10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLAorICAgICAgICAgW10sIFtdLCBbXSwgW10s
IFtdLCBbXSwgW10sIFtdLCBbXSwgW10sCisgICAgICAgICBbXSwgW10sIFtdLCBbXSwgW10sIFtd
LCBbXSwgW10sIFtdLCBbXSwKKyAgICAgICAgIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCBb
XSwgW10sIFtdLAorICAgICAgICAgYV07Cit9CisKK3ZhciBiID0gIiI7Citmb3IgKHZhciBpID0g
MDsgaSA8IDgwMDAwOyBpKyspIHsKKyAgICBiICs9ICJiIjsKK30KKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDA7IGkrKykgeworICAgIHRyeSB7CisgICAgICAgIGEudG9TdHJpbmcoKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgfQorfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17548</attachid>
            <date>2007-11-27 01:21:52 -0800</date>
            <delta_ts>2007-12-14 15:48:31 -0800</delta_ts>
            <desc>[1/6]         Not reviewed.</desc>
            <filename>-Not-reviewed..patch</filename>
            <type>text/plain</type>
            <size>1666</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">NjA2N2UwMzI5ZDI2MTAwZDhkNWMxNjljZmNkNWZkZTYzZTYzNmU1MgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGEzNDFmYTgu
LmU0NjQxOTUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMSBAQAorMjAwNy0xMS0yNiAgTWFjaWVqIFN0YWNo
b3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdlZC4KKworICAgICAg
ICBGaXggRHVtcFJlbmRlclRyZWUgT2JqQyBidWcgY29tcGFyaW5nIHN0cmluZ3MuCisKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvT2JqQ0NvbnRyb2xsZXIubToKKwogMjAwNy0xMS0yNiAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIC0gVGlnZXIgYnVpbGQg
Zml4LgpAQCAtMTQxLDcgKzE0OSw2IEBACiAgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0Zy
YW1lTG9hZERlbGVnYXRlLm1tOgogICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9KYXZhU2Ny
aXB0VGhyZWFkaW5nLmNwcDoKICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVz
dENvbnRyb2xsZXJNYWMubW06Ci0gICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL09iakNDb250
cm9sbGVyLm06CiAgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW06CiAg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1dvcmtRdWV1ZUl0ZW1NYWMubW06CiAKQEAgLTUw
Myw2ICs1MTAsMTAgQEAKICAgICAgICAgKGNyZWF0ZV93aW5kb3cpOgogICAgICAgICAobWFpbik6
CiAgICAgICAgICogR3RrTGF1bmNoZXIvbWFpbi5jcHA6IFJlbW92ZWQuCis9PT09PT09CisgICAg
ICAgICgtW09iakNDb250cm9sbGVyIGlkZW50aXR5SXNFcXVhbDo6XSk6IENvbXBhcmUgc3RyaW5n
cyB3aXRoIHN0cmluZworICAgICAgICBlcXVhbGl0eSBpbnN0ZWFkIG9mIGlkZW50aXkgZXF1YWxp
dHkuCis+Pj4+Pj4+IGRhZWY5NjIuLi4gICAgICAgICBOb3QgcmV2aWV3ZWQuOldlYktpdFRvb2xz
L0NoYW5nZUxvZwogCiAyMDA3LTExLTE5ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxp
dmllcnMuY29tPgogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
T2JqQ0NvbnRyb2xsZXIubSBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9PYmpDQ29u
dHJvbGxlci5tCmluZGV4IGI1ZjJjNDIuLjFiOWFiYjcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9PYmpDQ29udHJvbGxlci5tCisrKyBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9PYmpDQ29udHJvbGxlci5tCkBAIC0xMDAsNiArMTAwLDggQEAKIAog
LSAoQk9PTClpZGVudGl0eUlzRXF1YWw6KFdlYlNjcmlwdE9iamVjdCAqKWEgOihXZWJTY3JpcHRP
YmplY3QgKiliCiB7CisgICAgaWYgKFthIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0g
JiYgW2IgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIFso
TlNTdHJpbmcgKilhIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKiliXTsKICAgICByZXR1cm4g
YSA9PSBiOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17549</attachid>
            <date>2007-11-27 01:21:55 -0800</date>
            <delta_ts>2007-12-14 15:48:43 -0800</delta_ts>
            <desc>[2/6] JavaScriptCore:</desc>
            <filename>-JavaScriptCore-.patch</filename>
            <type>text/plain</type>
            <size>75527</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">M2MxNGIxMGIyM2QzNmUxYWU0ZGI5NTg5ZTNjODUzNWRjYjk4ZDYyZApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGZh
ODlkNmMuLjQxZmQwMTkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NiBAQAorMjAwNy0xMS0yNiAg
TWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdl
ZC4KKworICAgICAgICAtIEZpeGVkICJTdGFjayBvdmVyZmxvdyBjcmFzaCBpbiBKYXZhU2NyaXB0
IGdhcmJhZ2UgY29sbGVjdG9yIG1hcmsgcGFzcyIKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMTYKKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBt
YXJrIHN0YWNrLiBUaGlzIHZlcnNpb24gaXMgbm90IHN1aXRhYmxlIGZvciBwcmltZSB0aW1lIGJl
Y2F1c2UgaXQgbWFrZXMgYQorICAgICAgICBodWdlIGFsbG9jYXRpb24gb24gZXZlcnkgY29sbGVj
dCwgYW5kIHBvdGVudGlhbGx5IG1ha2VzIG1hcmtpbmcgb2YgZGV0YWNoZWQgc3VidHJlZXMKKyAg
ICAgICAgc2xvdy4gQnV0IGl0IGlzIGEgLjIlIC0gLjQlIHNwZWVkdXAgZXZlbiB3aXRob3V0IG11
Y2ggdHdlYWtpbmcuCisgICAgICAgIAorICAgICAgICBUaGUgYmFzaWMgYXBwcm9hY2ggaXMgdG8g
cmVwbGFjZSBtYXJrKCkgbWV0aG9kcyB3aXRoCisgICAgICAgIG1hcmtDaGlsZHJlbihNYXJrU3Rh
Y2smKSBtZXRob2RzLiBSZWFjaGFibGUgcmVmZXJlbmNlcyBhcmUgcHVzaGVkCisgICAgICAgIG9u
dG8gYSBtYXJrIHN0YWNrICh3aGljaCBlbmNhcHN1bGF0ZXMgaWdub3JpbmcgYWxyZWFkeS1tYXJr
ZWQKKyAgICAgICAgcmVmZXJlbmNlcykuIAorICAgICAgICAKKyAgICAgICAgT2JqZWN0cyBhcmUg
bm8gbG9uZ2VyIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZXR0aW5nIHRoZWlyIG93bgorICAg
ICAgICBtYXJrIGJpdHMsIHRoZSBjb2xsZWN0b3IgZG9lcyB0aGF0LiBUaGlzIG1lYW5zIHRoYXQg
Zm9yIG9iamVjdHMgb24KKyAgICAgICAgdGhlIG51bWJlciBoZWFwIHdlIGRvbid0IGhhdmUgdG8g
Y2FsbCBtYXJrQ2hpbGRyZW4oKSBhdCBhbGwgc2luY2UKKyAgICAgICAgd2Uga25vdyB0aGVyZSBh
cmVuJ3QgYW55LgorICAgICAgICAKKyAgICAgICAgVGhlIG1hcmsgcGhhc2Ugb2YgY29sbGVjdCBw
dXNoZXMgcm9vdHMgb250byB0aGUgbWFyayBzdGFjaworICAgICAgICBhbmQgZHJhaW5zIGl0IGFz
IG9mdGVuIGFzIHBvc3NpYmxlLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGFwcHJv
YWNoIHZpYWJsZSByZXF1aXJlcyBhIGNvbnN0YW50LXNpemUgbWFyayBzdGFjaworICAgICAgICBh
bmQgYSBzbG93IGZhbGxiYWNrIGFwcHJvYWNoIGZvciB3aGVuIHRoZSBzdGFjayBzaXplIGlzIGV4
Y2VlZGVkLAorICAgICAgICBwbHVzIG9wdGltaXphdGlvbnMgdG8gbWFrZSB0aGUgcmVxdWlyZWQg
c3RhY2sgc21hbGwgaW4gY29tbW9uCisgICAgICAgIGNhc2VzLiBUaGlzIHNob3VsZCBiZSBkb2Fi
bGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IEV4cG9ydCBuZXcgc3ltYm9scy4K
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQg
bmV3IGZpbGUuCisgICAgICAgICoga2pzL2NvbGxlY3Rvci5jcHA6CisgICAgICAgIChLSlM6OkNv
bGxlY3Rvcjo6aGVhcEFsbG9jYXRlKToKKyAgICAgICAgKEtKUzo6ZHJhaW5NYXJrU3RhY2spOiBI
ZWxwZXIgZm9yIGFsbCBvZiB0aGUgYmVsb3cuCisgICAgICAgIChLSlM6OkNvbGxlY3Rvcjo6bWFy
a1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KTogVXNlIG1hcmsgc3RhY2suCisgICAgICAgIChL
SlM6OkNvbGxlY3Rvcjo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSk6IGRpdHRvCisg
ICAgICAgIChLSlM6OkNvbGxlY3Rvcjo6bWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkpOiBk
aXR0bworICAgICAgICAoS0pTOjpDb2xsZWN0b3I6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKTogZGl0
dG8KKyAgICAgICAgKEtKUzo6Q29sbGVjdG9yOjptYXJrTWFpblRocmVhZE9ubHlPYmplY3RzKTog
ZGl0dG8KKyAgICAgICAgKEtKUzo6Q29sbGVjdG9yOjpjb2xsZWN0KTogZGl0dG8KKyAgICAgICAg
KiBranMvY29sbGVjdG9yLmg6CisgICAgICAgIChLSlM6OkNvbGxlY3Rvcjo6Y2VsbE1heUhhdmVS
ZWZzKTogSGVscGVyIGZvciBNYXJrU3RhY2suCisKKyAgICAgICAgKiBranMvTWFya1N0YWNrLmg6
IEFkZGVkLiBUaGUgYWN0dWFsIG1hcmsgc3RhY2sgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChL
SlM6Ok1hcmtTdGFjazo6cHVzaCk6CisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cHVzaEF0b20p
OgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OnBvcCk6CisgICAgICAgIChLSlM6Ok1hcmtTdGFj
azo6aXNFbXB0eSk6CisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cmVzZXJ2ZUNhcGFjaXR5KToK
KworICAgICAgICBDaGFuZ2VkIG1hcmsoKSBtZXRob2RzIHRvIG1hcmtDaGlsZHJlbigpIG1ldGhv
ZHM6CisgICAgICAgIAorICAgICAgICAqIGtqcy9FeGVjU3RhdGUuY3BwOgorICAgICAgICAoS0pT
OjpFeGVjU3RhdGU6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICoga2pzL0V4ZWNTdGF0ZS5oOgor
ICAgICAgICAqIGtqcy9KU1dyYXBwZXJPYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpKU1dyYXBw
ZXJPYmplY3Q6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICoga2pzL0pTV3JhcHBlck9iamVjdC5o
OgorICAgICAgICAqIGtqcy9hcnJheV9pbnN0YW5jZS5jcHA6CisgICAgICAgIChLSlM6OkFycmF5
SW5zdGFuY2U6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICoga2pzL2FycmF5X2luc3RhbmNlLmg6
CisgICAgICAgICoga2pzL2Jvb2xfb2JqZWN0LmNwcDoKKyAgICAgICAgKEJvb2xlYW5JbnN0YW5j
ZTo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBranMvYm9vbF9vYmplY3QuaDoKKyAgICAgICAg
KiBranMvZXJyb3Jfb2JqZWN0LmNwcDoKKyAgICAgICAgKiBranMvZXJyb3Jfb2JqZWN0Lmg6Cisg
ICAgICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6Om1h
cmtDaGlsZHJlbik6CisgICAgICAgIChLSlM6OkFyZ3VtZW50czo6QXJndW1lbnRzKToKKyAgICAg
ICAgKEtKUzo6QXJndW1lbnRzOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoS0pTOjpBY3RpdmF0
aW9uSW1wOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGtqcy9mdW5jdGlvbi5oOgorICAgICAg
ICAqIGtqcy9pbnRlcm5hbC5jcHA6CisgICAgICAgIChLSlM6OkdldHRlclNldHRlckltcDo6bWFy
a0NoaWxkcmVuKToKKyAgICAgICAgKiBranMvaW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoS0pT
OjpJbnRlcnByZXRlcjo6bWFya1Jvb3RzKToKKyAgICAgICAgKiBranMvaW50ZXJwcmV0ZXIuaDoK
KyAgICAgICAgKiBranMvbGlzdC5jcHA6CisgICAgICAgIChLSlM6Okxpc3Q6Om1hcmtQcm90ZWN0
ZWRMaXN0c1Nsb3dDYXNlKToKKyAgICAgICAgKiBranMvbGlzdC5oOgorICAgICAgICAoS0pTOjpM
aXN0OjptYXJrUHJvdGVjdGVkTGlzdHMpOgorICAgICAgICAqIGtqcy9vYmplY3QuY3BwOgorICAg
ICAgICAoS0pTOjpKU09iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBranMvb2JqZWN0
Lmg6CisgICAgICAgIChLSlM6OlNjb3BlQ2hhaW46Om1hcmtDaGlsZHJlbik6CisgICAgICAgICog
a2pzL3Byb3BlcnR5X21hcC5jcHA6CisgICAgICAgIChLSlM6OlByb3BlcnR5TWFwOjptYXJrQ2hp
bGRyZW4pOgorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9tYXAuaDoKKyAgICAgICAgKiBranMvc2Nv
cGVfY2hhaW4uaDoKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5jcHA6CisgICAgICAgIChL
SlM6OlN0cmluZ0luc3RhbmNlOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGtqcy9zdHJpbmdf
b2JqZWN0Lmg6CisKIDIwMDctMTEtMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1pdHouCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5k
ZXggMzVmMDFiNy4uYjMzZmFlZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cApAQCAtMTIy
LDEwICsxMjIsMTAgQEAgX19aTjNLSlMxMUludGVycHJldGVyMTdzdGFydFRpbWVvdXRDaGVja0V2
CiBfX1pOM0tKUzExSW50ZXJwcmV0ZXIyMXNob3VsZFByaW50RXhjZXB0aW9uc0V2CiBfX1pOM0tK
UzExSW50ZXJwcmV0ZXIyNHNldFNob3VsZFByaW50RXhjZXB0aW9uc0ViCiBfX1pOM0tKUzExSW50
ZXJwcmV0ZXIyN3Jlc2V0R2xvYmFsT2JqZWN0UHJvcGVydGllc0V2Ci1fX1pOM0tKUzExSW50ZXJw
cmV0ZXI0bWFya0V2CiBfX1pOM0tKUzExSW50ZXJwcmV0ZXI2c19ob29rRQogX19aTjNLSlMxMUlu
dGVycHJldGVyOGV2YWx1YXRlRVJLTlNfN1VTdHJpbmdFaVBLTlNfNVVDaGFyRWlQTlNfN0pTVmFs
dWVFCiBfX1pOM0tKUzExSW50ZXJwcmV0ZXI4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VpUzNfUE5T
XzdKU1ZhbHVlRQorX19aTjNLSlMxMUludGVycHJldGVyOW1hcmtSb290c0VSTlNfOU1hcmtTdGFj
a0UKIF9fWk4zS0pTMTFJbnRlcnByZXRlckMxRXYKIF9fWk4zS0pTMTFJbnRlcnByZXRlckMyRXYK
IF9fWk4zS0pTMTFJbnRlcnByZXRlckQxRXYKQEAgLTE0NCw2ICsxNDQsNyBAQCBfX1pOM0tKUzEz
QXJyYXlJbnN0YW5jZTRpbmZvRQogX19aTjNLSlMxM1NhdmVkQnVpbHRpbnNDMUV2CiBfX1pOM0tK
UzEzU2F2ZWRCdWlsdGluc0QxRXYKIF9fWk4zS0pTMTNqc093bmVkU3RyaW5nRVJLTlNfN1VTdHJp
bmdFCitfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2UxMm1hcmtDaGlsZHJlbkVSTlNfOU1hcmtTdGFj
a0UKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3Rh
dGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2UxNmdldFByb3Bl
cnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFCiBfX1pOM0tK
UzE0U3RyaW5nSW5zdGFuY2UxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCkBAIC0xNTIsNyArMTUzLDYgQEAgX19a
TjNLSlMxNFN0cmluZ0luc3RhbmNlM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmll
ckVQTlNfN0pTVmFsdWVFaQogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlNGluZm9FCiBfX1pOM0tK
UzE0U3RyaW5nSW5zdGFuY2VDMUVQTlNfOEpTT2JqZWN0RVJLTlNfN1VTdHJpbmdFCiBfX1pOM0tK
UzE0U3RyaW5nSW5zdGFuY2VDMkVQTlNfOEpTT2JqZWN0RVJLTlNfN1VTdHJpbmdFCi1fX1pOM0tK
UzE1SlNXcmFwcGVyT2JqZWN0NG1hcmtFdgogX19aTjNLSlMxNVNhdmVkUHJvcGVydGllc0MxRXYK
IF9fWk4zS0pTMTVTYXZlZFByb3BlcnRpZXNEMUV2CiBfX1pOM0tKUzE2UnVudGltZU9iamVjdElt
cDRpbmZvRQpAQCAtMjAxLDYgKzIwMSw3IEBAIF9fWk4zS0pTOERlYnVnZ2VyOWV4Y2VwdGlvbkVQ
TlNfOUV4ZWNTdGF0ZUVpaVBOU183SlNWYWx1ZUUKIF9fWk4zS0pTOERlYnVnZ2VyQzJFdgogX19a
TjNLSlM4RGVidWdnZXJEMkV2CiBfX1pOM0tKUzhKU09iamVjdDExaGFzSW5zdGFuY2VFUE5TXzlF
eGVjU3RhdGVFUE5TXzdKU1ZhbHVlRQorX19aTjNLSlM4SlNPYmplY3QxMm1hcmtDaGlsZHJlbkVS
TlNfOU1hcmtTdGFja0UKIF9fWk4zS0pTOEpTT2JqZWN0MTJyZW1vdmVEaXJlY3RFUktOU18xMElk
ZW50aWZpZXJFCiBfX1pOM0tKUzhKU09iamVjdDE0Y2FsbEFzRnVuY3Rpb25FUE5TXzlFeGVjU3Rh
dGVFUFMwX1JLTlNfNExpc3RFCiBfX1pOM0tKUzhKU09iamVjdDE0ZGVsZXRlUHJvcGVydHlFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCkBAIC0yMTIsNyArMjEzLDYgQEAgX19aTjNL
SlM4SlNPYmplY3QyMmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3RFUk5TXzEyUHJvcGVydHlTbG90RVBQ
TlNfN0pTVmFsdWVFCiBfX1pOM0tKUzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWkKIF9fWk4zS0pTOEpTT2JqZWN0M3B1dEVQTlNfOUV4
ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRWkKIF9fWk4zS0pTOEpTT2JqZWN0NGNhbGxFUE5TXzlFeGVj
U3RhdGVFUFMwX1JLTlNfNExpc3RFCi1fX1pOM0tKUzhKU09iamVjdDRtYXJrRXYKIF9fWk4zS0pT
OEpTT2JqZWN0OWNvbnN0cnVjdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzRMaXN0RQogX19aTjNLSlM4
SlNPYmplY3Q5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRVJLTlNfNExpc3RFUktOU18xMElkZW50
aWZpZXJFUktOU183VVN0cmluZ0VpCiBfX1pOM0tKUzhKU09iamVjdDlwdXREaXJlY3RFUktOU18x
MElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk5YTBlMmYuLmQ4
MWQ0OTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTksNiArOTksNyBAQAogCQk2NTkyQzMxODA5OEI3
REUxMDAwM0Q0RjYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NTkyQzMxNjA5OEI3REUxMDAwM0Q0RjYgLyogVmVjdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU5MkMzMTkwOThC
N0RFMTAwMDNENEY2IC8qIFZlY3RvclRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5MkMzMTcwOThCN0RFMTAwMDNENEY2IC8qIFZlY3RvclRy
YWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTY1QTdBNUUwMENEMUQ1MEUwMDA2MUY4RSAvKiBMYWJlbFN0YWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4MTNBODBDRDFEMDE5MDBERjU5RDYg
LyogTGFiZWxTdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTY1QThCOERCMENGNDA4RjQwMERDN0MyNyAvKiBNYXJrU3RhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QThCOEQ4MENGNDA4RTkw
MERDN0MyNyAvKiBNYXJrU3RhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk2NUIxNzQ5QTA5RDBGRUI3MDA4MjAzMzkgLyogYXJyYXlfb2JqZWN0
Lmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVC
MTc0OTkwOUQwRkVCNzAwODIwMzM5IC8qIGFycmF5X29iamVjdC5sdXQuaCAqLzsgfTsKIAkJNjVC
MTc0RjUwOUQxMDBGQTAwODIwMzM5IC8qIG1hdGhfb2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCMTc0RjEwOUQxMDBGQTAwODIwMzM5
IC8qIG1hdGhfb2JqZWN0Lmx1dC5oICovOyB9OwogCQk2NUIxNzRGNjA5RDEwMEZBMDA4MjAzMzkg
LyogbnVtYmVyX29iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1QjE3NEYyMDlEMTAwRkEwMDgyMDMzOSAvKiBudW1iZXJfb2JqZWN0Lmx1
dC5oICovOyB9OwpAQCAtNTEwLDYgKzUxMSw3IEBACiAJCTY1OTEyNkJDMEJERDE3MjgwMDE5MjFG
QiAvKiBBbGxJbk9uZUZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFsbEluT25lRmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTJD
MzE2MDk4QjdERTEwMDAzRDRGNiAvKiBWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTkyQzMx
NzA5OEI3REUxMDAwM0Q0RjYgLyogVmVjdG9yVHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWZWN0b3JUcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNjVBOEI4RDgwQ0Y0MDhFOTAwREM3QzI3IC8qIE1hcmtTdGFjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjVCMTc0OTkwOUQwRkVCNzAwODIwMzM5IC8qIGFycmF5X29iamVjdC5sdXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBmaWxlOyBuYW1lID0gYXJyYXlfb2JqZWN0Lmx1dC5oOyBwYXRoID0gLi4vLi4vLi4v
Li4vLi4vc3ltcm9vdHMvRGVidWcvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvYXJyYXlf
b2JqZWN0Lmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUIxNzRCRTA5RDEw
MDAyMDA4MjAzMzkgLyogY2hhcnRhYmxlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgZmlsZUVuY29kaW5nID0gMzA7IHBh
dGggPSBjaGFydGFibGVzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1QjE3NEYx
MDlEMTAwRkEwMDgyMDMzOSAvKiBtYXRoX29iamVjdC5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBu
YW1lID0gbWF0aF9vYmplY3QubHV0Lmg7IHBhdGggPSAuLi8uLi8uLi8uLi8uLi9zeW1yb290cy9E
ZWJ1Zy9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9tYXRoX29iamVjdC5sdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDgsNiArMTAxMCw3IEBACiAJCQkJRjY5MkE4
NjgwMjU1NTk3RDAxRkY2MEY3IC8qIGxvb2t1cC5jcHAgKi8sCiAJCQkJRjY5MkE4NjkwMjU1NTk3
RDAxRkY2MEY3IC8qIGxvb2t1cC5oICovLAogCQkJCUY2OTJBODZBMDI1NTU5N0QwMUZGNjBGNyAv
KiBtYXRoX29iamVjdC5jcHAgKi8sCisJCQkJNjVBOEI4RDgwQ0Y0MDhFOTAwREM3QzI3IC8qIE1h
cmtTdGFjay5oICovLAogCQkJCUY2OTJBODZCMDI1NTU5N0QwMUZGNjBGNyAvKiBtYXRoX29iamVj
dC5oICovLAogCQkJCUY2OTJBODZEMDI1NTU5N0QwMUZGNjBGNyAvKiBub2Rlcy5jcHAgKi8sCiAJ
CQkJRjY5MkE4NkUwMjU1NTk3RDAxRkY2MEY3IC8qIG5vZGVzLmggKi8sCkBAIC0xMTcwLDYgKzEx
NzMsNyBAQAogCQkJCTE0OEExNjI3MDk1RDE2QkIwMDY2NkQwRCAvKiBMaXN0UmVmUHRyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk2NUYzNDA5NDBDRDZDMUMwMDBDMENBOEIgLyogTG9jYWxTdG9yYWdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1REJEMThCMDBDNTQwMUE3MDBDMTVFQUUgLyogTWFsbG9j
Wm9uZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1QThCOERCMENGNDA4RjQwMERDN0My
NyAvKiBNYXJrU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjY1NTU5MEEyMDQ5NzEwMDM4
QTE5NCAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJGNUI4NDA4MjJBMUM3
MDA3MzY5NzUgLyogTlBfanNvYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDNGNTZBMDk5
MTE5MDAwMEFENzFCOCAvKiBOb25jb3B5YWJsZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9F
eGVjU3RhdGUuY3BwCmluZGV4IGY4MjhhNjkuLjVhMjJlNjkgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3Rh
dGUuY3BwCkBAIC04OCwxMCArODgsMTAgQEAgRXhlY1N0YXRlOjp+RXhlY1N0YXRlKCkKICAgICBt
X2ludGVycHJldGVyLT5zZXRDdXJyZW50RXhlYyhtX3NhdmVkRXhlY1N0YXRlKTsKIH0KIAotdm9p
ZCBFeGVjU3RhdGU6Om1hcmsoKQordm9pZCBFeGVjU3RhdGU6Om1hcmtDaGlsZHJlbihNYXJrU3Rh
Y2smIHN0YWNrKQogewogICAgIGZvciAoRXhlY1N0YXRlKiBleGVjID0gdGhpczsgZXhlYzsgZXhl
YyA9IGV4ZWMtPm1fY2FsbGluZ0V4ZWNTdGF0ZSkKLSAgICAgICAgZXhlYy0+bV9zY29wZUNoYWlu
Lm1hcmsoKTsKKyAgICAgICAgZXhlYy0+bV9zY29wZUNoYWluLm1hcmtDaGlsZHJlbihzdGFjayk7
CiB9CiAKIHZvaWQgRXhlY1N0YXRlOjpzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaCBi
L0phdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAppbmRleCA1MDEyMzUwLi42NWYyMzNmIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgKKysrIGIvSmF2YVNjcmlw
dENvcmUva2pzL0V4ZWNTdGF0ZS5oCkBAIC0xMDAsNyArMTAwLDcgQEAgbmFtZXNwYWNlIEtKUyAg
ewogCiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xvYmFsT2JqZWN0Kik7CiAgICAg
ICAgIAotICAgICAgICB2b2lkIG1hcmsoKTsKKyAgICAgICAgdm9pZCBtYXJrQ2hpbGRyZW4oTWFy
a1N0YWNrJik7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBh
dm9pZCBhY2Nlc3NpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZXNlIGlkZW50aWZpZXJz
IGluCiAgICAgICAgIC8vIGltcG9ydGFudCBwcm9wZXJ0eSBsb29rdXAgZnVuY3Rpb25zLCB0byBh
dm9pZCB0YWtpbmcgUElDIGJyYW5jaGVzIGluIE1hY2gtTyBiaW5hcmllcwpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9r
anMvSlNXcmFwcGVyT2JqZWN0LmNwcAppbmRleCBkZDE2MWY3Li4zNmU3NTg0IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ranMvSlNXcmFwcGVyT2JqZWN0LmNwcApAQCAtMjQsMTEgKzI0LDEwIEBACiAKIG5hbWVz
cGFjZSBLSlMgewogCi12b2lkIEpTV3JhcHBlck9iamVjdDo6bWFyaygpIAordm9pZCBKU1dyYXBw
ZXJPYmplY3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKSAKIHsKLSAgICBKU09iamVj
dDo6bWFyaygpOwotICAgIGlmIChtX2ludGVybmFsVmFsdWUgJiYgIW1faW50ZXJuYWxWYWx1ZS0+
bWFya2VkKCkpCi0gICAgICAgIG1faW50ZXJuYWxWYWx1ZS0+bWFyaygpOworICAgIEpTT2JqZWN0
OjptYXJrQ2hpbGRyZW4oc3RhY2spOworICAgIHN0YWNrLnB1c2hBdG9tKG1faW50ZXJuYWxWYWx1
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEtKUwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
a2pzL0pTV3JhcHBlck9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9iamVj
dC5oCmluZGV4IDBhMDZjOWYuLmQ1MWYwYmQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tq
cy9KU1dyYXBwZXJPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVyT2Jq
ZWN0LmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAqLwogICAg
ICAgICB2b2lkIHNldEludGVybmFsVmFsdWUoSlNWYWx1ZSogdik7CiAgICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVu
KE1hcmtTdGFjayYgc3RhY2spOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBKU1Zh
bHVlKiBtX2ludGVybmFsVmFsdWU7CkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIAogICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChKU1ZhbHVl
KiBwcm90bykKICAgICAgICAgOiBKU09iamVjdChwcm90bykKLSAgICAgICAgLCBtX2ludGVybmFs
VmFsdWUoMCkKKyAgICAgICAgLCBtX2ludGVybmFsVmFsdWUoanNOdWxsKCkpCiAgICAgewogICAg
IH0KICAgICAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9NYXJrU3RhY2suaCBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9NYXJrU3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jOTZiNGFmCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL01h
cmtTdGFjay5oCkBAIC0wLDAgKzEsOTYgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zm
c2V0OiA0IC0qLQorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBNYXJrU3RhY2tfaAorI2RlZmlu
ZSBNYXJrU3RhY2tfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgImNvbGxl
Y3Rvci5oIgorI2luY2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNw
YWNlIEtKUyB7CisKKyAgICBjbGFzcyBNYXJrU3RhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dm9pZCBwdXNoKEpTVmFsdWUqIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFs
dWUtPm1hcmtlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLT5hc0NlbGwoKTsKKyAgICAgICAgICAgIENvbGxlY3Rvcjo6bWFya0Nl
bGwoY2VsbCk7CisgICAgICAgICAgICBpZiAoIUNvbGxlY3Rvcjo6Y2VsbE1heUhhdmVSZWZzKGNl
bGwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0YWNr
LnNpemUoKSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7CisgICAgICAgICAgICBtX3N0YWNrLnVuY2hl
Y2tlZEFwcGVuZChjZWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaChKU0NlbGwq
IGNlbGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5tYXJrZWQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwp
OworICAgICAgICAgICAgaWYgKCFDb2xsZWN0b3I6OmNlbGxNYXlIYXZlUmVmcyhjZWxsKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBBU1NFUlQobV9zdGFjay5zaXplKCkg
PCBtX3N0YWNrLmNhcGFjaXR5KCkpOworICAgICAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBl
bmQoY2VsbCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHB1c2hBdG9tKEpTVmFsdWUqIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWUtPm1hcmtlZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLT5hc0Nl
bGwoKTsKKyAgICAgICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHB1c2hBdG9tKEpTQ2VsbCogY2VsbCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNlbGwtPm1hcmtlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CisgICAgICAgIH0KKworICAgICAgICBK
U0NlbGwqIHBvcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0YWNrLnNpemUo
KSA+IDApOworICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gbV9zdGFjay5sYXN0KCk7CisgICAg
ICAgICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBjZWxsOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBy
ZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IHNpemUpIAorICAgICAgICB7CisgICAgICAgICAgICBtX3N0
YWNrLnJlc2VydmVDYXBhY2l0eShzaXplKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgVmVjdG9yPEpTQ2VsbCo+IG1fc3RhY2s7CisgICAgfTsKKworfQorCisjZW5kaWYgLy8g
TWFya1N0YWNrX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5j
ZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFuY2UuY3BwCmluZGV4IDI4MjUx
MzIuLmU5NDA3ODYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5j
ZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmNwcApAQCAtNDAy
LDI2ICs0MDIsMjMgQEAgdm9pZCBBcnJheUluc3RhbmNlOjpzZXRMZW5ndGgodW5zaWduZWQgbmV3
TGVuZ3RoKQogICAgIG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwogfQogCi12b2lkIEFycmF5SW5zdGFu
Y2U6Om1hcmsoKQordm9pZCBBcnJheUluc3RhbmNlOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBz
dGFjaykKIHsKLSAgICBKU09iamVjdDo6bWFyaygpOworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRy
ZW4oc3RhY2spOwogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX2xlbmd0aCwgbV92ZWN0b3JMZW5n
dGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
IHsKICAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAg
ICAgaWYgKHZhbHVlICYmICF2YWx1ZS0+bWFya2VkKCkpCi0gICAgICAgICAgICB2YWx1ZS0+bWFy
aygpOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTsK
ICAgICB9CiAKICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9z
cGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHZhbHVlID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPm1hcmtl
ZCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgc3RhY2sucHVzaChpdC0+c2Vjb25kKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5oIGIv
SmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmgKaW5kZXggOTEzZDBjZC4uYmIwYTM4
ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmgKQEAgLTQyLDcgKzQyLDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5h
bWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
bWFyaygpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAKICAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xf
b2JqZWN0LmNwcAppbmRleCA5MTZmZTUzLi5hOTNjNTNkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9ib29sX29i
amVjdC5jcHAKQEAgLTM4LDYgKzM4LDEyIEBAIEJvb2xlYW5JbnN0YW5jZTo6Qm9vbGVhbkluc3Rh
bmNlKEpTT2JqZWN0ICpwcm90bykKIHsKIH0KIAordm9pZCBCb29sZWFuSW5zdGFuY2U6Om1hcmtD
aGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKQoreworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4o
c3RhY2spOworICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoaW50ZXJuYWxWYWx1
ZSgpKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCb29sZWFuUHJv
dG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTUuNi40CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuaCBiL0phdmFTY3JpcHRDb3Jl
L2tqcy9ib29sX29iamVjdC5oCmluZGV4IDNhYjA0YTcuLjJiOGMwMDAgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2tqcy9ib29sX29iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9i
b29sX29iamVjdC5oCkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEJvb2xl
YW5JbnN0YW5jZShKU09iamVjdCAqcHJvdG8pOwogCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgdmlydHVhbCB2b2lk
IG1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKTsKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87CiAgIH07CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0
b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAKaW5kZXggN2FkZmI4Mi4u
MzQ5MzRlMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgImxp
c3QuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJ2YWx1ZS5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzZXRqbXAuaD4KQEAgLTI3Nyw2ICsyNzgsOCBAQCBj
b2xsZWN0OgogCiAgICAgdGFyZ2V0QmxvY2sgPSAoQmxvY2sqKWFsbG9jYXRlQmxvY2soKTsKICAg
ICB0YXJnZXRCbG9jay0+ZnJlZUxpc3QgPSB0YXJnZXRCbG9jay0+Y2VsbHM7CisgICAgaWYgKGhl
YXBUeXBlID09IFByaW1hcnlIZWFwKQorICAgICAgICB0YXJnZXRCbG9jay0+bWF5SGF2ZVJlZnMg
PSAxOwogICAgIHRhcmdldEJsb2NrVXNlZENlbGxzID0gMDsKICAgICBoZWFwLmJsb2Nrc1t1c2Vk
QmxvY2tzXSA9IChDb2xsZWN0b3JCbG9jayopdGFyZ2V0QmxvY2s7CiAgICAgaGVhcC51c2VkQmxv
Y2tzID0gdXNlZEJsb2NrcyArIDE7CkBAIC00NzksNyArNDgyLDE0IEBAIHZvaWQgQ29sbGVjdG9y
OjpyZWdpc3RlclRocmVhZCgpCiAvLyBjZWxsIHNpemUgbmVlZHMgdG8gYmUgYSBwb3dlciBvZiB0
d28gZm9yIHRoaXMgdG8gYmUgdmFsaWQKICNkZWZpbmUgSVNfSEFMRl9DRUxMX0FMSUdORUQocCkg
KCgoaW50cHRyX3QpKHApICYgKENFTExfTUFTSyA+PiAxKSkgPT0gMCkKIAotdm9pZCBDb2xsZWN0
b3I6Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSh2b2lkICpzdGFydCwgdm9pZCAqZW5k
KQorc3RhdGljIGlubGluZSB2b2lkIGRyYWluTWFya1N0YWNrKE1hcmtTdGFjayYgc3RhY2spCit7
CisgICAgd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHN0YWNrLnBvcCgpLT5tYXJr
Q2hpbGRyZW4oc3RhY2spOworfQorCisKK3ZvaWQgQ29sbGVjdG9yOjptYXJrU3RhY2tPYmplY3Rz
Q29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiBzdGFjaywgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkK
IHsKICAgaWYgKHN0YXJ0ID4gZW5kKSB7CiAgICAgdm9pZCogdG1wID0gc3RhcnQ7CkBAIC01MjEs
OCArNTMxLDggQEAgdm9pZCBDb2xsZWN0b3I6Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVs
eSh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQogICAgICAgICAgICAgICBpZiAoKHByaW1hcnlCbG9j
a3NbYmxvY2tdID09IGJsb2NrQWRkcikgJiAob2Zmc2V0IDw9IGxhc3RDZWxsT2Zmc2V0KSkgewog
ICAgICAgICAgICAgICAgICAgaWYgKCgoQ29sbGVjdG9yQ2VsbCopeEFzQml0cyktPnUuZnJlZUNl
bGwuemVyb0lmRnJlZSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAg
PSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpOwotICAgICAgICAgICAgICAgICAg
ICAgIGlmICghaW1wLT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wLT5t
YXJrKCk7CisgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChpbXApOworICAgICAgICAg
ICAgICAgICAgICAgIGRyYWluTWFya1N0YWNrKHN0YWNrKTsKICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICB9CkBAIC01MzMsNyArNTQz
LDcgQEAgdm9pZCBDb2xsZWN0b3I6Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSh2b2lk
ICpzdGFydCwgdm9pZCAqZW5kKQogICB9CiB9CiAKLXZvaWQgQ29sbGVjdG9yOjptYXJrQ3VycmVu
dFRocmVhZENvbnNlcnZhdGl2ZWx5KCkKK3ZvaWQgQ29sbGVjdG9yOjptYXJrQ3VycmVudFRocmVh
ZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgc3RhY2spCiB7CiAgICAgLy8gc2V0am1wIGZvcmNl
cyB2b2xhdGlsZSByZWdpc3RlcnMgb250byB0aGUgc3RhY2sKICAgICBqbXBfYnVmIHJlZ2lzdGVy
czsKQEAgLTU1MCw3ICs1NjAsNyBAQCB2b2lkIENvbGxlY3Rvcjo6bWFya0N1cnJlbnRUaHJlYWRD
b25zZXJ2YXRpdmVseSgpCiAgICAgdm9pZCogc3RhY2tQb2ludGVyID0gJmR1bW15OwogICAgIHZv
aWQqIHN0YWNrQmFzZSA9IGN1cnJlbnRUaHJlYWRTdGFja0Jhc2UoKTsKIAotICAgIG1hcmtTdGFj
a09iamVjdHNDb25zZXJ2YXRpdmVseShzdGFja1BvaW50ZXIsIHN0YWNrQmFzZSk7CisgICAgbWFy
a1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KHN0YWNrLCBzdGFja1BvaW50ZXIsIHN0YWNrQmFz
ZSk7CiB9CiAKICNpZiBVU0UoTVVMVElQTEVfVEhSRUFEUykKQEAgLTY5Myw3ICs3MDMsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQqIG90aGVyVGhyZWFkU3RhY2tCYXNlKGNvbnN0IFBsYXRmb3JtVGhy
ZWFkUmVnaXN0ZXJzJiByZWdzLCBDbwogI2VuZGlmCiB9CiAKLXZvaWQgQ29sbGVjdG9yOjptYXJr
T3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShUaHJlYWQqIHRocmVhZCkKK3ZvaWQgQ29sbGVjdG9y
OjptYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smIHN0YWNrLCBUaHJlYWQq
IHRocmVhZCkKIHsKICAgc3VzcGVuZFRocmVhZCh0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKTsKIApA
QCAtNzAxLDI1ICs3MTEsMjUgQEAgdm9pZCBDb2xsZWN0b3I6Om1hcmtPdGhlclRocmVhZENvbnNl
cnZhdGl2ZWx5KFRocmVhZCogdGhyZWFkKQogICBzaXplX3QgcmVnU2l6ZSA9IGdldFBsYXRmb3Jt
VGhyZWFkUmVnaXN0ZXJzKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQsIHJlZ3MpOwogCiAgIC8vIG1h
cmsgdGhlIHRocmVhZCdzIHJlZ2lzdGVycwotICBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZl
bHkoKHZvaWQqKSZyZWdzLCAodm9pZCopKChjaGFyKikmcmVncyArIHJlZ1NpemUpKTsKKyAgbWFy
a1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KHN0YWNrLCAodm9pZCopJnJlZ3MsICh2b2lkKiko
KGNoYXIqKSZyZWdzICsgcmVnU2l6ZSkpOwogIAogICB2b2lkKiBzdGFja1BvaW50ZXIgPSBvdGhl
clRocmVhZFN0YWNrUG9pbnRlcihyZWdzKTsKICAgdm9pZCogc3RhY2tCYXNlID0gb3RoZXJUaHJl
YWRTdGFja0Jhc2UocmVncywgdGhyZWFkKTsKLSAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2
ZWx5KHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKKyAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZh
dGl2ZWx5KHN0YWNrLCBzdGFja1BvaW50ZXIsIHN0YWNrQmFzZSk7CiAKICAgcmVzdW1lVGhyZWFk
KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQpOwogfQogCiAjZW5kaWYKIAotdm9pZCBDb2xsZWN0b3I6
Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSgpCit2b2lkIENvbGxlY3Rvcjo6bWFya1N0
YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgc3RhY2spCiB7Ci0gIG1hcmtDdXJy
ZW50VGhyZWFkQ29uc2VydmF0aXZlbHkoKTsKKyAgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRp
dmVseShzdGFjayk7CiAKICNpZiBVU0UoTVVMVElQTEVfVEhSRUFEUykKICAgZm9yIChUaHJlYWQg
KnRocmVhZCA9IHJlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQgIT0gTlVMTDsgdGhyZWFkID0gdGhy
ZWFkLT5uZXh0KSB7CiAgICAgaWYgKCFwdGhyZWFkX2VxdWFsKHRocmVhZC0+cG9zaXhUaHJlYWQs
IHB0aHJlYWRfc2VsZigpKSkgewotICAgICAgbWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHko
dGhyZWFkKTsKKyAgICAgICAgbWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoc3RhY2ssIHRo
cmVhZCk7CiAgICAgfQogICB9CiAjZW5kaWYKQEAgLTc3MSwxOCArNzgxLDE3IEBAIHZvaWQgQ29s
bGVjdG9yOjpjb2xsZWN0T25NYWluVGhyZWFkT25seShKU1ZhbHVlKiB2YWx1ZSkKICAgICArK21h
aW5UaHJlYWRPbmx5T2JqZWN0Q291bnQ7CiB9CiAKLXZvaWQgQ29sbGVjdG9yOjptYXJrUHJvdGVj
dGVkT2JqZWN0cygpCit2b2lkIENvbGxlY3Rvcjo6bWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0
YWNrJiBzdGFjaykKIHsKICAgUHJvdGVjdENvdW50U2V0JiBwcm90ZWN0ZWRWYWx1ZXMgPSBLSlM6
OnByb3RlY3RlZFZhbHVlcygpOwogICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IHBy
b3RlY3RlZFZhbHVlcy5lbmQoKTsKICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0
ID0gcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgIEpTQ2Vs
bCAqdmFsID0gaXQtPmZpcnN0OwotICAgIGlmICghdmFsLT5tYXJrZWQoKSkKLSAgICAgIHZhbC0+
bWFyaygpOworICAgIHN0YWNrLnB1c2goaXQtPmZpcnN0KTsKKyAgICBkcmFpbk1hcmtTdGFjayhz
dGFjayk7CiAgIH0KIH0KIAotdm9pZCBDb2xsZWN0b3I6Om1hcmtNYWluVGhyZWFkT25seU9iamVj
dHMoKQordm9pZCBDb2xsZWN0b3I6Om1hcmtNYWluVGhyZWFkT25seU9iamVjdHMoTWFya1N0YWNr
JiBzdGFjaykKIHsKICNpZiBVU0UoTVVMVElQTEVfVEhSRUFEUykKICAgICBBU1NFUlQoIW9uTWFp
blRocmVhZCgpKTsKQEAgLTgxNCw3ICs4MjMsOCBAQCB2b2lkIENvbGxlY3Rvcjo6bWFya01haW5U
aHJlYWRPbmx5T2JqZWN0cygpCiAgICAgICAgICAgICAgICAgaWYgKGN1ckJsb2NrLT5jb2xsZWN0
T25NYWluVGhyZWFkT25seS5nZXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJC
bG9jay0+bWFya2VkLmdldChpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBp
bXAgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KGNlbGwpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaW1wLT5tYXJrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGlt
cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCsrY291bnQgPT0gbWFp
blRocmVhZE9ubHlPYmplY3RDb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTk1MCw5ICs5NjAsMTQgQEAgYm9vbCBDb2xsZWN0b3I6OmNvbGxlY3QoKQogCiAgIC8vIE1B
Uks6IGZpcnN0IG1hcmsgYWxsIHJlZmVyZW5jZWQgb2JqZWN0cyByZWN1cnNpdmVseSBzdGFydGlu
ZyBvdXQgZnJvbSB0aGUgc2V0IG9mIHJvb3Qgb2JqZWN0cwogCisgIHNpemVfdCBvcmlnaW5hbExp
dmVPYmplY3RzID0gcHJpbWFyeUhlYXAubnVtTGl2ZU9iamVjdHMgKyBudW1iZXJIZWFwLm51bUxp
dmVPYmplY3RzOworCisgIE1hcmtTdGFjayBzdGFjazsKKyAgc3RhY2sucmVzZXJ2ZUNhcGFjaXR5
KHByaW1hcnlIZWFwLm51bUxpdmVPYmplY3RzKTsKKwogI2lmbmRlZiBOREVCVUcKICAgLy8gRm9y
YmlkIG1hbGxvYyBkdXJpbmcgdGhlIG1hcmsgcGhhc2UuIE1hcmtpbmcgYSB0aHJlYWQgc3VzcGVu
ZHMgaXQsIHNvIAotICAvLyBhIG1hbGxvYyBpbnNpZGUgbWFyaygpIHdvdWxkIHJpc2sgYSBkZWFk
bG9jayB3aXRoIGEgdGhyZWFkIHRoYXQgaGFkIGJlZW4gCisgIC8vIGEgbWFsbG9jIGluc2lkZSBt
YXJrQ2hpbGRyZW4oKSB3b3VsZCByaXNrIGEgZGVhZGxvY2sgd2l0aCBhIHRocmVhZCB0aGF0IGhh
ZCBiZWVuIAogICAvLyBzdXNwZW5kZWQgd2hpbGUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCiAg
IGZhc3RNYWxsb2NGb3JiaWQoKTsKICNlbmRpZgpAQCAtOTYwLDI0ICs5NzUsMjUgQEAgYm9vbCBD
b2xsZWN0b3I6OmNvbGxlY3QoKQogICBpZiAoSW50ZXJwcmV0ZXI6OnNfaG9vaykgewogICAgIElu
dGVycHJldGVyKiBzY3IgPSBJbnRlcnByZXRlcjo6c19ob29rOwogICAgIGRvIHsKLSAgICAgIHNj
ci0+bWFyaygpOworICAgICAgc2NyLT5tYXJrUm9vdHMoc3RhY2spOworICAgICAgZHJhaW5NYXJr
U3RhY2soc3RhY2spOwogICAgICAgc2NyID0gc2NyLT5uZXh0OwogICAgIH0gd2hpbGUgKHNjciAh
PSBJbnRlcnByZXRlcjo6c19ob29rKTsKICAgfQogCi0gIG1hcmtTdGFja09iamVjdHNDb25zZXJ2
YXRpdmVseSgpOwotICBtYXJrUHJvdGVjdGVkT2JqZWN0cygpOwotICBMaXN0OjptYXJrUHJvdGVj
dGVkTGlzdHMoKTsKKyAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KHN0YWNrKTsKKyAg
bWFya1Byb3RlY3RlZE9iamVjdHMoc3RhY2spOworICBMaXN0OjptYXJrUHJvdGVjdGVkTGlzdHMo
c3RhY2spOworICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CiAjaWYgVVNFKE1VTFRJUExFX1RIUkVB
RFMpCiAgIGlmICghY3VycmVudFRocmVhZElzTWFpblRocmVhZCkKLSAgICBtYXJrTWFpblRocmVh
ZE9ubHlPYmplY3RzKCk7CisgICAgbWFya01haW5UaHJlYWRPbmx5T2JqZWN0cyhzdGFjayk7CiAj
ZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKICAgZmFzdE1hbGxvY0FsbG93KCk7CiAjZW5kaWYKICAg
ICAKLSAgc2l6ZV90IG9yaWdpbmFsTGl2ZU9iamVjdHMgPSBwcmltYXJ5SGVhcC5udW1MaXZlT2Jq
ZWN0cyArIG51bWJlckhlYXAubnVtTGl2ZU9iamVjdHM7CiAgIHNpemVfdCBudW1MaXZlT2JqZWN0
cyA9IHN3ZWVwPFByaW1hcnlIZWFwPihjdXJyZW50VGhyZWFkSXNNYWluVGhyZWFkKTsKICAgbnVt
TGl2ZU9iamVjdHMgKz0gc3dlZXA8TnVtYmVySGVhcD4oY3VycmVudFRocmVhZElzTWFpblRocmVh
ZCk7CiAgIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5oIGIvSmF2
YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5oCmluZGV4IGM4MzcyZjcuLjYwOTkwYTYgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ranMvY29sbGVjdG9yLmgKQEAgLTMxLDkgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBLSlMgewog
CisgIGNsYXNzIENvbGxlY3RvckJsb2NrOwogICBjbGFzcyBKU0NlbGw7CiAgIGNsYXNzIEpTVmFs
dWU7Ci0gIGNsYXNzIENvbGxlY3RvckJsb2NrOworICBjbGFzcyBNYXJrU3RhY2s7CiAKICAgY2xh
c3MgQ29sbGVjdG9yIHsKICAgcHVibGljOgpAQCAtNjUsNiArNjYsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgIHN0YXRpYyBib29sIGlzQ2VsbE1hcmtlZChjb25zdCBKU0NlbGwqKTsKICAgICBz
dGF0aWMgdm9pZCBtYXJrQ2VsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMgYm9vbCBjZWxsTWF5SGF2
ZVJlZnMoY29uc3QgSlNDZWxsKik7CiAKICAgICBlbnVtIEhlYXBUeXBlIHsgUHJpbWFyeUhlYXAs
IE51bWJlckhlYXAgfTsKIApAQCAtNzgsMTIgKzgwLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IENvbGxlY3RvcigpOwogCiAgICAgc3RhdGljIHZvaWQgcmVjb3JkRXh0cmFDb3N0KHNpemVfdCk7
Ci0gICAgc3RhdGljIHZvaWQgbWFya1Byb3RlY3RlZE9iamVjdHMoKTsKLSAgICBzdGF0aWMgdm9p
ZCBtYXJrTWFpblRocmVhZE9ubHlPYmplY3RzKCk7Ci0gICAgc3RhdGljIHZvaWQgbWFya0N1cnJl
bnRUaHJlYWRDb25zZXJ2YXRpdmVseSgpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtPdGhlclRocmVh
ZENvbnNlcnZhdGl2ZWx5KFRocmVhZCopOwotICAgIHN0YXRpYyB2b2lkIG1hcmtTdGFja09iamVj
dHNDb25zZXJ2YXRpdmVseSgpOwotICAgIHN0YXRpYyB2b2lkIG1hcmtTdGFja09iamVjdHNDb25z
ZXJ2YXRpdmVseSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJr
UHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2smKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrTWFpblRo
cmVhZE9ubHlPYmplY3RzKE1hcmtTdGFjayYpOworICAgIHN0YXRpYyB2b2lkIG1hcmtDdXJyZW50
VGhyZWFkQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJik7CisgICAgc3RhdGljIHZvaWQgbWFya090
aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiwgVGhyZWFkKik7CisgICAgc3RhdGlj
IHZvaWQgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYpOworICAgIHN0
YXRpYyB2b2lkIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smLCB2b2lk
KiBzdGFydCwgdm9pZCogZW5kKTsKIAogICAgIHN0YXRpYyBzaXplX3QgbWFpblRocmVhZE9ubHlP
YmplY3RDb3VudDsKICAgICBzdGF0aWMgYm9vbCBtZW1vcnlGdWxsOwpAQCAtMTA3LDcgKzEwOSw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICBjb25zdCBzaXplX3QgU01BTExfQ0VMTF9TSVpFID0gQ0VM
TF9TSVpFIC8gMjsKICAgY29uc3Qgc2l6ZV90IENFTExfTUFTSyA9IENFTExfU0laRSAtIDE7CiAg
IGNvbnN0IHNpemVfdCBDRUxMX0FMSUdOX01BU0sgPSB+Q0VMTF9NQVNLOwotICBjb25zdCBzaXpl
X3QgQ0VMTFNfUEVSX0JMT0NLID0gKEJMT0NLX1NJWkUgKiA4IC0gc2l6ZW9mKHVpbnQzMl90KSAq
IDggLSBzaXplb2Yodm9pZCAqKSAqIDggLSAyICogKDcgKyAzICogOCkpIC8gKENFTExfU0laRSAq
IDggKyAyKTsKKyAgY29uc3Qgc2l6ZV90IENFTExTX1BFUl9CTE9DSyA9IChCTE9DS19TSVpFICog
OCAtIHNpemVvZih1aW50MzJfdCkgKiA4IC0gc2l6ZW9mKHVpbnQzMl90KSAqIDggLSBzaXplb2Yo
dm9pZCAqKSAqIDggLSAyICogKDcgKyAzICogOCkpIC8gKENFTExfU0laRSAqIDggKyAyKTsKICAg
Y29uc3Qgc2l6ZV90IFNNQUxMX0NFTExTX1BFUl9CTE9DSyA9IDIgKiBDRUxMU19QRVJfQkxPQ0s7
CiAgIGNvbnN0IHNpemVfdCBCSVRNQVBfU0laRSA9IChDRUxMU19QRVJfQkxPQ0sgKyA3KSAvIDg7
CiAgIGNvbnN0IHNpemVfdCBCSVRNQVBfV09SRFMgPSAoQklUTUFQX1NJWkUgKyAzKSAvIHNpemVv
Zih1aW50MzJfdCk7CkBAIC0xNDUsNiArMTQ3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQ29s
bGVjdG9yQ2VsbCBjZWxsc1tDRUxMU19QRVJfQkxPQ0tdOwogICAgIHVpbnQzMl90IHVzZWRDZWxs
czsKICAgICBDb2xsZWN0b3JDZWxsKiBmcmVlTGlzdDsKKyAgICB1aW50MzJfdCBtYXlIYXZlUmVm
czsKICAgICBDb2xsZWN0b3JCaXRtYXAgbWFya2VkOwogICAgIENvbGxlY3RvckJpdG1hcCBjb2xs
ZWN0T25NYWluVGhyZWFkT25seTsKICAgfTsKQEAgLTE1NCw2ICsxNTcsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBTbWFsbENvbGxlY3RvckNlbGwgY2VsbHNbU01BTExfQ0VMTFNfUEVSX0JMT0NL
XTsKICAgICB1aW50MzJfdCB1c2VkQ2VsbHM7CiAgICAgU21hbGxDb2xsZWN0b3JDZWxsKiBmcmVl
TGlzdDsKKyAgICB1aW50MzJfdCBtYXlIYXZlUmVmczsKICAgICBDb2xsZWN0b3JCaXRtYXAgbWFy
a2VkOwogICAgIENvbGxlY3RvckJpdG1hcCBjb2xsZWN0T25NYWluVGhyZWFkT25seTsKICAgfTsK
QEAgLTE4Myw2ICsxODcsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2VsbEJsb2NrKGNlbGwp
LT5tYXJrZWQuc2V0KGNlbGxPZmZzZXQoY2VsbCkpOwogICB9CiAKKyAgaW5saW5lIGJvb2wgQ29s
bGVjdG9yOjpjZWxsTWF5SGF2ZVJlZnMoY29uc3QgSlNDZWxsKiBjZWxsKQorICB7CisgICAgcmV0
dXJuIGNlbGxCbG9jayhjZWxsKS0+bWF5SGF2ZVJlZnM7CisgIH0KKwogICBpbmxpbmUgdm9pZCBD
b2xsZWN0b3I6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCkKICAgeyAKICAgICBp
ZiAoY29zdCA+IG1pbkV4dHJhQ29zdFNpemUpIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
a2pzL2Vycm9yX29iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmNw
cAppbmRleCAwNjk3ZjEwLi42OWE2MTUxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMv
ZXJyb3Jfb2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmNw
cApAQCAtMTU2LDkgKzE1NiwzIEBAIEpTVmFsdWUqIE5hdGl2ZUVycm9ySW1wOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYKICAgcmV0dXJuIGNv
bnN0cnVjdChleGVjLCBhcmdzKTsKIH0KIAotdm9pZCBOYXRpdmVFcnJvckltcDo6bWFyaygpCi17
Ci0gIEpTT2JqZWN0OjptYXJrKCk7Ci0gIGlmIChwcm90byAmJiAhcHJvdG8tPm1hcmtlZCgpKQot
ICAgIHByb3RvLT5tYXJrKCk7Ci19CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvZXJy
b3Jfb2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmgKaW5kZXggM2Ux
YWM4YS4uNjUxNTRhNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVj
dC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9lcnJvcl9vYmplY3QuaApAQCAtNzUsOCArNzUs
NiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIEpTT2JqZWN0ICpjb25zdHJ1Y3QoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgICB2aXJ0dWFsIEpTVmFsdWUgKmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpOwogCi0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKLQogICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
Y3BwCmluZGV4IDFkYzQwYTQuLjQ5ZWJkODkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tq
cy9mdW5jdGlvbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcApAQCAt
NjEsMTAgKzYxLDEwIEBAIEZ1bmN0aW9uSW1wOjpGdW5jdGlvbkltcChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEZ1bmN0aW9uQm9keU5vCiB7CiB9CiAKLXZvaWQgRnVu
Y3Rpb25JbXA6Om1hcmsoKQordm9pZCBGdW5jdGlvbkltcDo6bWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYgc3RhY2spCiB7Ci0gICAgSW50ZXJuYWxGdW5jdGlvbkltcDo6bWFyaygpOwotICAgIF9zY29w
ZS5tYXJrKCk7CisgICAgSW50ZXJuYWxGdW5jdGlvbkltcDo6bWFya0NoaWxkcmVuKHN0YWNrKTsK
KyAgICBfc2NvcGUubWFya0NoaWxkcmVuKHN0YWNrKTsKIH0KIAogSlNWYWx1ZSogRnVuY3Rpb25J
bXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCkBAIC0zMzEsOSArMzMxLDkgQEAgY29uc3QgQ2xhc3NJbmZvIEFyZ3Vt
ZW50czo6aW5mbyA9IHsgIkFyZ3VtZW50cyIsIDAsIDAgfTsKIAogLy8gRUNNQSAxMC4xLjgKIEFy
Z3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25JbXAqIGZ1bmMsIGNv
bnN0IExpc3QmIGFyZ3MsIEFjdGl2YXRpb25JbXAqIGFjdCkKLTogSlNPYmplY3QoZXhlYy0+bGV4
aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSksIAotX2FjdGl2YXRp
b25PYmplY3QoYWN0KSwKLWluZGV4VG9OYW1lTWFwKGZ1bmMsIGFyZ3MpCisgIDogSlNPYmplY3Qo
ZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSkgCisg
ICwgX2FjdGl2YXRpb25PYmplY3QoYWN0KQorICAsIGluZGV4VG9OYW1lTWFwKGZ1bmMsIGFyZ3Mp
CiB7CiAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlLCBmdW5jLCBEb250
RW51bSk7CiAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBhcmdzLnNp
emUoKSwgRG9udEVudW0pOwpAQCAtMzQ3LDExICszNDcsMTAgQEAgaW5kZXhUb05hbWVNYXAoZnVu
YywgYXJncykKICAgfQogfQogCi12b2lkIEFyZ3VtZW50czo6bWFyaygpIAordm9pZCBBcmd1bWVu
dHM6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0YWNrKSAKIHsKLSAgSlNPYmplY3Q6Om1hcmso
KTsKLSAgaWYgKF9hY3RpdmF0aW9uT2JqZWN0ICYmICFfYWN0aXZhdGlvbk9iamVjdC0+bWFya2Vk
KCkpCi0gICAgX2FjdGl2YXRpb25PYmplY3QtPm1hcmsoKTsKKyAgSlNPYmplY3Q6Om1hcmtDaGls
ZHJlbihzdGFjayk7CisgIHN0YWNrLnB1c2goX2FjdGl2YXRpb25PYmplY3QpOwogfQogCiBKU1Zh
bHVlKiBBcmd1bWVudHM6Om1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKQEAgLTQ4NCwyMyArNDgzLDE3IEBAIHZvaWQgQWN0aXZhdGlvbkltcDo6cHV0KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsCiAgIF9w
cm9wLnB1dChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAoYXR0ciA9PSBOb25lIHx8IGF0dHIg
PT0gRG9udERlbGV0ZSkpOwogfQogCi12b2lkIEFjdGl2YXRpb25JbXA6Om1hcmsoKQordm9pZCBB
Y3RpdmF0aW9uSW1wOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBKU09i
amVjdDo6bWFyaygpOworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwogCiAgICAg
c2l6ZV90IHNpemUgPSBkLT5sb2NhbFN0b3JhZ2Uuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gZC0+bG9jYWxT
dG9yYWdlW2ldLnZhbHVlOwotICAgICAgICBpZiAoIXZhbHVlLT5tYXJrZWQoKSkKLSAgICAgICAg
ICAgIHZhbHVlLT5tYXJrKCk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICBzdGFjay5wdXNoKGQtPmxvY2FsU3RvcmFnZVtpXS52YWx1ZSk7CiAg
ICAgCi0gICAgQVNTRVJUKGQtPmZ1bmN0aW9uKTsKLSAgICBpZiAoIWQtPmZ1bmN0aW9uLT5tYXJr
ZWQoKSkKLSAgICAgICAgZC0+ZnVuY3Rpb24tPm1hcmsoKTsKLQotICAgIGlmIChkLT5hcmd1bWVu
dHNPYmplY3QgJiYgIWQtPmFyZ3VtZW50c09iamVjdC0+bWFya2VkKCkpCi0gICAgICAgIGQtPmFy
Z3VtZW50c09iamVjdC0+bWFyaygpOworICAgIHN0YWNrLnB1c2goZC0+ZnVuY3Rpb24pOworICAg
IGlmIChkLT5hcmd1bWVudHNPYmplY3QpCisgICAgICBzdGFjay5wdXNoKGQtPmFyZ3VtZW50c09i
amVjdCk7CiB9CiAKIHZvaWQgQWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5o
IGIvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKaW5kZXggNTY1N2IxZS4uMzkyMTI3ZSAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKKysrIGIvSmF2YVNjcmlw
dENvcmUva2pzL2Z1bmN0aW9uLmgKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdm9pZCBzZXRTY29wZShjb25zdCBTY29wZUNoYWluJiBzKSB7IF9zY29wZSA9IHM7IH0KICAg
ICBjb25zdCBTY29wZUNoYWluJiBzY29wZSgpIGNvbnN0IHsgcmV0dXJuIF9zY29wZTsgfQogCi0g
ICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1h
cmtTdGFjayYpOwogCiAgIHByaXZhdGU6CiAgICAgU2NvcGVDaGFpbiBfc2NvcGU7CkBAIC0xMjQs
NyArMTI0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEFyZ3VtZW50cyA6IHB1YmxpYyBK
U09iamVjdCB7CiAgIHB1YmxpYzoKICAgICBBcmd1bWVudHMoRXhlY1N0YXRlKiwgRnVuY3Rpb25J
bXAqIGZ1bmMsIGNvbnN0IExpc3QmIGFyZ3MsIEFjdGl2YXRpb25JbXAqIGFjdCk7Ci0gICAgdmly
dHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwg
aW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKQEAgLTE2NCw3ICsxNjQsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGlu
Zm87CiAKLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hp
bGRyZW4oTWFya1N0YWNrJik7CiAKICAgICBib29sIGlzQWN0aXZhdGlvbigpIHsgcmV0dXJuIHRy
dWU7IH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcCBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAKaW5kZXggMTI1MjQ0ZS4uZmFmOWY5OCAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ranMvaW50ZXJuYWwuY3BwCkBAIC0xNDQsMTQgKzE0NCwxMiBAQCBib29sIE51bWJlcklt
cDo6Z2V0VHJ1bmNhdGVkVUludDMyKHVpbnQzMl90JiB1aW50MzIpIGNvbnN0CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZXR0ZXJTZXR0ZXJJbXAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi12b2lkIEdldHRlclNldHRlckltcDo6bWFyaygpCit2b2lkIEdl
dHRlclNldHRlckltcDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spCiB7Ci0gICAgSlND
ZWxsOjptYXJrKCk7Ci0gICAgCi0gICAgaWYgKGdldHRlciAmJiAhZ2V0dGVyLT5tYXJrZWQoKSkK
LSAgICAgICAgZ2V0dGVyLT5tYXJrKCk7Ci0gICAgaWYgKHNldHRlciAmJiAhc2V0dGVyLT5tYXJr
ZWQoKSkKLSAgICAgICAgc2V0dGVyLT5tYXJrKCk7CisgICAgaWYgKGdldHRlcikKKyAgICAgICAg
c3RhY2sucHVzaChnZXR0ZXIpOworICAgIGlmIChzZXR0ZXIpCisgICAgICAgIHN0YWNrLnB1c2go
c2V0dGVyKTsKIH0KIAogSlNWYWx1ZSogR2V0dGVyU2V0dGVySW1wOjp0b1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBKU1R5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvaW50
ZXJwcmV0ZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAppbmRleCAy
ZDM4MWIyLi5lYjJiYmM4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0
ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAKQEAgLTU0NCw4
MCArNTQ0LDgwIEBAIEpTT2JqZWN0ICpJbnRlcnByZXRlcjo6YnVpbHRpblVSSUVycm9yUHJvdG90
eXBlKCkgY29uc3QKICAgcmV0dXJuIG1fVXJpRXJyb3JQcm90b3R5cGU7CiB9CiAKLXZvaWQgSW50
ZXJwcmV0ZXI6Om1hcmsoKQordm9pZCBJbnRlcnByZXRlcjo6bWFya1Jvb3RzKE1hcmtTdGFjayYg
c3RhY2spCiB7CiAgICAgaWYgKG1fY3VycmVudEV4ZWMpCi0gICAgICAgIG1fY3VycmVudEV4ZWMt
Pm1hcmsoKTsKLQotICAgIGlmIChtX2dsb2JhbEV4ZWMuZXhjZXB0aW9uKCkgJiYgIW1fZ2xvYmFs
RXhlYy5leGNlcHRpb24oKS0+bWFya2VkKCkpCi0gICAgICAgIG1fZ2xvYmFsRXhlYy5leGNlcHRp
b24oKS0+bWFyaygpOwotCi0gICAgaWYgKG1fZ2xvYmFsT2JqZWN0ICYmICFtX2dsb2JhbE9iamVj
dC0+bWFya2VkKCkpCi0gICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5tYXJrKCk7Ci0KLSAgICBpZiAo
bV9PYmplY3QgJiYgIW1fT2JqZWN0LT5tYXJrZWQoKSkKLSAgICAgICAgbV9PYmplY3QtPm1hcmso
KTsKLSAgICBpZiAobV9GdW5jdGlvbiAmJiAhbV9GdW5jdGlvbi0+bWFya2VkKCkpCi0gICAgICAg
IG1fRnVuY3Rpb24tPm1hcmsoKTsKLSAgICBpZiAobV9BcnJheSAmJiAhbV9BcnJheS0+bWFya2Vk
KCkpCi0gICAgICAgIG1fQXJyYXktPm1hcmsoKTsKLSAgICBpZiAobV9Cb29sZWFuICYmICFtX0Jv
b2xlYW4tPm1hcmtlZCgpKQotICAgICAgICBtX0Jvb2xlYW4tPm1hcmsoKTsKLSAgICBpZiAobV9T
dHJpbmcgJiYgIW1fU3RyaW5nLT5tYXJrZWQoKSkKLSAgICAgICAgbV9TdHJpbmctPm1hcmsoKTsK
LSAgICBpZiAobV9OdW1iZXIgJiYgIW1fTnVtYmVyLT5tYXJrZWQoKSkKLSAgICAgICAgbV9OdW1i
ZXItPm1hcmsoKTsKLSAgICBpZiAobV9EYXRlICYmICFtX0RhdGUtPm1hcmtlZCgpKQotICAgICAg
ICBtX0RhdGUtPm1hcmsoKTsKLSAgICBpZiAobV9SZWdFeHAgJiYgIW1fUmVnRXhwLT5tYXJrZWQo
KSkKLSAgICAgICAgbV9SZWdFeHAtPm1hcmsoKTsKLSAgICBpZiAobV9FcnJvciAmJiAhbV9FcnJv
ci0+bWFya2VkKCkpCi0gICAgICAgIG1fRXJyb3ItPm1hcmsoKTsKLSAgICAKLSAgICBpZiAobV9P
YmplY3RQcm90b3R5cGUgJiYgIW1fT2JqZWN0UHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAg
bV9PYmplY3RQcm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9GdW5jdGlvblByb3RvdHlwZSAm
JiAhbV9GdW5jdGlvblByb3RvdHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fRnVuY3Rpb25Qcm90
b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9BcnJheVByb3RvdHlwZSAmJiAhbV9BcnJheVByb3Rv
dHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fQXJyYXlQcm90b3R5cGUtPm1hcmsoKTsKLSAgICBp
ZiAobV9Cb29sZWFuUHJvdG90eXBlICYmICFtX0Jvb2xlYW5Qcm90b3R5cGUtPm1hcmtlZCgpKQot
ICAgICAgICBtX0Jvb2xlYW5Qcm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9TdHJpbmdQcm90
b3R5cGUgJiYgIW1fU3RyaW5nUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9TdHJpbmdQ
cm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9OdW1iZXJQcm90b3R5cGUgJiYgIW1fTnVtYmVy
UHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9OdW1iZXJQcm90b3R5cGUtPm1hcmsoKTsK
LSAgICBpZiAobV9EYXRlUHJvdG90eXBlICYmICFtX0RhdGVQcm90b3R5cGUtPm1hcmtlZCgpKQot
ICAgICAgICBtX0RhdGVQcm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9SZWdFeHBQcm90b3R5
cGUgJiYgIW1fUmVnRXhwUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9SZWdFeHBQcm90
b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9FcnJvclByb3RvdHlwZSAmJiAhbV9FcnJvclByb3Rv
dHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fRXJyb3JQcm90b3R5cGUtPm1hcmsoKTsKLSAgICAK
LSAgICBpZiAobV9FdmFsRXJyb3IgJiYgIW1fRXZhbEVycm9yLT5tYXJrZWQoKSkKLSAgICAgICAg
bV9FdmFsRXJyb3ItPm1hcmsoKTsKLSAgICBpZiAobV9SYW5nZUVycm9yICYmICFtX1JhbmdlRXJy
b3ItPm1hcmtlZCgpKQotICAgICAgICBtX1JhbmdlRXJyb3ItPm1hcmsoKTsKLSAgICBpZiAobV9S
ZWZlcmVuY2VFcnJvciAmJiAhbV9SZWZlcmVuY2VFcnJvci0+bWFya2VkKCkpCi0gICAgICAgIG1f
UmVmZXJlbmNlRXJyb3ItPm1hcmsoKTsKLSAgICBpZiAobV9TeW50YXhFcnJvciAmJiAhbV9TeW50
YXhFcnJvci0+bWFya2VkKCkpCi0gICAgICAgIG1fU3ludGF4RXJyb3ItPm1hcmsoKTsKLSAgICBp
ZiAobV9UeXBlRXJyb3IgJiYgIW1fVHlwZUVycm9yLT5tYXJrZWQoKSkKLSAgICAgICAgbV9UeXBl
RXJyb3ItPm1hcmsoKTsKLSAgICBpZiAobV9VcmlFcnJvciAmJiAhbV9VcmlFcnJvci0+bWFya2Vk
KCkpCi0gICAgICAgIG1fVXJpRXJyb3ItPm1hcmsoKTsKLSAgICAKLSAgICBpZiAobV9FdmFsRXJy
b3JQcm90b3R5cGUgJiYgIW1fRXZhbEVycm9yUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAg
bV9FdmFsRXJyb3JQcm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9SYW5nZUVycm9yUHJvdG90
eXBlICYmICFtX1JhbmdlRXJyb3JQcm90b3R5cGUtPm1hcmtlZCgpKQotICAgICAgICBtX1Jhbmdl
RXJyb3JQcm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9SZWZlcmVuY2VFcnJvclByb3RvdHlw
ZSAmJiAhbV9SZWZlcmVuY2VFcnJvclByb3RvdHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fUmVm
ZXJlbmNlRXJyb3JQcm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9TeW50YXhFcnJvclByb3Rv
dHlwZSAmJiAhbV9TeW50YXhFcnJvclByb3RvdHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fU3lu
dGF4RXJyb3JQcm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9UeXBlRXJyb3JQcm90b3R5cGUg
JiYgIW1fVHlwZUVycm9yUHJvdG90eXBlLT5tYXJrZWQoKSkKLSAgICAgICAgbV9UeXBlRXJyb3JQ
cm90b3R5cGUtPm1hcmsoKTsKLSAgICBpZiAobV9VcmlFcnJvclByb3RvdHlwZSAmJiAhbV9VcmlF
cnJvclByb3RvdHlwZS0+bWFya2VkKCkpCi0gICAgICAgIG1fVXJpRXJyb3JQcm90b3R5cGUtPm1h
cmsoKTsKKyAgICAgICAgbV9jdXJyZW50RXhlYy0+bWFya0NoaWxkcmVuKHN0YWNrKTsKKworICAg
IGlmIChtX2dsb2JhbEV4ZWMuZXhjZXB0aW9uKCkpCisgICAgICAgIHN0YWNrLnB1c2gobV9nbG9i
YWxFeGVjLmV4Y2VwdGlvbigpKTsKKworICAgIGlmIChtX2dsb2JhbE9iamVjdCkKKyAgICAgICAg
c3RhY2sucHVzaChtX2dsb2JhbE9iamVjdCk7CisKKyAgICBpZiAobV9PYmplY3QpCisgICAgICAg
c3RhY2sucHVzaChtX09iamVjdCk7CisgICAgaWYgKG1fRnVuY3Rpb24pCisgICAgICAgIHN0YWNr
LnB1c2gobV9GdW5jdGlvbik7CisgICAgaWYgKG1fQXJyYXkpCisgICAgICAgIHN0YWNrLnB1c2go
bV9BcnJheSk7CisgICAgaWYgKG1fQm9vbGVhbikKKyAgICAgICAgc3RhY2sucHVzaChtX0Jvb2xl
YW4pOworICAgIGlmIChtX1N0cmluZykKKyAgICAgICAgc3RhY2sucHVzaChtX1N0cmluZyk7Cisg
ICAgaWYgKG1fTnVtYmVyKQorICAgICAgICBzdGFjay5wdXNoKG1fTnVtYmVyKTsKKyAgICBpZiAo
bV9EYXRlKQorICAgICAgICBzdGFjay5wdXNoKG1fRGF0ZSk7CisgICAgaWYgKG1fUmVnRXhwKQor
ICAgICAgICBzdGFjay5wdXNoKG1fUmVnRXhwKTsKKyAgICBpZiAobV9FcnJvcikKKyAgICAgICAg
c3RhY2sucHVzaChtX0Vycm9yKTsKKyAgICAKKyAgICBpZiAobV9PYmplY3RQcm90b3R5cGUpCisg
ICAgICAgIHN0YWNrLnB1c2gobV9PYmplY3RQcm90b3R5cGUpOworICAgIGlmIChtX0Z1bmN0aW9u
UHJvdG90eXBlKQorICAgICAgICBzdGFjay5wdXNoKG1fRnVuY3Rpb25Qcm90b3R5cGUpOworICAg
IGlmIChtX0FycmF5UHJvdG90eXBlKQorICAgICAgICBzdGFjay5wdXNoKG1fQXJyYXlQcm90b3R5
cGUpOworICAgIGlmIChtX0Jvb2xlYW5Qcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9C
b29sZWFuUHJvdG90eXBlKTsKKyAgICBpZiAobV9TdHJpbmdQcm90b3R5cGUpCisgICAgICAgIHN0
YWNrLnB1c2gobV9TdHJpbmdQcm90b3R5cGUpOworICAgIGlmIChtX051bWJlclByb3RvdHlwZSkK
KyAgICAgICAgc3RhY2sucHVzaChtX051bWJlclByb3RvdHlwZSk7CisgICAgaWYgKG1fRGF0ZVBy
b3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX0RhdGVQcm90b3R5cGUpOworICAgIGlmICht
X1JlZ0V4cFByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX1JlZ0V4cFByb3RvdHlwZSk7
CisgICAgaWYgKG1fRXJyb3JQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9FcnJvclBy
b3RvdHlwZSk7CisgICAgCisgICAgaWYgKG1fRXZhbEVycm9yKQorICAgICAgICBzdGFjay5wdXNo
KG1fRXZhbEVycm9yKTsKKyAgICBpZiAobV9SYW5nZUVycm9yKQorICAgICAgICBzdGFjay5wdXNo
KG1fUmFuZ2VFcnJvcik7CisgICAgaWYgKG1fUmVmZXJlbmNlRXJyb3IpCisgICAgICAgIHN0YWNr
LnB1c2gobV9SZWZlcmVuY2VFcnJvcik7CisgICAgaWYgKG1fU3ludGF4RXJyb3IpCisgICAgICAg
IHN0YWNrLnB1c2gobV9TeW50YXhFcnJvcik7CisgICAgaWYgKG1fVHlwZUVycm9yKQorICAgICAg
ICBzdGFjay5wdXNoKG1fVHlwZUVycm9yKTsKKyAgICBpZiAobV9VcmlFcnJvcikKKyAgICAgICAg
c3RhY2sucHVzaChtX1VyaUVycm9yKTsKKyAgICAKKyAgICBpZiAobV9FdmFsRXJyb3JQcm90b3R5
cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9FdmFsRXJyb3JQcm90b3R5cGUpOworICAgIGlmICht
X1JhbmdlRXJyb3JQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9SYW5nZUVycm9yUHJv
dG90eXBlKTsKKyAgICBpZiAobV9SZWZlcmVuY2VFcnJvclByb3RvdHlwZSkKKyAgICAgICAgc3Rh
Y2sucHVzaChtX1JlZmVyZW5jZUVycm9yUHJvdG90eXBlKTsKKyAgICBpZiAobV9TeW50YXhFcnJv
clByb3RvdHlwZSkKKyAgICAgICAgc3RhY2sucHVzaChtX1N5bnRheEVycm9yUHJvdG90eXBlKTsK
KyAgICBpZiAobV9UeXBlRXJyb3JQcm90b3R5cGUpCisgICAgICAgIHN0YWNrLnB1c2gobV9UeXBl
RXJyb3JQcm90b3R5cGUpOworICAgIGlmIChtX1VyaUVycm9yUHJvdG90eXBlKQorICAgICAgICBz
dGFjay5wdXNoKG1fVXJpRXJyb3JQcm90b3R5cGUpOwogfQogCiBzdGF0aWMgYm9vbCBwcmludEV4
Y2VwdGlvbnMgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnBy
ZXRlci5oIGIvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgKaW5kZXggM2NiODZjMi4u
OWY1NGQzYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgKQEAgLTI5MCw3ICsyOTAsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgKiBDYWxsZWQgZHVyaW5nIHRoZSBtYXJrIHBoYXNlIG9mIHRo
ZSBnYXJiYWdlIGNvbGxlY3Rvci4gU3ViY2xhc3NlcyAKICAgICAgKiBpbXBsZW1lbnRpbmcgY3Vz
dG9tIG1hcmsgbWV0aG9kcyBtdXN0IG1ha2Ugc3VyZSB0byBjaGFpbiB0byB0aGlzIG9uZS4KICAg
ICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrUm9v
dHMoTWFya1N0YWNrJik7CiAKICAgICBzdGF0aWMgYm9vbCBzaG91bGRQcmludEV4Y2VwdGlvbnMo
KTsKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMoYm9vbCk7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbGlzdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMv
bGlzdC5jcHAKaW5kZXggZWVjNzAzZS4uZjYwMDUxZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUva2pzL2xpc3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNwcApAQCAtNDMs
MTggKzQzLDE1IEBAIExpc3Q6Okxpc3RTZXQmIExpc3Q6Om1hcmtTZXQoKQogICAgIHJldHVybiBz
dGF0aWNNYXJrU2V0OwogfQogCi12b2lkIExpc3Q6Om1hcmtQcm90ZWN0ZWRMaXN0c1Nsb3dDYXNl
KCkKK3ZvaWQgTGlzdDo6bWFya1Byb3RlY3RlZExpc3RzU2xvd0Nhc2UoTWFya1N0YWNrJiBzdGFj
aykKIHsKICAgICBMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0KCkuZW5kKCk7CiAgICAg
Zm9yIChMaXN0U2V0OjppdGVyYXRvciBpdCA9IG1hcmtTZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgTGlzdCogbGlzdCA9ICppdDsKIAogICAgICAgICBpdGVyYXRvciBl
bmQyID0gbGlzdC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoaXRlcmF0b3IgaXQyID0gbGlzdC0+YmVn
aW4oKTsgaXQyICE9IGVuZDI7ICsraXQyKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0gKml0
MjsKLSAgICAgICAgICAgIGlmICghdi0+bWFya2VkKCkpCi0gICAgICAgICAgICAgICAgdi0+bWFy
aygpOwotICAgICAgICB9CisgICAgICAgIGZvciAoaXRlcmF0b3IgaXQyID0gbGlzdC0+YmVnaW4o
KTsgaXQyICE9IGVuZDI7ICsraXQyKQorICAgICAgICAgICAgc3RhY2sucHVzaCgqaXQyKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9saXN0LmggYi9KYXZhU2Ny
aXB0Q29yZS9ranMvbGlzdC5oCmluZGV4IGI2NmU3MTAuLjQ5NjliM2EgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2tqcy9saXN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuaApA
QCAtODUsMTggKzg1LDE4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmJlZ2luKCk7IH0KICAgICAgICAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuZW5kKCk7IH0KIAotICAg
ICAgICBzdGF0aWMgdm9pZCBtYXJrUHJvdGVjdGVkTGlzdHMoKQorICAgICAgICBzdGF0aWMgdm9p
ZCBtYXJrUHJvdGVjdGVkTGlzdHMoTWFya1N0YWNrJiBzdGFjaykKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtYXJrU2V0KCkuc2l6ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIG1hcmtQcm90ZWN0ZWRMaXN0c1Nsb3dDYXNlKCk7CisgICAgICAgICAgICBtYXJr
UHJvdGVjdGVkTGlzdHNTbG93Q2FzZShzdGFjayk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgY29uc3QgTGlzdCYgZW1wdHkoKTsgLy8gRmFzdCBwYXRoIGZvciBhbiBlbXB0eSBsaXN0Lgog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIExpc3RTZXQmIG1hcmtTZXQoKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgbWFya1Byb3RlY3RlZExpc3RzU2xvd0Nhc2UoKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgbWFya1Byb3RlY3RlZExpc3RzU2xvd0Nhc2UoTWFya1N0YWNrJik7CiAKICAgICAg
ICAgdm9pZCBleHBhbmRBbmRBcHBlbmQoSlNWYWx1ZSopOwogCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ranMvb2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCmlu
ZGV4IDEzZDVlNjUuLjg1MTRiMGMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9vYmpl
Y3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCkBAIC0xMTMsMTAgKzEx
Myw4IEBAIEpTVmFsdWUgKkpTT2JqZWN0OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBKU09iamVjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
dm9pZCBKU09iamVjdDo6bWFyaygpCit2b2lkIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJiBzdGFjaykKIHsKLSAgSlNDZWxsOjptYXJrKCk7Ci0KICNpZiBKQVZBU0NSSVBUX01BUktf
VFJBQ0lORwogICBzdGF0aWMgaW50IG1hcmtTdGFja0RlcHRoID0gMDsKICAgbWFya1N0YWNrRGVw
dGgrKzsKQEAgLTEyNiwxMSArMTI0LDggQEAgdm9pZCBKU09iamVjdDo6bWFyaygpCiAgIHByaW50
ZigiJXMgKCVwKVxuIiwgY2xhc3NOYW1lKCkuVVRGOFN0cmluZygpLmNfc3RyKCksIHRoaXMpOwog
I2VuZGlmCiAgIAotICBKU1ZhbHVlICpwcm90byA9IF9wcm90bzsKLSAgaWYgKCFwcm90by0+bWFy
a2VkKCkpCi0gICAgcHJvdG8tPm1hcmsoKTsKLQotICBfcHJvcC5tYXJrKCk7CisgIHN0YWNrLnB1
c2goX3Byb3RvKTsKKyAgX3Byb3AubWFya0NoaWxkcmVuKHN0YWNrKTsKICAgCiAjaWYgSkFWQVND
UklQVF9NQVJLX1RSQUNJTkcKICAgbWFya1N0YWNrRGVwdGgtLTsKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAppbmRl
eCAxZjQ1ZjVlLi41MzFkMGQ2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2lu
Y2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
cHJvcGVydHlfbWFwLmgiCiAjaW5jbHVkZSAicHJvcGVydHlfc2xvdC5oIgpAQCAtODQsNyArODUs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0
YXRlICpleGVjKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTT2JqZWN0ICp0b09iamVjdChFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0OwogICAgICAgCi0gICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogICAgICAgCiAgICAgSlNPYmpl
Y3QgKmdldEdldHRlcigpIHsgcmV0dXJuIGdldHRlcjsgfQogICAgIHZvaWQgc2V0R2V0dGVyKEpT
T2JqZWN0ICpnKSB7IGdldHRlciA9IGc7IH0KQEAgLTExMSw3ICsxMTIsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgKi8KICAgICBKU09iamVjdCgpOwogCi0gICAgdmlydHVhbCB2b2lkIG1hcmso
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogICAgIHZpcnR1
YWwgSlNUeXBlIHR5cGUoKSBjb25zdDsKIAogICAgIC8qKgpAQCAtNTg2LDEyICs1ODcsMTEgQEAg
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWUKIAogLy8gRklYTUU6IFB1dCB0aGlzIGZ1bmN0aW9uIGlu
IGEgc2VwYXJhdGUgZmlsZSBuYW1lZCBzb21ldGhpbmcgbGlrZSBzY29wZV9jaGFpbl9tYXJrLmgg
LS0gY2FuJ3QgcHV0IGl0IGluIHNjb3BlX2NoYWluLmggc2luY2UgaXQgZGVwZW5kcyBvbiBKU09i
amVjdC4KIAotaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6bWFyaygpCitpbmxpbmUgdm9pZCBTY29w
ZUNoYWluOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBmb3IgKFNjb3Bl
Q2hhaW5Ob2RlICpuID0gX25vZGU7IG47IG4gPSBuLT5uZXh0KSB7Ci0gICAgICAgIEpTT2JqZWN0
ICpvID0gbi0+b2JqZWN0OwotICAgICAgICBpZiAoIW8tPm1hcmtlZCgpKQotICAgICAgICAgICAg
by0+bWFyaygpOworICAgIGZvciAoU2NvcGVDaGFpbk5vZGUqIG4gPSBfbm9kZTsgbjsgbiA9IG4t
Pm5leHQpIHsKKyAgICAgICAgSlNPYmplY3QqIG8gPSBuLT5vYmplY3Q7CisgICAgICAgIHN0YWNr
LnB1c2gobyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvcHJv
cGVydHlfbWFwLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwCmluZGV4
IDQ1ZTM5MWEuLjExYzc5NmIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0
eV9tYXAuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwCkBAIC02
MjIsMjUgKzYyMiwxOSBAQCB2b2lkIFByb3BlcnR5TWFwOjpyZW1vdmUoY29uc3QgSWRlbnRpZmll
ciYgbmFtZSkKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKLXZvaWQgUHJvcGVydHlNYXA6
Om1hcmsoKSBjb25zdAordm9pZCBQcm9wZXJ0eU1hcDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYg
c3RhY2spIGNvbnN0CiB7CiAgICAgaWYgKCFtX3VzaW5nVGFibGUpIHsKICNpZiBVU0VfU0lOR0xF
X0VOVFJZCi0gICAgICAgIGlmIChtX3NpbmdsZUVudHJ5S2V5KSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlKiB2ID0gbV91LnNpbmdsZUVudHJ5VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXYtPm1hcmtl
ZCgpKQotICAgICAgICAgICAgICAgIHYtPm1hcmsoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
bV9zaW5nbGVFbnRyeUtleSkKKyAgICAgICAgICAgIHN0YWNrLnB1c2gobV91LnNpbmdsZUVudHJ5
VmFsdWUpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25lZCBl
bnRyeUNvdW50ID0gbV91LnRhYmxlLT5rZXlDb3VudCArIG1fdS50YWJsZS0+ZGVsZXRlZFNlbnRp
bmVsQ291bnQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBlbnRyeUNvdW50OyBpKysp
IHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IG1fdS50YWJsZS0+ZW50cmllcygpW2ldLnZhbHVlOwot
ICAgICAgICBpZiAoIXYtPm1hcmtlZCgpKQotICAgICAgICAgICAgdi0+bWFyaygpOwotICAgIH0K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IGVudHJ5Q291bnQ7IGkrKykKKyAgICAgICAg
c3RhY2sucHVzaChtX3UudGFibGUtPmVudHJpZXMoKVtpXS52YWx1ZSk7CiB9CiAKIHN0YXRpYyBp
bnQgY29tcGFyZVByb3BlcnR5TWFwRW50cnlJbmRpY2VzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZv
aWQqIGIpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmggYi9K
YXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgKaW5kZXggODIxNDRlZi4uMDk3ZTViOCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaApAQCAtMjksNiArMjksNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIEpTVmFsdWU7CisgICAgY2xh
c3MgTWFya1N0YWNrOwogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogICAgIAogICAgIHN0
cnVjdCBQcm9wZXJ0eU1hcEVudHJ5OwpAQCAtNTksNyArNjAsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgSlNWYWx1ZSogZ2V0KGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCYgYXR0cmli
dXRlcykgY29uc3Q7CiAgICAgICAgIEpTVmFsdWUqKiBnZXRMb2NhdGlvbihjb25zdCBJZGVudGlm
aWVyJiBuYW1lKTsKIAotICAgICAgICB2b2lkIG1hcmsoKSBjb25zdDsKKyAgICAgICAgdm9pZCBt
YXJrQ2hpbGRyZW4oTWFya1N0YWNrJikgY29uc3Q7CiAgICAgICAgIHZvaWQgZ2V0RW51bWVyYWJs
ZVByb3BlcnR5TmFtZXMoUHJvcGVydHlOYW1lQXJyYXkmKSBjb25zdDsKIAogICAgICAgICB2b2lk
IHNhdmUoU2F2ZWRQcm9wZXJ0aWVzJikgY29uc3Q7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ranMvc2NvcGVfY2hhaW4uaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5oCmlu
ZGV4IDI2NWMzMWMuLjJlMjk0NjQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9zY29w
ZV9jaGFpbi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5oCkBAIC03OSw3
ICs3OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2b2lkIHB1c2goY29uc3QgU2NvcGVD
aGFpbiAmKTsKICAgICAgICAgdm9pZCBwb3AoKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgbWFy
aygpOworICAgICAgICB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogI2lmbmRlZiBO
REVCVUcgICAgICAgIAogICAgICAgICB2b2lkIHByaW50KCk7CmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5n
X29iamVjdC5jcHAKaW5kZXggYzc0ZjU0OS4uYzc3MjI0NyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9zdHJp
bmdfb2JqZWN0LmNwcApAQCAtMTI5LDYgKzEyOSwxMiBAQCB2b2lkIFN0cmluZ0luc3RhbmNlOjpn
ZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cgogICByZXR1cm4gSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1l
cyk7CiB9CiAKK3ZvaWQgU3RyaW5nSW5zdGFuY2U6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIHN0
YWNrKSAKK3sKKyAgICBKU09iamVjdDo6bWFya0NoaWxkcmVuKHN0YWNrKTsKKyAgICBzdGFjay5w
dXNoQXRvbShpbnRlcm5hbFZhbHVlKCkpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gU3RyaW5nUHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogY29u
c3QgQ2xhc3NJbmZvIFN0cmluZ1Byb3RvdHlwZTo6aW5mbyA9IHsgIlN0cmluZyIsICZTdHJpbmdJ
bnN0YW5jZTo6aW5mbywgJnN0cmluZ1RhYmxlIH07CiAvKiBTb3VyY2UgZm9yIHN0cmluZ19vYmpl
Y3QubHV0LmgKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0Lmgg
Yi9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCmluZGV4IGFkM2M1MmEuLmIyOTVl
MjEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgKKysrIGIv
SmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaApAQCAtNDYsNiArNDYsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKICAgICBTdHJp
bmdJbXAqIGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdHJpbmdJ
bXAqPihKU1dyYXBwZXJPYmplY3Q6OmludGVybmFsVmFsdWUoKSk7fQorICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjayk7CiAKICAgcHJpdmF0ZToKICAgICBib29s
IGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlT
bG90Jik7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaCBiL0phdmFTY3Jp
cHRDb3JlL2tqcy92YWx1ZS5oCmluZGV4IDVlYmI1NzUuLmI4MjZhNDAgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5o
CkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogY2xhc3MgRXhlY1N0YXRlOwogY2xh
c3MgSlNPYmplY3Q7CiBjbGFzcyBKU0NlbGw7CitjbGFzcyBNYXJrU3RhY2s7CiAKIHN0cnVjdCBD
bGFzc0luZm87CiAKQEAgLTQ3LDYgKzQ4LDcgQEAgc3RydWN0IENsYXNzSW5mbzsKIGNsYXNzIEpT
VmFsdWUgOiBOb25jb3B5YWJsZSB7CiAgICAgZnJpZW5kIGNsYXNzIEpTQ2VsbDsgLy8gc28gaXQg
Y2FuIGRlcml2ZSBmcm9tIHRoaXMgY2xhc3MKICAgICBmcmllbmQgY2xhc3MgQ29sbGVjdG9yOyAv
LyBzbyBpdCBjYW4gY2FsbCBhc0NlbGwoKQorICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2s7IC8v
IHNvIGl0IGNhbiBjYWxsIGFzQ2VsbCgpCiAKIHByaXZhdGU6CiAgICAgSlNWYWx1ZSgpOwpAQCAt
MTA1LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB0b0Zsb2F0KEV4ZWNTdGF0ZSopIGNv
bnN0OwogCiAgICAgLy8gR2FyYmFnZSBjb2xsZWN0aW9uLgotICAgIHZvaWQgbWFyaygpOworICAg
IHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7
CiAKICAgICBzdGF0aWMgaW50MzJfdCB0b0ludDMyU2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7
CkBAIC0xNjQsNyArMTY2LDcgQEAgcHVibGljOgogCiAgICAgLy8gR2FyYmFnZSBjb2xsZWN0aW9u
LgogICAgIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QpOwotICAgIHZpcnR1YWwgdm9pZCBtYXJr
KCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICBib29s
IG1hcmtlZCgpIGNvbnN0OwogfTsKIApAQCAtMjkwLDkgKzI5Miw4IEBAIGlubGluZSBib29sIEpT
Q2VsbDo6bWFya2VkKCkgY29uc3QKICAgICByZXR1cm4gQ29sbGVjdG9yOjppc0NlbGxNYXJrZWQo
dGhpcyk7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6bWFyaygpCitpbmxpbmUgdm9pZCBKU0Nl
bGw6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smKQogewotICAgIHJldHVybiBDb2xsZWN0b3I6Om1h
cmtDZWxsKHRoaXMpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxs
KCkKQEAgLTQwNiwxMCArNDA3LDEwIEBAIGlubGluZSBib29sIEpTVmFsdWU6OmdldFRydW5jYXRl
ZFVJbnQzMih1aW50MzJfdCYgdikgY29uc3QKICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKHRoaXMpID8gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMih0aGlzLCB2KSA6
IGFzQ2VsbCgpLT5nZXRUcnVuY2F0ZWRVSW50MzIodik7CiB9CiAKLWlubGluZSB2b2lkIEpTVmFs
dWU6Om1hcmsoKQoraW5saW5lIHZvaWQgSlNWYWx1ZTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYg
c3RhY2spCiB7Ci0gICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykpOyAv
LyBjYWxsZXJzIHNob3VsZCBjaGVjayAhbWFya2VkKCkgYmVmb3JlIGNhbGxpbmcgbWFyaygpCi0g
ICAgYXNDZWxsKCktPm1hcmsoKTsKKyAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0
ZSh0aGlzKSk7IC8vIGNhbGxlcnMgc2hvdWxkIGNoZWNrICFtYXJrZWQoKSBiZWZvcmUgY2FsbGlu
ZyBtYXJrQ2hpbGRyZW4oKQorICAgIGFzQ2VsbCgpLT5tYXJrQ2hpbGRyZW4oc3RhY2spOwogfQog
CiBpbmxpbmUgYm9vbCBKU1ZhbHVlOjptYXJrZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdEdsdWUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCmluZGV4IGM4OWMz
MDkuLjUxZjhjY2YgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZworKysgYi9K
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwNy0xMS0yMSAgTWFj
aWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdlZC4K
KworICAgICAgICBGaXh1cHMgZm9yIEphdmFTY3JpcHRDb3JlIG1hcmsgc3RhY2suCisKKyAgICAg
ICAgKiBKU09iamVjdC5jcHA6CisgICAgICAgIChKU1VzZXJPYmplY3Q6Ok1hcmspOgorICAgICAg
ICAqIEpTT2JqZWN0Lmg6CisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIuY3BwOgorICAgICAgICAo
SlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0TWFyayk6CisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIu
aDoKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmNwcDoKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1w
Lmg6CisKIDIwMDctMTEtMjEgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvSlNPYmplY3Qu
Y3BwIGIvSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuY3BwCmluZGV4IDEyOTBjYjMuLmQ0NTg5MzYg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRHbHVlL0pTT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0
R2x1ZS9KU09iamVjdC5jcHAKQEAgLTEyMiwxMSArMTIyLDExIEBAIFVJbnQ4IEpTVXNlck9iamVj
dDo6RXF1YWwoSlNCYXNlKiBvdGhlcikKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpT
VXNlck9iamVjdDo6TWFyaygpCit2b2lkIEpTVXNlck9iamVjdDo6TWFyayhLSlM6Ok1hcmtTdGFj
ayYgc3RhY2spCiB7CiAgICAgaWYgKGZNYXJrUHJvYykKICAgICB7Ci0gICAgICAgIGZNYXJrUHJv
YyhmRGF0YSk7CisgICAgICAgIGZNYXJrUHJvYyhzdGFjaywgZkRhdGEpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuaCBiL0phdmFTY3JpcHRHbHVlL0pT
T2JqZWN0LmgKaW5kZXggZjBiZTIyZS4uM2Q0YjM5NCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdEds
dWUvSlNPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0R2x1ZS9KU09iamVjdC5oCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSAiSlNCYXNlLmgiCiAjaW5jbHVkZSAiSlNVdGlscy5oIgogCi10eXBl
ZGVmIHZvaWQgKCpKU09iamVjdE1hcmtQcm9jUHRyKSh2b2lkICpkYXRhKTsKK3R5cGVkZWYgdm9p
ZCAoKkpTT2JqZWN0TWFya1Byb2NQdHIpKE1hcmtTdGFjayYsIHZvaWQgKmRhdGEpOwogSlNPYmpl
Y3RSZWYgSlNPYmplY3RDcmVhdGVJbnRlcm5hbCh2b2lkICpkYXRhLCBKU09iamVjdENhbGxCYWNr
c1B0ciBjYWxsQmFja3MsIEpTT2JqZWN0TWFya1Byb2NQdHIgbWFya1Byb2MsIGludCBkYXRhVHlw
ZSk7CiAKIGNsYXNzIEpTVXNlck9iamVjdCA6IHB1YmxpYyBKU0Jhc2UgewpAQCAtNDgsNyArNDgs
NyBAQCBjbGFzcyBKU1VzZXJPYmplY3QgOiBwdWJsaWMgSlNCYXNlIHsKICAgICAgICAgQ0ZUeXBl
UmVmIENvcHlDRlZhbHVlKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVUludDggRXF1YWwoSlNC
YXNlKiBvdGhlcik7CiAgICAgICAgIHZvaWQgKkdldERhdGEoKTsKLSAgICAgICAgdm9pZCBNYXJr
KCk7CisgICAgICAgIHZvaWQgTWFyayhLSlM6Ok1hcmtTdGFjayYpOwogCiAgICAgICAgICAgICAg
ICAgaW50IERhdGFUeXBlKCkgY29uc3QgeyByZXR1cm4gZkRhdGFUeXBlOyB9CiAgICAgcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcCBiL0phdmFT
Y3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAppbmRleCA5ZjhmYTNlLi5lMWQ1OTI3IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAKKysrIGIvSmF2YVNjcmlw
dEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBDRlR5cGVSZWYg
SlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q29weUNGVmFsdWUodm9pZCAqZGF0YSkKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdE1hcmsodm9pZCAq
ZGF0YSkKK3ZvaWQgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0TWFyayhNYXJrU3RhY2smIHN0YWNr
LCB2b2lkICpkYXRhKQogewogICAgIEpTVmFsdWVXcmFwcGVyKiBwdHIgPSAoSlNWYWx1ZVdyYXBw
ZXIqKWRhdGE7CiAgICAgaWYgKHB0cikKICAgICB7Ci0gICAgICAgIHB0ci0+ZlZhbHVlLT5tYXJr
KCk7CisgICAgICAgIHB0ci0+ZlZhbHVlLT5tYXJrQ2hpbGRyZW4oc3RhY2spOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmggYi9KYXZhU2NyaXB0
R2x1ZS9KU1ZhbHVlV3JhcHBlci5oCmluZGV4IDVjMzMyOTcuLmE5MGYyNjEgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmgKKysrIGIvSmF2YVNjcmlwdEdsdWUvSlNW
YWx1ZVdyYXBwZXIuaApAQCAtNTEsNyArNTEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IEpTT2JqZWN0U2V0UHJvcGVydHkodm9pZCAqZGF0YSwgQ0ZTdHJpbmdSZWYgcHJvcGVydHlOYW1l
LCBKU09iamVjdFJlZiBqc1ZhbHVlKTsKICAgICBzdGF0aWMgSlNPYmplY3RSZWYgSlNPYmplY3RD
YWxsRnVuY3Rpb24odm9pZCAqZGF0YSwgSlNPYmplY3RSZWYgdGhpc09iaiwgQ0ZBcnJheVJlZiBh
cmdzKTsKICAgICBzdGF0aWMgQ0ZUeXBlUmVmIEpTT2JqZWN0Q29weUNGVmFsdWUodm9pZCAqZGF0
YSk7Ci0gICAgc3RhdGljIHZvaWQgSlNPYmplY3RNYXJrKHZvaWQgKmRhdGEpOworICAgIHN0YXRp
YyB2b2lkIEpTT2JqZWN0TWFyayhLSlM6Ok1hcmtTdGFjayYsIHZvaWQgKmRhdGEpOwogfTsKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcCBiL0ph
dmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCmluZGV4IDIwYzA2YzMuLjI1MTdlNTIgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCisrKyBiL0phdmFTY3Jp
cHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCkBAIC00MDYsOSArNDA2LDkgQEAgVVN0cmluZyBVc2Vy
T2JqZWN0SW1wOjp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBVc2VyT2JqZWN0SW1wOjptYXJrKCkKK3ZvaWQgVXNlck9iamVjdElt
cDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spCiB7Ci0gICAgSlNPYmplY3Q6Om1hcmso
KTsKKyAgICBKU09iamVjdDo6bWFya0NoaWxkcmVuKHN0YWNrKTsKICAgICBpZiAoZkpTVXNlck9i
amVjdCkKLSAgICAgICAgZkpTVXNlck9iamVjdC0+TWFyaygpOworICAgICAgICBmSlNVc2VyT2Jq
ZWN0LT5NYXJrKHN0YWNrKTsKIH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL1VzZXJPYmpl
Y3RJbXAuaCBiL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAppbmRleCA1NGU1YWI2Li4w
Yjk5NTA4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgKKysrIGIv
SmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAg
IHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtT
dGFjayYgc3RhY2spOwogCiAgICAgSlNVc2VyT2JqZWN0ICpHZXRKU1VzZXJPYmplY3QoKSBjb25z
dDsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWJkZTc1Yi4uOGQ2ZWFhNiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDA3LTExLTIxICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAg
ICAgICAgTm90IHJldmlld2VkLgorICAgICAgICAKKyAgICAgICAgLSBUZXN0IGNhc2VzIGZvciAi
U3RhY2sgb3ZlcmZsb3cgY3Jhc2ggaW4gSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3RvciBtYXJr
IHBhc3MiCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MjE2CisKKyAgICAgICAgSSBoYXZlIGZpeGVkIHRoaXMgd2l0aCB0aGUgbWFyayBzdGFjayB3b3Jr
LgorICAgICAgICAKKyAgICAgICAgKiBmYXN0L2pzL2djLWJyZWFkdGgtMi1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvZ2MtYnJlYWR0aC0yLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvZ2MtYnJlYWR0aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvZ2MtYnJlYWR0aC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2djLWRl
cHRoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9nYy1kZXB0aC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9nYy1icmVhZHRoLTIuanM6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2VzL2djLWJyZWFkdGguanM6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2VzL2djLWRlcHRoLmpzOiBBZGRlZC4KKwogMjAwNy0x
MS0yNiAgRmVuZyBRaWFuIDxpYW4uZW5nLndlYmtpdEBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvZ2Mt
YnJlYWR0aC0yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtYnJlYWR0aC0y
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjUxMGQ3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLTItZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCB3aWRl
IG9iamVjdCBzdHJ1Y3R1cmVzIGRvbid0IGxlYWQgdG8gR0MgY3Jhc2hlcy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLWJyZWFk
dGgtMi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLTIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJlNTAyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLTIuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2djLWJyZWFkdGgtMi5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLWJy
ZWFkdGgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjUxMGQ3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDkgQEAKK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgd2lkZSBvYmplY3Qg
c3RydWN0dXJlcyBkb24ndCBsZWFkIHRvIEdDIGNyYXNoZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1icmVhZHRoLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLWJyZWFkdGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wYWQwYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9qcy9nYy1icmVhZHRoLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9nYy1icmVhZHRoLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtZGVwdGgtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9nYy1kZXB0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwM2NjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvanMvZ2MtZGVwdGgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhp
cyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBkZWVwIG9iamVjdCBzdHJ1Y3R1cmVzIGRvbid0IGxlYWQg
dG8gR0MgY3Jhc2hlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2pzL2djLWRlcHRoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL2dj
LWRlcHRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NGI4Ngot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtZGVwdGguaHRtbApAQCAt
MCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2djLWRl
cHRoLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvanMvcmVzb3VyY2VzL2djLWJyZWFkdGgtMi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVz
b3VyY2VzL2djLWJyZWFkdGgtMi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yMWI0YzRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJj
ZXMvZ2MtYnJlYWR0aC0yLmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRl
c3QgbWFrZXMgc3VyZSB0aGF0IHdpZGUgb2JqZWN0IHN0cnVjdHVyZXMgZG9uJ3QgbGVhZCB0byBH
QyBjcmFzaGVzLiIpCisKK3ZhciBhID0ge307Citmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDsg
aSsrKSB7CisgICAgYVtpXSA9IHt9OworfQorCit2YXIgYiA9ICIiOworZm9yICh2YXIgaSA9IDA7
IGkgPCA4MDAwMDsgaSsrKSB7CisgICAgYiArPSAiYiI7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMv
Z2MtYnJlYWR0aC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2djLWJyZWFkdGgu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkZDhlNwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2djLWJyZWFkdGguanMKQEAg
LTAsMCArMSwxMyBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgd2lk
ZSBvYmplY3Qgc3RydWN0dXJlcyBkb24ndCBsZWFkIHRvIEdDIGNyYXNoZXMuIikKKwordmFyIGEg
PSBbXTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDAwOyBpKyspIHsKKyAgICBhW2ldID0gW107
Cit9CisKK3ZhciBiID0gIiI7Citmb3IgKHZhciBpID0gMDsgaSA8IDgwMDAwOyBpKyspIHsKKyAg
ICBiICs9ICJiIjsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9nYy1kZXB0aC5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvanMvcmVzb3VyY2VzL2djLWRlcHRoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjkwMjVhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2pzL3Jlc291cmNlcy9nYy1kZXB0aC5qcwpAQCAtMCwwICsxLDEzIEBACitkZXNjcmlwdGlvbigi
VGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBkZWVwIG9iamVjdCBzdHJ1Y3R1cmVzIGRvbid0IGxl
YWQgdG8gR0MgY3Jhc2hlcy4iKQorCit2YXIgYSA9IFtdOworZm9yICh2YXIgaSA9IDA7IGkgPCAy
MDAwMDA7IGkrKykgeworICAgIGEgPSBbYV07Cit9CisKK3ZhciBiID0gIiI7Citmb3IgKHZhciBp
ID0gMDsgaSA8IDgwMDAwOyBpKyspIHsKKyAgICBiICs9ICJiIjsKK30KKwordmFyIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDEyNWZjOWIuLjQyNzBjMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMDct
MTEtMjEgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBOb3Qg
cmV2aWV3ZWQuCisKKyAgICAgICAgSW1wbGVtZW50IG1hcmsgc3RhY2suIFRoaXMgdmVyc2lvbiBp
cyBub3Qgc3VpdGFibGUgZm9yIHByaW1lIHRpbWUgYmVjYXVzZSBpdCBtYWtlcyBhCisgICAgICAg
IGh1Z2UgYWxsb2NhdGlvbiBvbiBldmVyeSBjb2xsZWN0LCBhbmQgcG90ZW50aWFsbHkgbWFrZXMg
bWFya2luZyBvZiBkZXRhY2hlZCBzdWJ0cmVlcworICAgICAgICBzbG93LiBCdXQgaXQgaXMgYSAu
MiUgLSAuNCUgc3BlZWR1cCBldmVuIHdpdGhvdXQgbXVjaCB0d2Vha2luZy4KKworICAgICAgICBJ
IHJlcGxhY2VkIG1hcmsoKSBtZXRob2RzIHdpdGggbWFya0NoaWxkcmVuKCkgYXMgdXN1YWwuIE9u
ZQorICAgICAgICBvcHRpbWl6YXRpb24gdGhhdCBpcyBsb3N0IGlzIGF2b2lkaW5nIHdhbGtpbmcg
ZGV0YWNoZWQgRE9NCisgICAgICAgIHN1YnRyZWVzIG1vcmUgdGhhbiBvbmNlIHRvIG1hcmsgdGhl
bTsgc2luY2UgbWFya2luZyBpcyBub3QKKyAgICAgICAgcmVjdXJzaXZlIHRoZXJlJ3Mgbm8gb2J2
aW91cyB3YXkgdG8gYnJhY2tldCBvcGVyYXRpb24gb24gdGhlIHRyZWUKKyAgICAgICAgYW55IG1v
cmUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6bWFya0No
aWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU05vZGVGaWx0ZXI6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNO
b2RlSXRlcmF0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6
Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6bWFya0NoaWxkcmVuKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKEtKUzo6
SlNYTUxIdHRwUmVxdWVzdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3Bw
OgorICAgICAgICAoS0pTOjpTY3JpcHRJbnRlcnByZXRlcjo6bWFya0RPTU5vZGVzRm9yRG9jdW1l
bnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmg6CisgICAgICAgICogYmlu
ZGluZ3MvanMva2pzX2V2ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
ZXZlbnRzLmg6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHA6CisgICAgICAg
IChLSlM6OldpbmRvdzo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
d2luZG93Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Tm9kZSk6
CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlci5oOgorICAg
ICAgICAqIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmg6CisKIDIwMDctMTEtMjYgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggMjA5NTdmMC4u
NDIzZDQ0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCkBAIC0z
NywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgS0pT
OwogCi12b2lkIEpTRG9jdW1lbnQ6Om1hcmsoKQordm9pZCBKU0RvY3VtZW50OjptYXJrQ2hpbGRy
ZW4oTWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBET01PYmplY3Q6Om1hcmsoKTsKLSAgICBTY3Jp
cHRJbnRlcnByZXRlcjo6bWFya0RPTU5vZGVzRm9yRG9jdW1lbnQoc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihpbXBsKCkpKTsKKyAgICBET01PYmplY3Q6Om1hcmtDaGlsZHJlbihzdGFjayk7CisgICAg
U2NyaXB0SW50ZXJwcmV0ZXI6Om1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KHN0YWNrLCBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KGltcGwoKSkpOwogfQogCiBKU1ZhbHVlKiBKU0RvY3VtZW50Ojpsb2Nh
dGlvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHAKaW5kZXggNmE1Y2UxYy4uZjJjYTYxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9t
LmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIEtKUzo6SlNWYWx1ZSogSlNOb2RlOjphcHBlbmRDaGls
ZChLSlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpMaXN0JiBhcmdzKQogICAgIHJldHVy
biBLSlM6OmpzTnVsbCgpOwogfQogCi12b2lkIEpTTm9kZTo6bWFyaygpCit2b2lkIEpTTm9kZTo6
bWFya0NoaWxkcmVuKEtKUzo6TWFya1N0YWNrJiBzdGFjaykKIHsKICAgICBBU1NFUlQoIW1hcmtl
ZCgpKTsKIApAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgSlNOb2RlOjptYXJrKCkKICAgICAvLyBO
b2RlcyBpbiB0aGUgZG9jdW1lbnQgYXJlIGtlcHQgYWxpdmUgYnkgU2NyaXB0SW50ZXJwcmV0ZXI6
Om1hcmssCiAgICAgLy8gc28gd2UgaGF2ZSBubyBzcGVjaWFsIHJlc3BvbnNpYmlsaXRpZXMgYW5k
IGNhbiBqdXN0IGNhbGwgdGhlIGJhc2UgY2xhc3MgaGVyZS4KICAgICBpZiAobm9kZS0+aW5Eb2N1
bWVudCgpKSB7Ci0gICAgICAgIERPTU9iamVjdDo6bWFyaygpOworICAgICAgICBET01PYmplY3Q6
Om1hcmtDaGlsZHJlbihzdGFjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyMywz
MSArMTIzLDEyIEBAIHZvaWQgSlNOb2RlOjptYXJrKCkKICAgICBmb3IgKE5vZGUqIGN1cnJlbnQg
PSBtX2ltcGwuZ2V0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkp
CiAgICAgICAgIHJvb3QgPSBjdXJyZW50OwogCi0gICAgLy8gSWYgd2UncmUgYWxyZWFkeSBtYXJr
aW5nIHRoaXMgdHJlZSwgdGhlbiB3ZSBjYW4gc2ltcGx5IG1hcmsgdGhpcyB3cmFwcGVyCi0gICAg
Ly8gYnkgY2FsbGluZyB0aGUgYmFzZSBjbGFzczsgb3VyIGNhbGxlciBpcyBpdGVyYXRpbmcgdGhl
IHRyZWUuCi0gICAgaWYgKHJvb3QtPm1faW5TdWJ0cmVlTWFyaykgewotICAgICAgICBET01PYmpl
Y3Q6Om1hcmsoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBNYXJrIHRoZSB3aG9s
ZSB0cmVlCisgICAgZm9yIChOb2RlKiBub2RlVG9NYXJrID0gcm9vdDsgbm9kZVRvTWFyazsgbm9k
ZVRvTWFyayA9IG5vZGVUb01hcmstPnRyYXZlcnNlTmV4dE5vZGUoKSkKKyAgICAgICAgaWYgKEpT
Tm9kZSogd3JhcHBlciA9IEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXI6OmdldERPTU5vZGVGb3JEb2N1
bWVudChtX2ltcGwtPmRvY3VtZW50KCksIG5vZGVUb01hcmspKQorICAgICAgICAgICAgc3RhY2su
cHVzaCh3cmFwcGVyKTsKIAotICAgIC8vIE1hcmsgdGhlIHdob2xlIHRyZWU7IHVzZSB0aGUgZ2xv
YmFsIHNldCBvZiByb290cyB0byBhdm9pZCByZWVudGVyaW5nLgotICAgIHJvb3QtPm1faW5TdWJ0
cmVlTWFyayA9IHRydWU7Ci0gICAgZm9yIChOb2RlKiBub2RlVG9NYXJrID0gcm9vdDsgbm9kZVRv
TWFyazsgbm9kZVRvTWFyayA9IG5vZGVUb01hcmstPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAg
ICAgICBKU05vZGUqIHdyYXBwZXIgPSBLSlM6OlNjcmlwdEludGVycHJldGVyOjpnZXRET01Ob2Rl
Rm9yRG9jdW1lbnQobV9pbXBsLT5kb2N1bWVudCgpLCBub2RlVG9NYXJrKTsKLSAgICAgICAgaWYg
KHdyYXBwZXIpIHsKLSAgICAgICAgICAgIGlmICghd3JhcHBlci0+bWFya2VkKCkpCi0gICAgICAg
ICAgICAgICAgd3JhcHBlci0+bWFyaygpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVUb01hcmsg
PT0gbm9kZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGUgbWFw
IGZyb20gdGhlIGRvY3VtZW50IHRvIHdyYXBwZXJzIGhhcwotICAgICAgICAgICAgLy8gYmVlbiBj
bGVhcmVkIG91dCwgYnV0IGEgd3JhcHBlciBpcyBiZWluZyBtYXJrZWQuIEZvciBub3csIHdlJ2xs
Ci0gICAgICAgICAgICAvLyBsZXQgdGhlIHJlc3Qgb2YgdGhlIHRyZWUgb2Ygd3JhcHBlcnMgZ2V0
IGNvbGxlY3RlZCwgYmVjYXVzZSB3ZSBoYXZlCi0gICAgICAgICAgICAvLyBubyBnb29kIHdheSBv
ZiBmaW5kaW5nIHRoZW0uIExhdGVyIHdlIHNob3VsZCB0ZXN0IGJlaGF2aW9yIG9mIG90aGVyCi0g
ICAgICAgICAgICAvLyBicm93c2VycyBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gcHJlc2VydmUgb3Ro
ZXIgd3JhcHBlcnMgaW4gdGhpcyBjYXNlLgotICAgICAgICAgICAgaWYgKCFtYXJrZWQoKSkKLSAg
ICAgICAgICAgICAgICBtYXJrKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcm9vdC0+bV9pblN1
YnRyZWVNYXJrID0gZmFsc2U7CisgICAgRE9NT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwog
CiAgICAgLy8gRG91YmxlIGNoZWNrIHRoYXQgd2UgYWN0dWFsbHkgZW5kZWQgdXAgbWFya2VkLiBU
aGlzIGFzc2VydCBjYXVnaHQgcHJvYmxlbXMgaW4gdGhlIHBhc3QuCiAgICAgQVNTRVJUKG1hcmtl
ZCgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0
aW9uLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcApp
bmRleCBhNDhhNjFlLi4yYTBlMmUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwCkBAIC0zNCw5ICszNCw5IEBAIEpTTm9kZUZpbHRlckNvbmRpdGlv
bjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEtKUzo6SlNPYmplY3QqIGZpbHRlcikKIHsKIH0KIAot
dm9pZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsoKQordm9pZCBKU05vZGVGaWx0ZXJDb25k
aXRpb246Om1hcmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYgc3RhY2spCiB7Ci0gICAgbV9maWx0
ZXItPm1hcmsoKTsKKyAgICBzdGFjay5wdXNoKG1fZmlsdGVyKTsKIH0KIAogc2hvcnQgSlNOb2Rl
RmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqIGZpbHRlck5vZGUpIGNvbnN0CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCBiZDE3MmI5Li4y
NmMwOGY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRp
dGlvbi5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgK
QEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAg
ICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEtKUzo6SlNPYmplY3QqIGZpbHRlcik7CiAgICAgICAg
IHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oS0pTOjpNYXJr
U3RhY2smKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgS0pTOjpKU09iamVjdCogbV9maWx0
ZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKaW5kZXggMjU4
MDU5Yy4uMDQ0ODFmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0
ZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9t
LmNwcApAQCAtMzIsMTAgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U05vZGVGaWx0ZXI6Om1hcmsoKQorICAgIHZvaWQgSlNOb2RlRmlsdGVyOjptYXJrQ2hpbGRyZW4o
S0pTOjpNYXJrU3RhY2smIHN0YWNrKQogewotICAgIGltcGwoKS0+bWFyaygpOwotICAgIERPTU9i
amVjdDo6bWFyaygpOworICAgIGltcGwoKS0+bWFya0NoaWxkcmVuKHN0YWNrKTsKKyAgICBET01P
YmplY3Q6Om1hcmtDaGlsZHJlbihzdGFjayk7CiB9CiAKIE5vZGVGaWx0ZXIqIHRvTm9kZUZpbHRl
cihLSlM6OkpTVmFsdWUqIHZhbCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlSXRlcmF0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRv
ckN1c3RvbS5jcHAKaW5kZXggZGViMGZmZS4uMTg5ZTcwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKQEAgLTI0LDEyICsyNCwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNOb2RlSXRlcmF0b3I6Om1hcmsoKQordm9pZCBKU05v
ZGVJdGVyYXRvcjo6bWFya0NoaWxkcmVuKEtKUzo6TWFya1N0YWNrJiBzdGFjaykKIHsKICAgICBp
ZiAoTm9kZUZpbHRlciogZmlsdGVyID0gbV9pbXBsLT5maWx0ZXIoKSkKLSAgICAgICAgZmlsdGVy
LT5tYXJrKCk7CisgICAgICAgIGZpbHRlci0+bWFya0NoaWxkcmVuKHN0YWNrKTsKICAgICAKLSAg
ICBET01PYmplY3Q6Om1hcmsoKTsKKyAgICBET01PYmplY3Q6Om1hcmtDaGlsZHJlbihzdGFjayk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3Vz
dG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAppbmRl
eCBjNzNmZTQwLi40N2I1MTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJl
ZVdhbGtlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJD
dXN0b20uY3BwCkBAIC0yNCwxMiArMjQsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IAotdm9pZCBKU1RyZWVXYWxrZXI6Om1hcmsoKQordm9pZCBKU1RyZWVXYWxrZXI6Om1hcmtDaGls
ZHJlbihLSlM6Ok1hcmtTdGFjayYgc3RhY2spCiB7CiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRl
ciA9IG1faW1wbC0+ZmlsdGVyKCkpCi0gICAgICAgIGZpbHRlci0+bWFyaygpOworICAgICAgICBm
aWx0ZXItPm1hcmtDaGlsZHJlbihzdGFjayk7CiAgICAgCi0gICAgRE9NT2JqZWN0OjptYXJrKCk7
CisgICAgRE9NT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOwogfQogICAgIAogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggNTA5ODc4NS4uZDczNDVmMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0xNzAsMTggKzE3
MCwxOCBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUqIHZhbAogICAgIH0KIH0KIAotdm9pZCBKU1hNTEh0
dHBSZXF1ZXN0OjptYXJrKCkKK3ZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6bWFya0NoaWxkcmVuKEtK
Uzo6TWFya1N0YWNrJiBzdGFjaykKIHsKLSAgICBET01PYmplY3Q6Om1hcmsoKTsKKyAgICBET01P
YmplY3Q6Om1hcmtDaGlsZHJlbihzdGFjayk7CiAKICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciogb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+b25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKSk7
CiAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIG9uTG9hZExpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uTG9hZExpc3RlbmVy
KCkpOwogCiAgICAgaWYgKG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKQotICAgICAgICBvblJl
YWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+bWFyaygpOworICAgICAgICBvblJlYWR5U3RhdGVDaGFu
Z2VMaXN0ZW5lci0+bWFya0NoaWxkcmVuKHN0YWNrKTsKIAogICAgIGlmIChvbkxvYWRMaXN0ZW5l
cikKLSAgICAgICAgb25Mb2FkTGlzdGVuZXItPm1hcmsoKTsKKyAgICAgICAgb25Mb2FkTGlzdGVu
ZXItPm1hcmtDaGlsZHJlbihzdGFjayk7CiAgICAgCiAgICAgdHlwZWRlZiBYTUxIdHRwUmVxdWVz
dDo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7CiAgICAgdHlwZWRlZiBYTUxI
dHRwUmVxdWVzdDo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7CkBAIC0xODksNyArMTg5
LDcgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjptYXJrKCkKICAgICBmb3IgKEV2ZW50TGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRl
ciAhPSBldmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7CiAgICAgICAgIGZvciAoTGlz
dGVuZXJWZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsg
dmVjSXRlciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikgewogICAgICAgICAg
ICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPih2ZWNJdGVyLT5nZXQoKSk7Ci0gICAgICAgICAgICBs
aXN0ZW5lci0+bWFyaygpOworICAgICAgICAgICAgbGlzdGVuZXItPm1hcmtDaGlsZHJlbihzdGFj
ayk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWE1MSHR0cFJlcXVlc3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dC5oCmluZGV4IDZhZmI2MDguLmUzZjdlNWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRw
UmVxdWVzdC5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHV0
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSosIGludCB0b2tlbiwgSlNWYWx1ZSogdmFsdWUsIGludCAvKmF0dHIqLyk7CiAgICAgdmlydHVh
bCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtT
dGFjayYpOwogCiAgICAgV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3QqIGltcGwoKSBjb25zdCB7IHJl
dHVybiBtX2ltcGwuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfYmluZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAppbmRl
eCAyZGNjOWZlLi5lZDdiNGUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19i
aW5kaW5nLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcApAQCAt
MjEwLDcgKzIxMCw3IEBAIHZvaWQgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldEFsbERPTU5vZGVz
Rm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIGRlbGV0ZSBtYXA7CiB9CiAKLXZv
aWQgU2NyaXB0SW50ZXJwcmV0ZXI6Om1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50KiBk
b2MpCit2b2lkIFNjcmlwdEludGVycHJldGVyOjptYXJrRE9NTm9kZXNGb3JEb2N1bWVudChNYXJr
U3RhY2smIHN0YWNrLCBEb2N1bWVudCogZG9jKQogewogICAgIE5vZGVQZXJEb2NNYXA6Oml0ZXJh
dG9yIGRpY3RJdCA9IGRvbU5vZGVzUGVyRG9jdW1lbnQoKS5maW5kKGRvYyk7CiAgICAgaWYgKGRp
Y3RJdCAhPSBkb21Ob2Rlc1BlckRvY3VtZW50KCkuZW5kKCkpIHsKQEAgLTIyNSw5ICsyMjUsOSBA
QCB2b2lkIFNjcmlwdEludGVycHJldGVyOjptYXJrRE9NTm9kZXNGb3JEb2N1bWVudChEb2N1bWVu
dCogZG9jKQogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHJlYWNoYWJsZSBmcm9tIEpTLgogICAg
ICAgICAgICAgLy8gSG93ZXZlciwgaW1hZ2UgZWxlbWVudHMgdGhhdCBhcmVuJ3QgaW4gdGhlIGRv
Y3VtZW50IGFyZSBhbHNvCiAgICAgICAgICAgICAvLyBtYXJrZWQsIGlmIHRoZXkgYXJlIG5vdCBk
b25lIGxvYWRpbmcgeWV0LgotICAgICAgICAgICAgaWYgKCFqc05vZGUtPm1hcmtlZCgpICYmIChu
b2RlLT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFz
dGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obm9kZSktPmhhdmVGaXJlZExvYWRFdmVudCgp
KSkpCi0gICAgICAgICAgICAgICAganNOb2RlLT5tYXJrKCk7CisgICAgICAgICAgICBpZiAobm9k
ZS0+aW5Eb2N1bWVudCgpIHx8IChub2RlLT5oYXNUYWdOYW1lKGltZ1RhZykgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50Kj4obm9kZSktPmhhdmVGaXJlZExvYWRFdmVudCgpKSkKKyAgICAgICAgICAgICAgICBzdGFj
ay5wdXNoKGpzTm9kZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5k
aW5nLmgKaW5kZXggMDZjOGY3Mi4uYzc0MDIyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfYmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcu
aApAQCAtODMsNyArODMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc3RhdGljIHZvaWQg
Zm9yZ2V0RE9NTm9kZUZvckRvY3VtZW50KFdlYkNvcmU6OkRvY3VtZW50KiwgV2ViQ29yZTo6Tm9k
ZSopOwogICAgICAgICBzdGF0aWMgdm9pZCBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KFdl
YkNvcmU6OkRvY3VtZW50Kik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHVwZGF0ZURPTU5vZGVEb2N1
bWVudChXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6RG9jdW1lbnQqIG9sZERvYywgV2ViQ29yZTo6
RG9jdW1lbnQqIG5ld0RvYyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIG1hcmtET01Ob2Rlc0ZvckRv
Y3VtZW50KFdlYkNvcmU6OkRvY3VtZW50Kik7CisgICAgICAgIHN0YXRpYyB2b2lkIG1hcmtET01O
b2Rlc0ZvckRvY3VtZW50KE1hcmtTdGFjayYsIFdlYkNvcmU6OkRvY3VtZW50Kik7CiAKICAgICAg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAppbmRleCAxNzI5N2I5Li5lNzhjOGM3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX2V2ZW50cy5jcHAKQEAgLTE4NywxMCArMTg3LDEwIEBAIHZvaWQgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI6OmNsZWFyV2luZG93T2JqKCkKICAgICBtX3dpbiA9IDA7CiB9
CiAKLXZvaWQgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6Om1hcmsoKQordm9pZCBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcjo6bWFya0NoaWxkcmVuKEtKUzo6TWFya1N0YWNrJiBzdGFjaykK
IHsKLSAgICBpZiAobV9saXN0ZW5lciAmJiAhbV9saXN0ZW5lci0+bWFya2VkKCkpCi0gICAgICAg
IG1fbGlzdGVuZXItPm1hcmsoKTsKKyAgICBpZiAobV9saXN0ZW5lcikKKyAgICAgICAgc3RhY2su
cHVzaChtX2xpc3RlbmVyKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZl
bnRzLmgKaW5kZXggNTQ1ZTAwMi4uNTJjZmI1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfZXZlbnRzLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmgK
QEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEtK
Uzo6SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgS0pTOjpX
aW5kb3cqIHdpbmRvd09iaigpIGNvbnN0OwogICAgICAgICB2b2lkIGNsZWFyV2luZG93T2JqKCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
Q2hpbGRyZW4oS0pTOjpNYXJrU3RhY2smKTsKICAgICBwcml2YXRlOgogICAgICAgICBLSlM6OkpT
T2JqZWN0KiBtX2xpc3RlbmVyOwogICAgICAgICBLSlM6OldpbmRvdyogbV93aW47CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfd2luZG93LmNwcAppbmRleCAxNmYwNDQ2Li43ODhlNGMwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMva2pzX3dpbmRvdy5jcHAKQEAgLTI5MCwxMSArMjkwLDExIEBAIExvY2F0aW9uICpXaW5kb3c6
OmxvY2F0aW9uKCkgY29uc3QKIH0KIAogLy8gcmVmZXJlbmNlIG91ciBzcGVjaWFsIG9iamVjdHMg
ZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbgotdm9pZCBXaW5kb3c6Om1hcmsoKQordm9pZCBXaW5k
b3c6Om1hcmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYgc3RhY2spCiB7Ci0gIEpTT2JqZWN0Ojpt
YXJrKCk7Ci0gIGlmIChkLT5sb2MgJiYgIWQtPmxvYy0+bWFya2VkKCkpCi0gICAgZC0+bG9jLT5t
YXJrKCk7CisgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oc3RhY2spOworICBpZiAoZC0+bG9jKQor
ICAgICAgc3RhY2sucHVzaChkLT5sb2MpOwogfQogCiBzdGF0aWMgYm9vbCBhbGxvd1BvcFVwKEV4
ZWNTdGF0ZSAqZXhlYywgV2luZG93ICp3aW5kb3cpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc193aW5kb3cuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCmlu
ZGV4IGQ3MDViMjYuLmQ3YjQ2YWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pz
X3dpbmRvdy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCkBAIC05MCw3
ICs5MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIHdhcyBjYWxsZWQgZnJvbS4KICAgICAg
Ki8KICAgICBzdGF0aWMgV2luZG93KiByZXRyaWV2ZUFjdGl2ZShFeGVjU3RhdGUqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwg
SlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA2ZDE4NWNmLi5hMjg0ZGI3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTM2Niw3ICszNjYsNyBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgQ3VzdG9tIG1hcmsgZnVuY3Rpb24KICAgICBp
ZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0p
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
O1xuXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQg
bWFya0NoaWxkcmVuKEtKUzo6TWFya1N0YWNrJik7XG5cbiIpOwogICAgIH0KIAogICAgICMgQ3Vz
dG9tIHB1c2hFdmVudEhhbmRsZXJTY29wZSBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vTm9kZS5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBkYmEwMWJkLi5jMjcxMDBh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcApAQCAtMTUzLDggKzE1Myw3IEBAIE5vZGU6Ok5vZGUoRG9jdW1lbnQgKmRvYykKICAgICAg
IG1faG92ZXJlZChmYWxzZSksCiAgICAgICBtX2luQWN0aXZlQ2hhaW4oZmFsc2UpLAogICAgICAg
bV9pbkRldGFjaChmYWxzZSksCi0gICAgICBtX2Rpc3BhdGNoaW5nU2ltdWxhdGVkRXZlbnQoZmFs
c2UpLAotICAgICAgbV9pblN1YnRyZWVNYXJrKGZhbHNlKQorICAgICAgbV9kaXNwYXRjaGluZ1Np
bXVsYXRlZEV2ZW50KGZhbHNlKQogewogI2lmbmRlZiBOREVCVUcKICAgICBpZiAoc2hvdWxkSWdu
b3JlTGVha3MpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9XZWJDb3JlL2RvbS9O
b2RlLmgKaW5kZXggNzI4ODZhMC4uMWJkYzBiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9k
ZS5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNDg0LDkgKzQ4NCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBib29sIG1faW5EZXRhY2ggOiAxOwogICAgIGJvb2wgbV9kaXNwYXRjaGluZ1NpbXVs
YXRlZEV2ZW50IDogMTsKIAotcHVibGljOgotICAgIGJvb2wgbV9pblN1YnRyZWVNYXJrIDogMTsK
LSAgICAvLyAwIGJpdHMgbGVmdAorICAgIC8vIDEgYml0IGxlZnQKIAogcHJpdmF0ZToKICAgICBF
bGVtZW50KiBhbmNlc3RvckVsZW1lbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L05vZGVGaWx0ZXIuaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAppbmRleCA2NmIxNzVkLi4z
NTlmMjIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKKysrIGIvV2ViQ29y
ZS9kb20vTm9kZUZpbHRlci5oCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgIk5vZGVGaWx0
ZXJDb25kaXRpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKK25hbWVzcGFjZSBLSlMg
eworICAgIGNsYXNzIE1hcmtTdGFjazsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgTm9kZUZpbHRlciA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXI+IHsKQEAgLTY4
LDcgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIE5vZGVGaWx0ZXIoTm9k
ZUZpbHRlckNvbmRpdGlvbiopOwogICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqKSBjb25z
dDsKLSAgICAgICAgdm9pZCBtYXJrKCkgeyBtX2NvbmRpdGlvbi0+bWFyaygpOyB9OworICAgICAg
ICB2b2lkIG1hcmtDaGlsZHJlbihLSlM6Ok1hcmtTdGFjayYgc3RhY2spIHsgbV9jb25kaXRpb24t
Pm1hcmtDaGlsZHJlbihzdGFjayk7IH07CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8
Tm9kZUZpbHRlckNvbmRpdGlvbj4gbV9jb25kaXRpb247CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9u
LmgKaW5kZXggNzRmYTJmYS4uNGVlMTJmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaApA
QCAtMjksNiArMjksMTAgQEAKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKK25hbWVz
cGFjZSBLSlMgeworICAgIGNsYXNzIE1hcmtTdGFjazsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgTm9kZTsKQEAgLTM3LDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpIHsg
fQogICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoTm9kZSopIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgbWFyaygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxk
cmVuKEtKUzo6TWFya1N0YWNrJikgeyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17550</attachid>
            <date>2007-11-27 01:21:57 -0800</date>
            <delta_ts>2007-12-14 15:49:12 -0800</delta_ts>
            <desc>[3/6] JavaScriptCore:</desc>
            <filename>-JavaScriptCore-.patch</filename>
            <type>text/plain</type>
            <size>15589</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">OTZmZDZhODc5ZjE0ZTU2MWQyMDhmNTVlNjBjYmVkZmQ3NTYyNzNhNApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQx
ZmQwMTkuLjQ4NWVjNmUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNiArMSwzMiBAQAogMjAwNy0xMS0yNiAg
TWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdl
ZC4KKyAgICAgICAgCisgICAgICAgIENoYW5nZSB0aGluZ3MgYXJvdW5kIHNvIEpTV3JhcHBlck9i
amVjdCB0YWtlcyB0aGUgaW50ZXJuYWwgdmFsdWUKKyAgICAgICAgYXMgYSBjb25zdHJ1Y3RvciBh
cmd1bWVudCwgaW5zdGVhZCBvZiBpbml0aWFsbHkgZmlsbGluZyBpbgorICAgICAgICBqc1VuZGVm
aW5lZCgpLiBQbHVzIGNvcnJlc3BvbmRpbmcgY2xlYW51cC4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLmV4cDoKKyAgICAgICAgKiBranMvSlNXcmFwcGVyT2JqZWN0Lmg6CisgICAgICAgICog
a2pzL2Jvb2xfb2JqZWN0LmNwcDoKKyAgICAgICAgKEJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Q
cm90b3R5cGUpOgorICAgICAgICAoQm9vbGVhbk9iamVjdEltcDo6Y29uc3RydWN0KToKKyAgICAg
ICAgKiBranMvYm9vbF9vYmplY3QuaDoKKyAgICAgICAgKiBranMvZGF0ZV9vYmplY3QuY3BwOgor
ICAgICAgICAoS0pTOjpEYXRlT2JqZWN0SW1wOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGtqcy9k
YXRlX29iamVjdC5oOgorICAgICAgICAqIGtqcy9udW1iZXJfb2JqZWN0LmNwcDoKKyAgICAgICAg
KE51bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKE51bWJlck9iamVj
dEltcDo6Y29uc3RydWN0KToKKyAgICAgICAgKiBranMvbnVtYmVyX29iamVjdC5oOgorICAgICAg
ICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6U3RyaW5nSW5zdGFuY2U6
OlN0cmluZ0luc3RhbmNlKToKKyAgICAgICAgKEtKUzo6U3RyaW5nT2JqZWN0SW1wOjpjb25zdHJ1
Y3QpOgorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0Lmg6CisKKzIwMDctMTEtMjYgIE1hY2ll
aiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3ZWQuCiAK
ICAgICAgICAgLSBGaXhlZCAiU3RhY2sgb3ZlcmZsb3cgY3Jhc2ggaW4gSmF2YVNjcmlwdCBnYXJi
YWdlIGNvbGxlY3RvciBtYXJrIHBhc3MiCiAgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMjE2CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggYjMz
ZmFlZi4uNDI4YjM1MiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cApAQCAtMTUxLDggKzE1
MSw3IEBAIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185
RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOCiBfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2Ux
OGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQog
X19aTjNLSlMxNFN0cmluZ0luc3RhbmNlM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRp
ZmllckVQTlNfN0pTVmFsdWVFaQogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlNGluZm9FCi1fX1pO
M0tKUzE0U3RyaW5nSW5zdGFuY2VDMUVQTlNfOEpTT2JqZWN0RVJLTlNfN1VTdHJpbmdFCi1fX1pO
M0tKUzE0U3RyaW5nSW5zdGFuY2VDMkVQTlNfOEpTT2JqZWN0RVJLTlNfN1VTdHJpbmdFCitfX1pO
M0tKUzE0U3RyaW5nSW5zdGFuY2VDMkVQTlNfOEpTT2JqZWN0RVBOU182SlNDZWxsRQogX19aTjNL
SlMxNVNhdmVkUHJvcGVydGllc0MxRXYKIF9fWk4zS0pTMTVTYXZlZFByb3BlcnRpZXNEMUV2CiBf
X1pOM0tKUzE2UnVudGltZU9iamVjdEltcDRpbmZvRQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUva2pzL0pTV3JhcHBlck9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTV3JhcHBlck9i
amVjdC5oCmluZGV4IGQ1MWYwYmQuLmVkYmI2NWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9KU1dyYXBwZXJPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvSlNXcmFwcGVy
T2JqZWN0LmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgKi8gCiAgICAg
Y2xhc3MgSlNXcmFwcGVyT2JqZWN0IDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEpTV3JhcHBlck9iamVjdChKU1ZhbHVlKiBwcm90byk7CisgICAgICAgIEpTV3JhcHBl
ck9iamVjdChKU09iamVjdCogcHJvdG8sIEpTVmFsdWUqKSA7CiAgICAgICAgIAogICAgICAgICAv
KioKICAgICAgICAgICogUmV0dXJucyB0aGUgaW50ZXJuYWwgdmFsdWUgb2YgdGhlIG9iamVjdC4g
VGhpcyBpcyB1c2VkIGZvciBvYmplY3RzIHN1Y2gKQEAgLTYyLDkgKzYyLDkgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgIEpTVmFsdWUqIG1faW50ZXJuYWxWYWx1ZTsKICAgICB9OwogICAgIAot
ICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9iamVjdChKU1ZhbHVlKiBwcm90
bykKKyAgICBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoSlNPYmplY3Qq
IHByb3RvLCBKU1ZhbHVlKiBpbnRlcm5hbFZhbHVlKQogICAgICAgICA6IEpTT2JqZWN0KHByb3Rv
KQotICAgICAgICAsIG1faW50ZXJuYWxWYWx1ZShqc051bGwoKSkKKyAgICAgICAgLCBtX2ludGVy
bmFsVmFsdWUoaW50ZXJuYWxWYWx1ZSkKICAgICB7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9i
b29sX29iamVjdC5jcHAKaW5kZXggYTkzYzUzZC4uMDNkMjFkMyAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvYm9v
bF9vYmplY3QuY3BwCkBAIC0zMyw4ICszMyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIGNv
bnN0IENsYXNzSW5mbyBCb29sZWFuSW5zdGFuY2U6OmluZm8gPSB7IkJvb2xlYW4iLCAwLCAwfTsK
IAotQm9vbGVhbkluc3RhbmNlOjpCb29sZWFuSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKQotICA6
IEpTV3JhcHBlck9iamVjdChwcm90bykKK0Jvb2xlYW5JbnN0YW5jZTo6Qm9vbGVhbkluc3RhbmNl
KEpTT2JqZWN0KiBwcm90bywgSlNWYWx1ZSogdmFsKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHBy
b3RvLCB2YWwpCiB7CiB9CiAKQEAgLTQ5LDEzICs0OSwxMiBAQCB2b2lkIEJvb2xlYW5JbnN0YW5j
ZTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2spCiAvLyBFQ01BIDE1LjYuNAogCiBCb29s
ZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0UHJv
dG90eXBlKiBvYmplY3RQcm90bywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bykKLSAgOiBC
b29sZWFuSW5zdGFuY2Uob2JqZWN0UHJvdG8pCisgIDogQm9vbGVhbkluc3RhbmNlKG9iamVjdFBy
b3RvLCBqc0Jvb2xlYW4oZmFsc2UpKQogewogICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBh
ZGRlZCBsYXRlciBieSBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQogCiAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyBCb29sZWFuUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgQm9vbGVhblByb3Rv
RnVuYzo6VG9TdHJpbmcsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZyksIERvbnRF
bnVtKTsKICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IEJvb2xlYW5Qcm90b0Z1bmMoZXhlYywgZnVu
Y1Byb3RvLCBCb29sZWFuUHJvdG9GdW5jOjpWYWx1ZU9mLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkudmFsdWVPZiksICBEb250RW51bSk7Ci0gIHNldEludGVybmFsVmFsdWUoanNCb29sZWFuKGZh
bHNlKSk7CiB9CiAKIApAQCAtMTA3LDE3ICsxMDYsMTMgQEAgYm9vbCBCb29sZWFuT2JqZWN0SW1w
OjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKIC8vIEVDTUEgMTUuNi4yCiBKU09iamVjdCAq
Qm9vbGVhbk9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAm
YXJncykKIHsKLSAgQm9vbGVhbkluc3RhbmNlICpvYmoobmV3IEJvb2xlYW5JbnN0YW5jZShleGVj
LT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkJvb2xlYW5Qcm90b3R5cGUoKSkpOwotCiAg
IGJvb2wgYjsKICAgaWYgKGFyZ3Muc2l6ZSgpID4gMCkKICAgICBiID0gYXJnc1swXS0+dG9Cb29s
ZWFuKGV4ZWMpOwogICBlbHNlCiAgICAgYiA9IGZhbHNlOwogCi0gIG9iai0+c2V0SW50ZXJuYWxW
YWx1ZShqc0Jvb2xlYW4oYikpOwotCi0gIHJldHVybiBvYmo7CisgIHJldHVybiBuZXcgQm9vbGVh
bkluc3RhbmNlKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQm9vbGVhblByb3Rv
dHlwZSgpLCBqc0Jvb2xlYW4oYikpOwogfQogCiAvLyBFQ01BIDE1LjYuMQpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ranMvYm9v
bF9vYmplY3QuaAppbmRleCAyYjhjMDAwLi44MWQ0NWM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ranMvYm9vbF9vYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmpl
Y3QuaApAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBCb29sZWFu
SW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgcHVibGljOgotICAgIEJvb2xl
YW5JbnN0YW5jZShKU09iamVjdCAqcHJvdG8pOworICAgIEJvb2xlYW5JbnN0YW5jZShKU09iamVj
dCogcHJvdG8sIEpTVmFsdWUqKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hp
bGRyZW4oTWFya1N0YWNrJiBzdGFjayk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMv
ZGF0ZV9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAppbmRl
eCAyMTA3ZmFlLi5iZDlmMjJmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9v
YmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAKQEAgLTMx
Niw4ICszMTYsOCBAQCBzdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBpbnQgbQogCiBjb25zdCBDbGFzc0luZm8g
RGF0ZUluc3RhbmNlOjppbmZvID0geyJEYXRlIiwgMCwgMH07CiAKLURhdGVJbnN0YW5jZTo6RGF0
ZUluc3RhbmNlKEpTT2JqZWN0ICpwcm90bykKLSAgOiBKU1dyYXBwZXJPYmplY3QocHJvdG8pCitE
YXRlSW5zdGFuY2U6OkRhdGVJbnN0YW5jZShKU09iamVjdCogcHJvdG8sIEpTVmFsdWUqIHZhbCkK
KyAgICA6IEpTV3JhcHBlck9iamVjdChwcm90bywgdmFsKQogewogfQogCkBAIC00MjQsMTAgKzQy
NCw5IEBAIGNvbnN0IENsYXNzSW5mbyBEYXRlUHJvdG90eXBlOjppbmZvID0geyJEYXRlIiwgJkRh
dGVJbnN0YW5jZTo6aW5mbywgJmRhdGVUYWJsZX07CiAqLwogLy8gRUNNQSAxNS45LjQKIAotRGF0
ZVByb3RvdHlwZTo6RGF0ZVByb3RvdHlwZShFeGVjU3RhdGUgKiwgT2JqZWN0UHJvdG90eXBlICpv
YmplY3RQcm90bykKLSAgOiBEYXRlSW5zdGFuY2Uob2JqZWN0UHJvdG8pCitEYXRlUHJvdG90eXBl
OjpEYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE9iamVjdFByb3RvdHlwZSogb2JqZWN0UHJvdG8s
IEpTVmFsdWUqIG5hblZhbCkKKyAgICA6IERhdGVJbnN0YW5jZShvYmplY3RQcm90bywgbmFuVmFs
KQogewotICAgIHNldEludGVybmFsVmFsdWUoanNOYU4oKSk7CiAgICAgLy8gVGhlIGNvbnN0cnVj
dG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIERhdGVPYmplY3RJbXAgaGFzIGJlZW4gYnVp
bHQuCiB9CiAKQEAgLTUwMiw5ICs1MDEsNyBAQCBKU09iamVjdCAqRGF0ZU9iamVjdEltcDo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKICAgICB9CiAgIH0KICAg
Ci0gIERhdGVJbnN0YW5jZSAqcmV0ID0gbmV3IERhdGVJbnN0YW5jZShleGVjLT5sZXhpY2FsSW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbkRhdGVQcm90b3R5cGUoKSk7Ci0gIHJldC0+c2V0SW50ZXJuYWxW
YWx1ZShqc051bWJlcih0aW1lQ2xpcCh2YWx1ZSkpKTsKLSAgcmV0dXJuIHJldDsKKyAgcmV0dXJu
IG5ldyBEYXRlSW5zdGFuY2UoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5EYXRl
UHJvdG90eXBlKCksIGpzTnVtYmVyKHRpbWVDbGlwKHZhbHVlKSkpOwogfQogCiAvLyBFQ01BIDE1
LjkuMgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmggYi9KYXZh
U2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAppbmRleCA2YzM4ZTkyLi45ZjliOWQyIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ranMvZGF0ZV9vYmplY3QuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICAgIGNsYXNzIERhdGVJbnN0YW5jZSA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogICAg
IHB1YmxpYzoKLSAgICAgICAgRGF0ZUluc3RhbmNlKEpTT2JqZWN0ICpwcm90byk7CisgICAgICAg
IERhdGVJbnN0YW5jZShKU09iamVjdCogcHJvdG8sIEpTVmFsdWUqKTsKICAgICAgICAgCiAgICAg
ICAgIGJvb2wgZ2V0VGltZShHcmVnb3JpYW5EYXRlVGltZSYsIGludCYgb2Zmc2V0KSBjb25zdDsK
ICAgICAgICAgYm9vbCBnZXRVVENUaW1lKEdyZWdvcmlhbkRhdGVUaW1lJikgY29uc3Q7CkBAIC01
Myw3ICs1Myw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqLwogICAgIGNsYXNzIERhdGVQcm90
b3R5cGUgOiBwdWJsaWMgRGF0ZUluc3RhbmNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERhdGVQ
cm90b3R5cGUoRXhlY1N0YXRlICosIE9iamVjdFByb3RvdHlwZSAqKTsKKyAgICAgICAgLy8gd2Ug
bmVlZCB0aGUgTmFOIHZhbHVlIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIgdG8gYXZvaWQgR0MgYWxs
b2NhdGluZyBiZWZvcmUgCisgICAgICAgIC8vIGJhc2UgY2xhc3MgY29uc3RydWN0aW9uCisgICAg
ICAgIERhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKiwgSlNWYWx1ZSog
bmFuVmFsID0ganNOYU4oKSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIgJiwgUHJvcGVydHlTbG90Jik7CiAgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9r
anMvbnVtYmVyX29iamVjdC5jcHAKaW5kZXggYWQ2OGY5MC4uNzMyYmFjNiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2tqcy9udW1iZXJfb2JqZWN0LmNwcApAQCAtMzcsOCArMzcsOCBAQCB1c2luZyBuYW1lc3BhY2Ug
S0pTOwogCiBjb25zdCBDbGFzc0luZm8gTnVtYmVySW5zdGFuY2U6OmluZm8gPSB7ICJOdW1iZXIi
LCAwLCAwIH07CiAKLU51bWJlckluc3RhbmNlOjpOdW1iZXJJbnN0YW5jZShKU09iamVjdCAqcHJv
dG8pCi0gIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvKQorTnVtYmVySW5zdGFuY2U6Ok51bWJlcklu
c3RhbmNlKEpTT2JqZWN0KiBwcm90bywgSlNWYWx1ZSogdmFsKQorICA6IEpTV3JhcHBlck9iamVj
dChwcm90bywgdmFsKQogewogfQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51
bWJlclByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4LDEwICs0OCw4
IEBAIE51bWJlckluc3RhbmNlOjpOdW1iZXJJbnN0YW5jZShKU09iamVjdCAqcHJvdG8pCiBOdW1i
ZXJQcm90b3R5cGU6Ok51bWJlclByb3RvdHlwZShFeGVjU3RhdGUgKmV4ZWMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm90b3R5cGUgKm9ialByb3RvLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUg
KmZ1bmNQcm90bykKLSAgOiBOdW1iZXJJbnN0YW5jZShvYmpQcm90bykKKyAgOiBOdW1iZXJJbnN0
YW5jZShvYmpQcm90bywganNOdW1iZXIoMCkpCiB7Ci0gIHNldEludGVybmFsVmFsdWUoanNOdW1i
ZXIoMCkpOwotCiAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRl
ciBOdW1iZXJPYmplY3RJbXAgaGFzIGJlZW4gY29uc3RydWN0ZWQKIAogICBwdXREaXJlY3RGdW5j
dGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVtYmVyUHJvdG9GdW5j
OjpUb1N0cmluZywgICAgICAgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKSwgRG9u
dEVudW0pOwpAQCAtNDYzLDE4ICs0NjEsMTQgQEAgYm9vbCBOdW1iZXJPYmplY3RJbXA6OmltcGxl
bWVudHNDb25zdHJ1Y3QoKSBjb25zdAogLy8gRUNNQSAxNS43LjEKIEpTT2JqZWN0ICpOdW1iZXJP
YmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCiB7
Ci0gIEpTT2JqZWN0ICpwcm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGlu
TnVtYmVyUHJvdG90eXBlKCk7Ci0gIE51bWJlckluc3RhbmNlICpvYmoobmV3IE51bWJlckluc3Rh
bmNlKHByb3RvKSk7Ci0KICAgZG91YmxlIG47CiAgIGlmIChhcmdzLmlzRW1wdHkoKSkKICAgICBu
ID0gMDsKICAgZWxzZQogICAgIG4gPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKIAotICBvYmot
PnNldEludGVybmFsVmFsdWUoanNOdW1iZXIobikpOwotCi0gIHJldHVybiBvYmo7CisgIEpTT2Jq
ZWN0ICpwcm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluTnVtYmVyUHJv
dG90eXBlKCk7CisgIHJldHVybiBuZXcgTnVtYmVySW5zdGFuY2UocHJvdG8sIGpzTnVtYmVyKG4p
KTsKIH0KIAogLy8gRUNNQSAxNS43LjIKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9u
dW1iZXJfb2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5oCmluZGV4
IDhhM2UzOWMuLjhiMGYyOWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJf
b2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuaApAQCAtMjks
OSArMjksOSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBOdW1iZXJJbnN0YW5jZSA6IHB1
YmxpYyBKU1dyYXBwZXJPYmplY3QgewogICBwdWJsaWM6Ci0gICAgTnVtYmVySW5zdGFuY2UoSlNP
YmplY3QgKnByb3RvKTsKKyAgICBOdW1iZXJJbnN0YW5jZShKU09iamVjdCogcHJvdG8sIEpTVmFs
dWUqKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQorICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5m
bzsKICAgfTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3Qu
Y3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCmluZGV4IGM3NzIyNDcu
LjQ5MTk1ODcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKQEAgLTQ1LDI1ICs0
NSwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogY29uc3QgQ2xhc3NJbmZvIFN0cmluZ0luc3RhbmNl
OjppbmZvID0geyAiU3RyaW5nIiwgMCwgMCB9OwogCi1TdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5z
dGFuY2UoSlNPYmplY3QgKnByb3RvKQotICA6IEpTV3JhcHBlck9iamVjdChwcm90bykKK1N0cmlu
Z0luc3RhbmNlOjpTdHJpbmdJbnN0YW5jZShKU09iamVjdCogcHJvdG8sIEpTQ2VsbCogc3RyaW5n
KQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvLCBzdHJpbmcpCiB7Ci0gIHNldEludGVybmFs
VmFsdWUoanNTdHJpbmcoIiIpKTsKKyAgICBBU1NFUlQoc3RyaW5nLT50eXBlKCkgPT0gU3RyaW5n
VHlwZSk7CiB9CiAKLVN0cmluZ0luc3RhbmNlOjpTdHJpbmdJbnN0YW5jZShKU09iamVjdCAqcHJv
dG8sIFN0cmluZ0ltcCogc3RyaW5nKQotICA6IEpTV3JhcHBlck9iamVjdChwcm90bykKLXsKLSAg
c2V0SW50ZXJuYWxWYWx1ZShzdHJpbmcpOwotfQotCi1TdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5z
dGFuY2UoSlNPYmplY3QgKnByb3RvLCBjb25zdCBVU3RyaW5nICZzdHJpbmcpCi0gIDogSlNXcmFw
cGVyT2JqZWN0KHByb3RvKQotewotICBzZXRJbnRlcm5hbFZhbHVlKGpzU3RyaW5nKHN0cmluZykp
OwotfQotCi1KU1ZhbHVlICpTdHJpbmdJbnN0YW5jZTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCAmc2xvdCkK
K0pTVmFsdWUqIFN0cmluZ0luc3RhbmNlOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KQogewogICAg
IHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJh
c2UoKSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zaXplKCkpOwogfQpAQCAtMTc4LDggKzE2
Niw4IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJpbmdQcm90b3R5cGU6OmluZm8gPSB7ICJTdHJpbmci
LCAmU3RyaW5nSW5zdGFuY2U6OmluZm8sICZzdHJpCiBAZW5kCiAqLwogLy8gRUNNQSAxNS41LjQK
LVN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0
UHJvdG90eXBlKiBvYmpQcm90bykKLSAgOiBTdHJpbmdJbnN0YW5jZShvYmpQcm90bykKK1N0cmlu
Z1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0UHJvdG90
eXBlKiBvYmpQcm90bywgSlNDZWxsKiBlbXB0eVN0cmluZykKKyAgOiBTdHJpbmdJbnN0YW5jZShv
YmpQcm90bywgZW1wdHlTdHJpbmcpCiB7CiAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFk
ZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdPYmplY3RJbXAgaGFzIGJlZW4gYnVpbHQKICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDApLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CkBAIC0xMDIyLDEyICsxMDEwLDEyIEBAIGJvb2wgU3Ry
aW5nT2JqZWN0SW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKIH0KIAogLy8gRUNNQSAx
NS41LjIKLUpTT2JqZWN0ICpTdHJpbmdPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitKU09iamVjdCogU3RyaW5nT2JqZWN0SW1wOjpjb25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewotICBKU09iamVjdCAqcHJv
dG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpblN0cmluZ1Byb3RvdHlwZSgp
OworICBKU09iamVjdCogcHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRp
blN0cmluZ1Byb3RvdHlwZSgpOwogICBpZiAoYXJncy5zaXplKCkgPT0gMCkKLSAgICByZXR1cm4g
bmV3IFN0cmluZ0luc3RhbmNlKHByb3RvKTsKLSAgcmV0dXJuIG5ldyBTdHJpbmdJbnN0YW5jZShw
cm90bywgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpOworICAgIHJldHVybiBuZXcgU3RyaW5nSW5z
dGFuY2UocHJvdG8sIGpzU3RyaW5nKCkpOworICByZXR1cm4gbmV3IFN0cmluZ0luc3RhbmNlKHBy
b3RvLCBqc1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwogfQogCiAvLyBFQ01BIDE1
LjUuMQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaCBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgKaW5kZXggYjI5NWUyMS4uYzVmODhjOSAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCkBAIC0zMSw5ICszMSw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogCiAgIGNsYXNzIFN0cmluZ0luc3RhbmNlIDogcHVibGljIEpTV3JhcHBlck9iamVj
dCB7CiAgIHB1YmxpYzoKLSAgICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCAqcHJvdG8pOwotICAg
IFN0cmluZ0luc3RhbmNlKEpTT2JqZWN0ICpwcm90bywgU3RyaW5nSW1wKik7Ci0gICAgU3RyaW5n
SW5zdGFuY2UoSlNPYmplY3QgKnByb3RvLCBjb25zdCBVU3RyaW5nJik7CisgICAgU3RyaW5nSW5z
dGFuY2UoSlNPYmplY3QqIHByb3RvLCBKU0NlbGwqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTU4LDcgKzU2LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIC8vIFdlYkNvcmUgdXNlcyB0aGlzIHRvIG1ha2Ugc3R5bGUuZmlsdGVy
IHVuZGV0ZWN0YWJsZQogICBjbGFzcyBTdHJpbmdJbnN0YW5jZVRoYXRNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIDogcHVibGljIFN0cmluZ0luc3RhbmNlIHsKICAgcHVibGljOgotICAgICAgU3RyaW5n
SW5zdGFuY2VUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU09iamVjdCogcHJvdG8sIGNvbnN0
IFVTdHJpbmcmIHN0cmluZykKKyAgICAgIFN0cmluZ0luc3RhbmNlVGhhdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQoSlNPYmplY3QqIHByb3RvLCBKU0NlbGwqIHN0cmluZykKICAgICAgICAgICA6IFN0
cmluZ0luc3RhbmNlKHByb3RvLCBzdHJpbmcpIHsgfQogICAgICAgdmlydHVhbCBib29sIG1hc3F1
ZXJhZGVBc1VuZGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgIHZpcnR1YWwg
Ym9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTcy
LDggKzcwLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICBjbGFzcyBTdHJpbmdQcm90b3R5
cGUgOiBwdWJsaWMgU3RyaW5nSW5zdGFuY2UgewogICBwdWJsaWM6Ci0gICAgU3RyaW5nUHJvdG90
eXBlKEV4ZWNTdGF0ZSAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90
eXBlICpvYmpQcm90byk7CisgICAgLy8gd2UgbmVlZCB0aGUgZW1wdHkgc3RyaW5nIHBhc3NlZCBm
cm9tIHRoZSBjYWxsZXIgdG8gYXZvaWQgR0MgYWxsb2NhdGluZyBiZWZvcmUgCisgICAgLy8gYmFz
ZSBjbGFzcyBjb25zdHJ1Y3Rpb24KKyAgICBTdHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2Jq
ZWN0UHJvdG90eXBlKiwgSlNDZWxsKiBlbXB0eVN0cmluZyA9IGpzU3RyaW5nKCkpOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IGluZm87CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDQyNzBjMjcuLjhhYWRhMjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDctMTEtMjIgIE1hY2ll
aiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBOb3QgcmV2aWV3ZWQuCisK
KyAgICAgICAgQ2hhbmdlIHRoaW5ncyBhcm91bmQgc28gSlNXcmFwcGVyT2JqZWN0IHRha2VzIHRo
ZSBpbnRlcm5hbCB2YWx1ZQorICAgICAgICBhcyBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LCBpbnN0
ZWFkIG9mIGluaXRpYWxseSBmaWxsaW5nIGluCisgICAgICAgIGpzVW5kZWZpbmVkKCkuIFBsdXMg
Y29ycmVzcG9uZGluZyBjbGVhbnVwLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6bmFtZUdldHRlcik6CisKIDIwMDctMTEtMjEgIE1hY2llaiBTdGFjaG93aWFrICA8
bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKaW5kZXggZmE0N2U5
Ny4uNDA1ZjE4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIEpTVmFsdWUqIEpTQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmln
aW5hbE9iCiAKICAgICAvLyBNYWtlIHRoZSBTVkcgJ2ZpbHRlcicgYXR0cmlidXRlIHVuZGV0ZWN0
YWJsZSwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlIElFICdmaWx0ZXInIGF0dHJpYnV0ZS4K
ICAgICBpZiAocHJvcGVydHlOYW1lID09ICJmaWx0ZXIiKQotICAgICAgICByZXR1cm4gbmV3IFN0
cmluZ0luc3RhbmNlVGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYy0+bGV4aWNhbEludGVy
cHJldGVyKCktPmJ1aWx0aW5TdHJpbmdQcm90b3R5cGUoKSwgdGhpc09iai0+aW1wbCgpLT5nZXRQ
cm9wZXJ0eVZhbHVlKHByb3ApKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdJbnN0YW5jZVRo
YXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluU3RyaW5nUHJvdG90eXBlKCksIGpzU3RyaW5nKHRoaXNPYmotPmltcGwoKS0+Z2V0UHJvcGVy
dHlWYWx1ZShwcm9wKSkpOwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKHRoaXNPYmotPmltcGwoKS0+
Z2V0UHJvcGVydHlWYWx1ZShwcm9wKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17551</attachid>
            <date>2007-11-27 01:21:59 -0800</date>
            <delta_ts>2007-12-14 15:49:24 -0800</delta_ts>
            <desc>[4/6]         Not reviewed.</desc>
            <filename>-Not-reviewed..patch</filename>
            <type>text/plain</type>
            <size>13779</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">ZTE0OGJmZmY0MTk2ZjhhYmQ3YzBkZjZmNTAwOTk3YWZhMmFjNDEyNwpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQ4
NWVjNmUuLjRkYWE3NzcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNiArMSwxMTggQEAKIDIwMDctMTEtMjYg
IE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3
ZWQuCisKKyAgICAgICAgLSBwdXNoIHJhbmdlcyBvbnRvIHRoZSBzdGFjayB0byBhdm9pZCBtYWtp
bmcgYSBodWdlIG1hcmsgc3RhY2sgZm9yIGxhcmdlIGFycmF5cy4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgaXMgYW4gMC42JSBTdW5TcGlkZXIgc3BlZWR1cCAoYmFzZWxpbmUgZm9yIHRoaXMgYnJh
bmNoIGJlaW5nCisgICAgICAgIGFib3V0IG9uIHBhciB3aXRoIHRydW5rKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgcGF0Y2ggbG93ZXJzIHRoZSBoaWdoLXdhdGVyIG1hcmsgZm9yIHRoZSBtb3N0
IGFycmF5LWludGVuc2l2ZSB0ZXN0cyBmcm9tCisgICAgICAgIDI2ODcgdG8gMzE2LiBVbmZvcnR1
bmF0ZWx5LCB0aGUgdW5wYWNrLWNvZGUgdGVzdCBjcmVhdGVzIGEgdmVyeSBsYXJnZSBvYmplY3Qg
YW5kCisgICAgICAgIGhhcyBhIGhpZ2gtd2F0ZXIgbWFyayBvZiAxOTc5LgorICAgICAgICAKKyAg
ICAgICAgV2UgbmVlZCB0byBnZXQgdGhlIGhpZ2gtd2F0ZXIgbWFyayBhcyBsb3cgYXMgcG9zc2li
bGUgc28gdGhhdCB3ZQorICAgICAgICBjYW4gdXNlIGEgZml4ZWQtc2l6ZSBtYXJrIHN0YWNrIHdp
dGggYSBzbG93IGZhbGxiYWNrIGFsZ29yaXRobSBmb3IKKyAgICAgICAgdGhlIHJhcmUgY2FzZXMg
dGhhdCBpdCBmYWlscy4KKworICAgICAgICBSZW1haW5pbmcgb3Blbi1lbmRlZCBzdG9yYWdlcyB0
aGF0IGNhbiBibG93IG91dCB0aGUgbWFyayBzdGFjayBpbmNsdWRlOgorICAgICAgICAKKyAgICAg
ICAgLSBQcm9wZXJ0eU1hcAorICAgICAgICAtIExvY2FsU3RvcmFnZQorICAgICAgICAtIFNwYXJz
ZUFycmF5VmFsdWVNYXAKKyAgICAgICAgCisgICAgICAgIFNvbWV3aGF0IGFubm95aW5nbHksIGVh
Y2ggaGFzIGRpZmZlcmVudCBydWxlcyBmb3IgdHJhdmVyc2FsLiBPbmx5CisgICAgICAgIHRoZSBQ
cm9wZXJ0eU1hcCBzZWVtcyBsaWtlbHkgdG8gZ2V0IGh1Z2UgaW4gcmVsYXRpdmVseSBjb21tb24K
KyAgICAgICAgY2FzZXMgc28gdGhlIG5leHQgc3RlcCB3aWxsIGJlIHRvIHRha2UgY2FyZSBvZiB0
aGF0LgorICAgICAgICAKKyAgICAgICAgKiBranMvTWFya1N0YWNrLmg6CisgICAgICAgIChLSlM6
Ok1hcmtTdGFjazo6cHVzaCk6IERlZmluZSB0aGlzIGFzIGEgc2VwYXJhdGUgaW5saW5lIG91dHNp
ZGUgb2YgdGhlIGNsYXNzCisgICAgICAgIGRlY2xhcmF0aW9uLgorICAgICAgICAoS0pTOjpNYXJr
U3RhY2s6OnB1c2hBdG9tKTogZGl0dG8KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjppc0VtcHR5
KTogZGl0dG8KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpyZXNlcnZlQ2FwYWNpdHkpOiBkaXR0
bworCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cHVzaFJhbmdlKTogTmV3IGZ1bmN0aW9uIHRv
IGhhbmRsZSBwdXNoaW5nIGEKKyAgICAgICAgcmFuZ2UuIEZvciBzbWFsbCBlbm91Z2ggcmFuZ2Vz
IG9yIHJhbmdlcyB0aGF0IG9ubHkgY29udGFpbiBrbm93bgorICAgICAgICBhdG9taWMgdmFsdWVz
LCB0aGV5IGFyZSBoYW5kbGVkIGltbWVkaWF0ZWx5LiBCaWdnZXIgcmFuZ2VzIGFyZSBzYXZlZCBv
bgorICAgICAgICB0aGUgc3RhY2sgYW5kIG9ubHkgdGhlIGZpcnN0IGNodW5rIGlzIHB1c2hlZC4K
KyAgICAgICAgCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cG9wKTogQWNjb21vZGF0ZSB0aGUg
cG9zc2liaWxpdHkgb2YgcmFuZ2VzIG9uIHRoZQorICAgICAgICBzdGFjay4gV2UgaGFuZGxlIHRo
aXMgYnkgcHVsbGluZyBvdXQgdGhlIHJhbmdlLCByZXB1c2hpbmcgaXQsIGFuZCB0aGVuCisgICAg
ICAgIHBvcHBpbmcuCisKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpzaXplKTogQWRkZWQuIFVz
ZWZ1bCBmb3IgZGVidWdnaW5nLgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OmFkdmFuY2VSYW5n
ZVN0YXJ0VG9DZWxsV2l0aFJlZnMpOiBIZWxwZXIgZm9yCisgICAgICAgIHB1c2hSYW5nZQorICAg
ICAgICAoS0pTOjpNYXJrU3RhY2s6OnB1c2hXaG9sZVJhbmdlKTogZGl0dG8KKyAgICAgICAgKEtK
Uzo6TWFya1N0YWNrOjpwdXNoT25lSXRlbUFuZEFkdmFuY2UpOiBkaXR0bworICAgICAgICAoS0pT
OjpNYXJrU3RhY2s6OmFkdmFuY2VVbnRpbDEyNkl0ZW1zUHVzaGVkKTogZGl0dG8gCisgICAgICAg
ICoga2pzL2FycmF5X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEtKUzo6QXJyYXlJbnN0YW5jZTo6
bWFya0NoaWxkcmVuKTogVXNlIHB1c2hSYW5nZS4KKworMjAwNy0xMS0yNCAgTWFjaWVqIFN0YWNo
b3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdlZC4KKworICAgICAg
ICAtIHJlbW92ZSBvdmVyLW9wdGltaXN0aWMgYXNzZXJ0CisgICAgICAgIAorICAgICAgICAqIGtq
cy92YWx1ZS5oOgorCisyMDA3LTExLTI0ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5j
b20+CisKKyAgICAgICAgTm90IHJldmlld2VkLgorCisgICAgICAgIC0gcHVzaCByYW5nZXMgb250
byB0aGUgc3RhY2sgdG8gYXZvaWQgbWFraW5nIGEgaHVnZSBtYXJrIHN0YWNrIGZvciBsYXJnZSBh
cnJheXMuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGFuIDAuNiUgU3VuU3BpZGVyIHNwZWVk
dXAgKGJhc2VsaW5lIGZvciB0aGlzIGJyYW5jaCBiZWluZworICAgICAgICBhYm91dCBvbiBwYXIg
d2l0aCB0cnVuaykuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGxvd2VycyB0aGUgaGln
aC13YXRlciBtYXJrIGZvciB0aGUgbW9zdCBhcnJheS1pbnRlbnNpdmUgdGVzdHMgZnJvbQorICAg
ICAgICAyNjg3IHRvIDMxNi4gVW5mb3J0dW5hdGVseSwgdGhlIHVucGFjay1jb2RlIHRlc3QgY3Jl
YXRlcyBhIHZlcnkgbGFyZ2Ugb2JqZWN0IGFuZAorICAgICAgICBoYXMgYSBoaWdoLXdhdGVyIG1h
cmsgb2YgMTk3OS4KKyAgICAgICAgCisgICAgICAgIFdlIG5lZWQgdG8gZ2V0IHRoZSBoaWdoLXdh
dGVyIG1hcmsgYXMgbG93IGFzIHBvc3NpYmxlIHNvIHRoYXQgd2UKKyAgICAgICAgY2FuIHVzZSBh
IGZpeGVkLXNpemUgbWFyayBzdGFjayB3aXRoIGEgc2xvdyBmYWxsYmFjayBhbGdvcml0aG0gZm9y
CisgICAgICAgIHRoZSByYXJlIGNhc2VzIHRoYXQgaXQgZmFpbHMuCisKKyAgICAgICAgUmVtYWlu
aW5nIG9wZW4tZW5kZWQgc3RvcmFnZXMgdGhhdCBjYW4gYmxvdyBvdXQgdGhlIG1hcmsgc3RhY2sg
aW5jbHVkZToKKyAgICAgICAgCisgICAgICAgIC0gUHJvcGVydHlNYXAKKyAgICAgICAgLSBMb2Nh
bFN0b3JhZ2UKKyAgICAgICAgLSBTcGFyc2VBcnJheVZhbHVlTWFwCisgICAgICAgIAorICAgICAg
ICBTb21ld2hhdCBhbm5veWluZ2x5LCBlYWNoIGhhcyBkaWZmZXJlbnQgcnVsZXMgZm9yIHRyYXZl
cnNhbC4gT25seQorICAgICAgICB0aGUgUHJvcGVydHlNYXAgc2VlbXMgbGlrZWx5IHRvIGdldCBo
dWdlIGluIHJlbGF0aXZlbHkgY29tbW9uCisgICAgICAgIGNhc2VzIHNvIHRoZSBuZXh0IHN0ZXAg
d2lsbCBiZSB0byB0YWtlIGNhcmUgb2YgdGhhdC4KKyAgICAgICAgCisgICAgICAgICoga2pzL01h
cmtTdGFjay5oOgorICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OnB1c2gpOiBEZWZpbmUgdGhpcyBh
cyBhIHNlcGFyYXRlIGlubGluZSBvdXRzaWRlIG9mIHRoZSBjbGFzcworICAgICAgICBkZWNsYXJh
dGlvbi4KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoQXRvbSk6IGRpdHRvCisgICAgICAg
IChLSlM6Ok1hcmtTdGFjazo6aXNFbXB0eSk6IGRpdHRvCisgICAgICAgIChLSlM6Ok1hcmtTdGFj
azo6cmVzZXJ2ZUNhcGFjaXR5KTogZGl0dG8KKworICAgICAgICAoS0pTOjpNYXJrU3RhY2s6OnB1
c2hSYW5nZSk6IE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgcHVzaGluZyBhCisgICAgICAgIHJhbmdl
LiBGb3Igc21hbGwgZW5vdWdoIHJhbmdlcyBvciByYW5nZXMgdGhhdCBvbmx5IGNvbnRhaW4ga25v
d24KKyAgICAgICAgYXRvbWljIHZhbHVlcywgdGhleSBhcmUgaGFuZGxlZCBpbW1lZGlhdGVseS4g
QmlnZ2VyIHJhbmdlcyBhcmUgc2F2ZWQgb24KKyAgICAgICAgdGhlIHN0YWNrIGFuZCBvbmx5IHRo
ZSBmaXJzdCBjaHVuayBpcyBwdXNoZWQuCisgICAgICAgIAorICAgICAgICAoS0pTOjpNYXJrU3Rh
Y2s6OnBvcCk6IEFjY29tb2RhdGUgdGhlIHBvc3NpYmlsaXR5IG9mIHJhbmdlcyBvbiB0aGUKKyAg
ICAgICAgc3RhY2suIFdlIGhhbmRsZSB0aGlzIGJ5IHB1bGxpbmcgb3V0IHRoZSByYW5nZSwgcmVw
dXNoaW5nIGl0LCBhbmQgdGhlbgorICAgICAgICBwb3BwaW5nLgorCisgICAgICAgIChLSlM6Ok1h
cmtTdGFjazo6c2l6ZSk6IEFkZGVkLiBVc2VmdWwgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgKEtK
Uzo6TWFya1N0YWNrOjphZHZhbmNlUmFuZ2VTdGFydFRvQ2VsbFdpdGhSZWZzKTogSGVscGVyIGZv
cgorICAgICAgICBwdXNoUmFuZ2UKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoV2hvbGVS
YW5nZSk6IGRpdHRvCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cHVzaE9uZUl0ZW1BbmRBZHZh
bmNlKTogZGl0dG8KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjphZHZhbmNlVW50aWwxMjZJdGVt
c1B1c2hlZCk6IGRpdHRvIAorICAgICAgICAqIGtqcy9hcnJheV9pbnN0YW5jZS5jcHA6CisgICAg
ICAgIChLSlM6OkFycmF5SW5zdGFuY2U6Om1hcmtDaGlsZHJlbik6IFVzZSBwdXNoUmFuZ2UuCisK
KzIwMDctMTEtMjIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAg
ICBOb3QgcmV2aWV3ZWQuCiAgICAgICAgIAogICAgICAgICBDaGFuZ2UgdGhpbmdzIGFyb3VuZCBz
byBKU1dyYXBwZXJPYmplY3QgdGFrZXMgdGhlIGludGVybmFsIHZhbHVlCiAgICAgICAgIGFzIGEg
Y29uc3RydWN0b3IgYXJndW1lbnQsIGluc3RlYWQgb2YgaW5pdGlhbGx5IGZpbGxpbmcgaW4KZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9NYXJrU3RhY2suaCBiL0phdmFTY3JpcHRDb3Jl
L2tqcy9NYXJrU3RhY2suaAppbmRleCBjOTZiNGFmLi5kN2UyYTg1IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9ranMvTWFya1N0YWNrLmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL01hcmtT
dGFjay5oCkBAIC0zMSw2NiArMzEsMTk5IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgY2xhc3Mg
TWFya1N0YWNrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgcHVzaChKU1ZhbHVlKiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5tYXJrZWQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS0+YXNDZWxs
KCk7Ci0gICAgICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwpOwotICAgICAgICAgICAg
aWYgKCFDb2xsZWN0b3I6OmNlbGxNYXlIYXZlUmVmcyhjZWxsKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBBU1NFUlQobV9zdGFjay5zaXplKCkgPCBtX3N0YWNrLmNhcGFj
aXR5KCkpOwotICAgICAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQoY2VsbCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgdm9pZCBwdXNoKEpTVmFsdWUqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBw
dXNoKEpTQ2VsbCogY2VsbCk7CiAKLSAgICAgICAgdm9pZCBwdXNoKEpTQ2VsbCogY2VsbCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGNlbGwtPm1hcmtlZCgpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIENvbGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7Ci0gICAgICAg
ICAgICBpZiAoIUNvbGxlY3Rvcjo6Y2VsbE1heUhhdmVSZWZzKGNlbGwpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0YWNrLnNpemUoKSA8IG1fc3RhY2su
Y2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICBtX3N0YWNrLnVuY2hlY2tlZEFwcGVuZChjZWxsKTsK
LSAgICAgICAgfQorICAgICAgICAvLyBtb3JlIGVmZmljaWVudCB3aGVuIGEgdmFsdWUgb3IgY2Vs
bCBpcyBrbm93biB0byBiZSBhdG9taWMKKyAgICAgICAgdm9pZCBwdXNoQXRvbShKU1ZhbHVlKiB2
YWx1ZSk7CisgICAgICAgIHZvaWQgcHVzaEF0b20oSlNDZWxsKiBjZWxsKTsKKworICAgICAgICB2
b2lkIHB1c2hSYW5nZShKU1ZhbHVlKiogc3RhcnQsIEpTVmFsdWUqKiBlbmQpOworCisgICAgICAg
IEpTQ2VsbCogcG9wKCk7CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCk7CisgICAgICAgIHNpemVf
dCBzaXplKCk7CisgICAgICAgIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBzaXplKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIGlubGluZSB2b2lkIHB1c2hXaG9sZVJhbmdlKEpTVmFsdWUq
KiYgc3RhcnQsIEpTVmFsdWUqKiYgZW5kKTsKKyAgICAgICAgaW5saW5lIHZvaWQgYWR2YW5jZVJh
bmdlU3RhcnRUb0NlbGxXaXRoUmVmcyhKU1ZhbHVlKiomIHN0YXJ0LCBKU1ZhbHVlKiomIGVuZCk7
CisgICAgICAgIGlubGluZSB2b2lkIHB1c2hPbmVJdGVtQW5kQWR2YW5jZShKU1ZhbHVlKiomIHN0
YXJ0KTsKKyAgICAgICAgaW5saW5lIHZvaWQgYWR2YW5jZVVudGlsMTI2SXRlbXNQdXNoZWQoc2l6
ZV90IGNvdW50LCBKU1ZhbHVlKiomIHN0YXJ0LCBKU1ZhbHVlKiomIGVuZCk7CisKKyAgICAgICAg
VmVjdG9yPEpTQ2VsbCo+IG1fc3RhY2s7CisgICAgfTsKKworCisgICAgaW5saW5lIHZvaWQgTWFy
a1N0YWNrOjpwdXNoKEpTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5t
YXJrZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFs
dWUtPmFzQ2VsbCgpOworICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwpOworICAgICAg
ICBpZiAoIUNvbGxlY3Rvcjo6Y2VsbE1heUhhdmVSZWZzKGNlbGwpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBBU1NFUlQobV9zdGFjay5zaXplKCkgPCBtX3N0YWNrLmNhcGFjaXR5KCkp
OworICAgICAgICBtX3N0YWNrLnVuY2hlY2tlZEFwcGVuZChjZWxsKTsKKyAgICB9CiAKLSAgICAg
ICAgdm9pZCBwdXNoQXRvbShKU1ZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHZhbHVlLT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS0+YXNDZWxsKCk7Ci0gICAgICAgICAgICBDb2xsZWN0b3I6
Om1hcmtDZWxsKGNlbGwpOworICAgIC8vIHRoaXMgZXh0cmEgZnVuY3Rpb24gaXMgd29ydGggaXQg
dG8gYXZvaWQgSlNJbW1lZGlhdGUgCisgICAgLy8gY2hlY2tzIG9uIGtub3duIGNlbGxzCisgICAg
aW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAg
IGlmIChjZWxsLT5tYXJrZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQ29sbGVj
dG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICAgICAgaWYgKCFDb2xsZWN0b3I6OmNlbGxNYXlIYXZl
UmVmcyhjZWxsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG1fc3RhY2su
c2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgpKTsKKyAgICAgICAgbV9zdGFjay51bmNoZWNrZWRB
cHBlbmQoY2VsbCk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoQXRv
bShKU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+bWFya2VkKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLT5hc0NlbGwo
KTsKKyAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICB9CisKKyAgICBpbmxp
bmUgdm9pZCBNYXJrU3RhY2s6OnB1c2hBdG9tKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAg
IGlmIChjZWxsLT5tYXJrZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQ29sbGVj
dG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6
OmFkdmFuY2VSYW5nZVN0YXJ0VG9DZWxsV2l0aFJlZnMoSlNWYWx1ZSoqJiBzdGFydCwgSlNWYWx1
ZSoqJiBlbmQpCisgICAgeworICAgICAgICB3aGlsZSAoc3RhcnQgIT0gZW5kKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlKiB2YWx1ZSA9ICpzdGFydDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAh
dmFsdWUtPm1hcmtlZCgpKSB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUt
PmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChDb2xsZWN0b3I6OmNlbGxNYXlIYXZlUmVm
cyhjZWxsKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgQ29s
bGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrc3Rh
cnQ7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgdm9pZCBwdXNoQXRvbShKU0NlbGwqIGNl
bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjZWxsLT5tYXJrZWQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwpOwor
ICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6cHVzaFdob2xlUmFuZ2UoSlNWYWx1ZSoqJiBzdGFy
dCwgSlNWYWx1ZSoqJiBlbmQpCisgICAgeworICAgICAgICB3aGlsZSAoc3RhcnQgIT0gZW5kKSB7
CisgICAgICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSAqc3RhcnQpCisgICAgICAgICAgICAg
ICAgcHVzaCh2YWx1ZSk7CisgICAgICAgICAgICArK3N0YXJ0OwogICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgIEpTQ2VsbCogcG9wKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1f
c3RhY2suc2l6ZSgpID4gMCk7Ci0gICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX3N0YWNrLmxh
c3QoKTsKLSAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgcmV0
dXJuIGNlbGw7CisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoT25lSXRlbUFuZEFkdmFu
Y2UoSlNWYWx1ZSoqJiBzdGFydCkKKyAgICB7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9ICgqc3Rh
cnQpLT5hc0NlbGwoKTsKKyAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgpKTsKKyAgICAgICAg
bV9zdGFjay51bmNoZWNrZWRBcHBlbmQoY2VsbCk7CisgICAgICAgICsrc3RhcnQ7CisgICAgfQor
CisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjphZHZhbmNlVW50aWwxMjZJdGVtc1B1c2hlZChz
aXplX3QgY291bnQsIEpTVmFsdWUqKiYgc3RhcnQsIEpTVmFsdWUqKiYgZW5kKQorICAgIHsKKyAg
ICAgICAgd2hpbGUgKHN0YXJ0ICE9IGVuZCAmJiBjb3VudCA8PSAxMjYpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUqIHZhbHVlID0gKnN0YXJ0OworICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1
ZS0+bWFya2VkKCkpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS0+YXND
ZWxsKCk7CisgICAgICAgICAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKKyAgICAg
ICAgICAgICAgICBpZiAoQ29sbGVjdG9yOjpjZWxsTWF5SGF2ZVJlZnMoY2VsbCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQoY2VsbCk7Cisg
ICAgICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKytzdGFydDsKICAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBp
bmxpbmUgdm9pZCBNYXJrU3RhY2s6OnB1c2hSYW5nZShKU1ZhbHVlKiogc3RhcnQsIEpTVmFsdWUq
KiBlbmQpCisgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGF2b2lkIHB1
c2hpbmcgdG9vIG1hbnkgdmFsdWVzIG9udG8KKyAgICAgICAgLy8gdGhlIHN0YWNrIGF0IG9uY2Ug
dG8ga2VlcCB0aGUgaGlnaCB3YXRlciBtYXJrIHJlYXNvbmFibGUgaW4KKyAgICAgICAgLy8gbW9z
dCBjYXNlcy4gU3BlY2lmaWNhbGx5IGl0IHRyaWVzIHRvIHB1c2ggbm8gbW9yZSB0aGFuIDEyOAor
ICAgICAgICAvLyBpdGVtcy4gVGhlIHJhbmdlIGl0c2VsZiBpcyBrZXB0IG9uIHRoZSBzdGFjayBp
ZiB3ZSdkIGhhdmUKKyAgICAgICAgLy8gdG8gZ28gb3Zlci4gV2UgYWxzbyB0cnkgdG8gbWFpbnRh
aW4gdGhlIGludmFyaWFudCB0aGF0CisgICAgICAgIC8vIGFmdGVyIHByb2Nlc3NpbmcgYXJhbmdl
IG9uIHRoZSBzdGFjayB0aGVyZSBpcyBhbHdheXMgYXQKKyAgICAgICAgLy8gbGVhc3Qgb25lIGl0
ZW0gdG8gcG9wLgorCisgICAgICAgIGFkdmFuY2VSYW5nZVN0YXJ0VG9DZWxsV2l0aFJlZnMoc3Rh
cnQsIGVuZCk7CiAKLSAgICAgICAgYm9vbCBpc0VtcHR5KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOworICAgICAgICBpZiAoZW5kIC0gc3RhcnQgPD0g
MTI4KSB7CisgICAgICAgICAgICBwdXNoV2hvbGVSYW5nZShzdGFydCwgZW5kKTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHNp
emVfdCBzaXplKSAKLSAgICAgICAgewotICAgICAgICAgICAgbV9zdGFjay5yZXNlcnZlQ2FwYWNp
dHkoc2l6ZSk7CisgICAgICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHB1
c2hPbmVJdGVtQW5kQWR2YW5jZShzdGFydCk7CisgICAgICAgICAgICAKKyAgICAgICAgQVNTRVJU
KG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgpKTsKKyAgICAgICAgbV9zdGFjay51
bmNoZWNrZWRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihlbmQpKTsgICAgICAgICAg
ICAgICAgCisgICAgICAgIEpTQ2VsbComIGVuZFNsb3QgPSBtX3N0YWNrLmxhc3QoKTsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgpKTsKKyAgICAgICAg
bV9zdGFjay51bmNoZWNrZWRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpIHwgMSkpOyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgSlNDZWxsKiYgc3RhcnRTbG90ID0gbV9zdGFjay5sYXN0KCk7CisgICAgICAgIAorICAgICAg
ICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBhZHZhbmNlVW50aWwxMjZJdGVtc1B1c2hlZChj
b3VudCwgc3RhcnQsIGVuZCk7CisgICAgICAgIAorICAgICAgICBhZHZhbmNlUmFuZ2VTdGFydFRv
Q2VsbFdpdGhSZWZzKHN0YXJ0LCBlbmQpOworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0ICE9
IGVuZCkgeworICAgICAgICAgICAgc3RhcnRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpIHwgMSk7CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyBp
dGVtcyBsZWZ0IHRvIHB1c2gsIHRoZW4ganVzdCBvdmVyd3JpdGUgdGhlIHJhbmdlIHNsb3RzCisg
ICAgICAgIC8vIHdpdGggd2hhdCB3b3VsZCBvdGhlcndpc2UgYmUgdGhlIGxhc3QgaXRlbXMuCisg
ICAgICAgIGlmIChjb3VudCA+IDApCisgICAgICAgICAgICBlbmRTbG90ID0gbV9zdGFjay5sYXN0
KCk7CisgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBpZiAoY291bnQgPiAx
KQorICAgICAgICAgICAgc3RhcnRTbG90ID0gbV9zdGFjay5sYXN0KCk7CisgICAgICAgIG1fc3Rh
Y2sucmVtb3ZlTGFzdCgpOworICAgIH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3RvcjxK
U0NlbGwqPiBtX3N0YWNrOwotICAgIH07CisgICAgaW5saW5lIEpTQ2VsbCogTWFya1N0YWNrOjpw
b3AoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpID4gMCk7CisgICAgICAg
IEpTQ2VsbCogY2VsbCA9IG1fc3RhY2subGFzdCgpOworICAgICAgICBtX3N0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihjZWxsKSAmIDEpKQorICAgICAgICAgICAgcmV0dXJuIGNlbGw7CisgICAgICAgIAorICAgICAg
ICBKU1ZhbHVlKiogc3RhcnQgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwpICYgfjFMKTsKKyAgICAgICAgSlNWYWx1ZSoqIGVuZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSoqPihtX3N0YWNrLmxhc3QoKSk7CisgICAgICAgIG1f
c3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAgIHB1c2hSYW5nZShzdGFy
dCwgZW5kKTsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gcG9wKCk7CisgICAgfQorICAg
IAorICAgIGlubGluZSBib29sIE1hcmtTdGFjazo6aXNFbXB0eSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya1N0
YWNrOjpyZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IHNpemUpIAorICAgIHsKKyAgICAgICAgbV9zdGFj
ay5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CisgICAgfQogCisgICAgaW5saW5lIHNpemVfdCBNYXJr
U3RhY2s6OnNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOworICAg
IH0KIH0KIAogI2VuZGlmIC8vIE1hcmtTdGFja19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfaW5zdGFuY2UuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3Rh
bmNlLmNwcAppbmRleCBlOTQwNzg2Li4zNDcxYjljIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfaW5zdGFuY2UuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9p
bnN0YW5jZS5jcHAKQEAgLTQwOSwxMSArNDA5LDcgQEAgdm9pZCBBcnJheUluc3RhbmNlOjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBzdGFjaykKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7CiAKICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fbGVuZ3Ro
LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVl
KTsKLSAgICB9CisgICAgc3RhY2sucHVzaFJhbmdlKHN0b3JhZ2UtPm1fdmVjdG9yLCBzdG9yYWdl
LT5tX3ZlY3RvciArIHVzZWRWZWN0b3JMZW5ndGgpOwogCiAgICAgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17552</attachid>
            <date>2007-11-27 01:22:01 -0800</date>
            <delta_ts>2007-12-14 15:49:34 -0800</delta_ts>
            <desc>[5/6]         Not reviewed.</desc>
            <filename>-Not-reviewed..patch</filename>
            <type>text/plain</type>
            <size>10989</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">YjJkMTEyZWZmZjgxYWViMWE4MWY5NDkzZDA5N2Y5YWQ5NzgxNDY1ZApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRk
YWE3NzcuLjJhZWJmMjEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNiArMSwzNCBAQAogMjAwNy0xMS0yNiAg
TWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdl
ZC4KKyAgICAgICAgCisgICAgICAgIC0gcHVzaCBsYXJnZSBQcm9wZXJ0eU1hcHMgYXMgcmFuZ2Vz
IHRvbworICAgICAgICAKKyAgICAgICAgVGhpcyBzZWVtcyB0b2JlIGEgd2FzaCBvbiBTdW5TcGlk
ZXIuCisgICAgICAgIAorICAgICAgICBUaGUgaGlnaC13YXRlciBtYXJrIGZvciB0aGUgc3RhY2sg
b24gdGhlIFN1blNwaWRlciBiZW5jaG1hcmsgZ29lcworICAgICAgICBmcm9tIDE5NzkgdG8gMjIw
LgorCisgICAgICAgICoga2pzL01hcmtTdGFjay5oOgorICAgICAgICAoS0pTOjpSYW5nZVRhZyk6
IFRlbXBhdGUgY2xhc3MgdG8gYWlkIHRhZ2dpbmcgYm90aCBKU1ZhbHVlKiogYW5kIFByb3BlcnR5
TWFwKgorICAgICAgICByYW5nZXMuCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6Z2V0VmFsdWUp
OiBPdmVybG9hZGVkIGhlbHBlciBmb3IgbmV3bHkgdGVtcGxhdGl6ZWQKKyAgICAgICAgYWxnb3Jp
dGhtcy4KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpzYWZlVG9BY2Nlc3MpOiBkaXR0bworICAg
ICAgICAoS0pTOjpNYXJrU3RhY2s6OmFkdmFuY2VSYW5nZVN0YXJ0VG9DZWxsV2l0aFJlZnMpOiBU
ZW1wbGF0aXplZC4KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwdXNoV2hvbGVSYW5nZSk6IGRp
dHRvCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cHVzaE9uZUl0ZW1BbmRBZHZhbmNlKTogZGl0
dG8KKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjphZHZhbmNlVW50aWwxMjZJdGVtc1B1c2hlZCk6
IGRpdHRvCisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cHVzaFJhbmdlKTogZGl0dG8KKyAgICAg
ICAgKEtKUzo6TWFya1N0YWNrOjpwb3ApOiBIYW5kbGUgYm90aCBraW5kcyBvZiByYW5nZXMgbm93
LgorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9tYXAuY3BwOgorICAgICAgICAoS0pTOjpQcm9wZXJ0
eU1hcDo6bWFya0NoaWxkcmVuKTogVXNlIHB1c2hSYW5nZXMuCisgICAgICAgICoga2pzL3Byb3Bl
cnR5X21hcC5oOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcEVudHJ5OjpQcm9wZXJ0eU1hcEVu
dHJ5KTogTWFkZSB0aGlzIHB1YmxpYyBpbiB0aGUgaGVhZGVyLgorCisyMDA3LTExLTI2ICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgTm90IHJldmlld2VkLgog
CiAgICAgICAgIC0gcHVzaCByYW5nZXMgb250byB0aGUgc3RhY2sgdG8gYXZvaWQgbWFraW5nIGEg
aHVnZSBtYXJrIHN0YWNrIGZvciBsYXJnZSBhcnJheXMuCiAgICAgICAgIApAQCAtNTAsMTUgKzc4
LDcgQEAKICAgICAgICAgKiBranMvYXJyYXlfaW5zdGFuY2UuY3BwOgogICAgICAgICAoS0pTOjpB
cnJheUluc3RhbmNlOjptYXJrQ2hpbGRyZW4pOiBVc2UgcHVzaFJhbmdlLgogCi0yMDA3LTExLTI0
ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+Ci0KLSAgICAgICAgTm90IHJldmll
d2VkLgotCi0gICAgICAgIC0gcmVtb3ZlIG92ZXItb3B0aW1pc3RpYyBhc3NlcnQKLSAgICAgICAg
Ci0gICAgICAgICoga2pzL3ZhbHVlLmg6Ci0KLTIwMDctMTEtMjQgIE1hY2llaiBTdGFjaG93aWFr
ICA8bWpzQGFwcGxlLmNvbT4KKzIwMDctMTEtMjYgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFw
cGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCiAKQEAgLTExMCw3ICsxMzAsNyBAQAog
ICAgICAgICAqIGtqcy9hcnJheV9pbnN0YW5jZS5jcHA6CiAgICAgICAgIChLSlM6OkFycmF5SW5z
dGFuY2U6Om1hcmtDaGlsZHJlbik6IFVzZSBwdXNoUmFuZ2UuCiAKLTIwMDctMTEtMjIgIE1hY2ll
aiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKzIwMDctMTEtMjYgIE1hY2llaiBTdGFjaG93
aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL01hcmtTdGFjay5oIGIvSmF2YVNjcmlwdENv
cmUva2pzL01hcmtTdGFjay5oCmluZGV4IGQ3ZTJhODUuLjRmOTc4MzUgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2tqcy9NYXJrU3RhY2suaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvTWFy
a1N0YWNrLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlICJjb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwcm9wZXJ0eV9tYXAuaCIKICNpbmNsdWRl
ICJ2YWx1ZS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKQEAgLTM4LDcgKzM5LDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIHZvaWQgcHVzaEF0b20oSlNWYWx1ZSogdmFsdWUpOwogICAgICAg
ICB2b2lkIHB1c2hBdG9tKEpTQ2VsbCogY2VsbCk7CiAKLSAgICAgICAgdm9pZCBwdXNoUmFuZ2Uo
SlNWYWx1ZSoqIHN0YXJ0LCBKU1ZhbHVlKiogZW5kKTsKKyAgICAgICAgLy8gdXNlZCB0byBwdXNo
IEpTVmFsdWUqKiBvciBQb3BlcnR5TWFwRW50cnkqIHJhbmdlcworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIHB1c2hSYW5nZShUKiBzdGFydCwgVCogZW5kKTsKIAogICAgICAgICBK
U0NlbGwqIHBvcCgpOwogCkBAIC00NywxNCArNDksMjggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBzaXplKTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIGlubGluZSB2b2lkIHB1c2hXaG9sZVJhbmdlKEpTVmFsdWUqKiYgc3RhcnQsIEpTVmFs
dWUqKiYgZW5kKTsKLSAgICAgICAgaW5saW5lIHZvaWQgYWR2YW5jZVJhbmdlU3RhcnRUb0NlbGxX
aXRoUmVmcyhKU1ZhbHVlKiomIHN0YXJ0LCBKU1ZhbHVlKiomIGVuZCk7Ci0gICAgICAgIGlubGlu
ZSB2b2lkIHB1c2hPbmVJdGVtQW5kQWR2YW5jZShKU1ZhbHVlKiomIHN0YXJ0KTsKLSAgICAgICAg
aW5saW5lIHZvaWQgYWR2YW5jZVVudGlsMTI2SXRlbXNQdXNoZWQoc2l6ZV90IGNvdW50LCBKU1Zh
bHVlKiomIHN0YXJ0LCBKU1ZhbHVlKiomIGVuZCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBn
ZXRWYWx1ZShKU1ZhbHVlKiopOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZ2V0VmFsdWUoUHJv
cGVydHlNYXBFbnRyeSopOworICAgICAgICBzdGF0aWMgYm9vbCBzYWZlVG9BY2Nlc3MoSlNWYWx1
ZSoqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2FmZVRvQWNjZXNzKFByb3BlcnR5TWFwRW50cnkq
KTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHB1c2hXaG9sZVJhbmdlKFQq
JiBzdGFydCwgVCogZW5kKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZHZh
bmNlUmFuZ2VTdGFydFRvQ2VsbFdpdGhSZWZzKFQqJiBzdGFydCwgVCogZW5kKTsKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwdXNoT25lSXRlbUFuZEFkdmFuY2UoVComIHN0YXJ0
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZHZhbmNlVW50aWwxMjZJdGVt
c1B1c2hlZChzaXplX3QmIGNvdW50LCBUKiYgc3RhcnQsIFQqIGVuZCk7CiAKICAgICAgICAgVmVj
dG9yPEpTQ2VsbCo+IG1fc3RhY2s7CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBSYW5nZVRhZzsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IFJhbmdlVGFnPEpTVmFs
dWUqPiB7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbV90YWcgPSAxOworICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBSYW5nZVRhZzxQcm9wZXJ0eU1hcEVudHJ5PiB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbV90YWcgPSAzOworICAgIH07CiAKICAgICBp
bmxpbmUgdm9pZCBNYXJrU3RhY2s6OnB1c2goSlNWYWx1ZSogdmFsdWUpCiAgICAgewpAQCAtOTYs
MTEgKzExMiwzMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2Vs
bChjZWxsKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFkdmFuY2VSYW5n
ZVN0YXJ0VG9DZWxsV2l0aFJlZnMoSlNWYWx1ZSoqJiBzdGFydCwgSlNWYWx1ZSoqJiBlbmQpCisg
ICAgaW5saW5lIEpTVmFsdWUqIE1hcmtTdGFjazo6Z2V0VmFsdWUoSlNWYWx1ZSoqIHApCisgICAg
eworICAgICAgICByZXR1cm4gKnA7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWUqIE1hcmtT
dGFjazo6Z2V0VmFsdWUoUHJvcGVydHlNYXBFbnRyeSogcCkKKyAgICB7CisgICAgICAgIHJldHVy
biBwLT52YWx1ZTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBNYXJrU3RhY2s6OnNhZmVUb0Fj
Y2VzcyhKU1ZhbHVlKiogcCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcDsKKyAgICB9CisKKyAg
ICBpbmxpbmUgYm9vbCBNYXJrU3RhY2s6OnNhZmVUb0FjY2VzcyhQcm9wZXJ0eU1hcEVudHJ5KikK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IAorICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6YWR2YW5jZVJhbmdlU3RhcnRUb0Nl
bGxXaXRoUmVmcyhUKiYgc3RhcnQsIFQqIGVuZCkKICAgICB7CiAgICAgICAgIHdoaWxlIChzdGFy
dCAhPSBlbmQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gKnN0YXJ0OwotICAgICAg
ICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS0+bWFya2VkKCkpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUqIHZhbHVlID0gZ2V0VmFsdWUoc3RhcnQpOworICAgICAgICAgICAgaWYgKHNhZmVUb0FjY2Vz
cyhzdGFydCkgJiYgIXZhbHVlLT5tYXJrZWQoKSkgewogICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IHZhbHVlLT5hc0NlbGwoKTsKICAgICAgICAgICAgICAgICBpZiAoQ29sbGVjdG9yOjpj
ZWxsTWF5SGF2ZVJlZnMoY2VsbCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEw
LDI5ICsxNDcsMzIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
bmxpbmUgdm9pZCBNYXJrU3RhY2s6OnB1c2hXaG9sZVJhbmdlKEpTVmFsdWUqKiYgc3RhcnQsIEpT
VmFsdWUqKiYgZW5kKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IAorICAgIGlubGluZSB2b2lk
IE1hcmtTdGFjazo6cHVzaFdob2xlUmFuZ2UoVComIHN0YXJ0LCBUKiBlbmQpCiAgICAgewogICAg
ICAgICB3aGlsZSAoc3RhcnQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSogdmFs
dWUgPSAqc3RhcnQpCi0gICAgICAgICAgICAgICAgcHVzaCh2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoc2FmZVRvQWNjZXNzKHN0YXJ0KSkKKyAgICAgICAgICAgICAgICBwdXNoKGdldFZhbHVlKHN0
YXJ0KSk7CiAgICAgICAgICAgICArK3N0YXJ0OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaW5s
aW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoT25lSXRlbUFuZEFkdmFuY2UoSlNWYWx1ZSoqJiBzdGFy
dCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6
cHVzaE9uZUl0ZW1BbmRBZHZhbmNlKFQqJiBzdGFydCkKICAgICB7Ci0gICAgICAgIEpTQ2VsbCog
Y2VsbCA9ICgqc3RhcnQpLT5hc0NlbGwoKTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gKGdldFZh
bHVlKHN0YXJ0KSktPmFzQ2VsbCgpOwogICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwp
OwogICAgICAgICBBU1NFUlQobV9zdGFjay5zaXplKCkgPCBtX3N0YWNrLmNhcGFjaXR5KCkpOwog
ICAgICAgICBtX3N0YWNrLnVuY2hlY2tlZEFwcGVuZChjZWxsKTsKICAgICAgICAgKytzdGFydDsK
ICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFkdmFuY2VVbnRpbDEyNkl0ZW1z
UHVzaGVkKHNpemVfdCBjb3VudCwgSlNWYWx1ZSoqJiBzdGFydCwgSlNWYWx1ZSoqJiBlbmQpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFkdmFu
Y2VVbnRpbDEyNkl0ZW1zUHVzaGVkKHNpemVfdCYgY291bnQsIFQqJiBzdGFydCwgVCogZW5kKQog
ICAgIHsKICAgICAgICAgd2hpbGUgKHN0YXJ0ICE9IGVuZCAmJiBjb3VudCA8PSAxMjYpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gKnN0YXJ0OwotICAgICAgICAgICAgaWYgKHZhbHVl
ICYmICF2YWx1ZS0+bWFya2VkKCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gZ2V0
VmFsdWUoc3RhcnQpOworICAgICAgICAgICAgaWYgKHNhZmVUb0FjY2VzcyhzdGFydCkgJiYgIXZh
bHVlLT5tYXJrZWQoKSkgewogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLT5h
c0NlbGwoKTsKICAgICAgICAgICAgICAgICBDb2xsZWN0b3I6Om1hcmtDZWxsKGNlbGwpOwogICAg
ICAgICAgICAgICAgIGlmIChDb2xsZWN0b3I6OmNlbGxNYXlIYXZlUmVmcyhjZWxsKSkgewpAQCAt
MTQ1LDcgKzE4NSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6cHVzaFJhbmdlKEpTVmFsdWUqKiBzdGFydCwgSlNW
YWx1ZSoqIGVuZCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSB2b2lkIE1h
cmtTdGFjazo6cHVzaFJhbmdlKFQqIHN0YXJ0LCBUKiBlbmQpCiAgICAgewogICAgICAgICAvLyBU
aGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGF2b2lkIHB1c2hpbmcgdG9vIG1hbnkgdmFsdWVzIG9udG8K
ICAgICAgICAgLy8gdGhlIHN0YWNrIGF0IG9uY2UgdG8ga2VlcCB0aGUgaGlnaCB3YXRlciBtYXJr
IHJlYXNvbmFibGUgaW4KQEAgLTE2OSw3ICsyMTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihlbmQp
KTsgICAgICAgICAgICAgICAgCiAgICAgICAgIEpTQ2VsbComIGVuZFNsb3QgPSBtX3N0YWNrLmxh
c3QoKTsKICAgICAgICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgp
KTsKLSAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0Nl
bGwqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpIHwgMSkpOyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDxK
U0NlbGwqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpIHwgUmFuZ2VUYWc8VD46
Om1fdGFnKSk7CiAgICAgICAgIEpTQ2VsbComIHN0YXJ0U2xvdCA9IG1fc3RhY2subGFzdCgpOwog
ICAgICAgICAKICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKQEAgLTE3OCw3ICsyMTksNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgYWR2YW5jZVJhbmdlU3RhcnRUb0NlbGxXaXRoUmVmcyhz
dGFydCwgZW5kKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzdGFydCAhPSBlbmQpIHsKLSAgICAg
ICAgICAgIHN0YXJ0U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSB8IDEpOworICAgICAgICAgICAgc3RhcnRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDxKU0NlbGwqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQp
IHwgUmFuZ2VUYWc8VD46Om1fdGFnKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTE5OCwxNCArMjM5LDIzIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBK
U0NlbGwqIGNlbGwgPSBtX3N0YWNrLmxhc3QoKTsKICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0
KCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
Y2VsbCkgJiAxKSkKKyAgICAgICAgdWludHB0cl90IHRhZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihjZWxsKSAmIDM7CisgICAgICAgIGlmICghdGFnKQogICAgICAgICAgICAgcmV0dXJu
IGNlbGw7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiogc3RhcnQgPSByZWludGVycHJldF9j
YXN0PEpTVmFsdWUqKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwpICYgfjFMKTsK
LSAgICAgICAgSlNWYWx1ZSoqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSoqPihtX3N0
YWNrLmxhc3QoKSk7Ci0gICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBpZiAo
dGFnID09IDEpIHsKKyAgICAgICAgICAgIEpTVmFsdWUqKiBzdGFydCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZSoqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgJiB+M0wpOwor
ICAgICAgICAgICAgSlNWYWx1ZSoqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSoqPiht
X3N0YWNrLmxhc3QoKSk7CisgICAgICAgICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAg
ICAgICAgIAotICAgICAgICBwdXNoUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBwdXNo
UmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQcm9wZXJ0
eU1hcEVudHJ5KiBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlNYXBFbnRyeSo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAmIH4zTCk7CisgICAgICAgICAgICBQcm9w
ZXJ0eU1hcEVudHJ5KiBlbmQgPSByZWludGVycHJldF9jYXN0PFByb3BlcnR5TWFwRW50cnkqPiht
X3N0YWNrLmxhc3QoKSk7CisgICAgICAgICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcHVzaFJhbmdlKHN0YXJ0LCBlbmQpOworICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIHBvcCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL3By
b3BlcnR5X21hcC5jcHAKaW5kZXggMTFjNzk2Yi4uNTk5OTZmNCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL3By
b3BlcnR5X21hcC5jcHAKQEAgLTc4LDE4ICs3OCw2IEBAIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4
aXRMb2dnZXI6On5Qcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyKCkKIAogI2VuZGlmCiAK
LXN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKLSAgICBVU3RyaW5nOjpSZXAqIGtleTsKLSAgICBK
U1ZhbHVlKiB2YWx1ZTsKLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIHVuc2lnbmVkIGlu
ZGV4OwotCi0gICAgUHJvcGVydHlNYXBFbnRyeShVU3RyaW5nOjpSZXAqIGssIEpTVmFsdWUqIHYs
IGludCBhKQotICAgICAgICA6IGtleShrKSwgdmFsdWUodiksIGF0dHJpYnV0ZXMoYSksIGluZGV4
KDApCi0gICAgewotICAgIH0KLX07Ci0KIC8vIGxhc3RJbmRleFVzZWQgaXMgYW4gZXZlci1pbmNy
ZWFzaW5nIGluZGV4IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG9yZGVyIGl0ZW1zCiAvLyB3ZXJlIGlu
c2VydGVkIGludG8gdGhlIHByb3BlcnR5IG1hcC4gSXQncyByZXF1aXJlZCB0aGF0IGdldEVudW1l
cmFibGVQcm9wZXJ0eU5hbWVzCiAvLyByZXR1cm4gdGhlIHByb3BlcnRpZXMgaW4gdGhlIG9yZGVy
IHRoZXkgd2VyZSBhZGRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyCkBAIC02MzMsOCAr
NjIxLDggQEAgdm9pZCBQcm9wZXJ0eU1hcDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgc3RhY2sp
IGNvbnN0CiAgICAgfQogCiAgICAgdW5zaWduZWQgZW50cnlDb3VudCA9IG1fdS50YWJsZS0+a2V5
Q291bnQgKyBtX3UudGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50OwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPD0gZW50cnlDb3VudDsgaSsrKQotICAgICAgICBzdGFjay5wdXNoKG1fdS50
YWJsZS0+ZW50cmllcygpW2ldLnZhbHVlKTsKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyaWVz
ID0gbV91LnRhYmxlLT5lbnRyaWVzKCkgKyAxOworICAgIHN0YWNrLnB1c2hSYW5nZShlbnRyaWVz
LCBlbnRyaWVzICsgZW50cnlDb3VudCk7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGFyZVByb3BlcnR5
TWFwRW50cnlJbmRpY2VzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmggYi9KYXZhU2NyaXB0Q29yZS9ranMv
cHJvcGVydHlfbWFwLmgKaW5kZXggMDk3ZTViOC4uYjJlOTA4MCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9wcm9w
ZXJ0eV9tYXAuaApAQCAtMzIsNyArMzIsMTggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3Mg
TWFya1N0YWNrOwogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogICAgIAotICAgIHN0cnVj
dCBQcm9wZXJ0eU1hcEVudHJ5OworICAgIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKKyAgICAg
ICAgVVN0cmluZzo6UmVwKiBrZXk7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlOworICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgCisg
ICAgICAgIFByb3BlcnR5TWFwRW50cnkoVVN0cmluZzo6UmVwKiBrLCBKU1ZhbHVlKiB2LCBpbnQg
YSkKKyAgICAgICAgICAgIDoga2V5KGspLCB2YWx1ZSh2KSwgYXR0cmlidXRlcyhhKSwgaW5kZXgo
MCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKwogICAgIHN0cnVjdCBQcm9wZXJ0eU1h
cEhhc2hUYWJsZTsKICAgICBzdHJ1Y3QgU2F2ZWRQcm9wZXJ0eTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17553</attachid>
            <date>2007-11-27 01:22:02 -0800</date>
            <delta_ts>2007-12-14 15:49:44 -0800</delta_ts>
            <desc>[6/6] JavaScriptCore:</desc>
            <filename>-JavaScriptCore-.patch</filename>
            <type>text/plain</type>
            <size>13157</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">M2Y4MTMyMDkzZmJmMTcwZjRkMzg3ZmY5NTVmY2NkNTRjNGZlYzdjYQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDJh
ZWJmMjEuLjBlMWQ3Y2QgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzNyBAQAogCiAgICAgICAgIE5v
dCByZXZpZXdlZC4KICAgICAgICAgCisgICAgICAgIFVzZSBhIGZpeGVkLXNpemUgbWFyayBzdGFj
ayBzbyB0aGF0IHdlIGRvbid0IHRyaWdnZXIgaHVnZQorICAgICAgICBhbGxvY2F0aW9ucyB3aGVu
IGdhcmJhZ2UgY29sbGVjdGluZy4gSW4gdGhlIHVubGlrZWx5IGNhc2Ugb2YKKyAgICAgICAgb3Zl
cmZsb3dpbmcgdGhlIG1hcmsgc3RhY2ssIHVzZSBhIHNsb3cgZmFsbGJhY2sgcGF0aCB3aGVyZSB3
ZQorICAgICAgICBjcmF3bCB0aGUgd2hvbGUgaGVhcCwgbG9va2luZyBmb3Igb2JqZWN0cyB3aXRo
IHRoZSBtYXJrIGJpdCBzZXQKKyAgICAgICAgYW5kIHB1c2hpbmcgdGhlaXIgY2hpbGRyZW4uCisK
KyAgICAgICAgVGhpcyBpcyBhbiAwLjIlIFN1blNwaWRlciBzcGVlZHVwLgorICAgICAgICAKKyAg
ICAgICAgKiBranMvSlNMb2NrLmNwcDoKKyAgICAgICAgKEtKUzo6SlNMb2NrOjpyZWdpc3RlclRo
cmVhZCk6CisgICAgICAgICoga2pzL01hcmtTdGFjay5oOgorICAgICAgICAoS0pTOjpNYXJrU3Rh
Y2s6OmFwcGVuZCk6CisgICAgICAgIChLSlM6Ok1hcmtTdGFjazo6cHVzaCk6CisgICAgICAgIChL
SlM6Ok1hcmtTdGFjazo6cHVzaE9uZUl0ZW1BbmRBZHZhbmNlKToKKyAgICAgICAgKEtKUzo6TWFy
a1N0YWNrOjphZHZhbmNlVW50aWwxMjZJdGVtc1B1c2hlZCk6CisgICAgICAgIChLSlM6Ok1hcmtT
dGFjazo6cHVzaFJhbmdlKToKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpwb3ApOgorICAgICAg
ICAoS0pTOjpNYXJrU3RhY2s6OnJlc2V0KToKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpzaXpl
KToKKyAgICAgICAgKEtKUzo6TWFya1N0YWNrOjpvdmVyZmxvd2VkKToKKyAgICAgICAgKiBranMv
Y29sbGVjdG9yLmNwcDoKKyAgICAgICAgKEtKUzo6KToKKyAgICAgICAgKEtKUzo6aW5pdGlhbGl6
ZVJlZ2lzdGVyZWRUaHJlYWRLZXkpOgorICAgICAgICAoS0pTOjpDb2xsZWN0b3I6OnJlZ2lzdGVy
VGhyZWFkKToKKyAgICAgICAgKEtKUzo6c2xvd0ZhbGxiYWNrTWFya0lmTmVlZGVkKToKKyAgICAg
ICAgKEtKUzo6Q29sbGVjdG9yOjpjb2xsZWN0KToKKworMjAwNy0xMS0yNiAgTWFjaWVqIFN0YWNo
b3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIE5vdCByZXZpZXdlZC4KKyAgICAgICAg
CiAgICAgICAgIC0gcHVzaCBsYXJnZSBQcm9wZXJ0eU1hcHMgYXMgcmFuZ2VzIHRvbwogICAgICAg
ICAKICAgICAgICAgVGhpcyBzZWVtcyB0b2JlIGEgd2FzaCBvbiBTdW5TcGlkZXIuCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvSlNMb2NrLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9K
U0xvY2suY3BwCmluZGV4IDlkNTFjYTkuLmQxMGE4M2EgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2tqcy9KU0xvY2suY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU0xvY2suY3BwCkBA
IC04MCwxMSArODAsNiBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
KQogICAgIHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoZGlkTG9ja0pTTXV0ZXgpOwogfQog
Ci12b2lkIEpTTG9jazo6cmVnaXN0ZXJUaHJlYWQoKQotewotICAgIENvbGxlY3Rvcjo6cmVnaXN0
ZXJUaHJlYWQoKTsKLX0KLQogSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcygpCiAg
ICAgOiBtX2xvY2tDb3VudCgwKQogewpAQCAtMTIxLDEwICsxMTYsNiBAQCB2b2lkIEpTTG9jazo6
dW5sb2NrKCkKIHsKIH0KIAotdm9pZCBKU0xvY2s6OnJlZ2lzdGVyVGhyZWFkKCkKLXsKLX0KLQog
SlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcygpCiB7CiB9CkBAIC0xMzUsNiArMTI2
LDExIEBAIEpTTG9jazo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIAogI2VuZGlmIC8v
IFVTRShNVUxUSVBMRV9USFJFQURTKQogCit2b2lkIEpTTG9jazo6cmVnaXN0ZXJUaHJlYWQoKQor
eworICAgIENvbGxlY3Rvcjo6cmVnaXN0ZXJUaHJlYWQoKTsKK30KKwogaW50IEpTTG9jazo6bG9j
a0NvdW50KCkKIHsKICAgICByZXR1cm4gSlNMb2NrQ291bnQ7CmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ranMvTWFya1N0YWNrLmggYi9KYXZhU2NyaXB0Q29yZS9ranMvTWFya1N0YWNrLmgK
aW5kZXggNGY5NzgzNS4uODdiZmI3YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL01h
cmtTdGFjay5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9NYXJrU3RhY2suaApAQCAtNDYsOSAr
NDYsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAgICAg
ICAgIHNpemVfdCBzaXplKCk7Ci0gICAgICAgIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBz
aXplKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICBib29sIG92ZXJmbG93ZWQoKTsK
IAogICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgYXBwZW5kKEpTQ2VsbCopOworCiAgICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBnZXRWYWx1ZShKU1ZhbHVlKiopOwogICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogZ2V0VmFsdWUoUHJvcGVydHlNYXBFbnRyeSopOwogICAgICAgICBzdGF0aWMgYm9vbCBz
YWZlVG9BY2Nlc3MoSlNWYWx1ZSoqKTsKQEAgLTYwLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWR2YW5jZVVudGlsMTI2SXRlbXNQ
dXNoZWQoc2l6ZV90JiBjb3VudCwgVComIHN0YXJ0LCBUKiBlbmQpOwogCiAgICAgICAgIFZlY3Rv
cjxKU0NlbGwqPiBtX3N0YWNrOworICAgICAgICBib29sIG1fb3ZlcmZsb3dlZDsKICAgICB9Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFJhbmdlVGFnOwpAQCAtNzIsNiArNzYs
MTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbV90
YWcgPSAzOwogICAgIH07CiAKKyAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChKU0Nl
bGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAobV9zdGFjay5zaXplKCkgPCBtX3N0YWNrLmNh
cGFjaXR5KCkpCisgICAgICAgICAgICBtX3N0YWNrLnVuY2hlY2tlZEFwcGVuZChjZWxsKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9vdmVyZmxvd2VkID0gdHJ1ZTsKKyAgICB9CisKICAg
ICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OnB1c2goSlNWYWx1ZSogdmFsdWUpCiAgICAgewogICAg
ICAgICBpZiAodmFsdWUtPm1hcmtlZCgpKQpAQCAtODAsOCArOTIsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKICAgICAgICAgaWYgKCFDb2xs
ZWN0b3I6OmNlbGxNYXlIYXZlUmVmcyhjZWxsKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgpKTsKLSAgICAgICAg
bV9zdGFjay51bmNoZWNrZWRBcHBlbmQoY2VsbCk7CisgICAgICAgIGFwcGVuZChjZWxsKTsKICAg
ICB9CiAKICAgICAvLyB0aGlzIGV4dHJhIGZ1bmN0aW9uIGlzIHdvcnRoIGl0IHRvIGF2b2lkIEpT
SW1tZWRpYXRlIApAQCAtOTMsOCArMTA0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIENv
bGxlY3Rvcjo6bWFya0NlbGwoY2VsbCk7CiAgICAgICAgIGlmICghQ29sbGVjdG9yOjpjZWxsTWF5
SGF2ZVJlZnMoY2VsbCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChtX3N0
YWNrLnNpemUoKSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7Ci0gICAgICAgIG1fc3RhY2sudW5jaGVj
a2VkQXBwZW5kKGNlbGwpOworICAgICAgICBhcHBlbmQoY2VsbCk7CiAgICAgfQogCiAgICAgaW5s
aW5lIHZvaWQgTWFya1N0YWNrOjpwdXNoQXRvbShKU1ZhbHVlKiB2YWx1ZSkKQEAgLTE2Miw4ICsx
NzIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB7CiAgICAgICAgIEpTQ2VsbCogY2VsbCA9IChn
ZXRWYWx1ZShzdGFydCkpLT5hc0NlbGwoKTsKICAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChj
ZWxsKTsKLSAgICAgICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgp
KTsKLSAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQoY2VsbCk7CisgICAgICAgIGFwcGVu
ZChjZWxsKTsKICAgICAgICAgKytzdGFydDsKICAgICB9CiAKQEAgLTE3Niw4ICsxODUsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS0+YXND
ZWxsKCk7CiAgICAgICAgICAgICAgICAgQ29sbGVjdG9yOjptYXJrQ2VsbChjZWxsKTsKICAgICAg
ICAgICAgICAgICBpZiAoQ29sbGVjdG9yOjpjZWxsTWF5SGF2ZVJlZnMoY2VsbCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpIDwgbV9zdGFjay5jYXBhY2l0eSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFjay51bmNoZWNrZWRBcHBlbmQoY2VsbCk7Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZChjZWxsKTsKICAgICAgICAgICAgICAgICAgICAgKytj
b3VudDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xOTgsMTQgKzIwNiwx
NiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBhZHZhbmNlUmFuZ2VTdGFydFRvQ2VsbFdp
dGhSZWZzKHN0YXJ0LCBlbmQpOwogCi0gICAgICAgIGlmIChlbmQgLSBzdGFydCA8PSAxMjgpIHsK
KyAgICAgICAgLy8gaWYgdGhlcmUncyBmZXdlciB0aGFuIDEyOCBpdGVtcywgb3IgaWYgdGhlcmUg
aXNuJ3Qgcm9vbSBvbiB0aGUgc3RhY2sKKyAgICAgICAgLy8gZm9yIGF0IGxlYXN0IDIsIHdlIG1h
eSBhcyB3ZWxsIG1hcmsgZXZlcnl0aGluZyBub3cKKyAgICAgICAgaWYgKGVuZCAtIHN0YXJ0IDw9
IDEyOCB8fCBtX3N0YWNrLmNhcGFjaXR5KCkgLSBtX3N0YWNrLnNpemUoKSA8IDQpIHsKICAgICAg
ICAgICAgIHB1c2hXaG9sZVJhbmdlKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQogICAgICAgICAgICAg
cHVzaE9uZUl0ZW1BbmRBZHZhbmNlKHN0YXJ0KTsKLSAgICAgICAgICAgIAorICAgICAgCiAgICAg
ICAgIEFTU0VSVChtX3N0YWNrLnNpemUoKSA8IG1fc3RhY2suY2FwYWNpdHkoKSk7CiAgICAgICAg
IG1fc3RhY2sudW5jaGVja2VkQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oZW5kKSk7
ICAgICAgICAgICAgICAgIAogICAgICAgICBKU0NlbGwqJiBlbmRTbG90ID0gbV9zdGFjay5sYXN0
KCk7CkBAIC0yMzgsNyArMjQ4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIEFTU0VSVCht
X3N0YWNrLnNpemUoKSA+IDApOwogICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX3N0YWNrLmxhc3Qo
KTsKICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHVp
bnRwdHJfdCB0YWcgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgJiAzOwogICAg
ICAgICBpZiAoIXRhZykKICAgICAgICAgICAgIHJldHVybiBjZWxsOwpAQCAtMjQ3LDcgKzI1Nyw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAgSlNWYWx1ZSoqIHN0YXJ0ID0gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlKio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKSAm
IH4zTCk7CiAgICAgICAgICAgICBKU1ZhbHVlKiogZW5kID0gcmVpbnRlcnByZXRfY2FzdDxKU1Zh
bHVlKio+KG1fc3RhY2subGFzdCgpKTsKICAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgp
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHB1c2hSYW5nZShzdGFydCwgZW5kKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFByb3BlcnR5TWFwRW50cnkqIHN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDxQcm9wZXJ0eU1hcEVudHJ5Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGNlbGwpICYgfjNMKTsKQEAgLTI2NSwxNSArMjc1LDIxIEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7CiAgICAgfQogCi0gICAgaW5saW5lIHZv
aWQgTWFya1N0YWNrOjpyZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IHNpemUpIAorICAgIGlubGluZSB2
b2lkIE1hcmtTdGFjazo6cmVzZXQoKSAKICAgICB7Ci0gICAgICAgIG1fc3RhY2sucmVzZXJ2ZUNh
cGFjaXR5KHNpemUpOworICAgICAgICBtX3N0YWNrLnJlc2VydmVDYXBhY2l0eSg1MTIpOworICAg
ICAgICBtX292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICB9CiAKICAgICBpbmxpbmUgc2l6ZV90IE1h
cmtTdGFjazo6c2l6ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFjay5zaXplKCk7CiAg
ICAgfQorCisgICAgaW5saW5lIGJvb2wgTWFya1N0YWNrOjpvdmVyZmxvd2VkKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX292ZXJmbG93ZWQ7CisgICAgfQogfQogCiAjZW5kaWYgLy8gTWFya1N0
YWNrX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwIGIvSmF2
YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAKaW5kZXggMzQ5MzRlMC4uYWViMzNlZSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUva2pzL2NvbGxlY3Rvci5jcHAKQEAgLTk5LDYgKzk5LDEzIEBAIHN0cnVjdCBDb2xsZWN0
b3JIZWFwIHsKIHN0YXRpYyBDb2xsZWN0b3JIZWFwIHByaW1hcnlIZWFwID0geyAwLCAwLCAwLCAw
LCAwLCAwLCAwLCBOb09wZXJhdGlvbiB9Owogc3RhdGljIENvbGxlY3RvckhlYXAgbnVtYmVySGVh
cCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgTm9PcGVyYXRpb24gfTsKIAorc3RhdGljIHVuaW9u
IHsKKyAgICB2b2lkKiBhbGlnbjsKKyAgICBjaGFyIHN0b3JhZ2Vbc2l6ZW9mKE1hcmtTdGFjayld
OworfSBtYXJrU3RhY2s7CisKK3N0YXRpYyBib29sIG1hcmtTdGFja0luaXRpYWxpemVkOworCiAv
LyBGSVhNRTogSSBkb24ndCB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgc3RhdGljIGRhdGEgbWVt
YmVyIG9mIHRoZSBDb2xsZWN0b3IgY2xhc3MuCiAvLyBKdXN0IGEgcHJpdmF0ZSBnbG9iYWwgbGlr
ZSAiaGVhcCIgYWJvdmUgd291bGQgYmUgZmluZS4KIHNpemVfdCBDb2xsZWN0b3I6Om1haW5UaHJl
YWRPbmx5T2JqZWN0Q291bnQgPSAwOwpAQCAtNDUyLDYgKzQ1OSw5IEBAIHN0YXRpYyB2b2lkIGRl
c3Ryb3lSZWdpc3RlcmVkVGhyZWFkKHZvaWQqIGRhdGEpCiBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
UmVnaXN0ZXJlZFRocmVhZEtleSgpCiB7CiAgIHB0aHJlYWRfa2V5X2NyZWF0ZSgmcmVnaXN0ZXJl
ZFRocmVhZEtleSwgZGVzdHJveVJlZ2lzdGVyZWRUaHJlYWQpOworCisgIG5ldyAoc3RhdGljX2Nh
c3Q8dm9pZCo+KG1hcmtTdGFjay5zdG9yYWdlKSkgTWFya1N0YWNrOworICBtYXJrU3RhY2tJbml0
aWFsaXplZCA9IHRydWU7CiB9CiAKIHZvaWQgQ29sbGVjdG9yOjpyZWdpc3RlclRocmVhZCgpCkBA
IC00NzUsMTIgKzQ4NSwxNyBAQCB2b2lkIENvbGxlY3Rvcjo6cmVnaXN0ZXJUaHJlYWQoKQogICB9
CiB9CiAKLSNlbmRpZgorI2Vsc2UgCiAKLSNkZWZpbmUgSVNfUE9JTlRFUl9BTElHTkVEKHApICgo
KGludHB0cl90KShwKSAmIChzaXplb2YoY2hhciAqKSAtIDEpKSA9PSAwKQordm9pZCBDb2xsZWN0
b3I6OnJlZ2lzdGVyVGhyZWFkKCkKK3sKKyAgICBpZiAoIW1hcmtTdGFja0luaXRpYWxpemVkKSB7
CisgICAgICAgIG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KG1hcmtTdGFjay5zdG9yYWdlKSkgTWFy
a1N0YWNrOworICAgICAgICBtYXJrU3RhY2tJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorfQog
Ci0vLyBjZWxsIHNpemUgbmVlZHMgdG8gYmUgYSBwb3dlciBvZiB0d28gZm9yIHRoaXMgdG8gYmUg
dmFsaWQKLSNkZWZpbmUgSVNfSEFMRl9DRUxMX0FMSUdORUQocCkgKCgoaW50cHRyX3QpKHApICYg
KENFTExfTUFTSyA+PiAxKSkgPT0gMCkKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJh
aW5NYXJrU3RhY2soTWFya1N0YWNrJiBzdGFjaykKIHsKQEAgLTQ4OCw2ICs1MDMsMTAgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGRyYWluTWFya1N0YWNrKE1hcmtTdGFjayYgc3RhY2spCiAgICAgICAg
IHN0YWNrLnBvcCgpLT5tYXJrQ2hpbGRyZW4oc3RhY2spOwogfQogCisjZGVmaW5lIElTX1BPSU5U
RVJfQUxJR05FRChwKSAoKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNoYXIgKikgLSAxKSkgPT0g
MCkKKworLy8gY2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZvciB0aGlzIHRv
IGJlIHZhbGlkCisjZGVmaW5lIElTX0hBTEZfQ0VMTF9BTElHTkVEKHApICgoKGludHB0cl90KShw
KSAmIChDRUxMX01BU0sgPj4gMSkpID09IDApCiAKIHZvaWQgQ29sbGVjdG9yOjptYXJrU3RhY2tP
YmplY3RzQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiBzdGFjaywgdm9pZCAqc3RhcnQsIHZvaWQg
KmVuZCkKIHsKQEAgLTk0Myw3ICs5NjIsMzYgQEAgdGVtcGxhdGUgPENvbGxlY3Rvcjo6SGVhcFR5
cGUgaGVhcFR5cGU+IHNpemVfdCBDb2xsZWN0b3I6OnN3ZWVwKGJvb2wgY3VycmVudFRocmUKICAg
ICBoZWFwLmV4dHJhQ29zdCA9IDA7CiAgICAgcmV0dXJuIG51bUxpdmVPYmplY3RzOwogfQotICAg
IAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd0ZhbGxiYWNrTWFya0lmTmVlZGVkKE1hcmtTdGFj
ayYgc3RhY2spCit7CisgICAgLy8gaWYgdGhlIHN0YWNrIG92ZXJsb3dzLCB3ZSBnbyBpbnRvIGEg
c2xvdyBmYWxsYmFjayBwYXRoLiBBdAorICAgIC8vIGxlYXN0IHRoZSByb290cyBtdXN0IGJlIG1h
cmtlZC4gU28gd2UgcmVwZWF0ZWRseSBzY2FuIHRoZSBzdGFjaworICAgIC8vIGFuZCBwdXNoIHN0
aWxsIHVubWFya2VkIGNoaWxkcmVuIG9mIG1hcmtlZCBjZWxscy4gVGhpcyBpcworICAgIC8vIGd1
YXJhbnRlZWQgdG8gbWFrZSBwcm9ncmVzcyB1bnRpbCBhbGwgcmVhY2hhYmxlIGNlbGxzIGFyZQor
ICAgIC8vIG1hcmtlZC4KKworICAgIHdoaWxlIChzdGFjay5vdmVyZmxvd2VkKCkpIHsKKyAgICAg
ICAgc3RhY2sucmVzZXQoKTsKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8
IHByaW1hcnlIZWFwLnVzZWRCbG9ja3M7IGJsb2NrKyspIHsKKyAgICAgICAgICAgIENvbGxlY3Rv
ckJsb2NrKiBjdXJCbG9jayA9IHByaW1hcnlIZWFwLmJsb2Nrc1tibG9ja107CisKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQ0VMTFNfUEVSX0JMT0NLOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY3VyQmxvY2stPm1hcmtlZC5nZXQoaSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQ29sbGVjdG9yQ2VsbCogY2VsbCA9IGN1ckJsb2NrLT5jZWxscyArIGk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIGhhbmRsZSBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQgb2JqZWN0
CisgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT51LmZyZWVDZWxsLnplcm9JZkZyZWUgPT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
ICAgIEpTQ2VsbCoganNDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihjZWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAganNDZWxsLT5tYXJrQ2hpbGRyZW4oc3RhY2spOworICAgICAgICAg
ICAgICAgICAgICBkcmFpbk1hcmtTdGFjayhzdGFjayk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAgCit9CisKIGJvb2wgQ29sbGVjdG9yOjpjb2xs
ZWN0KCkKIHsKICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKQEAgLTk2Miw4ICsx
MDEwLDggQEAgYm9vbCBDb2xsZWN0b3I6OmNvbGxlY3QoKQogCiAgIHNpemVfdCBvcmlnaW5hbExp
dmVPYmplY3RzID0gcHJpbWFyeUhlYXAubnVtTGl2ZU9iamVjdHMgKyBudW1iZXJIZWFwLm51bUxp
dmVPYmplY3RzOwogCi0gIE1hcmtTdGFjayBzdGFjazsKLSAgc3RhY2sucmVzZXJ2ZUNhcGFjaXR5
KHByaW1hcnlIZWFwLm51bUxpdmVPYmplY3RzKTsKKyAgTWFya1N0YWNrJiBzdGFjayA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TWFya1N0YWNrJj4obWFya1N0YWNrLnN0b3JhZ2VbMF0pOworICBzdGFjay5y
ZXNldCgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAvLyBGb3JiaWQgbWFsbG9jIGR1cmluZyB0aGUg
bWFyayBwaGFzZS4gTWFya2luZyBhIHRocmVhZCBzdXNwZW5kcyBpdCwgc28gCkBAIC05OTAsNiAr
MTAzOCw4IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKICAgICBtYXJrTWFpblRocmVhZE9u
bHlPYmplY3RzKHN0YWNrKTsKICNlbmRpZgogCisgIHNsb3dGYWxsYmFja01hcmtJZk5lZWRlZChz
dGFjayk7CisKICNpZm5kZWYgTkRFQlVHCiAgIGZhc3RNYWxsb2NBbGxvdygpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggOGQ2ZWFhNi4uZWY3ZjkxMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDA3LTExLTI2
ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgTm90IHJldmll
d2VkLgorICAgICAgICAKKyAgICAgICAgLSBUZXN0IGNhc2UgdGhhdCBoaXRzIHRoZSB3b3JzdCBj
YXNlIG9mIHJhbmdlIHN0YWNrIG1hcmtpbmcsIHRvIGVuc3VyZSB0aGF0IHRoZSBzbG93CisgICAg
ICAgIGZhbGxiYWNrIHBhdGggaGFzIGNvdmVyYWdlLgorCisgICAgICAgICogZmFzdC9qcy9nYy1w
YXRob2xvZ2ljYWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2djLXBh
dGhvbG9naWNhbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9nYy1w
YXRob2xvZ2ljYWwuanM6IEFkZGVkLgorCiAyMDA3LTExLTIxICBNYWNpZWogU3RhY2hvd2lhayAg
PG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9qcy9nYy1wYXRob2xvZ2ljYWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9qcy9nYy1wYXRob2xvZ2ljYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2FkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2pzL2djLXBhdGhvbG9naWNhbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitU
aGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9iamVjdCBzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBib3Ro
IGRlZXAgYW5kIHdpZGUgZG9uJ3QgbGVhZCB0byBHQyBjcmFzaGVzLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvZ2MtcGF0aG9sb2dp
Y2FsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLXBhdGhvbG9naWNhbC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZTBkOTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2pzL2djLXBhdGhvbG9naWNhbC5odG1sCkBAIC0wLDAgKzEsMTMg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZ2MtcGF0aG9sb2dpY2Fs
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
anMvcmVzb3VyY2VzL2djLXBhdGhvbG9naWNhbC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVz
b3VyY2VzL2djLXBhdGhvbG9naWNhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wMmM5OThlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNv
dXJjZXMvZ2MtcGF0aG9sb2dpY2FsLmpzCkBAIC0wLDAgKzEsMjUgQEAKK2Rlc2NyaXB0aW9uKCJU
aGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9iamVjdCBzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBib3Ro
IGRlZXAgYW5kIHdpZGUgZG9uJ3QgbGVhZCB0byBHQyBjcmFzaGVzLiIpCisKK3ZhciBhID0gW107
Citmb3IgKHZhciBpID0gMDsgaSA8IDIwMDA7IGkrKykgeworICAgIGEgPSBbW10sIFtdLCBbXSwg
W10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIAorICAgICAgICAgW10sIFtdLCBbXSwgW10sIFtd
LCBbXSwgW10sIFtdLCBbXSwgW10sCisgICAgICAgICBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCBb
XSwgW10sIFtdLCBbXSwKKyAgICAgICAgIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCBbXSwg
W10sIFtdLAorICAgICAgICAgW10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10s
CisgICAgICAgICBhXTsKK30KKwordmFyIGIgPSAiIjsKK2ZvciAodmFyIGkgPSAwOyBpIDwgODAw
MDA7IGkrKykgeworICAgIGIgKz0gImIiOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsg
aSsrKSB7CisgICAgdHJ5IHsKKyAgICAgICAgYS50b1N0cmluZygpOworICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICB9Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34331</attachid>
            <date>2009-08-07 14:54:29 -0700</date>
            <delta_ts>2009-08-07 15:55:10 -0700</delta_ts>
            <desc>JSC portion of fix</desc>
            <filename>gc-jsc.patch</filename>
            <type>text/plain</type>
            <size>96569</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA0YjU3MzBmLi5lY2JmNDBlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUz
IEBACisyMDA5LTA4LTA3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhY2sgb3ZlcmZsb3cg
Y3Jhc2ggaW4gSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3RvciBtYXJrIHBhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjE2CisKKyAgICAgICAg
TWFrZSB0aGUgR0MgbWFyayBwaGFzZSBpdGVyYXRpdmUgYnkgdXNpbmcgYW4gZXhwbGljaXQgbWFy
ayBzdGFjay4KKyAgICAgICAgVG8gZG8gdGhpcyBtYXJraW5nIGFueSBzaW5nbGUgb2JqZWN0IGlz
IHBlcmZvcm1lZCBpbiBtdWx0aXBsZSBzdGFnZXMKKyAgICAgICAgICAqIFRoZSBvYmplY3QgaXMg
YXBwZW5kZWQgdG8gdGhlIE1hcmtTdGFjaywgdGhpcyBzZXRzIHRoZSBtYXJrZWQKKyAgICAgICAg
ICAgIGJpdCBmb3IgdGhlIG9iamVjdCB1c2luZyB0aGUgbmV3IG1hcmtEaXJlY3QoKSBmdW5jdGlv
biwgYW5kIHRoZW4KKyAgICAgICAgICAgIHJldHVybnMKKyAgICAgICAgICAqIFdoZW4gdGhlIE1h
cmtTdGFjayBpcyBkcmFpbigpZWQgdGhlIG9iamVjdCBpcyBwb3BwZWQgb2ZmIHRoZSBzdGFjawor
ICAgICAgICAgICAgYW5kIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKSBpcyBjYWxsZWQgb24gdGhl
IG9iamVjdCB0byBjb2xsZWN0IAorICAgICAgICAgICAgYWxsIG9mIGl0cyBjaGlsZHJlbi4gIGRy
YWluKCkgdGhlbiByZXBlYXRzIHVudGlsIHRoZSBzdGFjayBpcyBlbXB0eS4KKworICAgICAgICBB
ZGRpdGlvbmFsbHkgSSByZW5hbWVkIGEgbnVtYmVyIG9mIG1ldGhvZHMgZnJvbSAnbWFyaycgdG8g
J21hcmtBZ2dyZWdhdGUnCisgICAgICAgIGluIG9yZGVyIHRvIG1ha2UgaXQgbW9yZSBjbGVhciB0
aGF0IG1hcmtpbmcgb2YgdGhvc2Ugb2JqZWN0IHdhcyBub3QKKyAgICAgICAgZ29pbmcgdG8gcmVz
dWx0IGluIGFuIGFjdHVhbCByZWN1cnNpdmUgbWFyay4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLmd5cGk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJpOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6
bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjptYXJrQ2hpbGRyZW4pOgorICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAqIGludGVycHJl
dGVyL1JlZ2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmg6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6bWFya0dsb2JhbHMpOgorICAgICAgICAoSlNDOjpS
ZWdpc3RlckZpbGU6Om1hcmtDYWxsRnJhbWVzKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpTY29wZU5vZGVEYXRhOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAg
KEpTQzo6RXZhbE5vZGU6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJv
ZHlOb2RlOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAg
ICAgKEpTQzo6U2NvcGVOb2RlOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Fy
Z0xpc3QuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6bWFya0NoaWxkcmVuKToKKyAgICAg
ICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSk6CisgICAgICAg
IChKU0M6OkhlYXA6Om1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjptYXJrQ2hpbGRyZW4p
OgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRl
clNldHRlcjo6R2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6R2xvYmFsRXZhbEZ1bmN0aW9uOjptYXJrQ2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjptYXJrQ2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6bWFya0NlbGxEaXJlY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTVmFsdWU6Om1hcmtEaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKU1ZhbHVlOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
OjpoYXNDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjptYXJrSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNOb3RBbk9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTTm90
QW5PYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpTdHJpbmdpZmllcjo6bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkpTT05PYmpl
Y3Q6Om1hcmtTdHJpbmdpZmllcnMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
bWFya0NoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZUdldHRlcik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjptYXJrQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3Bl
T2JqZWN0OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9i
amVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1l
L01hcmtTdGFjay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmNvbXBhY3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0YWNrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjop
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFjayk6CisgICAgICAgIChKU0M6Ok1h
cmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6On5NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpN
YXJrU3RhY2s6Ok1hcmtTZXQ6Ok1hcmtTZXQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnBh
Z2VTaXplKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0
YWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5Ojp+TWFy
a1N0YWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5Ojpl
eHBhbmQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5OjphcHBlbmQp
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5OjpyZW1vdmVMYXN0KToK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpNYXJrU3RhY2tBcnJheTo6aXNFbXB0eSk6CisgICAg
ICAgIChKU0M6Ok1hcmtTdGFjazo6TWFya1N0YWNrQXJyYXk6OnNpemUpOgorICAgICAgICAoSlND
OjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5OjpzaHJpbmtBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL01hcmtTdGFja1Bvc2l4LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtT
dGFjazo6c3RhY2tBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6c3RhY2tSZWxl
YXNlKToKKyAgICAgICAgKiBydW50aW1lL01hcmtTdGFja1dpbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpNYXJrU3RhY2s6OnN0YWNrQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2s6OnN0YWNrUmVsZWFzZSk6CisgICAgICAgICogcnVudGltZS9TY29wZUNoYWluLmg6CisgICAg
ICAgICogcnVudGltZS9TY29wZUNoYWluTWFyay5oOgorICAgICAgICAoSlNDOjpTY29wZUNoYWlu
OjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6Cisg
ICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6bWFyayk6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrQWdncmVnYXRlKToKKwogMjAw
OS0wOC0wNiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIEJyaW5nIGEg
bGl0dGxlIG9yZGVyIHRvIG91ciBvdGhlcndpc2Ugb3V0IG9mIGNvbnRyb2wgbGl2ZXMuCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2Nv
bmZpZyBiL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29u
ZmlnCmluZGV4IGY4ZDZjMmMuLjA5YjYzYTggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0Nv
bmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0NvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC00OCw0ICs0OCw0IEBA
IE9USEVSX0NGTEFHU19SZWxlYXNlX25vcm1hbCA9ICQoT1RIRVJfQ0ZMQUdTX25vcm1hbF8kKFhD
T0RFX1ZFUlNJT05fQUNUVUFMKSk7CiBPVEhFUl9DRkxBR1NfUHJvZHVjdGlvbl9ub3JtYWwgPSAk
KE9USEVSX0NGTEFHU19ub3JtYWxfJChYQ09ERV9WRVJTSU9OX0FDVFVBTCkpOwogT1RIRVJfQ0ZM
QUdTX25vcm1hbF8wMzEwID0gJChPVEhFUl9DRkxBR1Nfbm9ybWFsX0dDQ180Mik7CiBPVEhFUl9D
RkxBR1Nfbm9ybWFsXzAzMjAgPSAkKE9USEVSX0NGTEFHU19ub3JtYWxfR0NDXzQyKTsKLU9USEVS
X0NGTEFHU19ub3JtYWxfR0NDXzQyID0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZ1bndpbmQtdGFi
bGVzOworT1RIRVJfQ0ZMQUdTX25vcm1hbF9HQ0NfNDIgPSAtZnVud2luZC10YWJsZXM7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDI1N2U5ODYuLjNjZGUxZWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC0xOTEsNiArMTkxLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggXAogCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGl0ZXJhbFBhcnNlci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5jcHAg
XAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmggXAorCUphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFya1N0YWNrUG9zaXguY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgg
XAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBcCkBAIC00MzQsNiArNDM3
LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3Bw
IFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oIFwKKwlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcmtTdGFjay5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNr
LmggXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrV2luLmNwcCBcCiAJSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXRoT2JqZWN0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5jcHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDg5YzEyNGEuLmUy
YTIzZDYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTEzMSwxNyArMTMxLDE3IEBA
IF9fWk4zSlNDMTNqc093bmVkU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzdVU3RyaW5n
RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTBnbG9iYWxFeGVjRXYKIF9fWk4zSlNDMTRKU0ds
b2JhbE9iamVjdDEyZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVy
RVBOU184SlNPYmplY3RFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZVNldHRlckVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RQorX19aTjNKU0Mx
NEpTR2xvYmFsT2JqZWN0MTJtYXJrQ2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCiBfX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJ
ZGVudGlmaWVyRU5TXzdKU1ZhbHVlRWoKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDNwdXRFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVy
dHlTbG90RSAgCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQot
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NG1hcmtFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
RDJFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0bndFbVBOU18xMkpTR2xvYmFsRGF0YUUKIF9f
Wk4zSlNDMTRTYW1wbGluZ1RocmVhZDRzdG9wRXYKIF9fWk4zSlNDMTRTYW1wbGluZ1RocmVhZDVz
dGFydEVqCiBfX1pOM0pTQzE0VGltZW91dENoZWNrZXI1cmVzZXRFdgogX19aTjNKU0MxNGNvbnN0
cnVjdEFycmF5RVBOU185RXhlY1N0YXRlRVJLTlNfN0FyZ0xpc3RFCi1fX1pOM0pTQzE1SlNXcmFw
cGVyT2JqZWN0NG1hcmtFdgorX19aTjNKU0MxNUpTV3JhcHBlck9iamVjdDEybWFya0NoaWxkcmVu
RVJOU185TWFya1N0YWNrRQogX19aTjNKU0MxNXRvSW50MzJTbG93Q2FzZUVkUmIKIF9fWk4zSlND
MTZGdW5jdGlvbkJvZHlOb2RlMTNmaW5pc2hQYXJzaW5nRVBOU18xMElkZW50aWZpZXJFbQogX19a
TjNKU0MxNkZ1bmN0aW9uQm9keU5vZGUxNGNvcHlQYXJhbWV0ZXJzRXYKQEAgLTIzNiw2ICsyMzYs
NyBAQCBfX1pOM0pTQzhKU09iamVjdDEyZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNf
MTBJZGVudGlmaWVyRVBTMF8KIF9fWk4zSlNDOEpTT2JqZWN0MTJkZWZpbmVTZXR0ZXJFUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmxvb2t1
cEdldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zSlNDOEpTT2Jq
ZWN0MTJsb29rdXBTZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCitfX1pO
M0pTQzhKU09iamVjdDEybWFya0NoaWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTjNKU0M4SlNP
YmplY3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQog
X19aTjNKU0M4SlNPYmplY3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRWoKIF9fWk4z
SlNDOEpTT2JqZWN0MTV1bndyYXBwZWRPYmplY3RFdgpAQCAtMjUxLDcgKzI1Miw2IEBAIF9fWk4z
SlNDOEpTT2JqZWN0MjJmaWxsR2V0dGVyUHJvcGVydHlTbG90RVJOU18xMlByb3BlcnR5U2xvdEVQ
TlNfN0pTVmFsdWVFCiBfX1pOM0pTQzhKU09iamVjdDIzYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VF
bW0KIF9fWk4zSlNDOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmll
ckVOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzhKU09iamVjdDNw
dXRFUE5TXzlFeGVjU3RhdGVFak5TXzdKU1ZhbHVlRSAgCi1fX1pOM0pTQzhKU09iamVjdDRtYXJr
RXYKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9wUHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNf
N1VTdHJpbmdFCiBfX1pOM0pTQzhQcm9maWxlcjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3Rh
dGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlNDOFByb2ZpbGVyOHByb2ZpbGVyRXYKQEAgLTI1OSw2
ICsyNTksOSBAQCBfX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVSTlNfMTBTY29wZUNo
YWluRVJLTlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRQogX19aTjNKU0M4anNTdHJpbmdFUE5T
XzEySlNHbG9iYWxEYXRhRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzlDb2RlQmxvY2tEMUV2CiBf
X1pOM0pTQzlDb2RlQmxvY2tEMkV2CitfX1pOM0pTQzlNYXJrU3RhY2sxMHNfcGFnZVNpemVFCitf
X1pOM0pTQzlNYXJrU3RhY2sxMnN0YWNrUmVsZWFzZUVQdm0KK19fWk4zSlNDOU1hcmtTdGFjazEz
c3RhY2tBbGxvY2F0ZUVtCiBfX1pOM0pTQzlTdHJ1Y3R1cmUxN3N0b3BJZ25vcmluZ0xlYWtzRXYK
IF9fWk4zSlNDOVN0cnVjdHVyZTE4c3RhcnRJZ25vcmluZ0xlYWtzRXYKIF9fWk4zSlNDOVN0cnVj
dHVyZTIxYWRkUHJvcGVydHlUcmFuc2l0aW9uRVBTMF9SS05TXzEwSWRlbnRpZmllckVqUE5TXzZK
U0NlbGxFUm0KQEAgLTMyNiw2ICszMjksNyBAQCBfX1pOSzNKU0MxMkRhdGVJbnN0YW5jZTdnZXRU
aW1lRVJkUmkKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0MTJ0b1RoaXNTdHJpbmdFUE5TXzlFeGVj
U3RhdGVFCiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUK
IF9fWk5LM0pTQzE0SlNHbG9iYWxPYmplY3QxNGlzRHluYW1pY1Njb3BlRXYKKwogX19aTkszSlND
MTZGdW5jdGlvbkJvZHlOb2RlMTRpc0hvc3RGdW5jdGlvbkV2CiBfX1pOSzNKU0MxNkludGVybmFs
RnVuY3Rpb245Y2xhc3NJbmZvRXYKIF9fWk5LM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE2aXNWYXJp
YWJsZU9iamVjdEV2CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5n
eXBpIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQppbmRleCAyZDY5YzdkLi40
NjJjMzhmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisr
KyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKQEAgLTI2NSw2ICsyNjUsOSBA
QAogICAgICAgICAgICAgJ3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5oJywKICAgICAgICAgICAgICdy
dW50aW1lL0xvb2t1cC5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvTG9va3VwLmgnLAorICAg
ICAgICAgICAgJ3J1bnRpbWUvTWFya1N0YWNrLmNwcCcsCisgICAgICAgICAgICAncnVudGltZS9N
YXJrU3RhY2suaCcsCisgICAgICAgICAgICAncnVudGltZS9NYXJrU3RhY2tXaW4uY3BwJywKICAg
ICAgICAgICAgICdydW50aW1lL01hdGhPYmplY3QuY3BwJywKICAgICAgICAgICAgICdydW50aW1l
L01hdGhPYmplY3QuaCcsCiAgICAgICAgICAgICAncnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVj
dG9yLmNwcCcsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkg
Yi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkKaW5kZXggMGRlNGYxNS4uZGQ0OGM5
YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCisrKyBiL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQpAQCAtOTgsNiArOTgsOCBAQCBTT1VSQ0VT
ICs9IFwKICAgICBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTT05P
YmplY3QuY3BwIFwKICAgICBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwIFwKKyAgICBydW50aW1l
L01hcmtTdGFjay5jcHAgXAorICAgIHJ1bnRpbWUvTWFya1N0YWNrUG9zaXguY3BwIFwKICAgICBy
dW50aW1lL1RpbWVvdXRDaGVja2VyLmNwcCBcCiAgICAgYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBc
CiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IDE1NjVkMDQuLjFjNWU5NjMgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtODg0
LDYgKzg4NCwxOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXE1hcmtTdGFjay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxNYXJrU3RhY2suY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5ccnVudGltZVxNYXJrU3RhY2tXaW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxNYXRoT2JqZWN0LmNwcCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3YTk0OGRmLi4xOTAzODk0IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE5NiwxNCArMTk2LDE3IEBACiAJCUE3MjcwMDkwMERBQzZCQkMw
MEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMDc4MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2Jq
ZWN0LmNwcCAqLzsgfTsKIAkJQTcyNzAxQjkwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhl
bHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi87IH07CiAJCUE3
MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjdGRjY2MERBMzA1
M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCAqLzsgfTsKKwkJQTc0QjM0
OTkxMDJBNUY4RTAwMzJBQjk4IC8qIE1hcmtTdGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzRCMzQ5ODEwMkE1RjhFMDAzMkFCOTggLyogTWFy
a1N0YWNrLmNwcCAqLzsgfTsKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2RUU2NTkw
RkFFNTlENTAwM0YwNjlBIC8qIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RUU2NTgwRkFFNTlENTAwM0YwNjlB
IC8qIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUE3Nzk1NTkwMTAxQTc0RDUwMDExNEU1NSAvKiBNYXJrU3Rh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk1
NThGMTAxQTc0RDUwMDExNEU1NSAvKiBNYXJrU3RhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzgyRjFBNTBFRUM5RkEyMDAzNjI3M0YgLyog
RXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODJGMUE0MEVFQzlGQTIwMDM2MjczRiAvKiBFeGVjdXRhYmxl
QWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQlBNzkxRUYyODBGMTFFMDc5MDBBRTFGNjggLyog
SlNCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3OTFFRjI2MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3OTFFRjI5MEYxMUUwNzkw
MEFFMUY2OCAvKiBKU0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzkxRUYyNzBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXku
Y3BwICovOyB9OwogCQlBN0ExRjdBQzBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTFGN0FBMEYy
NTJCM0MwMEUxODRFMiAvKiBCeXRlQXJyYXkuY3BwICovOyB9OwogCQlBN0ExRjdBRDBGMjUyQjND
MDBFMTg0RTIgLyogQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ExRjdBQjBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdCNDhGNDkw
RUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovOyB9OworCQlBN0M1MzBFNDEwMkEzODEzMDA1
QkM3NDEgLyogTWFya1N0YWNrUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdDNTMwRTMxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bv
c2l4LmNwcCAqLzsgfTsKIAkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTJF
QTY5MEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmggKi87IH07CiAJCUE3RTJFQTZD
MEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTJFQTZBMEZCNDYwQ0YwMDYwMUYwNiAvKiBM
aXRlcmFsUGFyc2VyLmNwcCAqLzsgfTsKIAkJQTdGOTkzNUYwRkQ3MzI1MTAwQTBCMkQwIC8qIEpT
T05PYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3Rjk5MzVEMEZENzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmggKi87IH07CkBAIC03Mzgs
NyArNzQxLDkgQEAKIAkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uSGVscGVycy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzI3RkY2NTBEQTMwNTNCMDBFNTQ4RDcg
LyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3MjdGRjY2MERBMzA1M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzRCMzQ5ODEwMkE1RjhF
MDAzMkFCOTggLyogTWFya1N0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hcmtTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkVF
NjU4MEZBRTU5RDUwMDNGMDY5QSAvKiBOYXRpdmVGdW5jdGlvbldyYXBwZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlRnVuY3Rpb25XcmFwcGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3Nzk1NThGMTAxQTc0RDUwMDExNEU1NSAvKiBNYXJrU3Rh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODJGMUE0MEVFQzlGQTIwMDM2MjczRiAvKiBFeGVj
dXRhYmxlQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc5MUVGMjYwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQnl0ZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3OTFFRjI3MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0J5dGVBcnJheS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDYsNiArNzUxLDcgQEAKIAkJQTdBMUY3
QUIwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdC
NDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTMw
RTMxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtTdGFja1Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdFMkVBNjkwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGl0ZXJhbFBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0UyRUE2QTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0
ZXJhbFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaXRl
cmFsUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNDJDMTgwRTM5
Mzg4MzAwNjVBNTQ0IC8qIEpTU3RhdGljU2NvcGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTdGF0aWNTY29wZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQ5MCw2ICsxNDk2LDkgQEAKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4
OTYgLyogVHlwZUluZm8uaCAqLywKIAkJCQlGNjkyQTg4NTAyNTU1OTdEMDFGRjYwRjcgLyogVVN0
cmluZy5jcHAgKi8sCiAJCQkJRjY5MkE4ODYwMjU1NTk3RDAxRkY2MEY3IC8qIFVTdHJpbmcuaCAq
LywKKwkJCQlBNzc5NTU4RjEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggKi8sCisJCQkJ
QTdDNTMwRTMxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCAqLywKKwkJCQlB
NzRCMzQ5ODEwMkE1RjhFMDAzMkFCOTggLyogTWFya1N0YWNrLmNwcCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xODkyLDYgKzE5
MDEsNyBAQAogCQkJCTE0MjlEQUUwMEVEMjY0NUIwMEI4OTYxOSAvKiBXUkVDR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5REFCRjBFRDI2M0U3MDBCODk2MTkgLyogV1JFQ1BhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTc3OTU1OTAxMDFBNzRENTAwMTE0RTU1IC8q
IE1hcmtTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMjU1LDYgKzIyNjUsOCBAQAogCQkJCTE0
MjlEQTgyMEVEMjQ4MjkwMEI4OTYxOSAvKiBXUkVDRnVuY3RvcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyOURBRTEwRUQyNjQ1QjAwQjg5NjE5IC8qIFdSRUNHZW5lcmF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyOURBQzAwRUQyNjNFNzAwQjg5NjE5IC8qIFdSRUNQYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTdDNTMwRTQxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFj
a1Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3NEIzNDk5MTAyQTVGOEUwMDMyQUI5OCAv
KiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAppbmRleCAxZjY0OTkyLi4wOTE2N2M5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKQEAgLTE0MjgsMjAgKzE0MjgsMjEgQEAgdm9pZCBDb2RlQmxvY2s6OnJlZlN0
cnVjdHVyZXMoSW5zdHJ1Y3Rpb24qIHZQQykgY29uc3QKICAgICBBU1NFUlQodlBDWzBdLnUub3Bj
b2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkKSB8fCB2UENbMF0udS5v
cGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWQpIHx8IHZQQ1swXS51
Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKSB8
fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWRf
Z2VuZXJpYykpOwogfQogCi12b2lkIENvZGVCbG9jazo6bWFyaygpCit2b2lkIENvZGVCbG9jazo6
bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGlmICghbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5tYXJrZWQoKSkKLSAgICAgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnNbaV0ubWFyaygpOworICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCht
X2NvbnN0YW50UmVnaXN0ZXJzW2ldLmpzVmFsdWUoKSk7CisgICAgfQogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRXhwcmVzc2lvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IG1fZnVuY3Rpb25FeHByZXNzaW9uc1tpXS0+Ym9keSgpLT5tYXJrKCk7CisgICAgICAgIG1fZnVu
Y3Rpb25FeHByZXNzaW9uc1tpXS0+Ym9keSgpLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiAK
ICAgICBpZiAobV9yYXJlRGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
cmFyZURhdGEtPm1fZnVuY3Rpb25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV9mdW5jdGlvbnNbaV0tPmJvZHkoKS0+bWFyaygpOworICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV9mdW5jdGlvbnNbaV0tPmJvZHkoKS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogCi0g
ICAgICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS5tYXJrKCk7CisgICAgICAgIG1fcmFy
ZURhdGEtPm1fZXZhbENvZGVDYWNoZS5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDlmNzUyMTUuLmI2YzNlYWIg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0yMzEsNyArMjMxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIENvZGVCbG9jayhTY29wZU5vZGUqIG93bmVyTm9kZSwgQ29k
ZVR5cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQp
OwogICAgICAgICB+Q29kZUJsb2NrKCk7CiAKLSAgICAgICAgdm9pZCBtYXJrKCk7CisgICAgICAg
IHZvaWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smKTsKICAgICAgICAgdm9pZCByZWZTdHJ1Y3R1
cmVzKEluc3RydWN0aW9uKiB2UEMpIGNvbnN0OwogICAgICAgICB2b2lkIGRlcmVmU3RydWN0dXJl
cyhJbnN0cnVjdGlvbiogdlBDKSBjb25zdDsKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwp
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmggYi9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKaW5kZXggZjBjZTczZS4uOTg2
NTI1YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5o
CisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaApAQCAtNjgsMTEg
KzY4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FjaGVNYXAuaXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCBtYXJrKCkK
KyAgICAgICAgdm9pZCBtYXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKQogICAgICAg
ICB7CiAgICAgICAgICAgICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAu
ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgcHRyID0gbV9j
YWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgICAgICBwdHIt
PnNlY29uZC0+bWFyaygpOworICAgICAgICAgICAgICAgIHB0ci0+c2Vjb25kLT5tYXJrQWdncmVn
YXRlKG1hcmtTdGFjayk7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heENhY2hlYWJsZVNvdXJjZUxlbmd0aCA9IDI1NjsKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCmluZGV4IDRiMjU2OGYuLjM0ZDA0
NDcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlv
bi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzgsMTEgKzM4LDEyIEBAIERlYnVnZ2VyQWN0aXZhdGlvbjo6RGVidWdnZXJBY3RpdmF0aW9u
KEpTT2JqZWN0KiBhY3RpdmF0aW9uKQogICAgIG1fYWN0aXZhdGlvbiA9IHN0YXRpY19jYXN0PEpT
QWN0aXZhdGlvbio+KGFjdGl2YXRpb24pOwogfQogCi12b2lkIERlYnVnZ2VyQWN0aXZhdGlvbjo6
bWFyaygpCit2b2lkIERlYnVnZ2VyQWN0aXZhdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYg
bWFya1N0YWNrKQogewotICAgIEpTT2JqZWN0OjptYXJrKCk7Ci0gICAgaWYgKG1fYWN0aXZhdGlv
biAmJiAhbV9hY3RpdmF0aW9uLT5tYXJrZWQoKSkKLSAgICAgICAgbV9hY3RpdmF0aW9uLT5tYXJr
KCk7CisgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworCisgICAgaWYgKG1f
YWN0aXZhdGlvbikKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX2FjdGl2YXRpb24pOwogfQog
CiBVU3RyaW5nIERlYnVnZ2VyQWN0aXZhdGlvbjo6Y2xhc3NOYW1lKCkgY29uc3QKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oIGIvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgKaW5kZXggOWUxZjlmNS4uODJj
ZGU0ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0
aW9uLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBEZWJ1
Z2dlckFjdGl2YXRpb24oSlNPYmplY3QqKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogICAgICAg
ICB2aXJ0dWFsIFVTdHJpbmcgY2xhc3NOYW1lKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIu
aCBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKaW5kZXggYmVhZDRkYy4u
OTVhZTVmNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUoKSBjb25zdDsKIAog
ICAgICAgICBib29sIG1hcmtlZCgpIGNvbnN0OwotICAgICAgICB2b2lkIG1hcmsoKTsKKyAgICAg
ICAgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAgICAgICAgIAogICAgICAgICBSZWdp
c3RlcihKU0FjdGl2YXRpb24qKTsKICAgICAgICAgUmVnaXN0ZXIoQ2FsbEZyYW1lKik7CkBAIC0x
MjAsMTEgKzEyMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4ganNWYWx1ZSgp
Lm1hcmtlZCgpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBSZWdpc3Rlcjo6bWFy
aygpCi0gICAgewotICAgICAgICBqc1ZhbHVlKCkubWFyaygpOwotICAgIH0KLSAgICAKICAgICAv
LyBJbnRlcnByZXRlciBmdW5jdGlvbnMKIAogICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6OlJl
Z2lzdGVyKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbikKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oIGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvUmVnaXN0ZXJGaWxlLmgKaW5kZXggZDQ2YmRjOS4uYTE2MjZhMCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNiw4ICsxMzYsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBSZWdpc3RlciogbGFzdEdsb2JhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnQgLSBtX251bUdsb2JhbHM7IH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgbWFya0dsb2Jh
bHMoSGVhcCogaGVhcCkgeyBoZWFwLT5tYXJrQ29uc2VydmF0aXZlbHkobGFzdEdsb2JhbCgpLCBt
X3N0YXJ0KTsgfQotICAgICAgICB2b2lkIG1hcmtDYWxsRnJhbWVzKEhlYXAqIGhlYXApIHsgaGVh
cC0+bWFya0NvbnNlcnZhdGl2ZWx5KG1fc3RhcnQsIG1fZW5kKTsgfQorICAgICAgICB2b2lkIG1h
cmtHbG9iYWxzKEhlYXAqIGhlYXAsIE1hcmtTdGFjayYgbWFya1N0YWNrKSB7IGhlYXAtPm1hcmtD
b25zZXJ2YXRpdmVseShsYXN0R2xvYmFsKCksIG1fc3RhcnQsIG1hcmtTdGFjayk7IH0KKyAgICAg
ICAgdm9pZCBtYXJrQ2FsbEZyYW1lcyhIZWFwKiBoZWFwLCBNYXJrU3RhY2smIG1hcmtTdGFjaykg
eyBoZWFwLT5tYXJrQ29uc2VydmF0aXZlbHkobV9zdGFydCwgbV9lbmQsIG1hcmtTdGFjayk7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwIGIvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAppbmRleCA2NWRlODljLi40MzI0YTA2IDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5jcHAKQEAgLTE4MTgsMTQgKzE4MTgsMTQgQEAgU2NvcGVOb2RlRGF0YTo6U2NvcGVO
b2RlRGF0YShQYXJzZXJBcmVuYSYgYXJlbmEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFy
U3QKICAgICAgICAgY2hpbGRyZW4tPnJlbGVhc2VDb250ZW50c0ludG9WZWN0b3IobV9jaGlsZHJl
bik7CiB9CiAKLXZvaWQgU2NvcGVOb2RlRGF0YTo6bWFyaygpCit2b2lkIFNjb3BlTm9kZURhdGE6
Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgRnVuY3Rpb25TdGFj
azo6aXRlcmF0b3IgZW5kID0gbV9mdW5jdGlvblN0YWNrLmVuZCgpOwogICAgIGZvciAoRnVuY3Rp
b25TdGFjazo6aXRlcmF0b3IgcHRyID0gbV9mdW5jdGlvblN0YWNrLmJlZ2luKCk7IHB0ciAhPSBl
bmQ7ICsrcHRyKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkgPSAoKnB0ciktPmJv
ZHkoKTsKICAgICAgICAgaWYgKCFib2R5LT5pc0dlbmVyYXRlZCgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGJvZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCkubWFyaygpOworICAgICAg
ICBib2R5LT5nZW5lcmF0ZWRCeXRlY29kZSgpLm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAg
ICB9CiB9CiAKQEAgLTE5NzIsMTAgKzE5NzIsMTAgQEAgRXZhbENvZGVCbG9jayYgRXZhbE5vZGU6
OmJ5dGVjb2RlRm9yRXhjZXB0aW9uSW5mb1JlcGFyc2UoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2gK
ICAgICByZXR1cm4gKm1fY29kZTsKIH0KIAotdm9pZCBFdmFsTm9kZTo6bWFyaygpCit2b2lkIEV2
YWxOb2RlOjptYXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewogICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gbWFyayBvdXIgb3duIENvZGVCbG9jayBhcyB0aGUgSlNHbG9iYWxPYmpl
Y3QgdGFrZXMgY2FyZSBvZiB0aGF0Ci0gICAgZGF0YSgpLT5tYXJrKCk7CisgICAgZGF0YSgpLT5t
YXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMjAzMCwx
MCArMjAzMCwxMCBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBhcnNpbmcoSWRlbnRp
ZmllciogcGFyYW1ldGVycywgc2l6ZV90IHBhcmFtZXRlckNvdQogICAgIG1fcGFyYW1ldGVyQ291
bnQgPSBwYXJhbWV0ZXJDb3VudDsKIH0KIAotdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjptYXJrKCkK
K3ZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFj
aykKIHsKICAgICBpZiAobV9jb2RlKQotICAgICAgICBtX2NvZGUtPm1hcmsoKTsKKyAgICAgICAg
bV9jb2RlLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaAppbmRleCA0ZTViODY0Li43MDNiMzg0IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuaApAQCAtMTM5MCw3ICsxMzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBt
X251bUNvbnN0YW50czsKICAgICAgICAgU3RhdGVtZW50VmVjdG9yIG1fY2hpbGRyZW47CiAKLSAg
ICAgICAgdm9pZCBtYXJrKCk7CisgICAgICAgIHZvaWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2sm
KTsKICAgICB9OwogCiAgICAgY2xhc3MgU2NvcGVOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUs
IHB1YmxpYyBQYXJzZXJBcmVuYVJlZkNvdW50ZWQgewpAQCAtMTQzNiw3ICsxNDM2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5tX251bUNvbnN0YW50cyAr
IDI7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpIHsgfQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smKSB7IH0KIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGUoKQpAQCAtMTUxNSw3ICsx
NTE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgRXZhbENvZGVCbG9jayYgYnl0ZWNv
ZGVGb3JFeGNlcHRpb25JbmZvUmVwYXJzZShTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopOwog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
QWdncmVnYXRlKE1hcmtTdGFjayYpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgSklUQ29k
ZSYgaml0Q29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKQEAgLTE1NjMsNyArMTU2Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25z
dDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smKTsKIAogICAgICAgICB2b2lkIGZpbmlzaFBhcnNpbmco
Y29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUqKTsKICAgICAgICAgdm9pZCBmaW5pc2hQ
YXJzaW5nKElkZW50aWZpZXIqIHBhcmFtZXRlcnMsIHNpemVfdCBwYXJhbWV0ZXJDb3VudCk7CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAppbmRleCAwYjVkOTU4Li42NzY5NTUxIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0zNywxNiArMzcsMTIgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJ
bmRleCwgQXJnTGlzdCYgcmVzdWx0KSBjb25zdAogICAgIHJlc3VsdCA9IEFyZ0xpc3QobV9hcmdz
ICsgc3RhcnRJbmRleCwgbV9hcmdDb3VudCAtIHN0YXJ0SW5kZXgpOwogfQogCi12b2lkIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoTGlzdFNldCYgbWFya1NldCkKK3ZvaWQgTWFya2Vk
QXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhMaXN0U2V0JiBtYXJrU2V0LCBNYXJrU3RhY2smIG1h
cmtTdGFjaykKIHsKICAgICBMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwog
ICAgIGZvciAoTGlzdFNldDo6aXRlcmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciogbGlzdCA9ICppdDsKLQot
ICAgICAgICBpdGVyYXRvciBlbmQyID0gbGlzdC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoaXRlcmF0
b3IgaXQyID0gbGlzdC0+YmVnaW4oKTsgaXQyICE9IGVuZDI7ICsraXQyKQotICAgICAgICAgICAg
aWYgKCEoKml0MikubWFya2VkKCkpCi0gICAgICAgICAgICAgICAgKCppdDIpLm1hcmsoKTsKKyAg
ICAgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihs
aXN0LT5tX2J1ZmZlciksIGxpc3QtPm1fc2l6ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCmluZGV4IGE2NWY1NTkuLjE2NzNjY2YgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJnTGlzdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlz
dC5oCkBAIC0xMzUsNyArMTM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KICAgICAgICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIgKyBtX3NpemU7IH0KIAotICAg
ICAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoTGlzdFNldCYpOworICAgICAgICBzdGF0aWMgdm9p
ZCBtYXJrTGlzdHMoTGlzdFNldCYsIE1hcmtTdGFjayYpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBzbG93QXBwZW5kKEpTVmFsdWUpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
Y3BwCmluZGV4IGY4NjdmZTguLmVjOWM0NTAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1l
cm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC00MywzMCArNDMsMjIgQEAgQXJndW1lbnRzOjp+QXJn
dW1lbnRzKCkKICAgICAgICAgZGVsZXRlIFtdIGQtPmV4dHJhQXJndW1lbnRzOwogfQogCi12b2lk
IEFyZ3VtZW50czo6bWFyaygpCit2b2lkIEFyZ3VtZW50czo6bWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYgbWFya1N0YWNrKQogewotICAgIEpTT2JqZWN0OjptYXJrKCk7CisgICAgSlNPYmplY3Q6Om1h
cmtDaGlsZHJlbihtYXJrU3RhY2spOwogCi0gICAgaWYgKGQtPnJlZ2lzdGVyQXJyYXkpIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGQtPm51bVBhcmFtZXRlcnM7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCFkLT5yZWdpc3RlckFycmF5W2ldLm1hcmtlZCgpKQotICAgICAgICAg
ICAgICAgIGQtPnJlZ2lzdGVyQXJyYXlbaV0ubWFyaygpOwotICAgICAgICB9Ci0gICAgfQorICAg
IGlmIChkLT5yZWdpc3RlckFycmF5KQorICAgICAgICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKHJl
aW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGQtPnJlZ2lzdGVyQXJyYXkuZ2V0KCkpLCBkLT5udW1Q
YXJhbWV0ZXJzKTsKIAogICAgIGlmIChkLT5leHRyYUFyZ3VtZW50cykgewogICAgICAgICB1bnNp
Z25lZCBudW1FeHRyYUFyZ3VtZW50cyA9IGQtPm51bUFyZ3VtZW50cyAtIGQtPm51bVBhcmFtZXRl
cnM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FeHRyYUFyZ3VtZW50czsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoIWQtPmV4dHJhQXJndW1lbnRzW2ldLm1hcmtlZCgpKQot
ICAgICAgICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRzW2ldLm1hcmsoKTsKLSAgICAgICAgfQor
ICAgICAgICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+
KGQtPmV4dHJhQXJndW1lbnRzKSwgbnVtRXh0cmFBcmd1bWVudHMpOwogICAgIH0KIAotICAgIGlm
ICghZC0+Y2FsbGVlLT5tYXJrZWQoKSkKLSAgICAgICAgZC0+Y2FsbGVlLT5tYXJrKCk7CisgICAg
bWFya1N0YWNrLmFwcGVuZChkLT5jYWxsZWUpOwogCi0gICAgaWYgKGQtPmFjdGl2YXRpb24gJiYg
IWQtPmFjdGl2YXRpb24tPm1hcmtlZCgpKQotICAgICAgICBkLT5hY3RpdmF0aW9uLT5tYXJrKCk7
CisgICAgaWYgKGQtPmFjdGl2YXRpb24pCisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQoZC0+YWN0
aXZhdGlvbik7CiB9CiAKIHZvaWQgQXJndW1lbnRzOjpjb3B5VG9SZWdpc3RlcnMoRXhlY1N0YXRl
KiBleGVjLCBSZWdpc3RlciogYnVmZmVyLCB1aW50MzJfdCBtYXhTaXplKQpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgKaW5kZXggMGZhOTQ0Yy4uNzlmZTcyMCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ3VtZW50cy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNo
IChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9y
bG92aWNoCiAgKgpAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmso
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAg
ICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7
CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcCBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAppbmRleCA5YTYxOTgwLi40NDc0Mjhi
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU09OT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVk
ZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJUcmFjaW5nLmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNjQyLDcgKzY0Myw3IEBAIHZvaWQgSGVhcDo6cmVn
aXN0ZXJUaHJlYWQoKQogLy8gY2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZv
ciB0aGlzIHRvIGJlIHZhbGlkCiAjZGVmaW5lIElTX0hBTEZfQ0VMTF9BTElHTkVEKHApICgoKGlu
dHB0cl90KShwKSAmIChDRUxMX01BU0sgPj4gMSkpID09IDApCiAKLXZvaWQgSGVhcDo6bWFya0Nv
bnNlcnZhdGl2ZWx5KHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit2b2lkIEhlYXA6Om1hcmtDb25z
ZXJ2YXRpdmVseSh2b2lkKiBzdGFydCwgdm9pZCogZW5kLCBNYXJrU3RhY2smIG1hcmtTdGFjaykK
IHsKICAgICBpZiAoc3RhcnQgPiBlbmQpIHsKICAgICAgICAgdm9pZCogdG1wID0gc3RhcnQ7CkBA
IC02ODMsOSArNjg0LDggQEAgdm9pZCBIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkodm9pZCogc3Rh
cnQsIHZvaWQqIGVuZCkKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sg
PCB1c2VkUHJpbWFyeUJsb2NrczsgYmxvY2srKykgewogICAgICAgICAgICAgICAgIGlmICgocHJp
bWFyeUJsb2Nrc1tibG9ja10gPT0gYmxvY2tBZGRyKSAmIChvZmZzZXQgPD0gbGFzdENlbGxPZmZz
ZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PENvbGxlY3Rv
ckNlbGwqPih4QXNCaXRzKS0+dS5mcmVlQ2VsbC56ZXJvSWZGcmVlICE9IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEpTQ2VsbCogaW1wID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4
QXNCaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW1wLT5tYXJrZWQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbXAtPm1hcmsoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRz
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CkBAIC02OTYsMTUgKzY5NiwxNSBAQCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseSh2
b2lkKiBzdGFydCwgdm9pZCogZW5kKQogICAgIH0KIH0KIAotdm9pZCBORVZFUl9JTkxJTkUgSGVh
cDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseUludGVybmFsKCkKK3ZvaWQgTkVWRVJf
SU5MSU5FIEhlYXA6Om1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbChNYXJr
U3RhY2smIG1hcmtTdGFjaykKIHsKICAgICB2b2lkKiBkdW1teTsKICAgICB2b2lkKiBzdGFja1Bv
aW50ZXIgPSAmZHVtbXk7CiAgICAgdm9pZCogc3RhY2tCYXNlID0gY3VycmVudFRocmVhZFN0YWNr
QmFzZSgpOwotICAgIG1hcmtDb25zZXJ2YXRpdmVseShzdGFja1BvaW50ZXIsIHN0YWNrQmFzZSk7
CisgICAgbWFya0NvbnNlcnZhdGl2ZWx5KHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlLCBtYXJrU3Rh
Y2spOwogfQogCi12b2lkIEhlYXA6Om1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHkoKQor
dm9pZCBIZWFwOjptYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFy
a1N0YWNrKQogewogICAgIC8vIHNldGptcCBmb3JjZXMgdm9sYXRpbGUgcmVnaXN0ZXJzIG9udG8g
dGhlIHN0YWNrCiAgICAgam1wX2J1ZiByZWdpc3RlcnM7CkBAIC03MTcsNyArNzE3LDcgQEAgdm9p
ZCBIZWFwOjptYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KCkKICNwcmFnbWEgd2Fybmlu
Zyhwb3ApCiAjZW5kaWYKIAotICAgIG1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRl
cm5hbCgpOworICAgIG1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbChtYXJr
U3RhY2spOwogfQogCiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQpAQCAtODQ5LDcg
Kzg0OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCogb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIoY29u
c3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnMmIHJlZ3MpCiAjZW5kaWYKIH0KIAotdm9pZCBIZWFw
OjptYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShUaHJlYWQqIHRocmVhZCkKK3ZvaWQgSGVh
cDo6bWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoVGhyZWFkKiB0aHJlYWQsIE1hcmtTdGFj
ayYgbWFya1N0YWNrKQogewogICAgIHN1c3BlbmRUaHJlYWQodGhyZWFkLT5wbGF0Zm9ybVRocmVh
ZCk7CiAKQEAgLTg1NywxOSArODU3LDE5IEBAIHZvaWQgSGVhcDo6bWFya090aGVyVGhyZWFkQ29u
c2VydmF0aXZlbHkoVGhyZWFkKiB0aHJlYWQpCiAgICAgc2l6ZV90IHJlZ1NpemUgPSBnZXRQbGF0
Zm9ybVRocmVhZFJlZ2lzdGVycyh0aHJlYWQtPnBsYXRmb3JtVGhyZWFkLCByZWdzKTsKIAogICAg
IC8vIG1hcmsgdGhlIHRocmVhZCdzIHJlZ2lzdGVycwotICAgIG1hcmtDb25zZXJ2YXRpdmVseShz
dGF0aWNfY2FzdDx2b2lkKj4oJnJlZ3MpLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oJnJlZ3MpICsgcmVnU2l6ZSkpOworICAgIG1hcmtDb25zZXJ2YXRpdmVseShz
dGF0aWNfY2FzdDx2b2lkKj4oJnJlZ3MpLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oJnJlZ3MpICsgcmVnU2l6ZSksIG1hcmtTdGFjayk7CiAKICAgICB2b2lkKiBz
dGFja1BvaW50ZXIgPSBvdGhlclRocmVhZFN0YWNrUG9pbnRlcihyZWdzKTsKLSAgICBtYXJrQ29u
c2VydmF0aXZlbHkoc3RhY2tQb2ludGVyLCB0aHJlYWQtPnN0YWNrQmFzZSk7CisgICAgbWFya0Nv
bnNlcnZhdGl2ZWx5KHN0YWNrUG9pbnRlciwgdGhyZWFkLT5zdGFja0Jhc2UsIG1hcmtTdGFjayk7
CiAKICAgICByZXN1bWVUaHJlYWQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCk7CiB9CiAKICNlbmRp
ZgogCi12b2lkIEhlYXA6Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSgpCit2b2lkIEhl
YXA6Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smIG1hcmtTdGFjaykK
IHsKLSAgICBtYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KCk7CisgICAgbWFya0N1cnJl
bnRUaHJlYWRDb25zZXJ2YXRpdmVseShtYXJrU3RhY2spOwogCiAjaWYgRU5BQkxFKEpTQ19NVUxU
SVBMRV9USFJFQURTKQogCkBAIC04NzksNyArODc5LDcgQEAgdm9pZCBIZWFwOjptYXJrU3RhY2tP
YmplY3RzQ29uc2VydmF0aXZlbHkoKQogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBGb3Ji
aWQgbWFsbG9jIGR1cmluZyB0aGUgbWFyayBwaGFzZS4gTWFya2luZyBhIHRocmVhZCBzdXNwZW5k
cyBpdCwgc28gCi0gICAgICAgIC8vIGEgbWFsbG9jIGluc2lkZSBtYXJrKCkgd291bGQgcmlzayBh
IGRlYWRsb2NrIHdpdGggYSB0aHJlYWQgdGhhdCBoYWQgYmVlbiAKKyAgICAgICAgLy8gYSBtYWxs
b2MgaW5zaWRlIG1hcmtDaGlsZHJlbigpIHdvdWxkIHJpc2sgYSBkZWFkbG9jayB3aXRoIGEgdGhy
ZWFkIHRoYXQgaGFkIGJlZW4gCiAgICAgICAgIC8vIHN1c3BlbmRlZCB3aGlsZSBob2xkaW5nIHRo
ZSBtYWxsb2MgbG9jay4KICAgICAgICAgZmFzdE1hbGxvY0ZvcmJpZCgpOwogI2VuZGlmCkBAIC04
ODcsNyArODg3LDcgQEAgdm9pZCBIZWFwOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHko
KQogICAgICAgICAvLyBhbmQgc2luY2UgdGhpcyBpcyBhIHNoYXJlZCBoZWFwLCB0aGV5IGFyZSBy
ZWFsIGxvY2tzLgogICAgICAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAgIGlmICgh
cHRocmVhZF9lcXVhbCh0aHJlYWQtPnBvc2l4VGhyZWFkLCBwdGhyZWFkX3NlbGYoKSkpCi0gICAg
ICAgICAgICAgICAgbWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkodGhyZWFkKTsKKyAgICAg
ICAgICAgICAgICBtYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseSh0aHJlYWQsIG1hcmtTdGFj
ayk7CiAgICAgICAgIH0KICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGZhc3RNYWxsb2NBbGxvdygp
OwpAQCAtOTQ3LDcgKzk0Nyw3IEBAIEhlYXAqIEhlYXA6OmhlYXAoSlNWYWx1ZSB2KQogICAgIHJl
dHVybiBIZWFwOjpjZWxsQmxvY2sodi5hc0NlbGwoKSktPmhlYXA7CiB9CiAKLXZvaWQgSGVhcDo6
bWFya1Byb3RlY3RlZE9iamVjdHMoKQordm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhN
YXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBpZiAobV9wcm90ZWN0ZWRWYWx1ZXNNdXRleCkK
ICAgICAgICAgbV9wcm90ZWN0ZWRWYWx1ZXNNdXRleC0+bG9jaygpOwpAQCAtOTU1LDggKzk1NSwx
MCBAQCB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKCkKICAgICBQcm90ZWN0Q291bnRT
ZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJv
dGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBKU0NlbGwqIHZhbCA9IGl0LT5maXJzdDsKLSAgICAg
ICAgaWYgKCF2YWwtPm1hcmtlZCgpKQotICAgICAgICAgICAgdmFsLT5tYXJrKCk7CisgICAgICAg
IGlmICghdmFsLT5tYXJrZWQoKSkgeworICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2YWwp
OworICAgICAgICAgICAgbWFya1N0YWNrLmRyYWluKCk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAobV9wcm90ZWN0ZWRWYWx1ZXNNdXRleCkKQEAgLTEwNjEsNyArMTA2Myw3IEBAIHRlbXBs
YXRlIDxIZWFwVHlwZSBoZWFwVHlwZT4gc2l6ZV90IEhlYXA6OnN3ZWVwKCkKICAgICBoZWFwLmV4
dHJhQ29zdCA9IDA7CiAgICAgcmV0dXJuIG51bUxpdmVPYmplY3RzOwogfQotICAgIAorCiBib29s
IEhlYXA6OmNvbGxlY3QoKQogewogI2lmbmRlZiBOREVCVUcKQEAgLTEwODAsMjAgKzEwODIsMjIg
QEAgYm9vbCBIZWFwOjpjb2xsZWN0KCkKICAgICBudW1iZXJIZWFwLm9wZXJhdGlvbkluUHJvZ3Jl
c3MgPSBDb2xsZWN0aW9uOwogCiAgICAgLy8gTUFSSzogZmlyc3QgbWFyayBhbGwgcmVmZXJlbmNl
ZCBvYmplY3RzIHJlY3Vyc2l2ZWx5IHN0YXJ0aW5nIG91dCBmcm9tIHRoZSBzZXQgb2Ygcm9vdCBv
YmplY3RzCi0KLSAgICBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoKTsKLSAgICBtYXJr
UHJvdGVjdGVkT2JqZWN0cygpOworICAgIE1hcmtTdGFjayYgbWFya1N0YWNrID0gbV9nbG9iYWxE
YXRhLT5tYXJrU3RhY2s7CisgICAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KG1hcmtT
dGFjayk7CisgICAgbWFya1Byb3RlY3RlZE9iamVjdHMobWFya1N0YWNrKTsKICAgICBpZiAobV9t
YXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0gICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOjptYXJrTGlzdHMoKm1fbWFya0xpc3RTZXQpOworICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKCptX21hcmtMaXN0U2V0LCBtYXJrU3RhY2spOwogICAgIGlm
IChtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiAmJiAhbV9nbG9iYWxEYXRhLT5leGNlcHRpb24ubWFy
a2VkKCkpCi0gICAgICAgIG1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLm1hcmsoKTsKLSAgICBtX2ds
b2JhbERhdGEtPmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5tYXJrQ2FsbEZyYW1lcyh0aGlz
KTsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5leGNlcHRpb24ubWFya0NoaWxkcmVuKG1hcmtTdGFj
ayk7CisgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkubWFya0Nh
bGxGcmFtZXModGhpcywgbWFya1N0YWNrKTsKICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5n
cy5tYXJrKCk7CiAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+c2NvcGVOb2RlQmVpbmdSZXBhcnNlZCkK
LSAgICAgICAgbV9nbG9iYWxEYXRhLT5zY29wZU5vZGVCZWluZ1JlcGFyc2VkLT5tYXJrKCk7Cisg
ICAgICAgIG1fZ2xvYmFsRGF0YS0+c2NvcGVOb2RlQmVpbmdSZXBhcnNlZC0+bWFya0FnZ3JlZ2F0
ZShtYXJrU3RhY2spOwogICAgIGlmIChtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01h
cmspCi0gICAgICAgIEpTT05PYmplY3Q6Om1hcmtTdHJpbmdpZmllcnMobV9nbG9iYWxEYXRhLT5m
aXJzdFN0cmluZ2lmaWVyVG9NYXJrKTsKKyAgICAgICAgSlNPTk9iamVjdDo6bWFya1N0cmluZ2lm
aWVycyhtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmssIG1hcmtTdGFjayk7CiAK
KyAgICBtYXJrU3RhY2suZHJhaW4oKTsKKyAgICBtYXJrU3RhY2suY29tcGFjdCgpOwogICAgIEpB
VkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwogCiAgICAgc2l6ZV90IG9yaWdpbmFsTGl2ZU9iamVj
dHMgPSBwcmltYXJ5SGVhcC5udW1MaXZlT2JqZWN0cyArIG51bWJlckhlYXAubnVtTGl2ZU9iamVj
dHM7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAppbmRleCA5YTg4MjYyLi45YWMxYWI0IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgKQEAgLTM5LDExICszOSwxMiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwogICAgIGNsYXNz
IENvbGxlY3RvckJsb2NrOwogICAgIGNsYXNzIEpTQ2VsbDsKICAgICBjbGFzcyBKU0dsb2JhbERh
dGE7CiAgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsK
KyAgICBjbGFzcyBNYXJrU3RhY2s7CiAKICAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBO
b09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9OwogICAgIGVudW0gSGVhcFR5cGUg
eyBQcmltYXJ5SGVhcCwgTnVtYmVySGVhcCB9OwpAQCAtMTExLDcgKzExMiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBpc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIG1hcmtDZWxsKEpTQ2VsbCopOwogCi0gICAgICAgIHZvaWQg
bWFya0NvbnNlcnZhdGl2ZWx5KHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOworICAgICAgICB2b2lk
IG1hcmtDb25zZXJ2YXRpdmVseSh2b2lkKiBzdGFydCwgdm9pZCogZW5kLCBNYXJrU3RhY2smKTsK
IAogICAgICAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0U2V0KCkg
eyBpZiAoIW1fbWFya0xpc3RTZXQpIG1fbWFya0xpc3RTZXQgPSBuZXcgSGFzaFNldDxNYXJrZWRB
cmd1bWVudEJ1ZmZlcio+OyByZXR1cm4gKm1fbWFya0xpc3RTZXQ7IH0KIApAQCAtMTMzLDExICsx
MzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH5IZWFwKCk7CiAKICAgICAgICAgdm9p
ZCByZWNvcmRFeHRyYUNvc3Qoc2l6ZV90KTsKLSAgICAgICAgdm9pZCBtYXJrUHJvdGVjdGVkT2Jq
ZWN0cygpOwotICAgICAgICB2b2lkIG1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHkoKTsK
LSAgICAgICAgdm9pZCBtYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5SW50ZXJuYWwoKTsK
LSAgICAgICAgdm9pZCBtYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShUaHJlYWQqKTsKLSAg
ICAgICAgdm9pZCBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoKTsKKyAgICAgICAgdm9p
ZCBtYXJrUHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2smKTsKKyAgICAgICAgdm9pZCBtYXJrQ3Vy
cmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYpOworICAgICAgICB2b2lkIG1hcmtD
dXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbChNYXJrU3RhY2smKTsKKyAgICAgICAg
dm9pZCBtYXJrT3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShUaHJlYWQqLCBNYXJrU3RhY2smKTsK
KyAgICAgICAgdm9pZCBtYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJik7
CiAKICAgICAgICAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxKU0NlbGwqPiBQcm90ZWN0Q291bnRT
ZXQ7CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNw
cCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAppbmRleCBjZDFiNDBh
Li5jYzg1MzU0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yOCwxNCArMjgsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgR2V0dGVy
U2V0dGVyOjptYXJrKCkKK3ZvaWQgR2V0dGVyU2V0dGVyOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNr
JiBtYXJrU3RhY2spCiB7Ci0gICAgSlNDZWxsOjptYXJrKCk7CisgICAgSlNDZWxsOjptYXJrQ2hp
bGRyZW4obWFya1N0YWNrKTsKIAogICAgIGlmIChtX2dldHRlciAmJiAhbV9nZXR0ZXItPm1hcmtl
ZCgpKQotICAgICAgICBtX2dldHRlci0+bWFyaygpOworICAgICAgICBtYXJrU3RhY2suYXBwZW5k
KG1fZ2V0dGVyKTsKICAgICBpZiAobV9zZXR0ZXIgJiYgIW1fc2V0dGVyLT5tYXJrZWQoKSkKLSAg
ICAgICAgbV9zZXR0ZXItPm1hcmsoKTsKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX3NldHRl
cik7CiB9CiAKIEpTVmFsdWUgR2V0dGVyU2V0dGVyOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmgKaW5kZXggZTZiNzRhMS4uNjdjMTQ3MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRl
clNldHRlci5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zMywyMCArMzMsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gZm9yIGEgcHJvcGVydHku
CiAgICAgY2xhc3MgR2V0dGVyU2V0dGVyIDogcHVibGljIEpTQ2VsbCB7CiAgICAgcHVibGljOgot
ICAgICAgICBHZXR0ZXJTZXR0ZXIoKQotICAgICAgICAgICAgOiBKU0NlbGwoMCkKKyAgICAgICAg
R2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgICAgIDogSlNDZWxsKGV4ZWMt
Pmdsb2JhbERhdGEoKS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAs
IG1fZ2V0dGVyKDApCiAgICAgICAgICAgICAsIG1fc2V0dGVyKDApCiAgICAgICAgIHsKICAgICAg
ICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAKICAgICAgICAgSlNPYmplY3QqIGdldHRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9CiAgICAgICAgIHZvaWQgc2V0R2V0dGVyKEpTT2Jq
ZWN0KiBnZXR0ZXIpIHsgbV9nZXR0ZXIgPSBnZXR0ZXI7IH0KICAgICAgICAgSlNPYmplY3QqIHNl
dHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGVyOyB9CiAgICAgICAgIHZvaWQgc2V0U2V0dGVy
KEpTT2JqZWN0KiBzZXR0ZXIpIHsgbV9zZXR0ZXIgPSBzZXR0ZXI7IH0KLQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3Rv
dHlwZSwgVHlwZUluZm8oR2V0dGVyU2V0dGVyVHlwZSkpOworICAgICAgICB9CiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBib29sIGlzR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcCBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcAppbmRleCBiMGQ0YzI1
Li4zMDc0Zjk1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxG
dW5jdGlvbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rp
b24uY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2Ft
ZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykg
MjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMzksMTEgKzM5LDEwIEBAIEdsb2JhbEV2YWxGdW5j
dGlvbjo6R2xvYmFsRXZhbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IHN0CiAgICAgQVNTRVJUX0FSRyhjYWNoZWRHbG9iYWxPYmplY3QsIGNhY2hlZEdsb2Jh
bE9iamVjdCk7CiB9CiAKLXZvaWQgR2xvYmFsRXZhbEZ1bmN0aW9uOjptYXJrKCkKK3ZvaWQgR2xv
YmFsRXZhbEZ1bmN0aW9uOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0g
ICAgUHJvdG90eXBlRnVuY3Rpb246Om1hcmsoKTsKLSAgICBpZiAoIW1fY2FjaGVkR2xvYmFsT2Jq
ZWN0LT5tYXJrZWQoKSkKLSAgICAgICAgbV9jYWNoZWRHbG9iYWxPYmplY3QtPm1hcmsoKTsKKyAg
ICBQcm90b3R5cGVGdW5jdGlvbjo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisgICAgbWFya1N0
YWNrLmFwcGVuZChtX2NhY2hlZEdsb2JhbE9iamVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24u
aCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmgKaW5kZXggNDli
MTg0Ny4uY2RiYTRhMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxF
dmFsRnVuY3Rpb24uaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxGdW5j
dGlvbi5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3
YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNo
CiAgKgpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGNhY2hlZEdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkR2xvYmFs
T2JqZWN0OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBtX2NhY2hlZEdsb2JhbE9iamVjdDsKICAgICB9OwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCmluZGV4IDNiZWYyNjMuLjg3YWRiY2QgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDkgKzQ5LDkgQEAgSlNBY3Rp
dmF0aW9uOjp+SlNBY3RpdmF0aW9uKCkKICAgICBkZWxldGUgZCgpOwogfQogCi12b2lkIEpTQWN0
aXZhdGlvbjo6bWFyaygpCit2b2lkIEpTQWN0aXZhdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYgbWFya1N0YWNrKQogewotICAgIEJhc2U6Om1hcmsoKTsKKyAgICBCYXNlOjptYXJrQ2hpbGRy
ZW4obWFya1N0YWNrKTsKIAogICAgIFJlZ2lzdGVyKiByZWdpc3RlckFycmF5ID0gZCgpLT5yZWdp
c3RlckFycmF5LmdldCgpOwogICAgIGlmICghcmVnaXN0ZXJBcnJheSkKQEAgLTU5LDI1ICs1OSwx
MyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6bWFyaygpCiAKICAgICBzaXplX3QgbnVtUGFyYW1ldGVy
c01pbnVzVGhpcyA9IGQoKS0+ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlY29kZSgpLm1fbnVt
UGFyYW1ldGVycyAtIDE7CiAKLSAgICBzaXplX3QgaSA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0g
bnVtUGFyYW1ldGVyc01pbnVzVGhpczsgCi0gICAgZm9yICggOyBpIDwgY291bnQ7ICsraSkgewot
ICAgICAgICBSZWdpc3RlciYgciA9IHJlZ2lzdGVyQXJyYXlbaV07Ci0gICAgICAgIGlmICghci5t
YXJrZWQoKSkKLSAgICAgICAgICAgIHIubWFyaygpOwotICAgIH0KKyAgICBzaXplX3QgY291bnQg
PSBudW1QYXJhbWV0ZXJzTWludXNUaGlzOworICAgIG1hcmtTdGFjay5hcHBlbmRWYWx1ZXMocmVn
aXN0ZXJBcnJheSwgY291bnQpOwogCiAgICAgc2l6ZV90IG51bVZhcnMgPSBkKCktPmZ1bmN0aW9u
Qm9keS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKS5tX251bVZhcnM7CiAKICAgICAvLyBTa2lwIHRoZSBj
YWxsIGZyYW1lLCB3aGljaCBzaXRzIGJldHdlZW4gdGhlIHBhcmFtZXRlcnMgYW5kIHZhcnMuCi0g
ICAgaSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgY291bnQgKz0g
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtVmFyczsKLQotICAgIGZvciAo
IDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgUmVnaXN0ZXImIHIgPSByZWdpc3RlckFycmF5
W2ldOwotICAgICAgICBpZiAoci5qc1ZhbHVlKCkgJiYgIXIubWFya2VkKCkpCi0gICAgICAgICAg
ICByLm1hcmsoKTsKLSAgICB9CisgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhyZWdpc3RlckFy
cmF5ICsgY291bnQgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIG51bVZhcnMs
IE1heUNvbnRhaW5OdWxsVmFsdWVzKTsKIH0KIAogYm9vbCBKU0FjdGl2YXRpb246OmdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgK
aW5kZXggYzE4M2RhYy4uNmEwODQzOSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlv
bi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0FjdGl2YXRpb24o
Q2FsbEZyYW1lKiwgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPik7CiAgICAgICAgIHZpcnR1
YWwgfkpTQWN0aXZhdGlvbigpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAKICAgICAgICAgdmly
dHVhbCBib29sIGlzRHluYW1pY1Njb3BlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCmluZGV4IDcwOGVmOTkuLjdkN2Q0YzQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBA
IC02MDEsMjYgKzYwMSwxOSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQogICAgIHB1dFNsb3dDYXNlKGV4ZWMsIG1fc3RvcmFnZS0+bV9sZW5ndGgr
KywgdmFsdWUpOwogfQogCi12b2lkIEpTQXJyYXk6Om1hcmsoKQordm9pZCBKU0FycmF5OjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgSlNPYmplY3Q6Om1hcmsoKTsK
KyAgICBKU09iamVjdDo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAKICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBzdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIGlmICh2YWx1
ZSAmJiAhdmFsdWUubWFya2VkKCkpCi0gICAgICAgICAgICB2YWx1ZS5tYXJrKCk7Ci0gICAgfQor
ICAgIG1hcmtTdGFjay5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+bV92ZWN0b3IsIHVzZWRWZWN0b3JM
ZW5ndGgsIE1heUNvbnRhaW5OdWxsVmFsdWVzKTsKIAogICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAg
ICAgICBpZiAoIXZhbHVlLm1hcmtlZCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLm1hcmsoKTsK
LSAgICAgICAgfQorICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtYXJrU3RhY2su
YXBwZW5kKGl0LT5zZWNvbmQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApp
bmRleCBlYTQ5MGQ4Li40OWRmNmM0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC04OCw3ICs4OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0
eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNr
Jik7CiAKICAgICAgICAgdm9pZCogbGF6eUNyZWF0aW9uRGF0YSgpOwogICAgICAgICB2b2lkIHNl
dExhenlDcmVhdGlvbkRhdGEodm9pZCopOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKaW5kZXggMDI0
MzcxYy4uNzVjY2Y3ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC04NSw3ICs4NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBFeGVjU3RhdGUqKTsKICAgICAgICAgdm9pZCog
b3BlcmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7CiAgICAgICAgIHZvaWQqIG9wZXJh
dG9yIG5ldyhzaXplX3QsIHZvaWQqIHBsYWNlbWVudE5ld0Rlc3RpbmF0aW9uKSB7IHJldHVybiBw
bGFjZW1lbnROZXdEZXN0aW5hdGlvbjsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwor
CisgICAgICAgIHZvaWQgbWFya0NlbGxEaXJlY3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1h
cmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKIAog
ICAgICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9u
IGluY2x1ZGVkLgpAQCAtMTUzLDkgKzE1NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
cmV0dXJuIEhlYXA6OmlzQ2VsbE1hcmtlZCh0aGlzKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9p
ZCBKU0NlbGw6Om1hcmsoKQorICAgIGlubGluZSB2b2lkIEpTQ2VsbDo6bWFya0NlbGxEaXJlY3Qo
KQorICAgIHsKKyAgICAgICAgSGVhcDo6bWFya0NlbGwodGhpcyk7CisgICAgfQorCisgICAgaW5s
aW5lIHZvaWQgSlNDZWxsOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJikKICAgICB7Ci0gICAgICAg
IHJldHVybiBIZWFwOjptYXJrQ2VsbCh0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1hcmtlZCgpKTsK
ICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCogSlNDZWxsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNp
emUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTIyNCw5ICsyMzEsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9p
ZCBKU1ZhbHVlOjptYXJrKCkKKyAgICBpbmxpbmUgdm9pZCBKU1ZhbHVlOjptYXJrRGlyZWN0KCkK
ICAgICB7Ci0gICAgICAgIGFzQ2VsbCgpLT5tYXJrKCk7IC8vIGNhbGxlcnMgc2hvdWxkIGNoZWNr
ICFtYXJrZWQoKSBiZWZvcmUgY2FsbGluZyBtYXJrKCksIHNvIHRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIHdpdGggY2VsbHMKKyAgICAgICAgQVNTRVJUKCFtYXJrZWQoKSk7CisgICAgICAgIGFz
Q2VsbCgpLT5tYXJrQ2VsbERpcmVjdCgpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIEpTVmFs
dWU6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtYXJrZWQoKSk7CisgICAgICAgIGFzQ2VsbCgpLT5tYXJrQ2hpbGRyZW4obWFya1N0YWNr
KTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjptYXJrZWQoKSBjb25zdApAQCAt
MzM5LDYgKzM1MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBhc0Nl
bGwoKS0+Z2V0SlNOdW1iZXIoKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9Cisg
ICAgCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aGFzQ2hpbGRyZW4oKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkg
Pj0gQ29tcG91bmRUeXBlOworICAgIH0KKyAgICAKIAogICAgIGlubGluZSBKU09iamVjdCogSlNW
YWx1ZTo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKQEAgLTM1MCw2ICsz
NzAsMzkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2Vs
bCgpLT50b1RoaXNPYmplY3QoZXhlYykgOiB0b1RoaXNPYmplY3RTbG93Q2FzZShleGVjKTsKICAg
ICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNDZWxsKiBj
ZWxsKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNlbGwpOworICAgICAgICBpZiAoY2VsbC0+bWFy
a2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNlbGwtPm1hcmtDZWxsRGlyZWN0
KCk7CisgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPj0g
Q29tcG91bmRUeXBlKQorICAgICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKGNlbGwpOworICAgIH0K
KworICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6ZHJhaW4oKSB7CisgICAgICAgIHdoaWxlICgh
bV9tYXJrU2V0cy5pc0VtcHR5KCkgfHwgIW1fdmFsdWVzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgd2hpbGUgKCghbV9tYXJrU2V0cy5pc0VtcHR5KCkpICYmIG1fdmFsdWVzLnNpemUoKSA8IDUw
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgTWFya1NldCYgY3VycmVudCA9IG1fbWFya1NldHMu
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIEpTVmFsdWUqIHB0ciA9IGN1cnJlbnQubV92
YWx1ZXM7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSogZW5kID0gY3VycmVudC5tX2VuZDsKKyAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudC5tX3Byb3BlcnRpZXMgPT0gTm9OdWxsVmFsdWVzKSB7
CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwdHIgIT0gZW5kKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKCpwdHIrKyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gKnB0cisrKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoIW1fdmFsdWVzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY3VycmVudCA9IG1fdmFsdWVzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudC0+bWFya2VkKCkpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnQtPm1hcmtDaGlsZHJlbigqdGhpcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTQ2VsbF9o
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCA3ZmVkYWQ3Li44NGM2MjYz
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKQEAgLTEsNyArMSw3IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1
d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBA
IC04MywxMiArODMsMTIgQEAgSlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24oKQogICAgICAgICBzY29w
ZUNoYWluKCkuflNjb3BlQ2hhaW4oKTsgLy8gRklYTUU6IERvbid0IHdlIG5lZWQgdG8gZG8gdGhp
cyBpbiB0aGUgaW50ZXJwcmV0ZXIgdG9vPwogfQogCi12b2lkIEpTRnVuY3Rpb246Om1hcmsoKQor
dm9pZCBKU0Z1bmN0aW9uOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0g
ICAgQmFzZTo6bWFyaygpOwotICAgIG1fYm9keS0+bWFyaygpOworICAgIEJhc2U6Om1hcmtDaGls
ZHJlbihtYXJrU3RhY2spOworICAgIG1fYm9keS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwog
ICAgIGlmICghaXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgc2NvcGVDaGFpbigpLm1hcmsoKTsK
KyAgICAgICAgc2NvcGVDaGFpbigpLm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIH0KIAogQ2Fs
bFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmggYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCAxOWIxMjYxLi5jYWIxZTViIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaApAQCAtNjgsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBzZXRCb2R5KFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSkg
eyBtX2JvZHkgPSBib2R5OyB9CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkoKSBjb25z
dCB7IHJldHVybiBtX2JvZHkuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAg
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKaW5kZXggMTU2ZDEwMi4uMGY5MGU4ZSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAj
aW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNBcnJheS5oIgpAQCAtNDEsNiArNDIsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RhdGljU2Nv
cGVPYmplY3QuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJMZXhlci5oIgpAQCAt
MTE4LDYgKzEyMCw4IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKGJvb2wgaXNTaGFyZWQs
IGNvbnN0IFZQdHJTZXQmIHZwdHJTZXQpCiAgICAgLCBzdHJpbmdTdHJ1Y3R1cmUoSlNTdHJpbmc6
OmNyZWF0ZVN0cnVjdHVyZShqc051bGwoKSkpCiAgICAgLCBub3RBbk9iamVjdEVycm9yU3R1YlN0
cnVjdHVyZShKU05vdEFuT2JqZWN0RXJyb3JTdHViOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkp
KQogICAgICwgbm90QW5PYmplY3RTdHJ1Y3R1cmUoSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKGpzTnVsbCgpKSkKKyAgICAsIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlKEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZShqc051bGwoKSkpCisgICAgLCBnZXR0
ZXJTZXR0ZXJTdHJ1Y3R1cmUoR2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkp
KQogI2lmIFVTRShKU1ZBTFVFMzIpCiAgICAgLCBudW1iZXJTdHJ1Y3R1cmUoSlNOdW1iZXJDZWxs
OjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAppbmRleCA3NDM0ZDk5Li4yOWJhNDlhIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5j
bHVkZSAiVGltZW91dENoZWNrZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtOTcs
NiArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gc3Ry
aW5nU3RydWN0dXJlOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBub3RBbk9iamVjdEVycm9y
U3R1YlN0cnVjdHVyZTsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1
Y3R1cmU7CisgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3Ry
dWN0dXJlOworICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7
CiAjaWYgVVNFKEpTVkFMVUUzMikKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbnVtYmVyU3Ry
dWN0dXJlOwogI2VuZGlmCkBAIC0xNDMsNiArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFNjb3BlTm9kZSogc2NvcGVOb2RlQmVpbmdSZXBhcnNlZDsKICAgICAgICAgU3RyaW5naWZp
ZXIqIGZpcnN0U3RyaW5naWZpZXJUb01hcms7CiAKKyAgICAgICAgTWFya1N0YWNrIG1hcmtTdGFj
azsKICAgICBwcml2YXRlOgogICAgICAgICBKU0dsb2JhbERhdGEoYm9vbCBpc1NoYXJlZCwgY29u
c3QgVlB0clNldCYpOwogICAgICAgICBzdGF0aWMgSlNHbG9iYWxEYXRhKiYgc2hhcmVkSW5zdGFu
Y2VJbnRlcm5hbCgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApp
bmRleCBjNTZiODRiLi45OWZhMThjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtODAsMTYgKzgwLDE2IEBAIHN0YXRpYyBjb25zdCBpbnQgaW5pdGlhbFRp
Y2tDb3VudFRocmVzaG9sZCA9IDI1NTsKIC8vIFByZWZlcnJlZCBudW1iZXIgb2YgbWlsbGlzZWNv
bmRzIGJldHdlZW4gZWFjaCB0aW1lb3V0IGNoZWNrCiBzdGF0aWMgY29uc3QgaW50IHByZWZlcnJl
ZFNjcmlwdENoZWNrVGltZUludGVydmFsID0gMTAwMDsKIAotc3RhdGljIGlubGluZSB2b2lkIG1h
cmtJZk5lZWRlZChKU1ZhbHVlIHYpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKEpT
VmFsdWUgdiwgTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgaWYgKHYgJiYgIXYubWFya2Vk
KCkpCi0gICAgICAgIHYubWFyaygpOworICAgIGlmICh2KQorICAgICAgICBtYXJrU3RhY2suYXBw
ZW5kKHYpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKGNvbnN0IFJlZlB0
cjxTdHJ1Y3R1cmU+JiBzKQorc3RhdGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChjb25zdCBS
ZWZQdHI8U3RydWN0dXJlPiYgcywgTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgaWYgKHMp
Ci0gICAgICAgIHMtPm1hcmsoKTsKKyAgICAgICAgcy0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2sp
OwogfQogCiBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKQEAgLTM1Nyw0MyArMzU3
LDQzIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWUgcHJvdG90
eXBlKQogICAgICAgICBvbGRMYXN0SW5Qcm90b3R5cGVDaGFpbi0+c2V0UHJvdG90eXBlKG9iamVj
dFByb3RvdHlwZSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6Om1hcmsoKQordm9pZCBKU0ds
b2JhbE9iamVjdDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEpT
VmFyaWFibGVPYmplY3Q6Om1hcmsoKTsKKyAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hpbGRy
ZW4obWFya1N0YWNrKTsKICAgICAKICAgICBIYXNoU2V0PFByb2dyYW1Db2RlQmxvY2sqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY29kZUJsb2NrcygpLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxQ
cm9ncmFtQ29kZUJsb2NrKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29kZUJsb2NrcygpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPm1hcmsoKTsKKyAgICAgICAgKCpp
dCktPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIAogICAgIFJlZ2lzdGVyRmlsZSYgcmVnaXN0
ZXJGaWxlID0gZ2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCk7CiAgICAg
aWYgKHJlZ2lzdGVyRmlsZS5nbG9iYWxPYmplY3QoKSA9PSB0aGlzKQotICAgICAgICByZWdpc3Rl
ckZpbGUubWFya0dsb2JhbHMoJmdsb2JhbERhdGEoKS0+aGVhcCk7Ci0KLSAgICBtYXJrSWZOZWVk
ZWQoZCgpLT5yZWdFeHBDb25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+ZXJyb3JD
b25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+ZXZhbEVycm9yQ29uc3RydWN0b3Ip
OwotICAgIG1hcmtJZk5lZWRlZChkKCktPnJhbmdlRXJyb3JDb25zdHJ1Y3Rvcik7Ci0gICAgbWFy
a0lmTmVlZGVkKGQoKS0+cmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lmTmVl
ZGVkKGQoKS0+c3ludGF4RXJyb3JDb25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+
dHlwZUVycm9yQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPlVSSUVycm9yQ29u
c3RydWN0b3IpOwotCi0gICAgbWFya0lmTmVlZGVkKGQoKS0+ZXZhbEZ1bmN0aW9uKTsKLSAgICBt
YXJrSWZOZWVkZWQoZCgpLT5jYWxsRnVuY3Rpb24pOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmFw
cGx5RnVuY3Rpb24pOwotCi0gICAgbWFya0lmTmVlZGVkKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsK
LSAgICBtYXJrSWZOZWVkZWQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAgbWFya0lmTmVl
ZGVkKGQoKS0+YXJyYXlQcm90b3R5cGUpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmJvb2xlYW5Q
cm90b3R5cGUpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPnN0cmluZ1Byb3RvdHlwZSk7Ci0gICAg
bWFya0lmTmVlZGVkKGQoKS0+bnVtYmVyUHJvdG90eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgp
LT5kYXRlUHJvdG90eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5yZWdFeHBQcm90b3R5cGUp
OwotCi0gICAgbWFya0lmTmVlZGVkKGQoKS0+bWV0aG9kQ2FsbER1bW15KTsKLQotICAgIG1hcmtJ
Zk5lZWRlZChkKCktPmVycm9yU3RydWN0dXJlKTsKKyAgICAgICAgcmVnaXN0ZXJGaWxlLm1hcmtH
bG9iYWxzKCZnbG9iYWxEYXRhKCktPmhlYXAsIG1hcmtTdGFjayk7CisKKyAgICBtYXJrSWZOZWVk
ZWQoZCgpLT5yZWdFeHBDb25zdHJ1Y3RvciwgbWFya1N0YWNrKTsKKyAgICBtYXJrSWZOZWVkZWQo
ZCgpLT5lcnJvckNvbnN0cnVjdG9yLCBtYXJrU3RhY2spOworICAgIG1hcmtJZk5lZWRlZChkKCkt
PmV2YWxFcnJvckNvbnN0cnVjdG9yLCBtYXJrU3RhY2spOworICAgIG1hcmtJZk5lZWRlZChkKCkt
PnJhbmdlRXJyb3JDb25zdHJ1Y3RvciwgbWFya1N0YWNrKTsKKyAgICBtYXJrSWZOZWVkZWQoZCgp
LT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLCBtYXJrU3RhY2spOworICAgIG1hcmtJZk5lZWRl
ZChkKCktPnN5bnRheEVycm9yQ29uc3RydWN0b3IsIG1hcmtTdGFjayk7CisgICAgbWFya0lmTmVl
ZGVkKGQoKS0+dHlwZUVycm9yQ29uc3RydWN0b3IsIG1hcmtTdGFjayk7CisgICAgbWFya0lmTmVl
ZGVkKGQoKS0+VVJJRXJyb3JDb25zdHJ1Y3RvciwgbWFya1N0YWNrKTsKKworICAgIG1hcmtJZk5l
ZWRlZChkKCktPmV2YWxGdW5jdGlvbiwgbWFya1N0YWNrKTsKKyAgICBtYXJrSWZOZWVkZWQoZCgp
LT5jYWxsRnVuY3Rpb24sIG1hcmtTdGFjayk7CisgICAgbWFya0lmTmVlZGVkKGQoKS0+YXBwbHlG
dW5jdGlvbiwgbWFya1N0YWNrKTsKKworICAgIG1hcmtJZk5lZWRlZChkKCktPm9iamVjdFByb3Rv
dHlwZSwgbWFya1N0YWNrKTsKKyAgICBtYXJrSWZOZWVkZWQoZCgpLT5mdW5jdGlvblByb3RvdHlw
ZSwgbWFya1N0YWNrKTsKKyAgICBtYXJrSWZOZWVkZWQoZCgpLT5hcnJheVByb3RvdHlwZSwgbWFy
a1N0YWNrKTsKKyAgICBtYXJrSWZOZWVkZWQoZCgpLT5ib29sZWFuUHJvdG90eXBlLCBtYXJrU3Rh
Y2spOworICAgIG1hcmtJZk5lZWRlZChkKCktPnN0cmluZ1Byb3RvdHlwZSwgbWFya1N0YWNrKTsK
KyAgICBtYXJrSWZOZWVkZWQoZCgpLT5udW1iZXJQcm90b3R5cGUsIG1hcmtTdGFjayk7CisgICAg
bWFya0lmTmVlZGVkKGQoKS0+ZGF0ZVByb3RvdHlwZSwgbWFya1N0YWNrKTsKKyAgICBtYXJrSWZO
ZWVkZWQoZCgpLT5yZWdFeHBQcm90b3R5cGUsIG1hcmtTdGFjayk7CisKKyAgICBtYXJrSWZOZWVk
ZWQoZCgpLT5tZXRob2RDYWxsRHVtbXksIG1hcmtTdGFjayk7CisKKyAgICBtYXJrSWZOZWVkZWQo
ZCgpLT5lcnJvclN0cnVjdHVyZSwgbWFya1N0YWNrKTsKIAogICAgIC8vIE5vIG5lZWQgdG8gbWFy
ayB0aGUgb3RoZXIgc3RydWN0dXJlcywgYmVjYXVzZSB0aGVpciBwcm90b3R5cGVzIGFyZSBhbGwK
ICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHJlZmVyZW5jZWQgZWxzZXdoZXJlLgpAQCAtNDAzLDEx
ICs0MDMsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjptYXJrKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgc2l6ZV90IHNpemUgPSBkKCktPnJlZ2lzdGVyQXJyYXlTaXplOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFJlZ2lzdGVyJiByID0gcmVnaXN0
ZXJBcnJheVtpXTsKLSAgICAgICAgaWYgKCFyLm1hcmtlZCgpKQotICAgICAgICAgICAgci5tYXJr
KCk7Ci0gICAgfQorICAgIG1hcmtTdGFjay5hcHBlbmRWYWx1ZXMocmVpbnRlcnByZXRfY2FzdDxK
U1ZhbHVlKj4ocmVnaXN0ZXJBcnJheSksIHNpemUpOwogfQogCiBFeGVjU3RhdGUqIEpTR2xvYmFs
T2JqZWN0OjpnbG9iYWxFeGVjKCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAppbmRleCA3NTVhN2UxLi5jZGE0OWJkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTY2LDcgKzE2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCB+SlNHbG9iYWxPYmplY3QoKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYp
OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
aGFzT3duUHJvcGVydHlGb3JXcml0ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAppbmRleCA5MzdkYzJiLi5hNTQy
YTlmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDExICs3
NCwxMCBAQCBKU09iamVjdCogSlNOb3RBbk9iamVjdDo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogfQogCiAvLyBNYXJraW5nCi12b2lkIEpTTm90QW5PYmplY3Q6Om1hcmsoKQordm9p
ZCBKU05vdEFuT2JqZWN0OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0g
ICAgSlNDZWxsOjptYXJrKCk7Ci0gICAgaWYgKCFtX2V4Y2VwdGlvbi0+bWFya2VkKCkpCi0gICAg
ICAgIG1fZXhjZXB0aW9uLT5tYXJrKCk7CisgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJr
U3RhY2spOworICAgIG1hcmtTdGFjay5hcHBlbmQobV9leGNlcHRpb24pOwogfQogCiAvLyBKU09i
amVjdCBtZXRob2RzCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5P
YmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCmluZGV4IGE4
ZTM2YmQuLmI2NWZmNWYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RB
bk9iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
NSw3ICs3NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0
b09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgICAgICAvLyBNYXJraW5nCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4o
TWFya1N0YWNrJik7CiAKICAgICAgICAgLy8gSlNPYmplY3QgbWV0aG9kcwogICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAppbmRleCAyZjAyYjFkLi40ZWM0NzA5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIH5TdHJpbmdpZmllcigp
OwogICAgIEpTVmFsdWUgc3RyaW5naWZ5KEpTVmFsdWUpOwogCi0gICAgdm9pZCBtYXJrKCk7Cisg
ICAgdm9pZCBtYXJrQWdncmVnYXRlKE1hcmtTdGFjayYpOwogCiBwcml2YXRlOgogICAgIHR5cGVk
ZWYgVVN0cmluZyBTdHJpbmdCdWlsZGVyOwpAQCAtMjIxLDE1ICsyMjEsMTIgQEAgU3RyaW5naWZp
ZXI6On5TdHJpbmdpZmllcigpCiAgICAgbV9leGVjLT5nbG9iYWxEYXRhKCkuZmlyc3RTdHJpbmdp
ZmllclRvTWFyayA9IG1fbmV4dFN0cmluZ2lmaWVyVG9NYXJrOwogfQogCi12b2lkIFN0cmluZ2lm
aWVyOjptYXJrKCkKK3ZvaWQgU3RyaW5naWZpZXI6Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBt
YXJrU3RhY2spCiB7CiAgICAgZm9yIChTdHJpbmdpZmllciogc3RyaW5naWZpZXIgPSB0aGlzOyBz
dHJpbmdpZmllcjsgc3RyaW5naWZpZXIgPSBzdHJpbmdpZmllci0+bV9uZXh0U3RyaW5naWZpZXJU
b01hcmspIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBtX2hvbGRlclN0YWNrLnNpemUoKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBtX2hvbGRlclN0YWNrW2ldLm9iamVjdCgpOwotICAgICAgICAgICAg
aWYgKCFvYmplY3QtPm1hcmtlZCgpKQotICAgICAgICAgICAgICAgIG9iamVjdC0+bWFyaygpOwot
ICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX2hvbGRlclN0YWNrW2ldLm9iamVjdCgpKTsKICAg
ICB9CiB9CiAKQEAgLTU4Myw5ICs1ODAsOSBAQCBib29sIEpTT05PYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TgogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTT05PYmplY3Q6Om1hcmtTdHJpbmdpZmllcnMoU3Ry
aW5naWZpZXIqIHN0cmluZ2lmaWVyKQordm9pZCBKU09OT2JqZWN0OjptYXJrU3RyaW5naWZpZXJz
KFN0cmluZ2lmaWVyKiBzdHJpbmdpZmllciwgTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAg
c3RyaW5naWZpZXItPm1hcmsoKTsKKyAgICBzdHJpbmdpZmllci0+bWFya0FnZ3JlZ2F0ZShtYXJr
U3RhY2spOwogfQogCiBjbGFzcyBXYWxrZXIgewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09OT2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
aAppbmRleCA4ZDUzNjRhLi5lYzk2NzBhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
aApAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIG1hcmtTdHJpbmdpZmllcnMoU3RyaW5naWZpZXIq
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgbWFya1N0cmluZ2lmaWVycyhTdHJpbmdpZmllciosIE1h
cmtTdGFjayYpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IDQxNWMyNWQuLjQxOWRmZTkgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
NjIsMjEgKzYyLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9D
RUxMKEpTT2JqZWN0KTsKIAotdm9pZCBKU09iamVjdDo6bWFyaygpCit2b2lkIEpTT2JqZWN0Ojpt
YXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgSlNPQkpFQ1RfTUFSS19C
RUdJTigpOwogCi0gICAgSlNDZWxsOjptYXJrKCk7Ci0gICAgbV9zdHJ1Y3R1cmUtPm1hcmsoKTsK
KyAgICBKU0NlbGw6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworICAgIG1fc3RydWN0dXJlLT5t
YXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiAKICAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9
IHByb3BlcnR5U3RvcmFnZSgpOwotCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gbV9zdHJ1Y3R1
cmUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
b3JhZ2VTaXplOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gSlNWYWx1ZTo6ZGVjb2RlKHN0
b3JhZ2VbaV0pOwotICAgICAgICBpZiAoIXYubWFya2VkKCkpCi0gICAgICAgICAgICB2Lm1hcmso
KTsKLSAgICB9CisgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PEpT
VmFsdWUqPihzdG9yYWdlKSwgc3RvcmFnZVNpemUpOwogCiAgICAgSlNPQkpFQ1RfTUFSS19FTkQo
KTsKIH0KQEAgLTMxMCw3ICszMDUsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTTwogICAgIH0K
IAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0
dGVyID0gbmV3IChleGVjKSBHZXR0ZXJTZXR0ZXI7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJT
ZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKICAgICBwdXREaXJlY3RJbnRl
cm5hbChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBHZXR0
ZXIsIHRydWUsIHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1
Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKQEAgLTMzNyw3ICszMzIsNyBAQCB2
b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTTwogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
OwotICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gbmV3IChleGVjKSBHZXR0ZXJTZXR0
ZXI7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNl
dHRlcihleGVjKTsKICAgICBwdXREaXJlY3RJbnRlcm5hbChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBTZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAgICAgLy8g
cHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3Bl
cnR5LiBGb3IKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCAxYTE5YTIzLi5kZWNkNWU5
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgSlNPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAgIC8vIFRoZSBpbmxpbmUgdmlydHVh
bCBkZXN0cnVjdG9yIGNhbm5vdCBiZSB0aGUgZmlyc3QgdmlydHVhbCBmdW5jdGlvbiBkZWNsYXJl
ZAogICAgICAgICAvLyBpbiB0aGUgY2xhc3MgYXMgaXQgcmVzdWx0cyBpbiB0aGUgdnRhYmxlIGJl
aW5nIGdlbmVyYXRlZCBhcyBhIHdlYWsgc3ltYm9sCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAppbmRleCA4YzdiNTNkLi5kYzAzMDRmIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTczLDExICs3MywxMSBAQCBKU09iamVjdCogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6dG9P
YmplY3QoRXhlY1N0YXRlKikgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yOjptYXJrKCkKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bWFy
a0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEpTQ2VsbDo6bWFyaygpOwot
ICAgIGlmIChtX29iamVjdCAmJiAhbV9vYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBtX29iamVj
dC0+bWFyaygpOworICAgIEpTQ2VsbDo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisgICAgaWYg
KG1fb2JqZWN0KQorICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1fb2JqZWN0KTsKIH0KIAogdm9p
ZCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjppbnZhbGlkYXRlKCkKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKaW5kZXggOTgxN2MwNy4uNDUzNDUy
OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUxLDE0ICs1MSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBVU3Ry
aW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
aygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAg
ICAgICAgIEpTVmFsdWUgbmV4dChFeGVjU3RhdGUqKTsKICAgICAgICAgdm9pZCBpbnZhbGlkYXRl
KCk7Ci0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUp
KTsKKyAgICAgICAgfQogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IoKTsKLSAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihKU09iamVjdCosIFBhc3NSZWZQ
dHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpOworICAgICAg
ICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEV4ZWNTdGF0ZSopOworICAgICAgICBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgUGFzc1JlZlB0cjxQcm9wZXJ0eU5h
bWVBcnJheURhdGE+IHByb3BlcnR5TmFtZUFycmF5RGF0YSk7CiAKICAgICAgICAgSlNPYmplY3Qq
IG1fb2JqZWN0OwogICAgICAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBtX2RhdGE7
CkBAIC02NiwxNiArNzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5RGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9lbmQ7CiAgICAgfTsKIAotaW5saW5lIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoKQotICAgIDogSlNDZWxs
KDApCitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cihFeGVjU3RhdGUqIGV4ZWMpCisgICAgOiBKU0NlbGwoZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3Bl
cnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9vYmplY3QoMCkKICAgICAs
IG1fcG9zaXRpb24oMCkKICAgICAsIG1fZW5kKDApCiB7CiB9CiAKLWlubGluZSBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEpTT2JqZWN0KiBvYmplY3QsIFBh
c3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpCi0g
ICAgOiBKU0NlbGwoMCkKK2lubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUGFzc1JlZlB0
cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IHByb3BlcnR5TmFtZUFycmF5RGF0YSkKKyAgICA6IEpT
Q2VsbChleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUuZ2V0
KCkpCiAgICAgLCBtX29iamVjdChvYmplY3QpCiAgICAgLCBtX2RhdGEocHJvcGVydHlOYW1lQXJy
YXlEYXRhKQogICAgICwgbV9wb3NpdGlvbihtX2RhdGEtPmJlZ2luKCkpCkBAIC04NiwxMiArOTAs
MTIgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0
b3IoSlNPYmplY3QqIG9iamVjdCwgUGFzc1JlZlAKIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHYpCiB7CiAgICAgaWYgKHYuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKKyAgICAgICAgcmV0dXJuIG5ldyAo
ZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjKTsKIAogICAgIEpTT2JqZWN0KiBvID0g
di50b09iamVjdChleGVjKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4
ZWMpOwogICAgIG8tPmdldFByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcyk7Ci0gICAg
cmV0dXJuIG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihvLCBwcm9wZXJ0eU5hbWVz
LnJlbGVhc2VEYXRhKCkpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IoZXhlYywgbywgcHJvcGVydHlOYW1lcy5yZWxlYXNlRGF0YSgpKTsKIH0KIAogaW5saW5l
IEpTVmFsdWUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bmV4dChFeGVjU3RhdGUqIGV4ZWMpCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAppbmRleCA4
NTkwN2M4Li5hODc3ZWM2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMxLDEyICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJU
X0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1N0YXRpY1Njb3BlT2JqZWN0KTsKIAotdm9pZCBKU1N0YXRp
Y1Njb3BlT2JqZWN0OjptYXJrKCkKK3ZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6bWFya0NoaWxk
cmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEpTVmFyaWFibGVPYmplY3Q6Om1hcmso
KTsKLSAgICAKLSAgICBpZiAoIWQoKS0+cmVnaXN0ZXJTdG9yZS5tYXJrZWQoKSkKLSAgICAgICAg
ZCgpLT5yZWdpc3RlclN0b3JlLm1hcmsoKTsKKyAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hp
bGRyZW4obWFya1N0YWNrKTsKKyAgICBtYXJrU3RhY2suYXBwZW5kKGQoKS0+cmVnaXN0ZXJTdG9y
ZS5qc1ZhbHVlKCkpOwogfQogCiBKU09iamVjdCogSlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlz
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0YXRpY1Njb3BlT2JqZWN0LmgKaW5kZXggMmNhZjU0MC4uNWViMGU0YiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgbmFt
ZXNwYWNlIEpTQ3sKICAgICAgICAgICAgIHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LnVzdHJpbmco
KS5yZXAoKSwgU3ltYm9sVGFibGVFbnRyeSgtMSwgYXR0cmlidXRlcykpOwogICAgICAgICB9CiAg
ICAgICAgIHZpcnR1YWwgfkpTU3RhdGljU2NvcGVPYmplY3QoKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIG1hcmsoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2sm
KTsKICAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFs
IEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGUuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKaW5kZXggNjhmMjg5MC4uM2Q1
NTA4ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCkBAIC0zMyw4ICszMyw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBOdW1iZXJUeXBlICAgICAgICA9IDMsCiAgICAgICAgIE51bGxUeXBl
ICAgICAgICAgID0gNCwKICAgICAgICAgU3RyaW5nVHlwZSAgICAgICAgPSA1LAotICAgICAgICBP
YmplY3RUeXBlICAgICAgICA9IDYsCi0gICAgICAgIEdldHRlclNldHRlclR5cGUgID0gNworICAg
ICAgICBDb21wb3VuZFR5cGUgICAgICA9IDYsCisgICAgICAgIE9iamVjdFR5cGUgICAgICAgID0g
NywKKyAgICAgICAgR2V0dGVyU2V0dGVyVHlwZSAgPSA4CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaCBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCmluZGV4IGNiZjhmYzUuLjQwOGMxODcgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTSW1tZWRpYXRl
OwogICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIEpTU3RyaW5nOworICAgIGNsYXNzIE1h
cmtTdGFjazsKICAgICBjbGFzcyBQcm9wZXJ0eVNsb3Q7CiAgICAgY2xhc3MgUHV0UHJvcGVydHlT
bG90OwogICAgIGNsYXNzIFVTdHJpbmc7CkBAIC0xNzIsOCArMTczLDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBmbG9hdCB0b0Zsb2F0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvTnVtYmVyKGV4ZWMpKTsgfQogCiAgICAgICAgIC8vIEdh
cmJhZ2UgY29sbGVjdGlvbi4KLSAgICAgICAgdm9pZCBtYXJrKCk7CisgICAgICAgIHZvaWQgbWFy
a0NoaWxkcmVuKE1hcmtTdGFjayYpOworICAgICAgICBib29sIGhhc0NoaWxkcmVuKCkgY29uc3Q7
CiAgICAgICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgbWFya0RpcmVjdCgp
OwogCiAgICAgICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBvcGVy
YXRpb24gaW5jbHVkZWQuCiAgICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
V3JhcHBlck9iamVjdC5jcHAKaW5kZXggZmI1NzAxOC4uMmMzOWY1YyAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IE1ha3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUs
IEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMSArMjYsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNXcmFwcGVyT2JqZWN0KTsKIAot
dm9pZCBKU1dyYXBwZXJPYmplY3Q6Om1hcmsoKSAKK3ZvaWQgSlNXcmFwcGVyT2JqZWN0OjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spIAogewotICAgIEpTT2JqZWN0OjptYXJrKCk7
Ci0gICAgaWYgKG1faW50ZXJuYWxWYWx1ZSAmJiAhbV9pbnRlcm5hbFZhbHVlLm1hcmtlZCgpKQot
ICAgICAgICBtX2ludGVybmFsVmFsdWUubWFyaygpOworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRy
ZW4obWFya1N0YWNrKTsKKyAgICBpZiAobV9pbnRlcm5hbFZhbHVlKQorICAgICAgICBtYXJrU3Rh
Y2suYXBwZW5kKG1faW50ZXJuYWxWYWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaCBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKaW5kZXggMmEyZTNjNi4uMGIyYzY4
MCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCkBAIC0zNiw3ICsz
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGludGVybmFsVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2ludGVybmFsVmFsdWU7IH0KICAgICAgICAgdm9pZCBzZXRJbnRlcm5h
bFZhbHVlKEpTVmFsdWUpOwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNWYWx1ZSBtX2ludGVybmFsVmFsdWU7CmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcmtTdGFjay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uODBkYmIxNwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFy
a1N0YWNrLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3Rh
Y2suaCIKKworbmFtZXNwYWNlIEpTQworeworCitzaXplX3QgTWFya1N0YWNrOjpzX3BhZ2VTaXpl
ID0gMDsKKwordm9pZCBNYXJrU3RhY2s6OmNvbXBhY3QoKQoreworICAgIEFTU0VSVChzX3BhZ2VT
aXplKTsKKyAgICBtX3ZhbHVlcy5zaHJpbmtBbGxvY2F0aW9uKHNfcGFnZVNpemUpOworICAgIG1f
bWFya1NldHMuc2hyaW5rQWxsb2NhdGlvbihzX3BhZ2VTaXplKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2suaCBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFya1N0YWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYz
NTM1NQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNr
LmgKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBNYXJrU3RhY2tfaAorI2RlZmluZSBNYXJrU3RhY2tfaAorCisj
aW5jbHVkZSAiSlNWYWx1ZS5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBKU0MgeworICAgIGNsYXNzIFJlZ2lzdGVyOworICAgIAorICAgIGVudW0gTWFya1Nl
dFByb3BlcnRpZXMgeyBNYXlDb250YWluTnVsbFZhbHVlcywgTm9OdWxsVmFsdWVzIH07CisgICAg
CisgICAgY2xhc3MgTWFya1N0YWNrIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgTWFya1N0YWNrKCkKKyAgICAgICAgICAgIDogbV9tYXJrU2V0cygpCisgICAgICAgICAgICAs
IG1fdmFsdWVzKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGFwcGVuZChKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQodmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVlLm1hcmtlZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHZhbHVlLm1hcmtEaXJlY3QoKTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5oYXNDaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzLmFwcGVu
ZCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYXBwZW5kKEpTQ2VsbCogY2VsbCk7CisgICAgICAgIAorICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kVmFsdWVzKFJlZ2lzdGVyKiB2YWx1ZXMsIHNpemVfdCBjb3VudCwgTWFya1Nl
dFByb3BlcnRpZXMgcHJvcGVydGllcyA9IE5vTnVsbFZhbHVlcykKKyAgICAgICAgeworICAgICAg
ICAgICAgYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHZhbHVlcyksIGNv
dW50LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmRWYWx1ZXMoSlNWYWx1ZSogdmFsdWVzLCBzaXplX3QgY291bnQsIE1hcmtTZXRQcm9w
ZXJ0aWVzIHByb3BlcnRpZXMgPSBOb051bGxWYWx1ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb3VudCkKKyAgICAgICAgICAgICAgICBtX21hcmtTZXRzLmFwcGVuZChNYXJrU2V0KHZh
bHVlcywgdmFsdWVzICsgY291bnQsIHByb3BlcnRpZXMpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlubGluZSB2b2lkIGRyYWluKCk7CisgICAgICAgIHZvaWQgY29tcGFjdCgpOworCisgICAgICAg
IH5NYXJrU3RhY2soKSB7CisgICAgICAgICAgICBBU1NFUlQobV9tYXJrU2V0cy5pc0VtcHR5KCkp
OworICAgICAgICAgICAgQVNTRVJUKG1fdmFsdWVzLmlzRW1wdHkoKSk7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHN0cnVjdCBNYXJrU2V0IHsKKyAgICAgICAgICAgIE1hcmtT
ZXQoSlNWYWx1ZSogdmFsdWVzLCBKU1ZhbHVlKiBlbmQsIE1hcmtTZXRQcm9wZXJ0aWVzIHByb3Bl
cnRpZXMpCisgICAgICAgICAgICAgICAgOiBtX3ZhbHVlcyh2YWx1ZXMpCisgICAgICAgICAgICAg
ICAgLCBtX2VuZChlbmQpCisgICAgICAgICAgICAgICAgLCBtX3Byb3BlcnRpZXMocHJvcGVydGll
cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEpTVmFsdWUqIG1f
dmFsdWVzOworICAgICAgICAgICAgSlNWYWx1ZSogbV9lbmQ7CisgICAgICAgICAgICBNYXJrU2V0
UHJvcGVydGllcyBtX3Byb3BlcnRpZXM7CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIHZv
aWQqIHN0YWNrQWxsb2NhdGUoc2l6ZV90IHNpemUpOworICAgICAgICBzdGF0aWMgdm9pZCBzdGFj
a1JlbGVhc2Uodm9pZCogYWRkciwgc2l6ZV90IHNpemUpOworCisgICAgICAgIHN0YXRpYyBzaXpl
X3QgcGFnZVNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXNfcGFnZVNpemUpCisg
ICAgICAgICAgICAgICAgc19wYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgICAgICAgICBy
ZXR1cm4gc19wYWdlU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgTWFya1N0YWNrQXJyYXkKKyAgICAgICAgeworICAgICAgICAgICAgTWFya1N0
YWNrQXJyYXkoKQorICAgICAgICAgICAgICAgIDogbV90b3AoMCkKKyAgICAgICAgICAgICAgICAs
IG1fYWxsb2NhdGVkKE1hcmtTdGFjazo6cGFnZVNpemUoKSkKKyAgICAgICAgICAgICAgICAsIG1f
Y2FwYWNpdHkobV9hbGxvY2F0ZWQgLyBzaXplb2YoVCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhY2tBbGxvY2F0ZShtX2Fs
bG9jYXRlZCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB+TWFya1N0YWNrQXJyYXko
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YWNrUmVsZWFzZShtX2RhdGEsIG1f
YWxsb2NhdGVkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBleHBhbmQoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNpemVfdCBvbGRBbGxvY2F0aW9uID0gbV9h
bGxvY2F0ZWQ7CisgICAgICAgICAgICAgICAgbV9hbGxvY2F0ZWQgKj0gMjsKKyAgICAgICAgICAg
ICAgICBtX2NhcGFjaXR5ID0gbV9hbGxvY2F0ZWQgLyBzaXplb2YoVCk7CisgICAgICAgICAgICAg
ICAgdm9pZCogbmV3RGF0YSA9IHN0YWNrQWxsb2NhdGUobV9hbGxvY2F0ZWQpOworICAgICAgICAg
ICAgICAgIG1lbWNweShuZXdEYXRhLCBtX2RhdGEsIG9sZEFsbG9jYXRpb24pOworICAgICAgICAg
ICAgICAgIHN0YWNrUmVsZWFzZShtX2RhdGEsIG9sZEFsbG9jYXRpb24pOworICAgICAgICAgICAg
ICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG5ld0RhdGEpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpbmxpbmUgdm9pZCBhcHBlbmQoY29uc3QgVCYgdikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobV90b3AgPT0gbV9jYXBhY2l0eSkKKyAgICAgICAg
ICAgICAgICAgICAgZXhwYW5kKCk7CisgICAgICAgICAgICAgICAgbV9kYXRhW21fdG9wKytdID0g
djsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5saW5lIFQgcmVtb3ZlTGFzdCgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fdG9wKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9kYXRhWy0tbV90b3BdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpbmxpbmUgYm9vbCBpc0VtcHR5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV90b3AgPT0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5saW5lIHNp
emVfdCBzaXplKCkgeyByZXR1cm4gbV90b3A7IH0KKworICAgICAgICAgICAgaW5saW5lIHZvaWQg
c2hyaW5rQWxsb2NhdGlvbihzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc2l6ZSA8PSBtX2FsbG9jYXRlZCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KDAgPT0gKHNpemUgJSBNYXJrU3RhY2s6OnBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2l6ZSA9PSBtX2FsbG9jYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIHN0YWNrUmVsZWFzZShyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2RhdGEp
ICsgc2l6ZSwgbV9hbGxvY2F0ZWQgLSBzaXplKTsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRl
ZCA9IHNpemU7CisgICAgICAgICAgICAgICAgbV9jYXBhY2l0eSA9IG1fYWxsb2NhdGVkIC8gc2l6
ZW9mKFQpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBz
aXplX3QgbV90b3A7CisgICAgICAgICAgICBzaXplX3QgbV9hbGxvY2F0ZWQ7CisgICAgICAgICAg
ICBzaXplX3QgbV9jYXBhY2l0eTsKKyAgICAgICAgICAgIFQqIG1fZGF0YTsKKyAgICAgICAgfTsK
KworICAgICAgICBNYXJrU3RhY2tBcnJheTxNYXJrU2V0PiBtX21hcmtTZXRzOworICAgICAgICBN
YXJrU3RhY2tBcnJheTxKU0NlbGwqPiBtX3ZhbHVlczsKKyAgICAgICAgc3RhdGljIHNpemVfdCBz
X3BhZ2VTaXplOworICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXJrU3RhY2tQb3NpeC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
cmtTdGFja1Bvc2l4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk1
ODg5Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2tQ
b3NpeC5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKworI2luY2x1ZGUgIk1hcmtT
dGFjay5oIgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKK25hbWVzcGFjZSBKU0Mgewordm9pZCog
TWFya1N0YWNrOjpzdGFja0FsbG9jYXRlKHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBtbWFw
KDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04s
IC0xLCAwKTsKK30KK3ZvaWQgTWFya1N0YWNrOjpzdGFja1JlbGVhc2Uodm9pZCogYWRkciwgc2l6
ZV90IHNpemUpCit7CisgICAgbXVubWFwKGFkZHIsIHNpemUpOworfQorCit9CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFja1dpbi5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcmtTdGFja1dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjk4MzU5MwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFya1N0YWNrV2luLmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworCisjaW5jbHVk
ZSAiTWFya1N0YWNrLmgiCisKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisKK25hbWVzcGFjZSBKU0Mg
ewordm9pZCogTWFya1N0YWNrOjpzdGFja0FsbG9jYXRlKHNpemVfdCBzaXplKQoreworICAgIHJl
dHVybiBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdF
X1JFQURXUklURSk7Cit9Cit2b2lkIE1hcmtTdGFjazo6c3RhY2tSZWxlYXNlKHZvaWQqIGFkZHIs
IHNpemVfdCBzaXplKQoreworICAgIFZpcnR1YWxGcmVlKGFkZHIsIHNpemUsIE1FTV9SRUxFQVNF
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWlu
LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAppbmRleCAxN2FmZjI0Li4y
M2IzNjFlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwNCw3ICsyMDQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX25vZGUtPmdsb2JhbE9iamVjdCgpOyB9CiAK
LSAgICAgICAgdm9pZCBtYXJrKCkgY29uc3Q7CisgICAgICAgIHZvaWQgbWFya0FnZ3JlZ2F0ZShN
YXJrU3RhY2smKSBjb25zdDsKIAogICAgICAgICAvLyBDYXV0aW9uOiB0aGlzIHNob3VsZCBvbmx5
IGJlIHVzZWQgaWYgdGhlIGNvZGVibG9jayB0aGlzIGlzIGJlaW5nIHVzZWQKICAgICAgICAgLy8g
d2l0aCBuZWVkcyBhIGZ1bGwgc2NvcGUgY2hhaW4sIG90aGVyd2lzZSB0aGlzIHJldHVybnMgdGhl
IGRlcHRoIG9mCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW5N
YXJrLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW5NYXJrLmgKaW5kZXggYjgw
YjhlZi4uOTg0ZDEwMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNo
YWluTWFyay5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbk1hcmsuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDEzICsyNSwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAg
IGlubGluZSB2b2lkIFNjb3BlQ2hhaW46Om1hcmsoKSBjb25zdAorICAgIGlubGluZSB2b2lkIFNj
b3BlQ2hhaW46Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBtYXJrU3RhY2spIGNvbnN0CiAgICAg
ewotICAgICAgICBmb3IgKFNjb3BlQ2hhaW5Ob2RlKiBuID0gbV9ub2RlOyBuOyBuID0gbi0+bmV4
dCkgewotICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBuLT5vYmplY3Q7Ci0gICAgICAgICAgICBp
ZiAoIW8tPm1hcmtlZCgpKQotICAgICAgICAgICAgICAgIG8tPm1hcmsoKTsKLSAgICAgICAgfQor
ICAgICAgICBmb3IgKFNjb3BlQ2hhaW5Ob2RlKiBuID0gbV9ub2RlOyBuOyBuID0gbi0+bmV4dCkK
KyAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobi0+b2JqZWN0KTsKICAgICB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0
cmluZ3MuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCmluZGV4
IDlkMWYwMWEuLjJmOTJjYzEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21h
bGxTdHJpbmdzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHAKQEAgLTg1LDEwICs4NSwxMCBAQCBTbWFsbFN0cmluZ3M6On5TbWFsbFN0cmluZ3MoKQogdm9p
ZCBTbWFsbFN0cmluZ3M6Om1hcmsoKQogewogICAgIGlmIChtX2VtcHR5U3RyaW5nICYmICFtX2Vt
cHR5U3RyaW5nLT5tYXJrZWQoKSkKLSAgICAgICAgbV9lbXB0eVN0cmluZy0+bWFyaygpOworICAg
ICAgICBtX2VtcHR5U3RyaW5nLT5tYXJrQ2VsbERpcmVjdCgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzVG9TdG9yZTsgKytpKSB7CiAgICAgICAgIGlmIChtX3Np
bmdsZUNoYXJhY3RlclN0cmluZ3NbaV0gJiYgIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXS0+
bWFya2VkKCkpCi0gICAgICAgICAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0tPm1hcmso
KTsKKyAgICAgICAgICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXS0+bWFya0NlbGxEaXJl
Y3QoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IDg2Njk5
OWQuLmYzYTBjN2MgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRl
ICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlN
YXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIgpAQCAtNzIsMTAgKzczLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgflN0cnVjdHVyZSgpOwogCi0gICAgICAgIHZvaWQgbWFyaygpCisgICAg
ICAgIHZvaWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFtX3Byb3RvdHlwZS5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICBt
X3Byb3RvdHlwZS5tYXJrKCk7CisgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1fcHJvdG90
eXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGgg
Y2F1dGlvbi4gIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34332</attachid>
            <date>2009-08-07 14:55:30 -0700</date>
            <delta_ts>2009-08-07 17:24:10 -0700</delta_ts>
            <desc>JavaScriptGlue</desc>
            <filename>gc-jsg.patch</filename>
            <type>text/plain</type>
            <size>3432</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRHbHVlL0No
YW5nZUxvZwppbmRleCA3YzEyNTUwLi43OTk3MzgxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMDktMDgtMDcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFjayBvdmVyZmxvdyBj
cmFzaCBpbiBKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdG9yIG1hcmsgcGFzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMTYKKworICAgICAgICBN
YWtlIEpTR2x1ZSBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgaXRlcmF0aXZlIG1hcmsgbG9naWMuCisK
KyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5jcHA6CisgICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6
SlNPYmplY3RNYXJrKToKKyAgICAgICAgICBVbmZvcnR1bmF0ZWx5IEpTR2x1ZSBleHBvc2VzIHJl
Y3Vyc2l2ZSBtYXJraW5nIHNvIHdlIGNhbiBvbmx5IGZsYXR0ZW4KKyAgICAgICAgICB0aGUgcmVj
dXJzaW9uLiAgV2UganVzdCBjcmVhdGUgYSBsb2NhbCBtYXJrIHN0YWNrIGlmIG5lY2Vzc2FyeSBh
bmQgbWFyaworICAgICAgICAgIHRoZSBnaXZlbiBvYmplY3QgaXRlcmF0aXZlbHkgZnJvbSB0aGlz
IHBvaW50LgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9iamVj
dEltcDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmg6CisKIDIwMDkt
MDctMjcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvSlNWYWx1
ZVdyYXBwZXIuY3BwIGIvSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCmluZGV4IGJm
MmFhOWMuLmQ2NDlkNGEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVy
LmNwcAorKysgYi9KYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA5IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xOTQsOCArMTk0LDExIEBAIENGVHlwZVJlZiBKU1ZhbHVlV3JhcHBlcjo6SlNP
YmplY3RDb3B5Q0ZWYWx1ZSh2b2lkICpkYXRhKQogdm9pZCBKU1ZhbHVlV3JhcHBlcjo6SlNPYmpl
Y3RNYXJrKHZvaWQgKmRhdGEpCiB7CiAgICAgSlNWYWx1ZVdyYXBwZXIqIHB0ciA9IChKU1ZhbHVl
V3JhcHBlciopZGF0YTsKLSAgICBpZiAocHRyKQorICAgIGlmIChwdHIgJiYgIXB0ci0+ZlZhbHVl
LmdldCgpLm1hcmtlZCgpKQogICAgIHsKLSAgICAgICAgcHRyLT5mVmFsdWUuZ2V0KCkubWFyaygp
OworICAgICAgICAvLyBUaGlzIHJlc3VsdHMgaW4gcmVjdXJzaXZlIG1hcmtpbmcgYnV0IHdpbGwg
YmUgb3RoZXJ3aXNlIHNhZmUgYW5kIGNvcnJlY3QuCisgICAgICAgIE1hcmtTdGFjayBtYXJrU3Rh
Y2s7CisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocHRyLT5mVmFsdWUuZ2V0KCkpOworICAgICAg
ICBtYXJrU3RhY2suZHJhaW4oKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0R2x1
ZS9Vc2VyT2JqZWN0SW1wLmNwcCBiL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCmlu
ZGV4IGNmN2MyNzguLjRlNjRhYjEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRHbHVlL1VzZXJPYmpl
Y3RJbXAuY3BwCisrKyBiL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MDksOSArNDA5LDkgQEAgVVN0cmluZyBVc2VyT2JqZWN0SW1wOjp0b1N0cmluZyhFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBVc2VyT2Jq
ZWN0SW1wOjptYXJrKCkKK3ZvaWQgVXNlck9iamVjdEltcDo6bWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYgbWFya1N0YWNrKQogewotICAgIEpTT2JqZWN0OjptYXJrKCk7CisgICAgSlNPYmplY3Q6Om1h
cmtDaGlsZHJlbihtYXJrU3RhY2spOwogICAgIGlmIChmSlNVc2VyT2JqZWN0KQogICAgICAgICBm
SlNVc2VyT2JqZWN0LT5NYXJrKCk7CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0R2x1ZS9Vc2Vy
T2JqZWN0SW1wLmggYi9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgKaW5kZXggZWM0ODc1
OC4uOTc5MTY1OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCisr
KyBiL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNyArNTUs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVj
KSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtD
aGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAgIEpTVXNlck9iamVjdCAqR2V0SlNVc2VyT2JqZWN0
KCkgY29uc3Q7CiAK
</data>
<flag name="review"
          id="18509"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34333</attachid>
            <date>2009-08-07 14:56:03 -0700</date>
            <delta_ts>2009-08-07 15:34:51 -0700</delta_ts>
            <desc>WebCore portion</desc>
            <filename>gc-webcore.patch</filename>
            <type>text/plain</type>
            <size>52169</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODM5YWZlMy4uNDY0YTY5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OCBAQAorMjAwOS0wOC0wNyAgT2xpdmVyIEh1bnQg
IDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFN0YWNrIG92ZXJmbG93IGNyYXNoIGluIEphdmFTY3JpcHQgZ2FyYmFnZSBj
b2xsZWN0b3IgbWFyayBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjIxNgorCisgICAgICAgIE1ha2UgV2ViQ29yZSB1c2UgdGhlIG5ldyBpdGVy
YXRpdmUgbWFya2luZyBsb2dpYy4KKworICAgICAgICBUZXN0czogZmFzdC9qcy9uZXN0ZWQtb2Jq
ZWN0LWdjLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBYnN0cmFjdFdvcmtlcjo6bWFya0NoaWxkcmVu
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01BcHBsaWNhdGlvbkNhY2hlOjptYXJrQ2hpbGRyZW4p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYXJrRE9NTm9kZXNGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrQWN0
aXZlT2JqZWN0c0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6bWFya0RPTU9iamVjdFdy
YXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAo
V2ViQ29yZTo6RE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXI6Om1hcmtDaGlsZHJlbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01HbG9iYWxPYmplY3Q6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6bWFya0NoaWxkcmVu
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGVk
aWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGlj
YXRlZFdvcmtlckNvbnRleHQ6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3VtZW50OjptYXJr
Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6Om1hcmtKU0Z1bmN0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2Fn
ZUNoYW5uZWw6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0OjptYXJrQ2hp
bGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTmF2aWdhdG9yOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6Om1h
cmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6bWFya0FnZ3Jl
Z2F0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTTm9kZUZpbHRlcjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVJdGVy
YXRvcjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVk
T2JqZWN0V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlcjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRp
bmVkT2JqZWN0V3JhcHBlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudElu
c3RhbmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNl
OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2hhcmVkV29ya2VyOjptYXJrQ2hpbGRyZW4p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1N0eWxlU2hlZXQ6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdh
bGtlcjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6bWFya0NoaWxkcmVuKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6bWFya0NoaWxk
cmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6Om1hcmtDaGls
ZHJlbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06Cisg
ICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXI6Om1hcmtKU0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtJZk5vdE51bGwp
OgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmls
dGVyOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUZpbHRlckNvbmRpdGlvbjo6bWFya0FnZ3JlZ2F0ZSk6
CisgICAgICAgICogZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjptYXJrRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisKIDIwMDktMDgtMDYgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBCcmluZyBhIGxpdHRsZSBvcmRlciB0byBv
dXIgb3RoZXJ3aXNlIG91dCBvZiBjb250cm9sIGxpdmVzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKaW5kZXggMzE0NjQxMy4uMDAzZjU0NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00Mywx
OCArNDQsMTggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEpTQWJzdHJhY3RXb3JrZXI6Om1hcmsoKQordm9pZCBKU0Fic3RyYWN0V29ya2VyOjpt
YXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgQmFzZTo6bWFyaygpOwor
ICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwogCi0gICAgbWFya0lmTm90TnVsbCht
X2ltcGwtPm9uZXJyb3IoKSk7CisgICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+
b25lcnJvcigpKTsKIAogICAgIHR5cGVkZWYgQWJzdHJhY3RXb3JrZXI6OkV2ZW50TGlzdGVuZXJz
TWFwIEV2ZW50TGlzdGVuZXJzTWFwOwogICAgIHR5cGVkZWYgQWJzdHJhY3RXb3JrZXI6Okxpc3Rl
bmVyVmVjdG9yIExpc3RlbmVyVmVjdG9yOwogICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExp
c3RlbmVycyA9IG1faW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKICAgICBmb3IgKEV2ZW50TGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRl
ciAhPSBldmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7CiAgICAgICAgIGZvciAoTGlz
dGVuZXJWZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsg
dmVjSXRlciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikKLSAgICAgICAgICAg
ICgqdmVjSXRlciktPm1hcmtKU0Z1bmN0aW9uKCk7CisgICAgICAgICAgICAoKnZlY0l0ZXIpLT5t
YXJrSlNGdW5jdGlvbihtYXJrU3RhY2spOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCmluZGV4IGE3ZmFlNzgu
LjEwOTMwOGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlv
bkNhY2hlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRp
b25DYWNoZUN1c3RvbS5jcHAKQEAgLTQyLDI1ICs0MiwyNSBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpt
YXJrKCkKK3ZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNr
JiBtYXJrU3RhY2spCiB7Ci0gICAgQmFzZTo6bWFyaygpOworICAgIEJhc2U6Om1hcmtDaGlsZHJl
bihtYXJrU3RhY2spOwogCi0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9uY2hlY2tpbmcoKSk7
Ci0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9uZXJyb3IoKSk7Ci0gICAgbWFya0lmTm90TnVs
bChtX2ltcGwtPm9ubm91cGRhdGUoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9uZG93
bmxvYWRpbmcoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9ucHJvZ3Jlc3MoKSk7Ci0g
ICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9udXBkYXRlcmVhZHkoKSk7Ci0gICAgbWFya0lmTm90
TnVsbChtX2ltcGwtPm9uY2FjaGVkKCkpOwotICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbm9i
c29sZXRlKCkpOworICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9uY2hlY2tp
bmcoKSk7CisgICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25lcnJvcigpKTsK
KyAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbm5vdXBkYXRlKCkpOworICAg
IG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9uZG93bmxvYWRpbmcoKSk7CisgICAg
bWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25wcm9ncmVzcygpKTsKKyAgICBtYXJr
SWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbnVwZGF0ZXJlYWR5KCkpOworICAgIG1hcmtJ
Zk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9uY2FjaGVkKCkpOworICAgIG1hcmtJZk5vdE51
bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ub2Jzb2xldGUoKSk7CiAKICAgICB0eXBlZGVmIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFwOwogICAg
IHR5cGVkZWYgRE9NQXBwbGljYXRpb25DYWNoZTo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0
b3I7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVu
dExpc3RlbmVycygpOwogICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0
ZXIgPSBldmVudExpc3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVu
ZCgpOyArK21hcEl0ZXIpIHsKICAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3Ig
dmVjSXRlciA9IG1hcEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNl
Y29uZC5lbmQoKTsgKyt2ZWNJdGVyKQotICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVu
Y3Rpb24oKTsKKyAgICAgICAgICAgICgqdmVjSXRlciktPm1hcmtKU0Z1bmN0aW9uKG1hcmtTdGFj
ayk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKaW5kZXggOTEw
ZGExMi4uNzliNzNlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApAQCAtMjk4
LDE4ICsyOTgsMTggQEAgc3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZVRocm91Z2hET00o
SlNOb2RlKiBqc05vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIG1hcmtET01Ob2Rl
c0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2MpCit2b2lkIG1hcmtET01Ob2Rlc0ZvckRvY3VtZW50
KE1hcmtTdGFjayYgbWFya1N0YWNrLCBEb2N1bWVudCogZG9jKQogewogICAgIEpTV3JhcHBlckNh
Y2hlJiBub2RlRGljdCA9IGRvYy0+d3JhcHBlckNhY2hlKCk7CiAgICAgSlNXcmFwcGVyQ2FjaGU6
Oml0ZXJhdG9yIG5vZGVFbmQgPSBub2RlRGljdC5lbmQoKTsKICAgICBmb3IgKEpTV3JhcHBlckNh
Y2hlOjppdGVyYXRvciBub2RlSXQgPSBub2RlRGljdC5iZWdpbigpOyBub2RlSXQgIT0gbm9kZUVu
ZDsgKytub2RlSXQpIHsKICAgICAgICAgSlNOb2RlKiBqc05vZGUgPSBub2RlSXQtPnNlY29uZDsK
LSAgICAgICAgaWYgKCFqc05vZGUtPm1hcmtlZCgpICYmIGlzT2JzZXJ2YWJsZVRocm91Z2hET00o
anNOb2RlKSkKLSAgICAgICAgICAgIGpzTm9kZS0+bWFyaygpOworICAgICAgICBpZiAoaXNPYnNl
cnZhYmxlVGhyb3VnaERPTShqc05vZGUpKQorICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChq
c05vZGUpOwogICAgIH0KIH0KIAotdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KQordm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoTWFya1N0YWNr
JiBtYXJrU3RhY2ssIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKIHsKICAgICAvLyBJZiBhbiBlbGVtZW50IGhh
cyBwZW5kaW5nIGFjdGl2aXR5IHRoYXQgbWF5IHJlc3VsdCBpbiBldmVudCBsaXN0ZW5lcnMgYmVp
bmcgY2FsbGVkCiAgICAgLy8gKGUuZy4gYW4gWE1MSHR0cFJlcXVlc3QpLCB3ZSBuZWVkIHRvIGtl
ZXAgSlMgd3JhcHBlcnMgYWxpdmUuCkBAIC0zMjIsOCArMzIyLDggQEAgdm9pZCBtYXJrQWN0aXZl
T2JqZWN0c0ZvckNvbnRleHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTY3JpcHRFeGVjdXRp
b25Db250ZXgKICAgICAgICAgICAgIC8vIEdlbmVyYWxseSwgYW4gYWN0aXZlIG9iamVjdCB3aXRo
IHBlbmRpbmcgYWN0aXZpdHkgbXVzdCBoYXZlIGEgd3JhcHBlciB0byBtYXJrIGl0cyBsaXN0ZW5l
cnMuCiAgICAgICAgICAgICAvLyBIb3dldmVyLCBzb21lIEFjdGl2ZURPTU9iamVjdHMgZG9uJ3Qg
aGF2ZSBKUyB3cmFwcGVycyAodGltZXJzIGNyZWF0ZWQgYnkgc2V0VGltZW91dCBpcyBvbmUgZXhh
bXBsZSkuCiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyaGFwcyBuZWVkIHRvIG1ha2Ugc3VyZSBl
dmVuIHRpbWVycyBoYXZlIGEgbWFya2FibGUgJ3dyYXBwZXInLgotICAgICAgICAgICAgaWYgKHdy
YXBwZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgpKQotICAgICAgICAgICAgICAgIHdyYXBwZXItPm1h
cmsoKTsKKyAgICAgICAgICAgIGlmICh3cmFwcGVyKQorICAgICAgICAgICAgICAgIG1hcmtTdGFj
ay5hcHBlbmQod3JhcHBlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzMyw4ICszMzMsOCBA
QCB2b2lkIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleAogICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBwb3J0
IGlzIHJlbW90ZWx5IGVudGFuZ2xlZCwgdGhlbiBhbHdheXMgbWFyayBpdCBhcyBpbi11c2UgYmVj
YXVzZSB3ZSBjYW4ndCBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5IGFjcm9zcyB0aHJlYWRzLgogICAg
ICAgICBpZiAoISgqaXRlciktPmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkgfHwgKCppdGVyKS0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpIHsKICAgICAgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdl
dENhY2hlZERPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgKml0ZXIpOwotICAgICAgICAgICAg
aWYgKHdyYXBwZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgpKQotICAgICAgICAgICAgICAgIHdyYXBw
ZXItPm1hcmsoKTsKKyAgICAgICAgICAgIGlmICh3cmFwcGVyKQorICAgICAgICAgICAgICAgIG1h
cmtTdGFjay5hcHBlbmQod3JhcHBlcik7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNTEsMTQg
KzM1MSwxNCBAQCB2b2lkIHVwZGF0ZURPTU5vZGVEb2N1bWVudChOb2RlKiBub2RlLCBEb2N1bWVu
dCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bQogICAgIGFkZFdyYXBwZXIod3JhcHBl
cik7CiB9CiAKLXZvaWQgbWFya0RPTU9iamVjdFdyYXBwZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB2b2lkKiBvYmplY3QpCit2b2lkIG1hcmtET01PYmplY3RXcmFwcGVyKE1hcmtTdGFjayYg
bWFya1N0YWNrLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHZvaWQqIG9iamVjdCkKIHsKICAg
ICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIERPTU9iamVjdCogd3JhcHBlciA9
IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgb2JqZWN0KTsKLSAgICBpZiAo
IXdyYXBwZXIgfHwgd3JhcHBlci0+bWFya2VkKCkpCisgICAgaWYgKCF3cmFwcGVyKQogICAgICAg
ICByZXR1cm47Ci0gICAgd3JhcHBlci0+bWFyaygpOworICAgIG1hcmtTdGFjay5hcHBlbmQod3Jh
cHBlcik7CiB9CiAKIEpTVmFsdWUganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIHMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAppbmRleCAzOTc1OTQwLi42
NGNmYzNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtODUsMTEgKzg1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAg
ICAgICB2aXJ0dWFsIH5ET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlcigpIHt9CiAKLSAgICAgICAg
dm9pZCBtYXJrKCkKKyAgICAgICAgdm9pZCBtYXJrQ2hpbGRyZW4oSlNDOjpNYXJrU3RhY2smIG1h
cmtTdGFjaykKICAgICAgICAgewotICAgICAgICAgICAgRE9NT2JqZWN0OjptYXJrKCk7Ci0gICAg
ICAgICAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0LT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICBt
X2dsb2JhbE9iamVjdC0+bWFyaygpOworICAgICAgICAgICAgRE9NT2JqZWN0OjptYXJrQ2hpbGRy
ZW4obWFya1N0YWNrKTsKKyAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9nbG9iYWxPYmpl
Y3QpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpAQCAtMTM3LDkgKzEzNiw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICB2b2lkIGZvcmdldERPTU5vZGUoRG9jdW1lbnQqLCBOb2RlKik7
CiAgICAgdm9pZCBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50Kik7CiAgICAg
dm9pZCB1cGRhdGVET01Ob2RlRG9jdW1lbnQoTm9kZSosIERvY3VtZW50KiBvbGREb2N1bWVudCwg
RG9jdW1lbnQqIG5ld0RvY3VtZW50KTsKLSAgICB2b2lkIG1hcmtET01Ob2Rlc0ZvckRvY3VtZW50
KERvY3VtZW50Kik7Ci0gICAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoSlNDOjpK
U0dsb2JhbERhdGEmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgdm9pZCBtYXJrRE9N
T2JqZWN0V3JhcHBlcihKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb2JqZWN0
KTsKKyAgICB2b2lkIG1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KEpTQzo6TWFya1N0YWNrJiwgRG9j
dW1lbnQqKTsKKyAgICB2b2lkIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dChKU0M6Ok1hcmtT
dGFjayYsIEpTQzo6SlNHbG9iYWxEYXRhJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAg
IHZvaWQgbWFya0RPTU9iamVjdFdyYXBwZXIoSlNDOjpNYXJrU3RhY2smLCBKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb2JqZWN0KTsKIAogICAgIEpTQzo6U3RydWN0dXJlKiBn
ZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkNsYXNz
SW5mbyopOwogICAgIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBjb25zdCBKU0M6OkNsYXNzSW5m
byopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCBlMzYx
N2E0Li42OGExZGI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTgsMTkgKzU4LDE3IEBAIEpTRE9NR2xvYmFsT2JqZWN0Ojp+SlNET01HbG9iYWxPYmplY3Qo
KQogICAgICAgICBpdC0+c2Vjb25kLT5jbGVhckdsb2JhbE9iamVjdCgpOwogfQogCi12b2lkIEpT
RE9NR2xvYmFsT2JqZWN0OjptYXJrKCkKK3ZvaWQgSlNET01HbG9iYWxPYmplY3Q6Om1hcmtDaGls
ZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBCYXNlOjptYXJrKCk7CisgICAgQmFz
ZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAKICAgICBKU0RPTVN0cnVjdHVyZU1hcDo6aXRl
cmF0b3IgZW5kID0gc3RydWN0dXJlcygpLmVuZCgpOwogICAgIGZvciAoSlNET01TdHJ1Y3R1cmVN
YXA6Oml0ZXJhdG9yIGl0ID0gc3RydWN0dXJlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+bWFyaygpOworICAgICAgICBpdC0+c2Vjb25kLT5tYXJrQWdn
cmVnYXRlKG1hcmtTdGFjayk7CiAKICAgICBKU0RPTUNvbnN0cnVjdG9yTWFwOjppdGVyYXRvciBl
bmQyID0gY29uc3RydWN0b3JzKCkuZW5kKCk7Ci0gICAgZm9yIChKU0RPTUNvbnN0cnVjdG9yTWFw
OjppdGVyYXRvciBpdDIgPSBjb25zdHJ1Y3RvcnMoKS5iZWdpbigpOyBpdDIgIT0gZW5kMjsgKytp
dDIpIHsKLSAgICAgICAgaWYgKCFpdDItPnNlY29uZC0+bWFya2VkKCkpCi0gICAgICAgICAgICBp
dDItPnNlY29uZC0+bWFyaygpOwotICAgIH0KKyAgICBmb3IgKEpTRE9NQ29uc3RydWN0b3JNYXA6
Oml0ZXJhdG9yIGl0MiA9IGNvbnN0cnVjdG9ycygpLmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0
MikKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZChpdDItPnNlY29uZCk7CiB9CiAKIEpTRXZlbnRM
aXN0ZW5lciogSlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSB2
YWwpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKaW5kZXggYzliMDllZi4u
ODU1NjkxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaApAQCAtNzQs
NyArNzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudEV2
ZW50KEV2ZW50Kik7CiAgICAgICAgIEV2ZW50KiBjdXJyZW50RXZlbnQoKSBjb25zdDsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxk
cmVuKEpTQzo6TWFya1N0YWNrJik7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0cnVjdCBK
U0RPTUdsb2JhbE9iamVjdERhdGEgOiBwdWJsaWMgSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9i
YWxPYmplY3REYXRhIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
aW5kZXggMzNhYzdiYi4uOTc5ODk3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAKQEAgLTY4LDMyICs2OCwzMiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNET01XaW5kb3c6Om1hcmsoKQordm9pZCBKU0RP
TVdpbmRvdzo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEJhc2U6
Om1hcmsoKTsKKyAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIAotICAgIG1hcmtF
dmVudExpc3RlbmVycyhpbXBsKCktPmV2ZW50TGlzdGVuZXJzKCkpOworICAgIG1hcmtFdmVudExp
c3RlbmVycyhtYXJrU3RhY2ssIGltcGwoKS0+ZXZlbnRMaXN0ZW5lcnMoKSk7CiAKICAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSAqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpOwog
Ci0gICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbENv
bnNvbGUoKSk7Ci0gICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgaW1wbCgpLT5v
cHRpb25hbEhpc3RvcnkoKSk7Ci0gICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwg
aW1wbCgpLT5vcHRpb25hbExvY2F0aW9uYmFyKCkpOwotICAgIG1hcmtET01PYmplY3RXcmFwcGVy
KGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxNZW51YmFyKCkpOwotICAgIG1hcmtET01PYmpl
Y3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxOYXZpZ2F0b3IoKSk7Ci0gICAg
bWFya0RPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbFBlcnNvbmFs
YmFyKCkpOwotICAgIG1hcmtET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0
aW9uYWxTY3JlZW4oKSk7Ci0gICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgaW1w
bCgpLT5vcHRpb25hbFNjcm9sbGJhcnMoKSk7Ci0gICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xv
YmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbFNlbGVjdGlvbigpKTsKLSAgICBtYXJrRE9NT2JqZWN0
V3JhcHBlcihnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFsU3RhdHVzYmFyKCkpOwotICAgIG1h
cmtET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxUb29sYmFyKCkp
OwotICAgIG1hcmtET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxM
b2NhdGlvbigpKTsKKyAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERh
dGEsIGltcGwoKS0+b3B0aW9uYWxDb25zb2xlKCkpOworICAgIG1hcmtET01PYmplY3RXcmFwcGVy
KG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbEhpc3RvcnkoKSk7CisgICAg
bWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlv
bmFsTG9jYXRpb25iYXIoKSk7CisgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBn
bG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFsTWVudWJhcigpKTsKKyAgICBtYXJrRE9NT2JqZWN0
V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxOYXZpZ2F0b3Io
KSk7CisgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBpbXBs
KCktPm9wdGlvbmFsUGVyc29uYWxiYXIoKSk7CisgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFy
a1N0YWNrLCBnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFsU2NyZWVuKCkpOworICAgIG1hcmtE
T01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbFNj
cm9sbGJhcnMoKSk7CisgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9iYWxE
YXRhLCBpbXBsKCktPm9wdGlvbmFsU2VsZWN0aW9uKCkpOworICAgIG1hcmtET01PYmplY3RXcmFw
cGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbFN0YXR1c2JhcigpKTsK
KyAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERhdGEsIGltcGwoKS0+
b3B0aW9uYWxUb29sYmFyKCkpOworICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywg
Z2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbExvY2F0aW9uKCkpOwogI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKLSAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihnbG9iYWxEYXRhLCBpbXBsKCktPm9w
dGlvbmFsU2Vzc2lvblN0b3JhZ2UoKSk7Ci0gICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xvYmFs
RGF0YSwgaW1wbCgpLT5vcHRpb25hbExvY2FsU3RvcmFnZSgpKTsKKyAgICBtYXJrRE9NT2JqZWN0
V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxTZXNzaW9uU3Rv
cmFnZSgpKTsKKyAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERhdGEs
IGltcGwoKS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIG1hcmtET01PYmplY3RXcmFwcGVyKGdsb2JhbERh
dGEsIGltcGwoKS0+b3B0aW9uYWxBcHBsaWNhdGlvbkNhY2hlKCkpOworICAgIG1hcmtET01PYmpl
Y3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbEFwcGxpY2F0
aW9uQ2FjaGUoKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1NoZWxsLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dT
aGVsbC5jcHAKaW5kZXggMWJmNDc4Yi4uZWZmZmQ0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93U2hlbGwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03MSwxMSArNzEsMTEgQEAgdm9pZCBKU0RPTVdpbmRvd1NoZWxs
OjpzZXRXaW5kb3coUGFzc1JlZlB0cjxET01XaW5kb3c+IGRvbVdpbmRvdykKIC8vIEpTT2JqZWN0
IG1ldGhvZHMKIC8vIC0tLS0KIAotdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjptYXJrKCkKK3ZvaWQg
SlNET01XaW5kb3dTaGVsbDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewot
ICAgIEJhc2U6Om1hcmsoKTsKLSAgICBpZiAobV93aW5kb3cgJiYgIW1fd2luZG93LT5tYXJrZWQo
KSkKLSAgICAgICAgbV93aW5kb3ctPm1hcmsoKTsKKyAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFy
a1N0YWNrKTsKKyAgICBpZiAobV93aW5kb3cpCisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV93
aW5kb3cpOwogfQogCiBVU3RyaW5nIEpTRE9NV2luZG93U2hlbGw6OmNsYXNzTmFtZSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCmluZGV4IDZmMjE4OTIuLjA1MDYy
ODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCkBAIC02NCw3ICs2NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJl
bihKU0M6Ok1hcmtTdGFjayYpOwogICAgICAgICB2aXJ0dWFsIEpTQzo6VVN0cmluZyBjbGFzc05h
bWUoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
dXRQcm9wZXJ0eVNsb3QmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCBjNDVhNmEzLi42NTdmOWIzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3Rv
bS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnRleHRD
dXN0b20uY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC0zOCwxMSArMzksMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6bWFyaygpCit2
b2lkIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFy
a1N0YWNrKQogewotICAgIEJhc2U6Om1hcmsoKTsKKyAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFy
a1N0YWNrKTsKIAotICAgIG1hcmtJZk5vdE51bGwoaW1wbCgpLT5vbm1lc3NhZ2UoKSk7CisgICAg
bWFya0lmTm90TnVsbChtYXJrU3RhY2ssIGltcGwoKS0+b25tZXNzYWdlKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAppbmRleCA0OTNhYWVhLi4zOWExZmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVu
dEN1c3RvbS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTM5LDExICszOSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNEb2N1bWVudDo6bWFyaygpCit2b2lkIEpTRG9jdW1l
bnQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBKU05vZGU6Om1h
cmsoKTsKLSAgICBtYXJrRE9NTm9kZXNGb3JEb2N1bWVudChpbXBsKCkpOwotICAgIG1hcmtBY3Rp
dmVPYmplY3RzRm9yQ29udGV4dCgqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBpbXBs
KCkpOworICAgIEpTTm9kZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisgICAgbWFya0RPTU5v
ZGVzRm9yRG9jdW1lbnQobWFya1N0YWNrLCBpbXBsKCkpOworICAgIG1hcmtBY3RpdmVPYmplY3Rz
Rm9yQ29udGV4dChtYXJrU3RhY2ssICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGlt
cGwoKSk7CiB9CiAKIEpTVmFsdWUgSlNEb2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiBleGVj
KSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGE2NTlk
M2UuLjQyZTAyODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKQEAg
LTUxLDEyICs1MSwxMiBAQCBKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjpqc0Z1bmN0aW9uKCkg
Y29uc3QKICAgICByZXR1cm4gbV9qc0Z1bmN0aW9uOwogfQogCi12b2lkIEpTRXZlbnRMaXN0ZW5l
cjo6bWFya0pTRnVuY3Rpb24oKQordm9pZCBKU0V2ZW50TGlzdGVuZXI6Om1hcmtKU0Z1bmN0aW9u
KE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIGlmIChtX2pzRnVuY3Rpb24gJiYgIW1fanNG
dW5jdGlvbi0+bWFya2VkKCkpCi0gICAgICAgIG1fanNGdW5jdGlvbi0+bWFyaygpOwotICAgIGlm
IChtX2dsb2JhbE9iamVjdCAmJiAhbV9nbG9iYWxPYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBt
X2dsb2JhbE9iamVjdC0+bWFyaygpOworICAgIGlmIChtX2pzRnVuY3Rpb24pCisgICAgICAgIG1h
cmtTdGFjay5hcHBlbmQobV9qc0Z1bmN0aW9uKTsKKyAgICBpZiAobV9nbG9iYWxPYmplY3QpCisg
ICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9nbG9iYWxPYmplY3QpOwogfQogCiB2b2lkIEpTRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50LCBib29sIGlzV2luZG93RXZlbnQp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAppbmRleCAyNDk3NzUwLi43OTI5MTY5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKQEAgLTQzLDcgKzQzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGpzRnVu
Y3Rpb24oKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
SlNGdW5jdGlvbigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0pTRnVuY3Rpb24oSlNDOjpN
YXJrU3RhY2smKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiwgYm9v
bCBpc1dpbmRvd0V2ZW50KTsKICAgICAgICAgdmlydHVhbCBib29sIHJlcG9ydEVycm9yKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsKICAg
ICAgICAgdmlydHVhbCBib29sIHZpcnR1YWxpc0F0dHJpYnV0ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKaW5kZXggZDNiNTg3OC4u
NTc0ZTI4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVs
Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0
b20uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiwyMCArMzIsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIAotdm9pZCBKU01lc3NhZ2VDaGFubmVsOjptYXJrKCkKK3ZvaWQgSlNN
ZXNzYWdlQ2hhbm5lbDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAg
IEJhc2U6Om1hcmsoKTsKKyAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIAogICAg
IGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IG1faW1wbC0+cG9ydDEoKSkgewogICAgICAgICBET01P
YmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpIZWFwOjpoZWFwKHRo
aXMpLT5nbG9iYWxEYXRhKCksIHBvcnQpOwotICAgICAgICBpZiAod3JhcHBlciAmJiAhd3JhcHBl
ci0+bWFya2VkKCkpCi0gICAgICAgICAgICB3cmFwcGVyLT5tYXJrKCk7CisgICAgICAgIGlmICh3
cmFwcGVyKQorICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh3cmFwcGVyKTsKICAgICB9CiAK
ICAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSBtX2ltcGwtPnBvcnQyKCkpIHsKICAgICAgICAg
RE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVh
cCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBwb3J0KTsKLSAgICAgICAgaWYgKHdyYXBwZXIgJiYgIXdy
YXBwZXItPm1hcmtlZCgpKQotICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOworICAgICAgICBp
ZiAod3JhcHBlcikKKyAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQod3JhcHBlcik7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAppbmRl
eCA3MTQ3MmQ1Li5jMzMxNmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZVBvcnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5jcHAKQEAgLTM4LDE3ICszOCwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNNZXNzYWdlUG9ydDo6bWFyaygpCit2b2lkIEpT
TWVzc2FnZVBvcnQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBC
YXNlOjptYXJrKCk7CisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAKLSAgICBt
YXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdlKCkpOworICAgIG1hcmtJZk5vdE51bGwobWFy
a1N0YWNrLCBtX2ltcGwtPm9ubWVzc2FnZSgpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBsb2Nh
bGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFibGUu
IFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBieSBt
YXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KICAgICBpZiAoTWVzc2FnZVBvcnQqIGVudGFu
Z2xlZFBvcnQgPSBtX2ltcGwtPmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkpIHsKICAgICAgICAgRE9N
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0
aGlzKS0+Z2xvYmFsRGF0YSgpLCBlbnRhbmdsZWRQb3J0KTsKLSAgICAgICAgaWYgKHdyYXBwZXIg
JiYgIXdyYXBwZXItPm1hcmtlZCgpKQotICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOworICAg
ICAgICBpZiAod3JhcHBlcikKKyAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQod3JhcHBlcik7
CiAgICAgfQogCiAgICAgdHlwZWRlZiBNZXNzYWdlUG9ydDo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZl
bnRMaXN0ZW5lcnNNYXA7CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSlNNZXNzYWdlUG9ydDo6bWFy
aygpCiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVu
dExpc3RlbmVycygpOwogICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0
ZXIgPSBldmVudExpc3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVu
ZCgpOyArK21hcEl0ZXIpIHsKICAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3Ig
dmVjSXRlciA9IG1hcEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNl
Y29uZC5lbmQoKTsgKyt2ZWNJdGVyKSAKLSAgICAgICAgICAgICgqdmVjSXRlciktPm1hcmtKU0Z1
bmN0aW9uKCk7CisgICAgICAgICAgICAoKnZlY0l0ZXIpLT5tYXJrSlNGdW5jdGlvbihtYXJrU3Rh
Y2spOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmln
YXRvckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNw
cAppbmRleCBlYTZjY2ViLi5jMDIzOTMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdh
dG9yQ3VzdG9tLmNwcApAQCAtMjksMTMgKzI5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU05hdmlnYXRvcjo6bWFyaygpCit2b2lkIEpT
TmF2aWdhdG9yOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgQmFz
ZTo6bWFyaygpOworICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwogCiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKTsK
IAotICAgIG1hcmtET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxH
ZW9sb2NhdGlvbigpKTsKKyAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2Jh
bERhdGEsIGltcGwoKS0+b3B0aW9uYWxHZW9sb2NhdGlvbigpKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwCmluZGV4IDUyMTM0MjIuLmNmODg0YjkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzNiwyMiArMTM2LDIxIEBAIHZvaWQgSlNOb2RlOjpw
dXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbiYpIGNvbnN0CiB7CiB9
CiAKLXZvaWQgSlNOb2RlOjptYXJrKCkKK3ZvaWQgSlNOb2RlOjptYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgQVNTRVJUKCFtYXJrZWQoKSk7Ci0KICAgICBOb2RlKiBu
b2RlID0gbV9pbXBsLmdldCgpOwogCisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7
CisgICAgbWFya0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjaywgbm9kZS0+ZXZlbnRMaXN0ZW5lcnMo
KSk7CisKICAgICAvLyBOb2RlcyBpbiB0aGUgZG9jdW1lbnQgYXJlIGtlcHQgYWxpdmUgYnkgSlNE
b2N1bWVudDo6bWFyaywgc28sIGlmIHdlJ3JlIGluCiAgICAgLy8gdGhlIGRvY3VtZW50LCB3ZSBu
ZWVkIHRvIG1hcmsgdGhlIGRvY3VtZW50LCBidXQgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5
CiAgICAgLy8gbWFyayBhbnkgb3RoZXIgbm9kZXMuCiAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQo
KSkgewotICAgICAgICBCYXNlOjptYXJrKCk7Ci0gICAgICAgIG1hcmtFdmVudExpc3RlbmVycyhu
b2RlLT5ldmVudExpc3RlbmVycygpKTsKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBub2Rl
LT5vd25lckRvY3VtZW50KCkpCisgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gbm9kZS0+b3du
ZXJEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoRE9NT2JqZWN0KiBkb2NXcmFwcGVyID0g
Z2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgp
LCBkb2MpKQotICAgICAgICAgICAgICAgIGlmICghZG9jV3JhcHBlci0+bWFya2VkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGRvY1dyYXBwZXItPm1hcmsoKTsKKyAgICAgICAgICAgICAgICBtYXJr
U3RhY2suYXBwZW5kKGRvY1dyYXBwZXIpOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTE2MywzMyArMTYyLDE3IEBAIHZvaWQgSlNOb2RlOjptYXJrKCkKIAogICAgIC8v
IE5vZGVzIGluIGEgc3VidHJlZSBhcmUgbWFya2VkIGJ5IHRoZSB0cmVlJ3Mgcm9vdCwgc28sIGlm
IHRoZSByb290IGlzIGFscmVhZHkKICAgICAvLyBtYXJraW5nIHRoZSB0cmVlLCB3ZSBkb24ndCBu
ZWVkIHRvIGV4cGxpY2l0bHkgbWFyayBhbnkgb3RoZXIgbm9kZXMuCi0gICAgaWYgKHJvb3QtPmlu
U3VidHJlZU1hcmsoKSkgewotICAgICAgICBCYXNlOjptYXJrKCk7Ci0gICAgICAgIG1hcmtFdmVu
dExpc3RlbmVycyhub2RlLT5ldmVudExpc3RlbmVycygpKTsKKyAgICBpZiAocm9vdC0+aW5TdWJ0
cmVlTWFyaygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgLy8gTWFyayB0aGUgd2hv
bGUgdHJlZSBzdWJ0cmVlLgogICAgIHJvb3QtPnNldEluU3VidHJlZU1hcmsodHJ1ZSk7CiAgICAg
Zm9yIChOb2RlKiBub2RlVG9NYXJrID0gcm9vdDsgbm9kZVRvTWFyazsgbm9kZVRvTWFyayA9IG5v
ZGVUb01hcmstPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICBKU05vZGUqIHdyYXBwZXIg
PSBnZXRDYWNoZWRET01Ob2RlV3JhcHBlcihtX2ltcGwtPmRvY3VtZW50KCksIG5vZGVUb01hcmsp
OwotICAgICAgICBpZiAod3JhcHBlcikgewotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5tYXJr
ZWQoKSkKLSAgICAgICAgICAgICAgICB3cmFwcGVyLT5tYXJrKCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAobm9kZVRvTWFyayA9PSBub2RlKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNl
IHdoZXJlIHRoZSBtYXAgZnJvbSB0aGUgZG9jdW1lbnQgdG8gd3JhcHBlcnMgaGFzCi0gICAgICAg
ICAgICAvLyBiZWVuIGNsZWFyZWQgb3V0LCBidXQgYSB3cmFwcGVyIGlzIGJlaW5nIG1hcmtlZC4g
Rm9yIG5vdywgd2UnbGwKLSAgICAgICAgICAgIC8vIGxldCB0aGUgcmVzdCBvZiB0aGUgdHJlZSBv
ZiB3cmFwcGVycyBnZXQgY29sbGVjdGVkLCBiZWNhdXNlIHdlIGhhdmUKLSAgICAgICAgICAgIC8v
IG5vIGdvb2Qgd2F5IG9mIGZpbmRpbmcgdGhlbS4gTGF0ZXIgd2Ugc2hvdWxkIHRlc3QgYmVoYXZp
b3Igb2Ygb3RoZXIKLSAgICAgICAgICAgIC8vIGJyb3dzZXJzIGFuZCBzZWUgaWYgd2UgbmVlZCB0
byBwcmVzZXJ2ZSBvdGhlciB3cmFwcGVycyBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgICBpZiAo
IW1hcmtlZCgpKQotICAgICAgICAgICAgICAgIG1hcmsoKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAod3JhcHBlcikKKyAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQod3JhcHBlcik7CiAgICAg
fQogICAgIHJvb3QtPnNldEluU3VidHJlZU1hcmsoZmFsc2UpOwotCi0gICAgLy8gRG91YmxlIGNo
ZWNrIHRoYXQgd2UgYWN0dWFsbHkgZW5kZWQgdXAgbWFya2VkLiBUaGlzIGFzc2VydCBjYXVnaHQg
cHJvYmxlbXMgaW4gdGhlIHBhc3QuCi0gICAgQVNTRVJUKG1hcmtlZCgpKTsKIH0KIAogc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjcmVhdGVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAppbmRleCAyNTk1YWY1Li5hMTk5NDE3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNiwx
MCArMzYsOSBAQCBKU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9kZUZpbHRlckNvbmRpdGlvbihK
U1ZhbHVlIGZpbHRlcikKIHsKIH0KIAotdm9pZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmso
KQordm9pZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBt
YXJrU3RhY2spCiB7Ci0gICAgaWYgKCFtX2ZpbHRlci5tYXJrZWQoKSkKLSAgICAgICAgbV9maWx0
ZXIubWFyaygpOworICAgIG1hcmtTdGFjay5hcHBlbmQobV9maWx0ZXIpOwogfQogCiBzaG9ydCBK
U05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIE5v
ZGUqIGZpbHRlck5vZGUpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
b25kaXRpb24uaAppbmRleCAzZDU5MWM2Li5iOTY1MzRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNDOjpKU1ZhbHVlIGZpbHRlcik7CiAK
ICAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFya0FnZ3JlZ2F0ZShKU0M6Ok1hcmtTdGFjayYpOwogCiAgICAgICAgIG11dGFibGUgSlNDOjpK
U1ZhbHVlIG1fZmlsdGVyOwogICAgIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckN1c3RvbS5jcHAKaW5kZXggYTQ4YTU5ZC4uMDlmZDExMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU05vZGVG
aWx0ZXI6Om1hcmsoKQordm9pZCBKU05vZGVGaWx0ZXI6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2sm
IG1hcmtTdGFjaykKIHsKLSAgICBpbXBsKCktPm1hcmsoKTsKLSAgICBCYXNlOjptYXJrKCk7Cisg
ICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisgICAgaW1wbCgpLT5tYXJrQWdncmVn
YXRlKG1hcmtTdGFjayk7CiB9CiAKIEpTVmFsdWUgSlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKaW5kZXggYTJiOTY1OC4uNmEwOWFiZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDEyICsyOSwx
MiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
SlNOb2RlSXRlcmF0b3I6Om1hcmsoKQordm9pZCBKU05vZGVJdGVyYXRvcjo6bWFya0NoaWxkcmVu
KE1hcmtTdGFjayYgbWFya1N0YWNrKQogeworICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3Rh
Y2spOworCiAgICAgaWYgKE5vZGVGaWx0ZXIqIGZpbHRlciA9IG1faW1wbC0+ZmlsdGVyKCkpCi0g
ICAgICAgIGZpbHRlci0+bWFyaygpOwotICAgIAotICAgIEJhc2U6Om1hcmsoKTsKKyAgICAgICAg
ZmlsdGVyLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiB9CiAKIEpTVmFsdWUgSlNOb2RlSXRl
cmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCmluZGV4
IGFkMWU1NTYuLjVmNGRmZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MiwxNCArOTIsMTIgQEAgdm9pZCBKU1F1YXJhbnRp
bmVkT2JqZWN0V3JhcHBlcjo6dHJhbnNmZXJFeGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUq
IGV4ZWMpIGMKICAgICBleGVjLT5zZXRFeGNlcHRpb24od3JhcE91dGdvaW5nVmFsdWUodW53cmFw
cGVkRXhlY1N0YXRlKCksIGV4Y2VwdGlvbikpOwogfQogCi12b2lkIEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjptYXJrKCkKK3ZvaWQgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Om1hcmtD
aGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBKU09iamVjdDo6bWFyaygpOwor
ICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIAotICAgIGlmICghbV91bndy
YXBwZWRPYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBtX3Vud3JhcHBlZE9iamVjdC0+bWFyaygp
OwotICAgIGlmICghbV91bndyYXBwZWRHbG9iYWxPYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBt
X3Vud3JhcHBlZEdsb2JhbE9iamVjdC0+bWFyaygpOworICAgIG1hcmtTdGFjay5hcHBlbmQobV91
bndyYXBwZWRPYmplY3QpOworICAgIG1hcmtTdGFjay5hcHBlbmQobV91bndyYXBwZWRHbG9iYWxP
YmplY3QpOwogfQogCiBib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGlu
ZWRPYmplY3RXcmFwcGVyLmgKaW5kZXggYmY4ZmRkYi4uMDg5MzVlNyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU1F1YXJhbnRp
bmVkT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU09i
amVjdCogdW53cmFwcGVkT2JqZWN0LCBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPik7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGls
ZHJlbihKU0M6Ok1hcmtTdGFjayYpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwCmluZGV4IDA1NTM2OGUuLjZlNzdmOWIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20u
Y3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNywxNCArMzgsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTU1ZHRWxlbWVudEluc3RhbmNlOjptYXJrKCkKK3ZvaWQgSlNT
VkdFbGVtZW50SW5zdGFuY2U6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsK
LSAgICBCYXNlOjptYXJrKCk7CisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAK
ICAgICAvLyBNYXJrIHRoZSB3cmFwcGVyIGZvciBvdXIgY29ycmVzcG9uZGluZyBlbGVtZW50LCBz
byBpdCBjYW4gbWFyayBpdHMgZXZlbnQgaGFuZGxlcnMuCiAgICAgSlNOb2RlKiBjb3JyZXNwb25k
aW5nV3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVXcmFwcGVyKGltcGwoKS0+Y29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgaW1wbCgpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKTsK
LSAgICBpZiAoY29ycmVzcG9uZGluZ1dyYXBwZXIgJiYgIWNvcnJlc3BvbmRpbmdXcmFwcGVyLT5t
YXJrZWQoKSkKLSAgICAgICAgY29ycmVzcG9uZGluZ1dyYXBwZXItPm1hcmsoKTsKKyAgICBpZiAo
Y29ycmVzcG9uZGluZ1dyYXBwZXIpCisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQoY29ycmVzcG9u
ZGluZ1dyYXBwZXIpOwogfQogCiBKU1ZhbHVlIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVu
dExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAKaW5kZXggODU1MzI5OC4uZjIx
ZjUwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAK
QEAgLTQxLDE0ICs0MSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNTaGFyZWRXb3JrZXI6Om1hcmsoKQordm9pZCBKU1NoYXJlZFdvcmtl
cjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEJhc2U6Om1hcmso
KTsKKyAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIAogICAgIGlmIChNZXNzYWdl
UG9ydCogcG9ydCA9IGltcGwoKS0+cG9ydCgpKSB7CiAgICAgICAgIERPTU9iamVjdCogd3JhcHBl
ciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERh
dGEoKSwgcG9ydCk7Ci0gICAgICAgIGlmICh3cmFwcGVyICYmICF3cmFwcGVyLT5tYXJrZWQoKSkK
LSAgICAgICAgICAgIHdyYXBwZXItPm1hcmsoKTsKKyAgICAgICAgaWYgKHdyYXBwZXIpCisgICAg
ICAgICAgICBtYXJrU3RhY2suYXBwZW5kKHdyYXBwZXIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCmluZGV4IDAwZGFjZWUuLjQzMjQ5ZGMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUyLDkgKzUyLDkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3R5bGVTaGVldCogc3R5bGUKICAgICByZXR1cm4gd3Jh
cHBlcjsKIH0KIAotdm9pZCBKU1N0eWxlU2hlZXQ6Om1hcmsoKQordm9pZCBKU1N0eWxlU2hlZXQ6
Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBCYXNlOjptYXJrKCk7
CisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAKICAgICAvLyBUaGlzIHByZXZl
bnRzIHVzIGZyb20gaGF2aW5nIGEgc3R5bGUgc2hlZXQgd2l0aCBhIGRhbmdsaW5nIG93bmVyTm9k
ZSBwb2ludGVyLgogICAgIC8vIEEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGhhbmRsZSB0
aGlzIG9uIHRoZSBET00gc2lkZSAtLSBpZiB0aGUgc3R5bGUgc2hlZXQKQEAgLTYyLDEwICs2Miw4
IEBAIHZvaWQgSlNTdHlsZVNoZWV0OjptYXJrKCkKICAgICAvLyBiZSB0byBtYWtlIHJlZi9kZXJl
ZiBvbiB0aGUgc3R5bGUgc2hlZXQgcmVmL2RlcmVmIHRoZSBub2RlIGluc3RlYWQsIGJ1dCB0aGVy
ZSdzCiAgICAgLy8gYSBsb3Qgb2YgZGlzZW50YW5nbGluZyBvZiB0aGUgQ1NTIERPTSBvYmplY3Rz
IHRoYXQgd291bGQgbmVlZCB0byBoYXBwZW4gZmlyc3QuCiAgICAgaWYgKE5vZGUqIG93bmVyTm9k
ZSA9IGltcGwoKS0+b3duZXJOb2RlKCkpIHsKLSAgICAgICAgaWYgKEpTTm9kZSogb3duZXJOb2Rl
V3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVXcmFwcGVyKG93bmVyTm9kZS0+ZG9jdW1lbnQoKSwg
b3duZXJOb2RlKSkgewotICAgICAgICAgICAgaWYgKCFvd25lck5vZGVXcmFwcGVyLT5tYXJrZWQo
KSkKLSAgICAgICAgICAgICAgICBvd25lck5vZGVXcmFwcGVyLT5tYXJrKCk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKEpTTm9kZSogb3duZXJOb2RlV3JhcHBlciA9IGdldENhY2hlZERPTU5vZGVX
cmFwcGVyKG93bmVyTm9kZS0+ZG9jdW1lbnQoKSwgb3duZXJOb2RlKSkKKyAgICAgICAgICAgIG1h
cmtTdGFjay5hcHBlbmQob3duZXJOb2RlV3JhcHBlcik7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKaW5kZXggNThlZWE3Mi4uZjg3OWNmNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTIgKzI5
LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
LXZvaWQgSlNUcmVlV2Fsa2VyOjptYXJrKCkKK3ZvaWQgSlNUcmVlV2Fsa2VyOjptYXJrQ2hpbGRy
ZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtT
dGFjayk7CisKICAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gbV9pbXBsLT5maWx0ZXIoKSkK
LSAgICAgICAgZmlsdGVyLT5tYXJrKCk7Ci0gICAgCi0gICAgQmFzZTo6bWFyaygpOworICAgICAg
ICBmaWx0ZXItPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIH0KICAgICAKIEpTVmFsdWUgSlNU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCmluZGV4IGVjYTMyYmYuLjNh
YTRiOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQy
LDExICs0MywxMSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNXZWJTb2NrZXQ6Om1hcmsoKQordm9pZCBKU1dlYlNvY2tldDo6bWFya0NoaWxk
cmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEJhc2U6Om1hcmsoKTsKKyAgICBCYXNl
OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKICAgICBpZiAobV9pbXBsLT5yZWFkeVN0YXRlKCkg
IT0gV2ViU29ja2V0OjpDTE9TRUQpCi0gICAgICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbm1l
c3NhZ2UoKSk7CisgICAgICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ubWVz
c2FnZSgpKTsKICAgICAvLyBGSVhNRTogbWFyayBpZiBFdmVudExpc3RlbmVycyBpcyByZWdpc3Rl
cmVkLgogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAKaW5kZXggNmE3NjAyZC4uOTE5YzgxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtNDcsMjUgKzQ3LDI1IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1dvcmtlckNvbnRleHQ6Om1h
cmsoKQordm9pZCBKU1dvcmtlckNvbnRleHQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtT
dGFjaykKIHsKLSAgICBCYXNlOjptYXJrKCk7CisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtT
dGFjayk7CiAKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqdGhpcy0+Z2xvYmFsRGF0
YSgpOwogCi0gICAgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KGdsb2JhbERhdGEsIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KG1h
cmtTdGFjaywgZ2xvYmFsRGF0YSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotICAgIG1h
cmtET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxMb2NhdGlvbigp
KTsKLSAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFs
TmF2aWdhdG9yKCkpOworICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFs
RGF0YSwgaW1wbCgpLT5vcHRpb25hbExvY2F0aW9uKCkpOworICAgIG1hcmtET01PYmplY3RXcmFw
cGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbE5hdmlnYXRvcigpKTsK
IAotICAgIG1hcmtJZk5vdE51bGwoaW1wbCgpLT5vbmVycm9yKCkpOworICAgIG1hcmtJZk5vdE51
bGwobWFya1N0YWNrLCBpbXBsKCktPm9uZXJyb3IoKSk7CiAKICAgICB0eXBlZGVmIFdvcmtlckNv
bnRleHQ6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFwOwogICAgIHR5cGVkZWYg
V29ya2VyQ29udGV4dDo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7CiAgICAgRXZlbnRM
aXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gaW1wbCgpLT5ldmVudExpc3RlbmVycygpOwog
ICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3Rl
bmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIp
IHsKICAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0
ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2
ZWNJdGVyKQotICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24oKTsKKyAgICAg
ICAgICAgICgqdmVjSXRlciktPm1hcmtKU0Z1bmN0aW9uKG1hcmtTdGFjayk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCmluZGV4IDYwMTBmODMuLmY1YzM5
NGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCkBAIC0zNiwxMSArMzYs
MTEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAot
dm9pZCBKU1dvcmtlcjo6bWFyaygpCit2b2lkIEpTV29ya2VyOjptYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgQmFzZTo6bWFyaygpOworICAgIEJhc2U6Om1hcmtDaGls
ZHJlbihtYXJrU3RhY2spOwogCi0gICAgbWFya0lmTm90TnVsbChzdGF0aWNfY2FzdDxXb3JrZXIq
PihpbXBsKCkpLT5vbm1lc3NhZ2UoKSk7CisgICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIHN0
YXRpY19jYXN0PFdvcmtlcio+KGltcGwoKSktPm9ubWVzc2FnZSgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAKaW5kZXggMDZhNTgxNy4uYTU5MWZhZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCkBAIC00OSwyOSArNDksMjkgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTWE1MSHR0cFJl
cXVlc3Q6Om1hcmsoKQordm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjptYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgQmFzZTo6bWFyaygpOworICAgIEJhc2U6Om1hcmtDaGls
ZHJlbihtYXJrU3RhY2spOwogCiAgICAgaWYgKFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQg
PSBtX2ltcGwtPm9wdGlvbmFsVXBsb2FkKCkpIHsKICAgICAgICAgRE9NT2JqZWN0KiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0
YSgpLCB1cGxvYWQpOwotICAgICAgICBpZiAod3JhcHBlciAmJiAhd3JhcHBlci0+bWFya2VkKCkp
Ci0gICAgICAgICAgICB3cmFwcGVyLT5tYXJrKCk7CisgICAgICAgIGlmICh3cmFwcGVyKQorICAg
ICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh3cmFwcGVyKTsKICAgICB9CiAKLSAgICBtYXJrSWZO
b3ROdWxsKG1faW1wbC0+b25yZWFkeXN0YXRlY2hhbmdlKCkpOwotICAgIG1hcmtJZk5vdE51bGwo
bV9pbXBsLT5vbmFib3J0KCkpOwotICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbmVycm9yKCkp
OwotICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbmxvYWQoKSk7Ci0gICAgbWFya0lmTm90TnVs
bChtX2ltcGwtPm9ubG9hZHN0YXJ0KCkpOwotICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbnBy
b2dyZXNzKCkpOworICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ucmVhZHlz
dGF0ZWNoYW5nZSgpKTsKKyAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmFi
b3J0KCkpOworICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9uZXJyb3IoKSk7
CisgICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25sb2FkKCkpOworICAgIG1h
cmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ubG9hZHN0YXJ0KCkpOworICAgIG1hcmtJ
Zk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ucHJvZ3Jlc3MoKSk7CiAgICAgCiAgICAgdHlw
ZWRlZiBYTUxIdHRwUmVxdWVzdDo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7
CiAgICAgdHlwZWRlZiBYTUxIdHRwUmVxdWVzdDo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0
b3I7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVu
dExpc3RlbmVycygpOwogICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0
ZXIgPSBldmVudExpc3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVu
ZCgpOyArK21hcEl0ZXIpIHsKICAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3Ig
dmVjSXRlciA9IG1hcEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNl
Y29uZC5lbmQoKTsgKyt2ZWNJdGVyKQotICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVu
Y3Rpb24oKTsKKyAgICAgICAgICAgICgqdmVjSXRlciktPm1hcmtKU0Z1bmN0aW9uKG1hcmtTdGFj
ayk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAppbmRleCA1OTcwMTBjLi5jYjZkNWYyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAK
QEAgLTQxLDI4ICs0MSwyOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6bWFyaygpCit2b2lkIEpTWE1M
SHR0cFJlcXVlc3RVcGxvYWQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsK
LSAgICBCYXNlOjptYXJrKCk7CisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAK
ICAgICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gbV9pbXBsLT5hc3NvY2lh
dGVkWE1MSHR0cFJlcXVlc3QoKSkgewogICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRD
YWNoZWRET01PYmplY3RXcmFwcGVyKCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIHht
bEh0dHBSZXF1ZXN0KTsKLSAgICAgICAgaWYgKHdyYXBwZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgp
KQotICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOworICAgICAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQod3JhcHBlcik7CiAgICAgfQogCi0gICAgbWFya0lm
Tm90TnVsbChtX2ltcGwtPm9uYWJvcnQoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9u
ZXJyb3IoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9ubG9hZCgpKTsKLSAgICBtYXJr
SWZOb3ROdWxsKG1faW1wbC0+b25sb2Fkc3RhcnQoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtX2lt
cGwtPm9ucHJvZ3Jlc3MoKSk7CisgICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+
b25hYm9ydCgpKTsKKyAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmVycm9y
KCkpOworICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ubG9hZCgpKTsKKyAg
ICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmxvYWRzdGFydCgpKTsKKyAgICBt
YXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbnByb2dyZXNzKCkpOwogICAgIAogICAg
IHR5cGVkZWYgWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlz
dGVuZXJzTWFwOwogICAgIHR5cGVkZWYgWE1MSHR0cFJlcXVlc3RVcGxvYWQ6Okxpc3RlbmVyVmVj
dG9yIExpc3RlbmVyVmVjdG9yOwogICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVy
cyA9IG1faW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKICAgICBmb3IgKEV2ZW50TGlzdGVuZXJzTWFw
OjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRlciAhPSBl
dmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7CiAgICAgICAgIGZvciAoTGlzdGVuZXJW
ZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsgdmVjSXRl
ciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikKLSAgICAgICAgICAgICgqdmVj
SXRlciktPm1hcmtKU0Z1bmN0aW9uKCk7CisgICAgICAgICAgICAoKnZlY0l0ZXIpLT5tYXJrSlNG
dW5jdGlvbihtYXJrU3RhY2spOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMjZjZjNmNS4uMTkxOGFlZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC01MDQsNyArNTA0LDcgQEAg
c3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgIyBDdXN0b20gbWFyayBmdW5jdGlvbgot
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2b2lkIG1hcmsoKTtcblxuIikg
aWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn07
CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVu
KEpTQzo6TWFya1N0YWNrJik7XG5cbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9OwogCiAgICAgIyBDdXN0b20gcHVzaEV2ZW50SGFuZGxl
clNjb3BlIGZ1bmN0aW9uCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZv
aWQgcHVzaEV2ZW50SGFuZGxlclNjb3BlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTY29wZUNoYWlu
JikgY29uc3Q7XG5cbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bVB1c2hFdmVudEhhbmRsZXJTY29wZSJ9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lci5oIGIvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCmluZGV4IGQyODhjOGQuLjdj
NDgxMmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAorKysgYi9XZWJD
b3JlL2RvbS9FdmVudExpc3RlbmVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xhc3MgTWFya1N0YWNrOwogfQogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00Miw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
I2lmIFVTRShKU0MpCiAgICAgICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbigp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtKU0Z1bmN0aW9u
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrSlNGdW5jdGlvbihKU0M6Ok1hcmtTdGFj
ayYpIHsgfQogI2VuZGlmCiAKICAgICAgICAgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0
dXJuIHZpcnR1YWxpc0F0dHJpYnV0ZSgpOyB9CkBAIC01Miw3ICs1Myw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICB9OwogCiAjaWYgVVNFKEpTQykKLSAgICBpbmxpbmUgdm9pZCBtYXJrSWZO
b3ROdWxsKEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKSB7IGlmIChsaXN0ZW5lcikgbGlzdGVuZXIt
Pm1hcmtKU0Z1bmN0aW9uKCk7IH0KKyAgICBpbmxpbmUgdm9pZCBtYXJrSWZOb3ROdWxsKEpTQzo6
TWFya1N0YWNrJiBtYXJrU3RhY2ssIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKSB7IGlmIChsaXN0
ZW5lcikgbGlzdGVuZXItPm1hcmtKU0Z1bmN0aW9uKG1hcmtTdGFjayk7IH0KICNlbmRpZgogCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmggYi9XZWJDb3JlL2RvbS9Ob2Rl
RmlsdGVyLmgKaW5kZXggOTRjODdlMy4uNWE1NDJhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20v
Tm9kZUZpbHRlci5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaApAQCAtMyw3ICszLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xs
amVuQGhpZy5ubykKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21h
aWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTcxLDcgKzcxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdDsKLSAgICAgICAgdm9pZCBtYXJrKCkgeyBt
X2NvbmRpdGlvbi0+bWFyaygpOyB9OworICAgICAgICB2b2lkIG1hcmtBZ2dyZWdhdGUoSlNDOjpN
YXJrU3RhY2smIG1hcmtTdGFjaykgeyBtX2NvbmRpdGlvbi0+bWFya0FnZ3JlZ2F0ZShtYXJrU3Rh
Y2spOyB9OwogCiAgICAgICAgIC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9y
ZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0aW9uIGlmIGFueS4KICAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZShOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBhY2NlcHROb2RlKHNjcmlwdFN0YXRlRnJv
bU5vZGUobm9kZSksIG5vZGUpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
Q29uZGl0aW9uLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKaW5kZXggYzk0
Y2M5YS4uMGQ2MzEzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlv
bi5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaApAQCAtMyw3ICszLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xs
amVuQGhpZy5ubykKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21h
aWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDYgKzI4LDEw
IEBACiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCituYW1lc3BhY2UgSlNDIHsKKyAgICBjbGFzcyBNYXJrU3RhY2s7Cit9CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIE5vZGU7CkBAIC0zNiw3ICs0MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25k
aXRpb24oKSB7IH0KICAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRl
KiwgTm9kZSopIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmtBZ2dyZWdhdGUoSlNDOjpNYXJrU3RhY2smKSB7IH0KICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9S
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIuaAppbmRleCA0NzljMmZmLi4wMzRmNmMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9S
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvZG9tL1JlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLmgKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24g
KGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSwx
MCArNTUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gPiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3Rv
cjsKIAogI2lmIFVTRShKU0MpCi0gICAgaW5saW5lIHZvaWQgbWFya0V2ZW50TGlzdGVuZXJzKGNv
bnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMpCisgICAgaW5saW5l
IHZvaWQgbWFya0V2ZW50TGlzdGVuZXJzKEpTQzo6TWFya1N0YWNrJiBtYXJrU3RhY2ssIGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMpCiAgICAgewogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RlbmVycy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGxpc3RlbmVyc1tpXS0+bGlzdGVuZXIoKS0+bWFya0pTRnVuY3Rpb24oKTsKKyAgICAgICAg
ICAgIGxpc3RlbmVyc1tpXS0+bGlzdGVuZXIoKS0+bWFya0pTRnVuY3Rpb24obWFya1N0YWNrKTsK
ICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlRXZlbnRMaXN0ZW5lcnMoY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycykKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAppbmRleCBl
YWM5MzZmLi5hZDRjNWFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysr
IGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC0zNjgsNyArMzY4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGNhcHR1cmVFdmVudHMoKTsKICAgICAgICAgdm9pZCBy
ZWxlYXNlRXZlbnRzKCk7CiAKLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBmb3Ig
R0MgbWFya2luZy4gU2VlIEpTRE9NV2luZG93OjptYXJrKCkgaW4KKyAgICAgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgdXNlZCBmb3IgR0MgbWFya2luZy4gU2VlIEpTRE9NV2luZG93OjptYXJrQ2hp
bGRyZW4oTWFya1N0YWNrJikgaW4KICAgICAgICAgLy8gSlNET01XaW5kb3dDdXN0b20uY3BwLgog
ICAgICAgICBTY3JlZW4qIG9wdGlvbmFsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW4u
Z2V0KCk7IH0KICAgICAgICAgRE9NU2VsZWN0aW9uKiBvcHRpb25hbFNlbGVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRl
eCAxYzQwZWIwLi5hYTQ3NDc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTEwNiw3ICsx
MDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGZvcndh
cmRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwogCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIHVzZWQgZm9yIEdDIG1hcmtpbmcuIFNlZSBKU1dvcmtlckNvbnRleHQ6Om1hcmsoKSBpbgor
ICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBHQyBtYXJraW5nLiBTZWUgSlNX
b3JrZXJDb250ZXh0OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJikgaW4KICAgICAgICAgLy8gSlNX
b3JrZXJDb250ZXh0Q3VzdG9tLmNwcC4KICAgICAgICAgV29ya2VyTmF2aWdhdG9yKiBvcHRpb25h
bE5hdmlnYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdG9yLmdldCgpOyB9CiAgICAgICAg
IFdvcmtlckxvY2F0aW9uKiBvcHRpb25hbExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
dGlvbi5nZXQoKTsgfQo=
</data>
<flag name="review"
          id="18510"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34334</attachid>
            <date>2009-08-07 14:56:40 -0700</date>
            <delta_ts>2009-08-07 17:19:41 -0700</delta_ts>
            <desc>Layout test</desc>
            <filename>gc-layouttest.patch</filename>
            <type>text/plain</type>
            <size>3101</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMjNmM2NjLi4zNDk3Njc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDgt
MDcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFjayBvdmVyZmxvdyBjcmFzaCBpbiBKYXZh
U2NyaXB0IGdhcmJhZ2UgY29sbGVjdG9yIG1hcmsgcGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMTYKKworICAgICAgICBBZGQgYSB0ZXN0Y2Fz
ZSB0aGF0IHJlcXVpcmVzIG1hcmtpbmcgb2YgYSBkZWVwbHkgbmVzdGVkIG9iamVjdC4KKworICAg
ICAgICAqIGZhc3QvanMvbmVzdGVkLW9iamVjdC1nYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvbmVzdGVkLW9iamVjdC1nYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qczoKKyAgICAgICAgICAgIEFkZCBhIGdjKCkg
ZnVuY3Rpb24gdGhhdCB0cmlnZ2VycyBhIGdjIG9yIGNhbGxzIHRoZSBnYyBjb250cm9sbGVyIGlm
IGl0J3MgcHJlc2VudAorICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2VzL25lc3RlZC1vYmplY3Qt
Z2MuanM6IEFkZGVkLgorCiAyMDA5LTA4LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9qcy9uZXN0ZWQtb2JqZWN0LWdjLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvanMvbmVzdGVkLW9iamVjdC1nYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5MDhjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvanMvbmVzdGVkLW9iamVjdC1nYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBA
CitUaGlzIHRlc3QgY2hlY2tzIHdoZXRoZXIgZ2FyYmFnZSBjb2xsZWN0aW9uIGNhbiBoYW5kbGUg
ZGVlcGx5IG5lc3RlZCBvYmplY3RzLiBJdCBwYXNzZXMgaWYgdGhlIHRlc3QgZG9lcyBub3QgY3Jh
c2guCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9qcy9uZXN0ZWQtb2JqZWN0LWdjLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL25lc3Rl
ZC1vYmplY3QtZ2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjY5
MzRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uZXN0ZWQtb2JqZWN0
LWdjLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9uZXN0ZWQtb2JqZWN0LWdjLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMKaW5kZXggZTQzOTcwNi4u
NjY2Y2ZkNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMKQEAgLTE4NiwzICsxODYsMTIgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3coX2EsIF9lKQogICBl
bHNlCiAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09
ICJ1bmRlZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gV2FzICIgKyBfYXYgKyAi
LiIpOwogfQorCitmdW5jdGlvbiBnYygpIHsKKyAgICBpZiAodHlwZW9mIEdDQ29udHJvbGxlciAh
PT0gInVuZGVmaW5lZCIpCisgICAgICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisgICAgZWxz
ZSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICAgICAg
dmFyIHRlbXAgPSAiYWIiICsgaSArIChpIC8gMTAwMDAwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9uZXN0ZWQtb2JqZWN0LWdjLmpzIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvbmVzdGVkLW9iamVjdC1nYy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY1ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvbmVzdGVkLW9iamVjdC1nYy5qcwpAQCAtMCwwICsx
LDE0IEBACitkZXNjcmlwdGlvbigKKyJUaGlzIHRlc3QgY2hlY2tzIHdoZXRoZXIgZ2FyYmFnZSBj
b2xsZWN0aW9uIGNhbiBoYW5kbGUgZGVlcGx5IG5lc3RlZCBvYmplY3RzLiAgSXQgcGFzc2VzIGlm
IHRoZSB0ZXN0IGRvZXMgbm90IGNyYXNoLiIKKyk7CisKK3ZhciBvID0ge307Cit2YXIgYSA9IFtd
OworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyBpKyspIHsKKyAgICBvID0ge286b307Cisg
ICAgYT1bYV07Cit9CisKK2djKCk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34344</attachid>
            <date>2009-08-07 17:19:41 -0700</date>
            <delta_ts>2009-08-07 17:26:24 -0700</delta_ts>
            <desc>Shorter layout test</desc>
            <filename>gc-layouttest.patch</filename>
            <type>text/plain</type>
            <size>3292</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNjdjNTdhLi43NjQ1YjQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDgt
MDcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFjayBvdmVyZmxvdyBjcmFzaCBpbiBKYXZh
U2NyaXB0IGdhcmJhZ2UgY29sbGVjdG9yIG1hcmsgcGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMTYKKworICAgICAgICBBZGQgYSB0ZXN0Y2Fz
ZSB0aGF0IHJlcXVpcmVzIG1hcmtpbmcgb2YgYSBkZWVwbHkgbmVzdGVkIG9iamVjdC4KKworICAg
ICAgICAqIGZhc3QvanMvbmVzdGVkLW9iamVjdC1nYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvbmVzdGVkLW9iamVjdC1nYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qczoKKyAgICAgICAgICAgIEFkZCBhIGdjKCkg
ZnVuY3Rpb24gdGhhdCB0cmlnZ2VycyBhIGdjIG9yIGNhbGxzIHRoZSBnYyBjb250cm9sbGVyIGlm
IGl0J3MgcHJlc2VudAorICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2VzL25lc3RlZC1vYmplY3Qt
Z2MuanM6IEFkZGVkLgorCiAyMDA5LTA4LTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2pzL25lc3RlZC1vYmplY3QtZ2MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9qcy9uZXN0ZWQtb2JqZWN0LWdjLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xYjkwOGMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9qcy9uZXN0ZWQtb2JqZWN0LWdjLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Ro
aXMgdGVzdCBjaGVja3Mgd2hldGhlciBnYXJiYWdlIGNvbGxlY3Rpb24gY2FuIGhhbmRsZSBkZWVw
bHkgbmVzdGVkIG9iamVjdHMuIEl0IHBhc3NlcyBpZiB0aGUgdGVzdCBkb2VzIG5vdCBjcmFzaC4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2pzL25lc3RlZC1vYmplY3QtZ2MuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmVzdGVkLW9i
amVjdC1nYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjkzNGEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL25lc3RlZC1vYmplY3QtZ2Mu
aHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL25lc3RlZC1vYmplY3QtZ2MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMgYi9MYXlvdXRU
ZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcwppbmRleCBlNDM5NzA2Li4xYTY3
M2I4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcwpA
QCAtMTg2LDMgKzE4NiwxOSBAQCBmdW5jdGlvbiBzaG91bGRUaHJvdyhfYSwgX2UpCiAgIGVsc2UK
ICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgdGhyb3cgIiArICh0eXBlb2YgX2UgPT0gInVu
ZGVmaW5lZCIgPyAiYW4gZXhjZXB0aW9uIiA6IF9ldikgKyAiLiBXYXMgIiArIF9hdiArICIuIik7
CiB9CisKK2Z1bmN0aW9uIGdjKCkgeworICAgIGlmICh0eXBlb2YgR0NDb250cm9sbGVyICE9PSAi
dW5kZWZpbmVkIikKKyAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgZnVuY3Rpb24gZ2NSZWMobikgeworICAgICAgICAgICAgaWYgKG4gPCAxKQorICAg
ICAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgICAgIHZhciB0ZW1wID0ge2k6ICJhYiIg
KyBpICsgKGkgLyAxMDAwMDApfTsKKyAgICAgICAgICAgIHRlbXAgKz0gImZvbyI7CisgICAgICAg
ICAgICBnY1JlYyhuLTEpOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDsgaSsrKQorICAgICAgICAgICAgZ2NSZWMoMTApCisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvbmVzdGVkLW9iamVjdC1nYy5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL25lc3RlZC1vYmplY3QtZ2MuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjY2MxMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL25lc3RlZC1vYmplY3QtZ2MuanMKQEAgLTAsMCArMSwx
NSBAQAorZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyB3aGV0aGVyIGdhcmJhZ2UgY29s
bGVjdGlvbiBjYW4gaGFuZGxlIGRlZXBseSBuZXN0ZWQgb2JqZWN0cy4gIEl0IHBhc3NlcyBpZiB0
aGUgdGVzdCBkb2VzIG5vdCBjcmFzaC4iCispOworCit2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKK3Zh
ciBvID0ge307Cit2YXIgYSA9IFtdOworZm9yICh2YXIgaSA9IDA7IGkgPCAyNTAwMDA7IGkrKykg
eworICAgIG8gPSB7bzpvfTsKKyAgICBhPVthXTsKK30KKworZ2MoKTsKKworc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="18521"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34345</attachid>
            <date>2009-08-07 17:20:19 -0700</date>
            <delta_ts>2009-08-07 17:58:04 -0700</delta_ts>
            <desc>JavaScriptCore portion</desc>
            <filename>gc-jsc.patch</filename>
            <type>text/plain</type>
            <size>96548</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5OWQzOTYyLi5mN2EzMmVlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUz
IEBACisyMDA5LTA4LTA3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhY2sgb3ZlcmZsb3cg
Y3Jhc2ggaW4gSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3RvciBtYXJrIHBhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjE2CisKKyAgICAgICAg
TWFrZSB0aGUgR0MgbWFyayBwaGFzZSBpdGVyYXRpdmUgYnkgdXNpbmcgYW4gZXhwbGljaXQgbWFy
ayBzdGFjay4KKyAgICAgICAgVG8gZG8gdGhpcyBtYXJraW5nIGFueSBzaW5nbGUgb2JqZWN0IGlz
IHBlcmZvcm1lZCBpbiBtdWx0aXBsZSBzdGFnZXMKKyAgICAgICAgICAqIFRoZSBvYmplY3QgaXMg
YXBwZW5kZWQgdG8gdGhlIE1hcmtTdGFjaywgdGhpcyBzZXRzIHRoZSBtYXJrZWQKKyAgICAgICAg
ICAgIGJpdCBmb3IgdGhlIG9iamVjdCB1c2luZyB0aGUgbmV3IG1hcmtEaXJlY3QoKSBmdW5jdGlv
biwgYW5kIHRoZW4KKyAgICAgICAgICAgIHJldHVybnMKKyAgICAgICAgICAqIFdoZW4gdGhlIE1h
cmtTdGFjayBpcyBkcmFpbigpZWQgdGhlIG9iamVjdCBpcyBwb3BwZWQgb2ZmIHRoZSBzdGFjawor
ICAgICAgICAgICAgYW5kIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKSBpcyBjYWxsZWQgb24gdGhl
IG9iamVjdCB0byBjb2xsZWN0IAorICAgICAgICAgICAgYWxsIG9mIGl0cyBjaGlsZHJlbi4gIGRy
YWluKCkgdGhlbiByZXBlYXRzIHVudGlsIHRoZSBzdGFjayBpcyBlbXB0eS4KKworICAgICAgICBB
ZGRpdGlvbmFsbHkgSSByZW5hbWVkIGEgbnVtYmVyIG9mIG1ldGhvZHMgZnJvbSAnbWFyaycgdG8g
J21hcmtBZ2dyZWdhdGUnCisgICAgICAgIGluIG9yZGVyIHRvIG1ha2UgaXQgbW9yZSBjbGVhciB0
aGF0IG1hcmtpbmcgb2YgdGhvc2Ugb2JqZWN0IHdhcyBub3QKKyAgICAgICAgZ29pbmcgdG8gcmVz
dWx0IGluIGFuIGFjdHVhbCByZWN1cnNpdmUgbWFyay4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLmd5cGk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJpOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6
bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjptYXJrQ2hpbGRyZW4pOgorICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAqIGludGVycHJl
dGVyL1JlZ2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmg6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6bWFya0dsb2JhbHMpOgorICAgICAgICAoSlNDOjpS
ZWdpc3RlckZpbGU6Om1hcmtDYWxsRnJhbWVzKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpTY29wZU5vZGVEYXRhOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAg
KEpTQzo6RXZhbE5vZGU6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJv
ZHlOb2RlOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAg
ICAgKEpTQzo6U2NvcGVOb2RlOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Fy
Z0xpc3QuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6bWFya0NoaWxkcmVuKToKKyAgICAg
ICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSk6CisgICAgICAg
IChKU0M6OkhlYXA6Om1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjptYXJrQ2hpbGRyZW4p
OgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRl
clNldHRlcjo6R2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6R2xvYmFsRXZhbEZ1bmN0aW9uOjptYXJrQ2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjptYXJrQ2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6bWFya0NlbGxEaXJlY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTVmFsdWU6Om1hcmtEaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKU1ZhbHVlOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
OjpoYXNDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjptYXJrSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNOb3RBbk9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTTm90
QW5PYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpTdHJpbmdpZmllcjo6bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkpTT05PYmpl
Y3Q6Om1hcmtTdHJpbmdpZmllcnMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
bWFya0NoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZUdldHRlcik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjptYXJrQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3Bl
T2JqZWN0OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9i
amVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1l
L01hcmtTdGFjay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmNvbXBhY3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0YWNrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjop
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFjayk6CisgICAgICAgIChKU0M6Ok1h
cmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6On5NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpN
YXJrU3RhY2s6Ok1hcmtTZXQ6Ok1hcmtTZXQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnBh
Z2VTaXplKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0
YWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5Ojp+TWFy
a1N0YWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5Ojpl
eHBhbmQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5OjphcHBlbmQp
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5OjpyZW1vdmVMYXN0KToK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpNYXJrU3RhY2tBcnJheTo6aXNFbXB0eSk6CisgICAg
ICAgIChKU0M6Ok1hcmtTdGFjazo6TWFya1N0YWNrQXJyYXk6OnNpemUpOgorICAgICAgICAoSlND
OjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5OjpzaHJpbmtBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL01hcmtTdGFja1Bvc2l4LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcmtT
dGFjazo6c3RhY2tBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6c3RhY2tSZWxl
YXNlKToKKyAgICAgICAgKiBydW50aW1lL01hcmtTdGFja1dpbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpNYXJrU3RhY2s6OnN0YWNrQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2s6OnN0YWNrUmVsZWFzZSk6CisgICAgICAgICogcnVudGltZS9TY29wZUNoYWluLmg6CisgICAg
ICAgICogcnVudGltZS9TY29wZUNoYWluTWFyay5oOgorICAgICAgICAoSlNDOjpTY29wZUNoYWlu
OjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6Cisg
ICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6bWFyayk6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXJrQWdncmVnYXRlKToKKwogMjAw
OS0wOC0wNyAgR2VvcmdlIFN0YWlrb3MgPGdlb3JnZS5zdGFpa29zQHRvcmNobW9iaWxlLmNvbT4g
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyBiL0phdmFTY3Jp
cHRDb3JlL0NvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCmluZGV4IGY4ZDZj
MmMuLjA5YjYzYTggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ph
dmFTY3JpcHRDb3JlLnhjY29uZmlnCisrKyBiL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25z
L0phdmFTY3JpcHRDb3JlLnhjY29uZmlnCkBAIC00OCw0ICs0OCw0IEBAIE9USEVSX0NGTEFHU19S
ZWxlYXNlX25vcm1hbCA9ICQoT1RIRVJfQ0ZMQUdTX25vcm1hbF8kKFhDT0RFX1ZFUlNJT05fQUNU
VUFMKSk7CiBPVEhFUl9DRkxBR1NfUHJvZHVjdGlvbl9ub3JtYWwgPSAkKE9USEVSX0NGTEFHU19u
b3JtYWxfJChYQ09ERV9WRVJTSU9OX0FDVFVBTCkpOwogT1RIRVJfQ0ZMQUdTX25vcm1hbF8wMzEw
ID0gJChPVEhFUl9DRkxBR1Nfbm9ybWFsX0dDQ180Mik7CiBPVEhFUl9DRkxBR1Nfbm9ybWFsXzAz
MjAgPSAkKE9USEVSX0NGTEFHU19ub3JtYWxfR0NDXzQyKTsKLU9USEVSX0NGTEFHU19ub3JtYWxf
R0NDXzQyID0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZ1bndpbmQtdGFibGVzOworT1RIRVJfQ0ZM
QUdTX25vcm1hbF9HQ0NfNDIgPSAtZnVud2luZC10YWJsZXM7CmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDI1N2U5ODYuLjNjZGUxZWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTEsNiArMTkx
LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5jcHAgXAorCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFya1N0YWNrLmggXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0
YWNrUG9zaXguY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAg
XAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmggXAogCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBcCkBAIC00MzQsNiArNDM3LDkgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwIFwKIAlKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xvb2t1cC5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFj
ay5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmggXAorCUphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrV2luLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXRoT2JqZWN0LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0Lmgg
XAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgXApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDg5YzEyNGEuLmUyYTIzZDYgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTEzMSwxNyArMTMxLDE3IEBAIF9fWk4zSlNDMTNqc093
bmVkU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0MxNEpT
R2xvYmFsT2JqZWN0MTBnbG9iYWxFeGVjRXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEyZGVm
aW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU184SlNPYmplY3RF
CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RQorX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
MTJtYXJrQ2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Qx
N3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdK
U1ZhbHVlRWoKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RSAgCiBfX1pO
M0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQotX19aTjNKU0MxNEpTR2xv
YmFsT2JqZWN0NG1hcmtFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0Mx
NEpTR2xvYmFsT2JqZWN0bndFbVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk4zSlNDMTRTYW1wbGlu
Z1RocmVhZDRzdG9wRXYKIF9fWk4zSlNDMTRTYW1wbGluZ1RocmVhZDVzdGFydEVqCiBfX1pOM0pT
QzE0VGltZW91dENoZWNrZXI1cmVzZXRFdgogX19aTjNKU0MxNGNvbnN0cnVjdEFycmF5RVBOU185
RXhlY1N0YXRlRVJLTlNfN0FyZ0xpc3RFCi1fX1pOM0pTQzE1SlNXcmFwcGVyT2JqZWN0NG1hcmtF
dgorX19aTjNKU0MxNUpTV3JhcHBlck9iamVjdDEybWFya0NoaWxkcmVuRVJOU185TWFya1N0YWNr
RQogX19aTjNKU0MxNXRvSW50MzJTbG93Q2FzZUVkUmIKIF9fWk4zSlNDMTZGdW5jdGlvbkJvZHlO
b2RlMTNmaW5pc2hQYXJzaW5nRVBOU18xMElkZW50aWZpZXJFbQogX19aTjNKU0MxNkZ1bmN0aW9u
Qm9keU5vZGUxNGNvcHlQYXJhbWV0ZXJzRXYKQEAgLTIzNiw2ICsyMzYsNyBAQCBfX1pOM0pTQzhK
U09iamVjdDEyZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBT
MF8KIF9fWk4zSlNDOEpTT2JqZWN0MTJkZWZpbmVTZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFUFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmxvb2t1cEdldHRlckVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zSlNDOEpTT2JqZWN0MTJsb29rdXBTZXR0
ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCitfX1pOM0pTQzhKU09iamVjdDEy
bWFya0NoaWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTjNKU0M4SlNPYmplY3QxNGRlbGV0ZVBy
b3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0M4SlNPYmpl
Y3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRWoKIF9fWk4zSlNDOEpTT2JqZWN0MTV1
bndyYXBwZWRPYmplY3RFdgpAQCAtMjUxLDcgKzI1Miw2IEBAIF9fWk4zSlNDOEpTT2JqZWN0MjJm
aWxsR2V0dGVyUHJvcGVydHlTbG90RVJOU18xMlByb3BlcnR5U2xvdEVQTlNfN0pTVmFsdWVFCiBf
X1pOM0pTQzhKU09iamVjdDIzYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VFbW0KIF9fWk4zSlNDOEpT
T2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU183SlNWYWx1ZUVS
TlNfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3Rh
dGVFak5TXzdKU1ZhbHVlRSAgCi1fX1pOM0pTQzhKU09iamVjdDRtYXJrRXYKIF9fWk4zSlNDOFBy
b2ZpbGVyMTNzdG9wUHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pO
M0pTQzhQcm9maWxlcjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmlu
Z0UKIF9fWk4zSlNDOFByb2ZpbGVyOHByb2ZpbGVyRXYKQEAgLTI1OSw2ICsyNTksOSBAQCBfX1pO
M0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVSTlNfMTBTY29wZUNoYWluRVJLTlNfMTBTb3Vy
Y2VDb2RlRU5TXzdKU1ZhbHVlRQogX19aTjNKU0M4anNTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRh
RVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzlDb2RlQmxvY2tEMUV2CiBfX1pOM0pTQzlDb2RlQmxv
Y2tEMkV2CitfX1pOM0pTQzlNYXJrU3RhY2sxMHNfcGFnZVNpemVFCitfX1pOM0pTQzlNYXJrU3Rh
Y2sxMnN0YWNrUmVsZWFzZUVQdm0KK19fWk4zSlNDOU1hcmtTdGFjazEzc3RhY2tBbGxvY2F0ZUVt
CiBfX1pOM0pTQzlTdHJ1Y3R1cmUxN3N0b3BJZ25vcmluZ0xlYWtzRXYKIF9fWk4zSlNDOVN0cnVj
dHVyZTE4c3RhcnRJZ25vcmluZ0xlYWtzRXYKIF9fWk4zSlNDOVN0cnVjdHVyZTIxYWRkUHJvcGVy
dHlUcmFuc2l0aW9uRVBTMF9SS05TXzEwSWRlbnRpZmllckVqUE5TXzZKU0NlbGxFUm0KQEAgLTMy
Niw2ICszMjksNyBAQCBfX1pOSzNKU0MxMkRhdGVJbnN0YW5jZTdnZXRUaW1lRVJkUmkKIF9fWk5L
M0pTQzEyU3RyaW5nT2JqZWN0MTJ0b1RoaXNTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNK
U0MxMlN0cmluZ09iamVjdDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzE0SlNH
bG9iYWxPYmplY3QxNGlzRHluYW1pY1Njb3BlRXYKKwogX19aTkszSlNDMTZGdW5jdGlvbkJvZHlO
b2RlMTRpc0hvc3RGdW5jdGlvbkV2CiBfX1pOSzNKU0MxNkludGVybmFsRnVuY3Rpb245Y2xhc3NJ
bmZvRXYKIF9fWk5LM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE2aXNWYXJpYWJsZU9iamVjdEV2CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpIGIvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQppbmRleCAyZDY5YzdkLi40NjJjMzhmIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKQEAgLTI2NSw2ICsyNjUsOSBAQAogICAgICAgICAgICAg
J3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5oJywKICAgICAgICAgICAgICdydW50aW1lL0xvb2t1cC5j
cHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvTG9va3VwLmgnLAorICAgICAgICAgICAgJ3J1bnRp
bWUvTWFya1N0YWNrLmNwcCcsCisgICAgICAgICAgICAncnVudGltZS9NYXJrU3RhY2suaCcsCisg
ICAgICAgICAgICAncnVudGltZS9NYXJrU3RhY2tXaW4uY3BwJywKICAgICAgICAgICAgICdydW50
aW1lL01hdGhPYmplY3QuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL01hdGhPYmplY3QuaCcs
CiAgICAgICAgICAgICAncnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcCcsCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkgYi9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5wcmkKaW5kZXggMGRlNGYxNS4uZGQ0OGM5YSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCisrKyBiL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnByaQpAQCAtOTgsNiArOTgsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50
aW1lL0pTTm90QW5PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTT05PYmplY3QuY3BwIFwKICAg
ICBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwIFwKKyAgICBydW50aW1lL01hcmtTdGFjay5jcHAg
XAorICAgIHJ1bnRpbWUvTWFya1N0YWNrUG9zaXguY3BwIFwKICAgICBydW50aW1lL1RpbWVvdXRD
aGVja2VyLmNwcCBcCiAgICAgYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBcCiAgICAgYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qCmluZGV4IDE1NjVkMDQuLjFjNWU5NjMgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtODg0LDYgKzg4NCwxOCBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxy
dW50aW1lXE1hcmtTdGFjay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxNYXJrU3RhY2suY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxNYXJr
U3RhY2tXaW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxNYXRoT2JqZWN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmls
ZT4NCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjNDhjYTFmLi42YzNkNDlmIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE5NiwxNCArMTk2LDE3IEBACiAJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05v
dEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3MjcwMDc4MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAqLzsgfTsK
IAkJQTcyNzAxQjkwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUIzMERBREU5NDkw
MEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi87IH07CiAJCUE3MjdGRjZCMERBMzA5MjIw
MEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjdGRjY2MERBMzA1M0IwMEU1NDhENyAvKiBK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCAqLzsgfTsKKwkJQTc0QjM0OTkxMDJBNUY4RTAwMzJB
Qjk4IC8qIE1hcmtTdGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzRCMzQ5ODEwMkE1RjhFMDAzMkFCOTggLyogTWFya1N0YWNrLmNwcCAqLzsg
fTsKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVF
NzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2RUU2NTkwRkFFNTlENTAwM0YwNjlB
IC8qIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc2RUU2NTgwRkFFNTlENTAwM0YwNjlBIC8qIE5hdGl2ZUZ1bmN0
aW9uV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUE3Nzk1NTkwMTAxQTc0RDUwMDExNEU1NSAvKiBNYXJrU3RhY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk1NThGMTAxQTc0RDUwMDEx
NEU1NSAvKiBNYXJrU3RhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBNzgyRjFBNTBFRUM5RkEyMDAzNjI3M0YgLyogRXhlY3V0YWJsZUFsbG9j
YXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODJGMUE0MEVFQzlGQTIwMDM2MjczRiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXgu
Y3BwICovOyB9OwogCQlBNzkxRUYyODBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OTFFRjI2MEYx
MUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3OTFFRjI5MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5
dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzkxRUYyNzBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXkuY3BwICovOyB9OwogCQlB
N0ExRjdBQzBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTFGN0FBMEYyNTJCM0MwMEUxODRFMiAv
KiBCeXRlQXJyYXkuY3BwICovOyB9OwogCQlBN0ExRjdBRDBGMjUyQjNDMDBFMTg0RTIgLyogQnl0
ZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0ExRjdBQjBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwICovOyB9OworCQlBN0M1MzBFNDEwMkEzODEzMDA1QkM3NDEgLyogTWFya1N0
YWNrUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdDNTMwRTMxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCAqLzsgfTsK
IAkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTJFQTY5MEZCNDYwQ0YwMDYw
MUYwNiAvKiBMaXRlcmFsUGFyc2VyLmggKi87IH07CiAJCUE3RTJFQTZDMEZCNDYwQ0YwMDYwMUYw
NiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTJFQTZBMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNw
cCAqLzsgfTsKIAkJQTdGOTkzNUYwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Rjk5MzVEMEZENzMy
NTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmggKi87IH07CkBAIC03MzgsNyArNzQxLDkgQEAKIAkJ
QTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uSGVscGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzI3RkY2NTBEQTMwNTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MjdGRjY2MERB
MzA1M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzRCMzQ5ODEwMkE1RjhFMDAzMkFCOTggLyogTWFy
a1N0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtTdGFj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkVFNjU4MEZBRTU5RDUwMDNG
MDY5QSAvKiBOYXRpdmVGdW5jdGlvbldyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmF0aXZlRnVuY3Rpb25XcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE3Nzk1NThGMTAxQTc0RDUwMDExNEU1NSAvKiBNYXJrU3RhY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3ODJGMUE0MEVFQzlGQTIwMDM2MjczRiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
UG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJs
ZUFsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5MUVG
MjYwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQnl0ZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3OTFFRjI3MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0J5dGVBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03NDYsNiArNzUxLDcgQEAKIAkJQTdBMUY3QUIwRjI1MkIzQzAwRTE4
NEUyIC8qIEJ5dGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRl
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNDhEQjUwRUU3NENGQzAw
RENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDNTMwRTMxMDJBMzgxMzAwNUJD
NzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hcmtTdGFja1Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdFMkVBNjkwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGl0ZXJhbFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBN0UyRUE2QTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaXRlcmFsUGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNDJDMTgwRTM5Mzg4MzAwNjVBNTQ0IC8q
IEpTU3RhdGljU2NvcGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTdGF0aWNTY29wZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ5
MCw2ICsxNDk2LDkgQEAKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogVHlwZUluZm8u
aCAqLywKIAkJCQlGNjkyQTg4NTAyNTU1OTdEMDFGRjYwRjcgLyogVVN0cmluZy5jcHAgKi8sCiAJ
CQkJRjY5MkE4ODYwMjU1NTk3RDAxRkY2MEY3IC8qIFVTdHJpbmcuaCAqLywKKwkJCQlBNzc5NTU4
RjEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggKi8sCisJCQkJQTdDNTMwRTMxMDJBMzgx
MzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCAqLywKKwkJCQlBNzRCMzQ5ODEwMkE1RjhF
MDAzMkFCOTggLyogTWFya1N0YWNrLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xODkyLDYgKzE5MDEsNyBAQAogCQkJCTE0
MjlEQUUwMEVEMjY0NUIwMEI4OTYxOSAvKiBXUkVDR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDI5REFCRjBFRDI2M0U3MDBCODk2MTkgLyogV1JFQ1BhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTY4OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTc3OTU1OTAxMDFBNzRENTAwMTE0RTU1IC8qIE1hcmtTdGFjay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0yMjU4LDYgKzIyNjgsOCBAQAogCQkJCTE0MjlEQTgyMEVEMjQ4Mjkw
MEI4OTYxOSAvKiBXUkVDRnVuY3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOURBRTEw
RUQyNjQ1QjAwQjg5NjE5IC8qIFdSRUNHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyOURBQzAwRUQyNjNFNzAwQjg5NjE5IC8qIFdSRUNQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTdDNTMwRTQxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUE3NEIzNDk5MTAyQTVGOEUwMDMyQUI5OCAvKiBNYXJrU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAw
YTdiMmY1Li5lMjJmMjVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAg
LTE0MjgsMjAgKzE0MjgsMjEgQEAgdm9pZCBDb2RlQmxvY2s6OnJlZlN0cnVjdHVyZXMoSW5zdHJ1
Y3Rpb24qIHZQQykgY29uc3QKICAgICBBU1NFUlQodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJl
dGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWQpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5lcmljKSB8fCB2UENbMF0udS5vcGNv
ZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwogfQog
Ci12b2lkIENvZGVCbG9jazo6bWFyaygpCit2b2lkIENvZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShN
YXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICghbV9jb25zdGFu
dFJlZ2lzdGVyc1tpXS5tYXJrZWQoKSkKLSAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNb
aV0ubWFyaygpOworICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX2NvbnN0YW50UmVnaXN0
ZXJzW2ldLmpzVmFsdWUoKSk7CisgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2Z1bmN0aW9uRXhwcmVzc2lvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZnVuY3Rpb25FeHBy
ZXNzaW9uc1tpXS0+Ym9keSgpLT5tYXJrKCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHByZXNzaW9u
c1tpXS0+Ym9keSgpLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiAKICAgICBpZiAobV9yYXJl
RGF0YSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmFyZURhdGEtPm1fZnVu
Y3Rpb25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9mdW5jdGlvbnNb
aV0tPmJvZHkoKS0+bWFyaygpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9mdW5jdGlvbnNb
aV0tPmJvZHkoKS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogCi0gICAgICAgIG1fcmFyZURh
dGEtPm1fZXZhbENvZGVDYWNoZS5tYXJrKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fZXZhbENv
ZGVDYWNoZS5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDQxY2MwNjguLjM5YjFkYjMgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0yNTUsNyArMjU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIENvZGVCbG9jayhTY29wZU5vZGUqIG93bmVyTm9kZSwgQ29kZVR5cGUsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpOwogICAgICAgICB+Q29k
ZUJsb2NrKCk7CiAKLSAgICAgICAgdm9pZCBtYXJrKCk7CisgICAgICAgIHZvaWQgbWFya0FnZ3Jl
Z2F0ZShNYXJrU3RhY2smKTsKICAgICAgICAgdm9pZCByZWZTdHJ1Y3R1cmVzKEluc3RydWN0aW9u
KiB2UEMpIGNvbnN0OwogICAgICAgICB2b2lkIGRlcmVmU3RydWN0dXJlcyhJbnN0cnVjdGlvbiog
dlBDKSBjb25zdDsKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmggYi9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKaW5kZXggZjBjZTczZS4uOTg2NTI1YyAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaApAQCAtNjgsMTEgKzY4LDExIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVNYXAuaXNFbXB0eSgpOyB9CiAKLSAgICAgICAgdm9pZCBtYXJrKCkKKyAgICAgICAgdm9pZCBt
YXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKQogICAgICAgICB7CiAgICAgICAgICAg
ICBFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CiAgICAgICAg
ICAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgcHRyID0gbV9jYWNoZU1hcC5iZWdpbigp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgICAgICBwdHItPnNlY29uZC0+bWFyaygp
OworICAgICAgICAgICAgICAgIHB0ci0+c2Vjb25kLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7
CiAgICAgICAgIH0KICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heENh
Y2hlYWJsZVNvdXJjZUxlbmd0aCA9IDI1NjsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlckFjdGl2YXRpb24uY3BwCmluZGV4IDRiMjU2OGYuLjM0ZDA0NDcgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTEgKzM4LDEy
IEBAIERlYnVnZ2VyQWN0aXZhdGlvbjo6RGVidWdnZXJBY3RpdmF0aW9uKEpTT2JqZWN0KiBhY3Rp
dmF0aW9uKQogICAgIG1fYWN0aXZhdGlvbiA9IHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KGFj
dGl2YXRpb24pOwogfQogCi12b2lkIERlYnVnZ2VyQWN0aXZhdGlvbjo6bWFyaygpCit2b2lkIERl
YnVnZ2VyQWN0aXZhdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewot
ICAgIEpTT2JqZWN0OjptYXJrKCk7Ci0gICAgaWYgKG1fYWN0aXZhdGlvbiAmJiAhbV9hY3RpdmF0
aW9uLT5tYXJrZWQoKSkKLSAgICAgICAgbV9hY3RpdmF0aW9uLT5tYXJrKCk7CisgICAgSlNPYmpl
Y3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworCisgICAgaWYgKG1fYWN0aXZhdGlvbikKKyAg
ICAgICAgbWFya1N0YWNrLmFwcGVuZChtX2FjdGl2YXRpb24pOwogfQogCiBVU3RyaW5nIERlYnVn
Z2VyQWN0aXZhdGlvbjo6Y2xhc3NOYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgKaW5kZXggOWUxZjlmNS4uODJjZGU0ZCAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgKKysrIGIvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBEZWJ1Z2dlckFjdGl2YXRpb24o
SlNPYmplY3QqKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogICAgICAgICB2aXJ0dWFsIFVTdHJp
bmcgY2xhc3NOYW1lKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBiL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKaW5kZXggYmVhZDRkYy4uOTVhZTVmNiAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUoKSBjb25zdDsKIAogICAgICAgICBib29sIG1h
cmtlZCgpIGNvbnN0OwotICAgICAgICB2b2lkIG1hcmsoKTsKKyAgICAgICAgdm9pZCBtYXJrQ2hp
bGRyZW4oTWFya1N0YWNrJik7CiAgICAgICAgIAogICAgICAgICBSZWdpc3RlcihKU0FjdGl2YXRp
b24qKTsKICAgICAgICAgUmVnaXN0ZXIoQ2FsbEZyYW1lKik7CkBAIC0xMjAsMTEgKzEyMCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4ganNWYWx1ZSgpLm1hcmtlZCgpOwogICAg
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBSZWdpc3Rlcjo6bWFyaygpCi0gICAgewotICAg
ICAgICBqc1ZhbHVlKCkubWFyaygpOwotICAgIH0KLSAgICAKICAgICAvLyBJbnRlcnByZXRlciBm
dW5jdGlvbnMKIAogICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6OlJlZ2lzdGVyKEpTQWN0aXZh
dGlvbiogYWN0aXZhdGlvbikKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1JlZ2lzdGVyRmlsZS5oIGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxl
LmgKaW5kZXggZDQ2YmRjOS4uYjVmNzQ1MiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
UmVnaXN0ZXJGaWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEzNiw4ICsxMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBSZWdpc3RlciogbGFzdEdsb2JhbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgLSBtX251bUds
b2JhbHM7IH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgbWFya0dsb2JhbHMoSGVhcCogaGVhcCkg
eyBoZWFwLT5tYXJrQ29uc2VydmF0aXZlbHkobGFzdEdsb2JhbCgpLCBtX3N0YXJ0KTsgfQotICAg
ICAgICB2b2lkIG1hcmtDYWxsRnJhbWVzKEhlYXAqIGhlYXApIHsgaGVhcC0+bWFya0NvbnNlcnZh
dGl2ZWx5KG1fc3RhcnQsIG1fZW5kKTsgfQorICAgICAgICB2b2lkIG1hcmtHbG9iYWxzKE1hcmtT
dGFjayYgbWFya1N0YWNrLCBIZWFwKiBoZWFwKSB7IGhlYXAtPm1hcmtDb25zZXJ2YXRpdmVseSht
YXJrU3RhY2ssIGxhc3RHbG9iYWwoKSwgbV9zdGFydCk7IH0KKyAgICAgICAgdm9pZCBtYXJrQ2Fs
bEZyYW1lcyhNYXJrU3RhY2smIG1hcmtTdGFjaywgSGVhcCogaGVhcCkgeyBoZWFwLT5tYXJrQ29u
c2VydmF0aXZlbHkobWFya1N0YWNrLCBtX3N0YXJ0LCBtX2VuZCk7IH0KIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwIGIvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmNwcAppbmRleCA2NWRlODljLi40MzI0YTA2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKQEAg
LTE4MTgsMTQgKzE4MTgsMTQgQEAgU2NvcGVOb2RlRGF0YTo6U2NvcGVOb2RlRGF0YShQYXJzZXJB
cmVuYSYgYXJlbmEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3QKICAgICAgICAgY2hp
bGRyZW4tPnJlbGVhc2VDb250ZW50c0ludG9WZWN0b3IobV9jaGlsZHJlbik7CiB9CiAKLXZvaWQg
U2NvcGVOb2RlRGF0YTo6bWFyaygpCit2b2lkIFNjb3BlTm9kZURhdGE6Om1hcmtBZ2dyZWdhdGUo
TWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgRnVuY3Rpb25TdGFjazo6aXRlcmF0b3IgZW5k
ID0gbV9mdW5jdGlvblN0YWNrLmVuZCgpOwogICAgIGZvciAoRnVuY3Rpb25TdGFjazo6aXRlcmF0
b3IgcHRyID0gbV9mdW5jdGlvblN0YWNrLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CiAg
ICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkgPSAoKnB0ciktPmJvZHkoKTsKICAgICAgICAg
aWYgKCFib2R5LT5pc0dlbmVyYXRlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGJvZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCkubWFyaygpOworICAgICAgICBib2R5LT5nZW5lcmF0
ZWRCeXRlY29kZSgpLm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAgICB9CiB9CiAKQEAgLTE5
NzIsMTAgKzE5NzIsMTAgQEAgRXZhbENvZGVCbG9jayYgRXZhbE5vZGU6OmJ5dGVjb2RlRm9yRXhj
ZXB0aW9uSW5mb1JlcGFyc2UoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2gKICAgICByZXR1cm4gKm1f
Y29kZTsKIH0KIAotdm9pZCBFdmFsTm9kZTo6bWFyaygpCit2b2lkIEV2YWxOb2RlOjptYXJrQWdn
cmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
bWFyayBvdXIgb3duIENvZGVCbG9jayBhcyB0aGUgSlNHbG9iYWxPYmplY3QgdGFrZXMgY2FyZSBv
ZiB0aGF0Ci0gICAgZGF0YSgpLT5tYXJrKCk7CisgICAgZGF0YSgpLT5tYXJrQWdncmVnYXRlKG1h
cmtTdGFjayk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMjAzMCwxMCArMjAzMCwxMCBAQCB2
b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBhcnNpbmcoSWRlbnRpZmllciogcGFyYW1ldGVy
cywgc2l6ZV90IHBhcmFtZXRlckNvdQogICAgIG1fcGFyYW1ldGVyQ291bnQgPSBwYXJhbWV0ZXJD
b3VudDsKIH0KIAotdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjptYXJrKCkKK3ZvaWQgRnVuY3Rpb25C
b2R5Tm9kZTo6bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBpZiAo
bV9jb2RlKQotICAgICAgICBtX2NvZGUtPm1hcmsoKTsKKyAgICAgICAgbV9jb2RlLT5tYXJrQWdn
cmVnYXRlKG1hcmtTdGFjayk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAppbmRleCA0ZTViODY0Li43MDNiMzg0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMTM5MCw3
ICsxMzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsK
ICAgICAgICAgU3RhdGVtZW50VmVjdG9yIG1fY2hpbGRyZW47CiAKLSAgICAgICAgdm9pZCBtYXJr
KCk7CisgICAgICAgIHZvaWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smKTsKICAgICB9OwogCiAg
ICAgY2xhc3MgU2NvcGVOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBQYXJzZXJB
cmVuYVJlZkNvdW50ZWQgewpAQCAtMTQzNiw3ICsxNDM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5tX251bUNvbnN0YW50cyArIDI7CiAgICAgICAgIH0K
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smKSB7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
IEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGUoKQpAQCAtMTUxNSw3ICsxNTE1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgRXZhbENvZGVCbG9jayYgYnl0ZWNvZGVGb3JFeGNlcHRpb25J
bmZvUmVwYXJzZShTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQWdncmVnYXRlKE1hcmtT
dGFjayYpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgSklUQ29kZSYgaml0Q29kZShTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbikKQEAgLTE1NjMsNyArMTU2Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25zdDsKIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0FnZ3JlZ2F0ZShN
YXJrU3RhY2smKTsKIAogICAgICAgICB2b2lkIGZpbmlzaFBhcnNpbmcoY29uc3QgU291cmNlQ29k
ZSYsIFBhcmFtZXRlck5vZGUqKTsKICAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKElkZW50aWZp
ZXIqIHBhcmFtZXRlcnMsIHNpemVfdCBwYXJhbWV0ZXJDb3VudCk7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmdMaXN0LmNwcAppbmRleCAwYjVkOTU4Li5hYjJiNWQ3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
TGlzdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNywxNiAr
MzcsMTIgQEAgdm9pZCBBcmdMaXN0OjpnZXRTbGljZShpbnQgc3RhcnRJbmRleCwgQXJnTGlzdCYg
cmVzdWx0KSBjb25zdAogICAgIHJlc3VsdCA9IEFyZ0xpc3QobV9hcmdzICsgc3RhcnRJbmRleCwg
bV9hcmdDb3VudCAtIHN0YXJ0SW5kZXgpOwogfQogCi12b2lkIE1hcmtlZEFyZ3VtZW50QnVmZmVy
OjptYXJrTGlzdHMoTGlzdFNldCYgbWFya1NldCkKK3ZvaWQgTWFya2VkQXJndW1lbnRCdWZmZXI6
Om1hcmtMaXN0cyhNYXJrU3RhY2smIG1hcmtTdGFjaywgTGlzdFNldCYgbWFya1NldCkKIHsKICAg
ICBMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtYXJrU2V0LmVuZCgpOwogICAgIGZvciAoTGlzdFNl
dDo6aXRlcmF0b3IgaXQgPSBtYXJrU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciogbGlzdCA9ICppdDsKLQotICAgICAgICBpdGVyYXRv
ciBlbmQyID0gbGlzdC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoaXRlcmF0b3IgaXQyID0gbGlzdC0+
YmVnaW4oKTsgaXQyICE9IGVuZDI7ICsraXQyKQotICAgICAgICAgICAgaWYgKCEoKml0MikubWFy
a2VkKCkpCi0gICAgICAgICAgICAgICAgKCppdDIpLm1hcmsoKTsKKyAgICAgICAgbWFya1N0YWNr
LmFwcGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihsaXN0LT5tX2J1ZmZlciks
IGxpc3QtPm1fc2l6ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyZ0xpc3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCmluZGV4
IGE2NWY1NTkuLmFiNTAxYjYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
TGlzdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCkBAIC0xMzUsNyAr
MTM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXIgKyBtX3NpemU7IH0KIAotICAgICAgICBzdGF0aWMgdm9p
ZCBtYXJrTGlzdHMoTGlzdFNldCYpOworICAgICAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoTWFy
a1N0YWNrJiwgTGlzdFNldCYpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzbG93QXBw
ZW5kKEpTVmFsdWUpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVu
dHMuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCmluZGV4IGY4Njdm
ZTguLmVjOWM0NTAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRz
LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3
endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3Zp
Y2gKICAqCkBAIC00MywzMCArNDMsMjIgQEAgQXJndW1lbnRzOjp+QXJndW1lbnRzKCkKICAgICAg
ICAgZGVsZXRlIFtdIGQtPmV4dHJhQXJndW1lbnRzOwogfQogCi12b2lkIEFyZ3VtZW50czo6bWFy
aygpCit2b2lkIEFyZ3VtZW50czo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQog
ewotICAgIEpTT2JqZWN0OjptYXJrKCk7CisgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJr
U3RhY2spOwogCi0gICAgaWYgKGQtPnJlZ2lzdGVyQXJyYXkpIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGQtPm51bVBhcmFtZXRlcnM7ICsraSkgewotICAgICAgICAgICAgaWYg
KCFkLT5yZWdpc3RlckFycmF5W2ldLm1hcmtlZCgpKQotICAgICAgICAgICAgICAgIGQtPnJlZ2lz
dGVyQXJyYXlbaV0ubWFyaygpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChkLT5yZWdpc3Rl
ckFycmF5KQorICAgICAgICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8
SlNWYWx1ZSo+KGQtPnJlZ2lzdGVyQXJyYXkuZ2V0KCkpLCBkLT5udW1QYXJhbWV0ZXJzKTsKIAog
ICAgIGlmIChkLT5leHRyYUFyZ3VtZW50cykgewogICAgICAgICB1bnNpZ25lZCBudW1FeHRyYUFy
Z3VtZW50cyA9IGQtPm51bUFyZ3VtZW50cyAtIGQtPm51bVBhcmFtZXRlcnM7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FeHRyYUFyZ3VtZW50czsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoIWQtPmV4dHJhQXJndW1lbnRzW2ldLm1hcmtlZCgpKQotICAgICAgICAgICAgICAg
IGQtPmV4dHJhQXJndW1lbnRzW2ldLm1hcmsoKTsKLSAgICAgICAgfQorICAgICAgICBtYXJrU3Rh
Y2suYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGQtPmV4dHJhQXJndW1l
bnRzKSwgbnVtRXh0cmFBcmd1bWVudHMpOwogICAgIH0KIAotICAgIGlmICghZC0+Y2FsbGVlLT5t
YXJrZWQoKSkKLSAgICAgICAgZC0+Y2FsbGVlLT5tYXJrKCk7CisgICAgbWFya1N0YWNrLmFwcGVu
ZChkLT5jYWxsZWUpOwogCi0gICAgaWYgKGQtPmFjdGl2YXRpb24gJiYgIWQtPmFjdGl2YXRpb24t
Pm1hcmtlZCgpKQotICAgICAgICBkLT5hY3RpdmF0aW9uLT5tYXJrKCk7CisgICAgaWYgKGQtPmFj
dGl2YXRpb24pCisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQoZC0+YWN0aXZhdGlvbik7CiB9CiAK
IHZvaWQgQXJndW1lbnRzOjpjb3B5VG9SZWdpc3RlcnMoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rl
ciogYnVmZmVyLCB1aW50MzJfdCBtYXhTaXplKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgK
aW5kZXggMGZhOTQ0Yy4uNzlmZTcyMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdh
dGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAt
NjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIGluZm87CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAgICAgICB2b2lkIGZpbGxB
cmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29sbGVjdG9yLmNwcAppbmRleCA5YTYxOTgwLi5jMTg4MDE2IDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2xsZWN0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU09OT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrLmgi
CiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJUcmFjaW5nLmgiCiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgpAQCAtNjQyLDcgKzY0Myw3IEBAIHZvaWQgSGVhcDo6cmVnaXN0ZXJUaHJlYWQoKQog
Ly8gY2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGZvciB0aGlzIHRvIGJlIHZh
bGlkCiAjZGVmaW5lIElTX0hBTEZfQ0VMTF9BTElHTkVEKHApICgoKGludHB0cl90KShwKSAmIChD
RUxMX01BU0sgPj4gMSkpID09IDApCiAKLXZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KHZv
aWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJr
U3RhY2smIG1hcmtTdGFjaywgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKIHsKICAgICBpZiAoc3Rh
cnQgPiBlbmQpIHsKICAgICAgICAgdm9pZCogdG1wID0gc3RhcnQ7CkBAIC02ODMsOSArNjg0LDgg
QEAgdm9pZCBIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkodm9pZCogc3RhcnQsIHZvaWQqIGVuZCkK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCB1c2VkUHJpbWFyeUJs
b2NrczsgYmxvY2srKykgewogICAgICAgICAgICAgICAgIGlmICgocHJpbWFyeUJsb2Nrc1tibG9j
a10gPT0gYmxvY2tBZGRyKSAmIChvZmZzZXQgPD0gbGFzdENlbGxPZmZzZXQpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PENvbGxlY3RvckNlbGwqPih4QXNCaXRz
KS0+dS5mcmVlQ2VsbC56ZXJvSWZGcmVlICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEpTQ2VsbCogaW1wID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaW1wLT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbXAtPm1hcmsoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtTdGFj
ay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRzKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC02OTYsMTUg
KzY5NiwxNSBAQCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseSh2b2lkKiBzdGFydCwgdm9p
ZCogZW5kKQogICAgIH0KIH0KIAotdm9pZCBORVZFUl9JTkxJTkUgSGVhcDo6bWFya0N1cnJlbnRU
aHJlYWRDb25zZXJ2YXRpdmVseUludGVybmFsKCkKK3ZvaWQgTkVWRVJfSU5MSU5FIEhlYXA6Om1h
cmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbChNYXJrU3RhY2smIG1hcmtTdGFj
aykKIHsKICAgICB2b2lkKiBkdW1teTsKICAgICB2b2lkKiBzdGFja1BvaW50ZXIgPSAmZHVtbXk7
CiAgICAgdm9pZCogc3RhY2tCYXNlID0gY3VycmVudFRocmVhZFN0YWNrQmFzZSgpOwotICAgIG1h
cmtDb25zZXJ2YXRpdmVseShzdGFja1BvaW50ZXIsIHN0YWNrQmFzZSk7CisgICAgbWFya0NvbnNl
cnZhdGl2ZWx5KG1hcmtTdGFjaywgc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UpOwogfQogCi12b2lk
IEhlYXA6Om1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHkoKQordm9pZCBIZWFwOjptYXJr
Q3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrKQogewogICAg
IC8vIHNldGptcCBmb3JjZXMgdm9sYXRpbGUgcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrCiAgICAg
am1wX2J1ZiByZWdpc3RlcnM7CkBAIC03MTcsNyArNzE3LDcgQEAgdm9pZCBIZWFwOjptYXJrQ3Vy
cmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KCkKICNwcmFnbWEgd2FybmluZyhwb3ApCiAjZW5kaWYK
IAotICAgIG1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbCgpOworICAgIG1h
cmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbChtYXJrU3RhY2spOwogfQogCiAj
aWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQpAQCAtODQ5LDcgKzg0OSw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCogb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIoY29uc3QgUGxhdGZvcm1UaHJl
YWRSZWdpc3RlcnMmIHJlZ3MpCiAjZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrT3RoZXJUaHJl
YWRDb25zZXJ2YXRpdmVseShUaHJlYWQqIHRocmVhZCkKK3ZvaWQgSGVhcDo6bWFya090aGVyVGhy
ZWFkQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiBtYXJrU3RhY2ssIFRocmVhZCogdGhyZWFkKQog
ewogICAgIHN1c3BlbmRUaHJlYWQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCk7CiAKQEAgLTg1Nywx
OSArODU3LDE5IEBAIHZvaWQgSGVhcDo6bWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoVGhy
ZWFkKiB0aHJlYWQpCiAgICAgc2l6ZV90IHJlZ1NpemUgPSBnZXRQbGF0Zm9ybVRocmVhZFJlZ2lz
dGVycyh0aHJlYWQtPnBsYXRmb3JtVGhyZWFkLCByZWdzKTsKIAogICAgIC8vIG1hcmsgdGhlIHRo
cmVhZCdzIHJlZ2lzdGVycwotICAgIG1hcmtDb25zZXJ2YXRpdmVseShzdGF0aWNfY2FzdDx2b2lk
Kj4oJnJlZ3MpLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJnJl
Z3MpICsgcmVnU2l6ZSkpOworICAgIG1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ssIHN0YXRp
Y19jYXN0PHZvaWQqPigmcmVncyksIHN0YXRpY19jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PGNoYXIqPigmcmVncykgKyByZWdTaXplKSk7CiAKICAgICB2b2lkKiBzdGFja1BvaW50ZXIgPSBv
dGhlclRocmVhZFN0YWNrUG9pbnRlcihyZWdzKTsKLSAgICBtYXJrQ29uc2VydmF0aXZlbHkoc3Rh
Y2tQb2ludGVyLCB0aHJlYWQtPnN0YWNrQmFzZSk7CisgICAgbWFya0NvbnNlcnZhdGl2ZWx5KG1h
cmtTdGFjaywgc3RhY2tQb2ludGVyLCB0aHJlYWQtPnN0YWNrQmFzZSk7CiAKICAgICByZXN1bWVU
aHJlYWQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCk7CiB9CiAKICNlbmRpZgogCi12b2lkIEhlYXA6
Om1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseSgpCit2b2lkIEhlYXA6Om1hcmtTdGFja09i
amVjdHNDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBtYXJrQ3Vy
cmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KCk7CisgICAgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2
YXRpdmVseShtYXJrU3RhY2spOwogCiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQog
CkBAIC04NzksNyArODc5LDcgQEAgdm9pZCBIZWFwOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0
aXZlbHkoKQogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBGb3JiaWQgbWFsbG9jIGR1cmlu
ZyB0aGUgbWFyayBwaGFzZS4gTWFya2luZyBhIHRocmVhZCBzdXNwZW5kcyBpdCwgc28gCi0gICAg
ICAgIC8vIGEgbWFsbG9jIGluc2lkZSBtYXJrKCkgd291bGQgcmlzayBhIGRlYWRsb2NrIHdpdGgg
YSB0aHJlYWQgdGhhdCBoYWQgYmVlbiAKKyAgICAgICAgLy8gYSBtYWxsb2MgaW5zaWRlIG1hcmtD
aGlsZHJlbigpIHdvdWxkIHJpc2sgYSBkZWFkbG9jayB3aXRoIGEgdGhyZWFkIHRoYXQgaGFkIGJl
ZW4gCiAgICAgICAgIC8vIHN1c3BlbmRlZCB3aGlsZSBob2xkaW5nIHRoZSBtYWxsb2MgbG9jay4K
ICAgICAgICAgZmFzdE1hbGxvY0ZvcmJpZCgpOwogI2VuZGlmCkBAIC04ODcsNyArODg3LDcgQEAg
dm9pZCBIZWFwOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoKQogICAgICAgICAvLyBh
bmQgc2luY2UgdGhpcyBpcyBhIHNoYXJlZCBoZWFwLCB0aGV5IGFyZSByZWFsIGxvY2tzLgogICAg
ICAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0
aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAgIGlmICghcHRocmVhZF9lcXVhbCh0
aHJlYWQtPnBvc2l4VGhyZWFkLCBwdGhyZWFkX3NlbGYoKSkpCi0gICAgICAgICAgICAgICAgbWFy
a090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkodGhyZWFkKTsKKyAgICAgICAgICAgICAgICBtYXJr
T3RoZXJUaHJlYWRDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ssIHRocmVhZCk7CiAgICAgICAgIH0K
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGZhc3RNYWxsb2NBbGxvdygpOwpAQCAtOTQ3LDcgKzk0
Nyw3IEBAIEhlYXAqIEhlYXA6OmhlYXAoSlNWYWx1ZSB2KQogICAgIHJldHVybiBIZWFwOjpjZWxs
QmxvY2sodi5hc0NlbGwoKSktPmhlYXA7CiB9CiAKLXZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9i
amVjdHMoKQordm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhY2smIG1hcmtT
dGFjaykKIHsKICAgICBpZiAobV9wcm90ZWN0ZWRWYWx1ZXNNdXRleCkKICAgICAgICAgbV9wcm90
ZWN0ZWRWYWx1ZXNNdXRleC0+bG9jaygpOwpAQCAtOTU1LDggKzk1NSwxMCBAQCB2b2lkIEhlYXA6
Om1hcmtQcm90ZWN0ZWRPYmplY3RzKCkKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAoUHJvdGVjdENvdW50U2V0Ojpp
dGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBKU0NlbGwqIHZhbCA9IGl0LT5maXJzdDsKLSAgICAgICAgaWYgKCF2YWwtPm1h
cmtlZCgpKQotICAgICAgICAgICAgdmFsLT5tYXJrKCk7CisgICAgICAgIGlmICghdmFsLT5tYXJr
ZWQoKSkgeworICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2YWwpOworICAgICAgICAgICAg
bWFya1N0YWNrLmRyYWluKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9wcm90ZWN0
ZWRWYWx1ZXNNdXRleCkKQEAgLTEwNjEsNyArMTA2Myw3IEBAIHRlbXBsYXRlIDxIZWFwVHlwZSBo
ZWFwVHlwZT4gc2l6ZV90IEhlYXA6OnN3ZWVwKCkKICAgICBoZWFwLmV4dHJhQ29zdCA9IDA7CiAg
ICAgcmV0dXJuIG51bUxpdmVPYmplY3RzOwogfQotICAgIAorCiBib29sIEhlYXA6OmNvbGxlY3Qo
KQogewogI2lmbmRlZiBOREVCVUcKQEAgLTEwODAsMjAgKzEwODIsMjIgQEAgYm9vbCBIZWFwOjpj
b2xsZWN0KCkKICAgICBudW1iZXJIZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9u
OwogCiAgICAgLy8gTUFSSzogZmlyc3QgbWFyayBhbGwgcmVmZXJlbmNlZCBvYmplY3RzIHJlY3Vy
c2l2ZWx5IHN0YXJ0aW5nIG91dCBmcm9tIHRoZSBzZXQgb2Ygcm9vdCBvYmplY3RzCi0KLSAgICBt
YXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoKTsKLSAgICBtYXJrUHJvdGVjdGVkT2JqZWN0
cygpOworICAgIE1hcmtTdGFjayYgbWFya1N0YWNrID0gbV9nbG9iYWxEYXRhLT5tYXJrU3RhY2s7
CisgICAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjayk7CisgICAgbWFy
a1Byb3RlY3RlZE9iamVjdHMobWFya1N0YWNrKTsKICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBt
X21hcmtMaXN0U2V0LT5zaXplKCkpCi0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHMoKm1fbWFya0xpc3RTZXQpOworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFy
a0xpc3RzKG1hcmtTdGFjaywgKm1fbWFya0xpc3RTZXQpOwogICAgIGlmIChtX2dsb2JhbERhdGEt
PmV4Y2VwdGlvbiAmJiAhbV9nbG9iYWxEYXRhLT5leGNlcHRpb24ubWFya2VkKCkpCi0gICAgICAg
IG1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLm1hcmsoKTsKLSAgICBtX2dsb2JhbERhdGEtPmludGVy
cHJldGVyLT5yZWdpc3RlckZpbGUoKS5tYXJrQ2FsbEZyYW1lcyh0aGlzKTsKKyAgICAgICAgbWFy
a1N0YWNrLmFwcGVuZChtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbik7CisgICAgbV9nbG9iYWxEYXRh
LT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkubWFya0NhbGxGcmFtZXMobWFya1N0YWNrLCB0
aGlzKTsKICAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5tYXJrKCk7CiAgICAgaWYgKG1f
Z2xvYmFsRGF0YS0+c2NvcGVOb2RlQmVpbmdSZXBhcnNlZCkKLSAgICAgICAgbV9nbG9iYWxEYXRh
LT5zY29wZU5vZGVCZWluZ1JlcGFyc2VkLT5tYXJrKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+
c2NvcGVOb2RlQmVpbmdSZXBhcnNlZC0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIGlm
IChtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmspCi0gICAgICAgIEpTT05PYmpl
Y3Q6Om1hcmtTdHJpbmdpZmllcnMobV9nbG9iYWxEYXRhLT5maXJzdFN0cmluZ2lmaWVyVG9NYXJr
KTsKKyAgICAgICAgSlNPTk9iamVjdDo6bWFya1N0cmluZ2lmaWVycyhtYXJrU3RhY2ssIG1fZ2xv
YmFsRGF0YS0+Zmlyc3RTdHJpbmdpZmllclRvTWFyayk7CiAKKyAgICBtYXJrU3RhY2suZHJhaW4o
KTsKKyAgICBtYXJrU3RhY2suY29tcGFjdCgpOwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktF
RCgpOwogCiAgICAgc2l6ZV90IG9yaWdpbmFsTGl2ZU9iamVjdHMgPSBwcmltYXJ5SGVhcC5udW1M
aXZlT2JqZWN0cyArIG51bWJlckhlYXAubnVtTGl2ZU9iamVjdHM7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2xsZWN0b3IuaAppbmRleCA5YTg4MjYyLi44NzdmODkwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29s
bGVjdG9yLmgKQEAgLTM5LDExICszOSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNs
YXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOwogICAgIGNsYXNzIENvbGxlY3RvckJsb2NrOwogICAg
IGNsYXNzIEpTQ2VsbDsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgSlNWYWx1
ZTsKKyAgICBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKKyAgICBjbGFzcyBNYXJrU3RhY2s7
CiAKICAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlv
biwgQ29sbGVjdGlvbiB9OwogICAgIGVudW0gSGVhcFR5cGUgeyBQcmltYXJ5SGVhcCwgTnVtYmVy
SGVhcCB9OwpAQCAtMTExLDcgKzExMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0
aWMgYm9vbCBpc0NlbGxNYXJrZWQoY29uc3QgSlNDZWxsKik7CiAgICAgICAgIHN0YXRpYyB2b2lk
IG1hcmtDZWxsKEpTQ2VsbCopOwogCi0gICAgICAgIHZvaWQgbWFya0NvbnNlcnZhdGl2ZWx5KHZv
aWQqIHN0YXJ0LCB2b2lkKiBlbmQpOworICAgICAgICB2b2lkIG1hcmtDb25zZXJ2YXRpdmVseShN
YXJrU3RhY2smLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKIAogICAgICAgICBIYXNoU2V0PE1h
cmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0U2V0KCkgeyBpZiAoIW1fbWFya0xpc3RTZXQp
IG1fbWFya0xpc3RTZXQgPSBuZXcgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+OyByZXR1
cm4gKm1fbWFya0xpc3RTZXQ7IH0KIApAQCAtMTMzLDExICsxMzQsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH5IZWFwKCk7CiAKICAgICAgICAgdm9pZCByZWNvcmRFeHRyYUNvc3Qoc2l6
ZV90KTsKLSAgICAgICAgdm9pZCBtYXJrUHJvdGVjdGVkT2JqZWN0cygpOwotICAgICAgICB2b2lk
IG1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHkoKTsKLSAgICAgICAgdm9pZCBtYXJrQ3Vy
cmVudFRocmVhZENvbnNlcnZhdGl2ZWx5SW50ZXJuYWwoKTsKLSAgICAgICAgdm9pZCBtYXJrT3Ro
ZXJUaHJlYWRDb25zZXJ2YXRpdmVseShUaHJlYWQqKTsKLSAgICAgICAgdm9pZCBtYXJrU3RhY2tP
YmplY3RzQ29uc2VydmF0aXZlbHkoKTsKKyAgICAgICAgdm9pZCBtYXJrUHJvdGVjdGVkT2JqZWN0
cyhNYXJrU3RhY2smKTsKKyAgICAgICAgdm9pZCBtYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2
ZWx5KE1hcmtTdGFjayYpOworICAgICAgICB2b2lkIG1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0
aXZlbHlJbnRlcm5hbChNYXJrU3RhY2smKTsKKyAgICAgICAgdm9pZCBtYXJrT3RoZXJUaHJlYWRD
b25zZXJ2YXRpdmVseShNYXJrU3RhY2smLCBUaHJlYWQqKTsKKyAgICAgICAgdm9pZCBtYXJrU3Rh
Y2tPYmplY3RzQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJik7CiAKICAgICAgICAgdHlwZWRlZiBI
YXNoQ291bnRlZFNldDxKU0NlbGwqPiBQcm90ZWN0Q291bnRTZXQ7CiAKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAppbmRleCBjZDFiNDBhLi5jYzg1MzU0IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxNCArMjgsMTQg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgR2V0dGVyU2V0dGVyOjptYXJrKCkKK3ZvaWQg
R2V0dGVyU2V0dGVyOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAg
SlNDZWxsOjptYXJrKCk7CisgICAgSlNDZWxsOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIAog
ICAgIGlmIChtX2dldHRlciAmJiAhbV9nZXR0ZXItPm1hcmtlZCgpKQotICAgICAgICBtX2dldHRl
ci0+bWFyaygpOworICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1fZ2V0dGVyKTsKICAgICBpZiAo
bV9zZXR0ZXIgJiYgIW1fc2V0dGVyLT5tYXJrZWQoKSkKLSAgICAgICAgbV9zZXR0ZXItPm1hcmso
KTsKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX3NldHRlcik7CiB9CiAKIEpTVmFsdWUgR2V0
dGVyU2V0dGVyOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBl
KSBjb25zdApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
aCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKaW5kZXggZTZiNzRhMS4u
NjdjMTQ3MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMywyMCArMzMsMjMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgLy8gZm9yIGEgcHJvcGVydHkuCiAgICAgY2xhc3MgR2V0dGVyU2V0
dGVyIDogcHVibGljIEpTQ2VsbCB7CiAgICAgcHVibGljOgotICAgICAgICBHZXR0ZXJTZXR0ZXIo
KQotICAgICAgICAgICAgOiBKU0NlbGwoMCkKKyAgICAgICAgR2V0dGVyU2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYykKKyAgICAgICAgICAgIDogSlNDZWxsKGV4ZWMtPmdsb2JhbERhdGEoKS5nZXR0ZXJT
ZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fZ2V0dGVyKDApCiAgICAgICAg
ICAgICAsIG1fc2V0dGVyKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJik7CiAKICAgICAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0
dGVyOyB9CiAgICAgICAgIHZvaWQgc2V0R2V0dGVyKEpTT2JqZWN0KiBnZXR0ZXIpIHsgbV9nZXR0
ZXIgPSBnZXR0ZXI7IH0KICAgICAgICAgSlNPYmplY3QqIHNldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0dGVyOyB9CiAgICAgICAgIHZvaWQgc2V0U2V0dGVyKEpTT2JqZWN0KiBzZXR0ZXIpIHsg
bV9zZXR0ZXIgPSBzZXR0ZXI7IH0KLQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oR2V0dGVy
U2V0dGVyVHlwZSkpOworICAgICAgICB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBi
b29sIGlzR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2xvYmFsRXZhbEZ1bmN0aW9uLmNwcAppbmRleCBiMGQ0YzI1Li4zMDc0Zjk1IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxGdW5jdGlvbi5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24uY3BwCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJp
Y2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAg
KgpAQCAtMzksMTEgKzM5LDEwIEBAIEdsb2JhbEV2YWxGdW5jdGlvbjo6R2xvYmFsRXZhbEZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0CiAgICAgQVNTRVJU
X0FSRyhjYWNoZWRHbG9iYWxPYmplY3QsIGNhY2hlZEdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQg
R2xvYmFsRXZhbEZ1bmN0aW9uOjptYXJrKCkKK3ZvaWQgR2xvYmFsRXZhbEZ1bmN0aW9uOjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgUHJvdG90eXBlRnVuY3Rpb246
Om1hcmsoKTsKLSAgICBpZiAoIW1fY2FjaGVkR2xvYmFsT2JqZWN0LT5tYXJrZWQoKSkKLSAgICAg
ICAgbV9jYWNoZWRHbG9iYWxPYmplY3QtPm1hcmsoKTsKKyAgICBQcm90b3R5cGVGdW5jdGlvbjo6
bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisgICAgbWFya1N0YWNrLmFwcGVuZChtX2NhY2hlZEds
b2JhbE9iamVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24uaCBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmgKaW5kZXggNDliMTg0Ny4uY2RiYTRhMCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24uaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxGdW5jdGlvbi5oCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQog
ICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGNhY2hlZEdsb2JhbE9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkR2xvYmFsT2JqZWN0OyB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
bWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBtX2Nh
Y2hlZEdsb2JhbE9iamVjdDsKICAgICB9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCmluZGV4IDNiZWYyNjMuLjg3YWRiY2QgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ5LDkgKzQ5LDkgQEAgSlNBY3RpdmF0aW9uOjp+SlNBY3RpdmF0aW9u
KCkKICAgICBkZWxldGUgZCgpOwogfQogCi12b2lkIEpTQWN0aXZhdGlvbjo6bWFyaygpCit2b2lk
IEpTQWN0aXZhdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAg
IEJhc2U6Om1hcmsoKTsKKyAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIAogICAg
IFJlZ2lzdGVyKiByZWdpc3RlckFycmF5ID0gZCgpLT5yZWdpc3RlckFycmF5LmdldCgpOwogICAg
IGlmICghcmVnaXN0ZXJBcnJheSkKQEAgLTU5LDI1ICs1OSwxMyBAQCB2b2lkIEpTQWN0aXZhdGlv
bjo6bWFyaygpCiAKICAgICBzaXplX3QgbnVtUGFyYW1ldGVyc01pbnVzVGhpcyA9IGQoKS0+ZnVu
Y3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlY29kZSgpLm1fbnVtUGFyYW1ldGVycyAtIDE7CiAKLSAg
ICBzaXplX3QgaSA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0gbnVtUGFyYW1ldGVyc01pbnVzVGhp
czsgCi0gICAgZm9yICggOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBSZWdpc3RlciYgciA9
IHJlZ2lzdGVyQXJyYXlbaV07Ci0gICAgICAgIGlmICghci5tYXJrZWQoKSkKLSAgICAgICAgICAg
IHIubWFyaygpOwotICAgIH0KKyAgICBzaXplX3QgY291bnQgPSBudW1QYXJhbWV0ZXJzTWludXNU
aGlzOworICAgIG1hcmtTdGFjay5hcHBlbmRWYWx1ZXMocmVnaXN0ZXJBcnJheSwgY291bnQpOwog
CiAgICAgc2l6ZV90IG51bVZhcnMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVkQnl0ZWNv
ZGUoKS5tX251bVZhcnM7CiAKICAgICAvLyBTa2lwIHRoZSBjYWxsIGZyYW1lLCB3aGljaCBzaXRz
IGJldHdlZW4gdGhlIHBhcmFtZXRlcnMgYW5kIHZhcnMuCi0gICAgaSArPSBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgY291bnQgKz0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplICsgbnVtVmFyczsKLQotICAgIGZvciAoIDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgUmVnaXN0ZXImIHIgPSByZWdpc3RlckFycmF5W2ldOwotICAgICAgICBpZiAoci5q
c1ZhbHVlKCkgJiYgIXIubWFya2VkKCkpCi0gICAgICAgICAgICByLm1hcmsoKTsKLSAgICB9Cisg
ICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhyZWdpc3RlckFycmF5ICsgY291bnQgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIG51bVZhcnMsIE1heUNvbnRhaW5OdWxsVmFsdWVz
KTsKIH0KIAogYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaCBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKaW5kZXggYzE4M2RhYy4uNmEwODQz
OSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBKU0FjdGl2YXRpb24oQ2FsbEZyYW1lKiwgUGFzc1JlZlB0
cjxGdW5jdGlvbkJvZHlOb2RlPik7CiAgICAgICAgIHZpcnR1YWwgfkpTQWN0aXZhdGlvbigpOwog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY1Nj
b3BlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDcwOGVmOTku
LjdkN2Q0YzQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
KysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAz
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC02MDEsMjYgKzYwMSwxOSBAQCB2
b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgIHB1
dFNsb3dDYXNlKGV4ZWMsIG1fc3RvcmFnZS0+bV9sZW5ndGgrKywgdmFsdWUpOwogfQogCi12b2lk
IEpTQXJyYXk6Om1hcmsoKQordm9pZCBKU0FycmF5OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBt
YXJrU3RhY2spCiB7Ci0gICAgSlNPYmplY3Q6Om1hcmsoKTsKKyAgICBKU09iamVjdDo6bWFya0No
aWxkcmVuKG1hcmtTdGFjayk7CiAKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7CiAKICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVu
Z3RoLCBzdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWUubWFya2VkKCkp
Ci0gICAgICAgICAgICB2YWx1ZS5tYXJrKCk7Ci0gICAgfQorICAgIG1hcmtTdGFjay5hcHBlbmRW
YWx1ZXMoc3RvcmFnZS0+bV92ZWN0b3IsIHVzZWRWZWN0b3JMZW5ndGgsIE1heUNvbnRhaW5OdWxs
VmFsdWVzKTsKIAogICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLm1hcmtl
ZCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLm1hcmsoKTsKLSAgICAgICAgfQorICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5kKGl0LT5zZWNvbmQpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5Lmgg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCBlYTQ5MGQ4Li40OWRmNmM0
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04OCw3ICs4OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHko
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmly
dHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAKICAgICAgICAgdm9pZCog
bGF6eUNyZWF0aW9uRGF0YSgpOwogICAgICAgICB2b2lkIHNldExhenlDcmVhdGlvbkRhdGEodm9p
ZCopOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKaW5kZXggMDI0MzcxYy4uNzVjY2Y3ZiAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04
NSw3ICs4NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXco
c2l6ZV90LCBFeGVjU3RhdGUqKTsKICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwg
SlNHbG9iYWxEYXRhKik7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQq
IHBsYWNlbWVudE5ld0Rlc3RpbmF0aW9uKSB7IHJldHVybiBwbGFjZW1lbnROZXdEZXN0aW5hdGlv
bjsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworCisgICAgICAgIHZvaWQgbWFya0Nl
bGxEaXJlY3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2sm
KTsKICAgICAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBPYmplY3Qgb3Bl
cmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgpAQCAtMTUzLDkg
KzE1NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIEhlYXA6OmlzQ2VsbE1h
cmtlZCh0aGlzKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBKU0NlbGw6Om1hcmsoKQorICAg
IGlubGluZSB2b2lkIEpTQ2VsbDo6bWFya0NlbGxEaXJlY3QoKQorICAgIHsKKyAgICAgICAgSGVh
cDo6bWFya0NlbGwodGhpcyk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgSlNDZWxsOjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJikKICAgICB7Ci0gICAgICAgIHJldHVybiBIZWFwOjptYXJrQ2Vs
bCh0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1hcmtlZCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUg
dm9pZCogSlNDZWxsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKQEAgLTIyNCw5ICsyMzEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBKU1ZhbHVlOjptYXJrKCkKKyAg
ICBpbmxpbmUgdm9pZCBKU1ZhbHVlOjptYXJrRGlyZWN0KCkKICAgICB7Ci0gICAgICAgIGFzQ2Vs
bCgpLT5tYXJrKCk7IC8vIGNhbGxlcnMgc2hvdWxkIGNoZWNrICFtYXJrZWQoKSBiZWZvcmUgY2Fs
bGluZyBtYXJrKCksIHNvIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggY2VsbHMKKyAg
ICAgICAgQVNTRVJUKCFtYXJrZWQoKSk7CisgICAgICAgIGFzQ2VsbCgpLT5tYXJrQ2VsbERpcmVj
dCgpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIEpTVmFsdWU6Om1hcmtDaGlsZHJlbihNYXJr
U3RhY2smIG1hcmtTdGFjaykKKyAgICB7CisgICAgICAgIEFTU0VSVChtYXJrZWQoKSk7CisgICAg
ICAgIGFzQ2VsbCgpLT5tYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKICAgICB9CiAKICAgICBpbmxp
bmUgYm9vbCBKU1ZhbHVlOjptYXJrZWQoKSBjb25zdApAQCAtMzM5LDYgKzM1MywxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBhc0NlbGwoKS0+Z2V0SlNOdW1iZXIoKTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9CisgICAgCisgICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aGFzQ2hpbGRyZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPj0gQ29tcG91bmRUeXBlOworICAg
IH0KKyAgICAKIAogICAgIGlubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9PYmplY3QoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogICAgIHsKQEAgLTM1MCw2ICszNzAsMzkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2VsbCgpLT50b1RoaXNPYmplY3QoZXhl
YykgOiB0b1RoaXNPYmplY3RTbG93Q2FzZShleGVjKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNlbGwpOworICAgICAgICBpZiAoY2VsbC0+bWFya2VkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNlbGwtPm1hcmtDZWxsRGlyZWN0KCk7CisgICAgICAgIGlmIChjZWxs
LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPj0gQ29tcG91bmRUeXBlKQorICAgICAg
ICAgICAgbV92YWx1ZXMuYXBwZW5kKGNlbGwpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIE1h
cmtTdGFjazo6ZHJhaW4oKSB7CisgICAgICAgIHdoaWxlICghbV9tYXJrU2V0cy5pc0VtcHR5KCkg
fHwgIW1fdmFsdWVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgd2hpbGUgKCghbV9tYXJrU2V0
cy5pc0VtcHR5KCkpICYmIG1fdmFsdWVzLnNpemUoKSA8IDUwKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgTWFya1NldCYgY3VycmVudCA9IG1fbWFya1NldHMucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgICAgIEpTVmFsdWUqIHB0ciA9IGN1cnJlbnQubV92YWx1ZXM7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSogZW5kID0gY3VycmVudC5tX2VuZDsKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudC5tX3Byb3BlcnRpZXMgPT0gTm9OdWxsVmFsdWVzKSB7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChwdHIgIT0gZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKCpwdHIr
Kyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KHB0ciAhPSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVl
ID0gKnB0cisrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB3aGlsZSAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IEpTQ2VsbCogY3VycmVudCA9IG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoY3VycmVudC0+bWFya2VkKCkpOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPm1h
cmtDaGlsZHJlbigqdGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTQ2VsbF9oCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAppbmRleCA3ZmVkYWQ3Li44NGM2MjYzIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAo
QykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAqCkBAIC04MywxMiArODMsMTIgQEAgSlNG
dW5jdGlvbjo6fkpTRnVuY3Rpb24oKQogICAgICAgICBzY29wZUNoYWluKCkuflNjb3BlQ2hhaW4o
KTsgLy8gRklYTUU6IERvbid0IHdlIG5lZWQgdG8gZG8gdGhpcyBpbiB0aGUgaW50ZXJwcmV0ZXIg
dG9vPwogfQogCi12b2lkIEpTRnVuY3Rpb246Om1hcmsoKQordm9pZCBKU0Z1bmN0aW9uOjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgQmFzZTo6bWFyaygpOwotICAg
IG1fYm9keS0+bWFyaygpOworICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworICAg
IG1fYm9keS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIGlmICghaXNIb3N0RnVuY3Rp
b24oKSkKLSAgICAgICAgc2NvcGVDaGFpbigpLm1hcmsoKTsKKyAgICAgICAgc2NvcGVDaGFpbigp
Lm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIH0KIAogQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0
Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAppbmRleCAxOWIxMjYxLi5jYWIxZTViIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aApAQCAtNjgsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRCb2R5
KFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSkgeyBtX2JvZHkgPSBib2R5OyB9CiAg
ICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkoKSBjb25zdCB7IHJldHVybiBtX2JvZHkuZ2V0
KCk7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlRE
QVRBIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAKaW5kZXggMTU2ZDEwMi4uMGY5MGU4ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvbGxlY3Rvci5o
IgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpA
QCAtNDEsNiArNDIsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRl
ICJQYXJzZXIuaCIKICNpbmNsdWRlICJMZXhlci5oIgpAQCAtMTE4LDYgKzEyMCw4IEBAIEpTR2xv
YmFsRGF0YTo6SlNHbG9iYWxEYXRhKGJvb2wgaXNTaGFyZWQsIGNvbnN0IFZQdHJTZXQmIHZwdHJT
ZXQpCiAgICAgLCBzdHJpbmdTdHJ1Y3R1cmUoSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZShqc051
bGwoKSkpCiAgICAgLCBub3RBbk9iamVjdEVycm9yU3R1YlN0cnVjdHVyZShKU05vdEFuT2JqZWN0
RXJyb3JTdHViOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQogICAgICwgbm90QW5PYmplY3RT
dHJ1Y3R1cmUoSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGpzTnVsbCgpKSkKKyAgICAs
IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlKEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShqc051bGwoKSkpCisgICAgLCBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUoR2V0
dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQogI2lmIFVTRShKU1ZBTFVFMzIp
CiAgICAgLCBudW1iZXJTdHJ1Y3R1cmUoSlNOdW1iZXJDZWxsOjpjcmVhdGVTdHJ1Y3R1cmUoanNO
dWxsKCkpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAppbmRleCA3
NDM0ZDk5Li4yOWJhNDlhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFya1N0YWNr
LmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiVGltZW91dENoZWNrZXIu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtOTcsNiArOTgsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gc3RyaW5nU3RydWN0dXJlOwogICAgICAg
ICBSZWZQdHI8U3RydWN0dXJlPiBub3RBbk9iamVjdEVycm9yU3R1YlN0cnVjdHVyZTsKICAgICAg
ICAgUmVmUHRyPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CisgICAgICAgIFJlZlB0
cjxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlOworICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7CiAjaWYgVVNFKEpTVkFMVUUzMikK
ICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbnVtYmVyU3RydWN0dXJlOwogI2VuZGlmCkBAIC0x
NDMsNiArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNjb3BlTm9kZSogc2NvcGVO
b2RlQmVpbmdSZXBhcnNlZDsKICAgICAgICAgU3RyaW5naWZpZXIqIGZpcnN0U3RyaW5naWZpZXJU
b01hcms7CiAKKyAgICAgICAgTWFya1N0YWNrIG1hcmtTdGFjazsKICAgICBwcml2YXRlOgogICAg
ICAgICBKU0dsb2JhbERhdGEoYm9vbCBpc1NoYXJlZCwgY29uc3QgVlB0clNldCYpOwogICAgICAg
ICBzdGF0aWMgSlNHbG9iYWxEYXRhKiYgc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCBjNTZiODRiLi43MjAzY2Jj
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtODAsMTYg
KzgwLDE2IEBAIHN0YXRpYyBjb25zdCBpbnQgaW5pdGlhbFRpY2tDb3VudFRocmVzaG9sZCA9IDI1
NTsKIC8vIFByZWZlcnJlZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCB0aW1l
b3V0IGNoZWNrCiBzdGF0aWMgY29uc3QgaW50IHByZWZlcnJlZFNjcmlwdENoZWNrVGltZUludGVy
dmFsID0gMTAwMDsKIAotc3RhdGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChKU1ZhbHVlIHYp
CitzdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0YWNrLCBK
U1ZhbHVlIHYpCiB7Ci0gICAgaWYgKHYgJiYgIXYubWFya2VkKCkpCi0gICAgICAgIHYubWFyaygp
OworICAgIGlmICh2KQorICAgICAgICBtYXJrU3RhY2suYXBwZW5kKHYpOwogfQogCi1zdGF0aWMg
aW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKGNvbnN0IFJlZlB0cjxTdHJ1Y3R1cmU+JiBzKQorc3Rh
dGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChNYXJrU3RhY2smIG1hcmtTdGFjaywgY29uc3Qg
UmVmUHRyPFN0cnVjdHVyZT4mIHMpCiB7CiAgICAgaWYgKHMpCi0gICAgICAgIHMtPm1hcmsoKTsK
KyAgICAgICAgcy0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogfQogCiBKU0dsb2JhbE9iamVj
dDo6fkpTR2xvYmFsT2JqZWN0KCkKQEAgLTM1Nyw0MyArMzU3LDQzIEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICBvbGRMYXN0
SW5Qcm90b3R5cGVDaGFpbi0+c2V0UHJvdG90eXBlKG9iamVjdFByb3RvdHlwZSk7CiB9CiAKLXZv
aWQgSlNHbG9iYWxPYmplY3Q6Om1hcmsoKQordm9pZCBKU0dsb2JhbE9iamVjdDo6bWFya0NoaWxk
cmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEpTVmFyaWFibGVPYmplY3Q6Om1hcmso
KTsKKyAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKICAgICAK
ICAgICBIYXNoU2V0PFByb2dyYW1Db2RlQmxvY2sqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29k
ZUJsb2NrcygpLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxQcm9ncmFtQ29kZUJsb2NrKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY29kZUJsb2NrcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgKCppdCktPm1hcmsoKTsKKyAgICAgICAgKCppdCktPm1hcmtBZ2dyZWdhdGUobWFy
a1N0YWNrKTsKIAogICAgIFJlZ2lzdGVyRmlsZSYgcmVnaXN0ZXJGaWxlID0gZ2xvYmFsRGF0YSgp
LT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCk7CiAgICAgaWYgKHJlZ2lzdGVyRmlsZS5nbG9i
YWxPYmplY3QoKSA9PSB0aGlzKQotICAgICAgICByZWdpc3RlckZpbGUubWFya0dsb2JhbHMoJmds
b2JhbERhdGEoKS0+aGVhcCk7Ci0KLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5yZWdFeHBDb25zdHJ1
Y3Rvcik7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+ZXJyb3JDb25zdHJ1Y3Rvcik7Ci0gICAgbWFy
a0lmTmVlZGVkKGQoKS0+ZXZhbEVycm9yQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChk
KCktPnJhbmdlRXJyb3JDb25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+cmVmZXJl
bmNlRXJyb3JDb25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+c3ludGF4RXJyb3JD
b25zdHJ1Y3Rvcik7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+dHlwZUVycm9yQ29uc3RydWN0b3Ip
OwotICAgIG1hcmtJZk5lZWRlZChkKCktPlVSSUVycm9yQ29uc3RydWN0b3IpOwotCi0gICAgbWFy
a0lmTmVlZGVkKGQoKS0+ZXZhbEZ1bmN0aW9uKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5jYWxs
RnVuY3Rpb24pOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmFwcGx5RnVuY3Rpb24pOwotCi0gICAg
bWFya0lmTmVlZGVkKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgp
LT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+YXJyYXlQcm90b3R5
cGUpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmJvb2xlYW5Qcm90b3R5cGUpOwotICAgIG1hcmtJ
Zk5lZWRlZChkKCktPnN0cmluZ1Byb3RvdHlwZSk7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+bnVt
YmVyUHJvdG90eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5kYXRlUHJvdG90eXBlKTsKLSAg
ICBtYXJrSWZOZWVkZWQoZCgpLT5yZWdFeHBQcm90b3R5cGUpOwotCi0gICAgbWFya0lmTmVlZGVk
KGQoKS0+bWV0aG9kQ2FsbER1bW15KTsKLQotICAgIG1hcmtJZk5lZWRlZChkKCktPmVycm9yU3Ry
dWN0dXJlKTsKKyAgICAgICAgcmVnaXN0ZXJGaWxlLm1hcmtHbG9iYWxzKG1hcmtTdGFjaywgJmds
b2JhbERhdGEoKS0+aGVhcCk7CisKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPnJl
Z0V4cENvbnN0cnVjdG9yKTsKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPmVycm9y
Q29uc3RydWN0b3IpOworICAgIG1hcmtJZk5lZWRlZChtYXJrU3RhY2ssIGQoKS0+ZXZhbEVycm9y
Q29uc3RydWN0b3IpOworICAgIG1hcmtJZk5lZWRlZChtYXJrU3RhY2ssIGQoKS0+cmFuZ2VFcnJv
ckNvbnN0cnVjdG9yKTsKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPnJlZmVyZW5j
ZUVycm9yQ29uc3RydWN0b3IpOworICAgIG1hcmtJZk5lZWRlZChtYXJrU3RhY2ssIGQoKS0+c3lu
dGF4RXJyb3JDb25zdHJ1Y3Rvcik7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgZCgpLT50
eXBlRXJyb3JDb25zdHJ1Y3Rvcik7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgZCgpLT5V
UklFcnJvckNvbnN0cnVjdG9yKTsKKworICAgIG1hcmtJZk5lZWRlZChtYXJrU3RhY2ssIGQoKS0+
ZXZhbEZ1bmN0aW9uKTsKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPmNhbGxGdW5j
dGlvbik7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgZCgpLT5hcHBseUZ1bmN0aW9uKTsK
KworICAgIG1hcmtJZk5lZWRlZChtYXJrU3RhY2ssIGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKKyAg
ICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBt
YXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPmFycmF5UHJvdG90eXBlKTsKKyAgICBtYXJrSWZO
ZWVkZWQobWFya1N0YWNrLCBkKCktPmJvb2xlYW5Qcm90b3R5cGUpOworICAgIG1hcmtJZk5lZWRl
ZChtYXJrU3RhY2ssIGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKKyAgICBtYXJrSWZOZWVkZWQobWFy
a1N0YWNrLCBkKCktPm51bWJlclByb3RvdHlwZSk7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFj
aywgZCgpLT5kYXRlUHJvdG90eXBlKTsKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCkt
PnJlZ0V4cFByb3RvdHlwZSk7CisKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPm1l
dGhvZENhbGxEdW1teSk7CisKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPmVycm9y
U3RydWN0dXJlKTsKIAogICAgIC8vIE5vIG5lZWQgdG8gbWFyayB0aGUgb3RoZXIgc3RydWN0dXJl
cywgYmVjYXVzZSB0aGVpciBwcm90b3R5cGVzIGFyZSBhbGwKICAgICAvLyBndWFyYW50ZWVkIHRv
IGJlIHJlZmVyZW5jZWQgZWxzZXdoZXJlLgpAQCAtNDAzLDExICs0MDMsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0OjptYXJrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IHNpemUgPSBk
KCktPnJlZ2lzdGVyQXJyYXlTaXplOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIFJlZ2lzdGVyJiByID0gcmVnaXN0ZXJBcnJheVtpXTsKLSAgICAgICAg
aWYgKCFyLm1hcmtlZCgpKQotICAgICAgICAgICAgci5tYXJrKCk7Ci0gICAgfQorICAgIG1hcmtT
dGFjay5hcHBlbmRWYWx1ZXMocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJBcnJh
eSksIHNpemUpOwogfQogCiBFeGVjU3RhdGUqIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA3NTVhN2UxLi5jZGE0
OWJkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTY2LDcgKzE2
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+SlNH
bG9iYWxPYmplY3QoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzT3duUHJvcGVydHlGb3JXcml0
ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U05vdEFuT2JqZWN0LmNwcAppbmRleCA5MzdkYzJiLi5hNTQyYTlmIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDExICs3NCwxMCBAQCBKU09iamVjdCogSlNO
b3RBbk9iamVjdDo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogfQogCiAvLyBNYXJr
aW5nCi12b2lkIEpTTm90QW5PYmplY3Q6Om1hcmsoKQordm9pZCBKU05vdEFuT2JqZWN0OjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgSlNDZWxsOjptYXJrKCk7Ci0g
ICAgaWYgKCFtX2V4Y2VwdGlvbi0+bWFya2VkKCkpCi0gICAgICAgIG1fZXhjZXB0aW9uLT5tYXJr
KCk7CisgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworICAgIG1hcmtTdGFj
ay5hcHBlbmQobV9leGNlcHRpb24pOwogfQogCiAvLyBKU09iamVjdCBtZXRob2RzCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaCBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCmluZGV4IGE4ZTM2YmQuLmI2NWZmNWYgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqKSBj
b25zdDsKIAogICAgICAgICAvLyBNYXJraW5nCi0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAKICAgICAg
ICAgLy8gSlNPYmplY3QgbWV0aG9kcwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAppbmRleCAyZjAyYjFk
Li4zYjhhMGJhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKQEAgLTY3LDcg
KzY3LDcgQEAgcHVibGljOgogICAgIH5TdHJpbmdpZmllcigpOwogICAgIEpTVmFsdWUgc3RyaW5n
aWZ5KEpTVmFsdWUpOwogCi0gICAgdm9pZCBtYXJrKCk7CisgICAgdm9pZCBtYXJrQWdncmVnYXRl
KE1hcmtTdGFjayYpOwogCiBwcml2YXRlOgogICAgIHR5cGVkZWYgVVN0cmluZyBTdHJpbmdCdWls
ZGVyOwpAQCAtMjIxLDE1ICsyMjEsMTIgQEAgU3RyaW5naWZpZXI6On5TdHJpbmdpZmllcigpCiAg
ICAgbV9leGVjLT5nbG9iYWxEYXRhKCkuZmlyc3RTdHJpbmdpZmllclRvTWFyayA9IG1fbmV4dFN0
cmluZ2lmaWVyVG9NYXJrOwogfQogCi12b2lkIFN0cmluZ2lmaWVyOjptYXJrKCkKK3ZvaWQgU3Ry
aW5naWZpZXI6Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgZm9y
IChTdHJpbmdpZmllciogc3RyaW5naWZpZXIgPSB0aGlzOyBzdHJpbmdpZmllcjsgc3RyaW5naWZp
ZXIgPSBzdHJpbmdpZmllci0+bV9uZXh0U3RyaW5naWZpZXJUb01hcmspIHsKICAgICAgICAgc2l6
ZV90IHNpemUgPSBtX2hvbGRlclN0YWNrLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2hv
bGRlclN0YWNrW2ldLm9iamVjdCgpOwotICAgICAgICAgICAgaWYgKCFvYmplY3QtPm1hcmtlZCgp
KQotICAgICAgICAgICAgICAgIG9iamVjdC0+bWFyaygpOwotICAgICAgICB9CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgbWFya1N0YWNrLmFw
cGVuZChtX2hvbGRlclN0YWNrW2ldLm9iamVjdCgpKTsKICAgICB9CiB9CiAKQEAgLTU4Myw5ICs1
ODAsOSBAQCBib29sIEpTT05PYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEpTT05PYmplY3Q6Om1hcmtTdHJpbmdpZmllcnMoU3RyaW5naWZpZXIqIHN0cmluZ2lmaWVy
KQordm9pZCBKU09OT2JqZWN0OjptYXJrU3RyaW5naWZpZXJzKE1hcmtTdGFjayYgbWFya1N0YWNr
LCBTdHJpbmdpZmllciogc3RyaW5naWZpZXIpCiB7Ci0gICAgc3RyaW5naWZpZXItPm1hcmsoKTsK
KyAgICBzdHJpbmdpZmllci0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogfQogCiBjbGFzcyBX
YWxrZXIgewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0Lmgg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAppbmRleCA4ZDUzNjRhLi5mYWNh
N2M3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaApAQCAtNDQsNyArNDQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyB2b2lkIG1hcmtTdHJpbmdpZmllcnMoU3RyaW5naWZpZXIqKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgbWFya1N0cmluZ2lmaWVycyhNYXJrU3RhY2smLCBTdHJpbmdpZmllciopOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCmluZGV4IDQxNWMyNWQuLjQxOWRmZTkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwg
KGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNjIsMjEgKzYyLDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTT2JqZWN0KTsKIAotdm9p
ZCBKU09iamVjdDo6bWFyaygpCit2b2lkIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNr
JiBtYXJrU3RhY2spCiB7CiAgICAgSlNPQkpFQ1RfTUFSS19CRUdJTigpOwogCi0gICAgSlNDZWxs
OjptYXJrKCk7Ci0gICAgbV9zdHJ1Y3R1cmUtPm1hcmsoKTsKKyAgICBKU0NlbGw6Om1hcmtDaGls
ZHJlbihtYXJrU3RhY2spOworICAgIG1fc3RydWN0dXJlLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFj
ayk7CiAKICAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHByb3BlcnR5U3RvcmFnZSgpOwot
CiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gbV9zdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZVNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0b3JhZ2VTaXplOyArK2kpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2ID0gSlNWYWx1ZTo6ZGVjb2RlKHN0b3JhZ2VbaV0pOwotICAgICAgICBp
ZiAoIXYubWFya2VkKCkpCi0gICAgICAgICAgICB2Lm1hcmsoKTsKLSAgICB9CisgICAgbWFya1N0
YWNrLmFwcGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihzdG9yYWdlKSwgc3Rv
cmFnZVNpemUpOwogCiAgICAgSlNPQkpFQ1RfTUFSS19FTkQoKTsKIH0KQEAgLTMxMCw3ICszMDUs
NyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTTwogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90OwotICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gbmV3IChleGVjKSBHZXR0
ZXJTZXR0ZXI7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdl
dHRlclNldHRlcihleGVjKTsKICAgICBwdXREaXJlY3RJbnRlcm5hbChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBHZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAg
ICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3
IHByb3BlcnR5LiBGb3IKQEAgLTMzNyw3ICszMzIsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVT
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
TwogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEdldHRlclNldHRlciog
Z2V0dGVyU2V0dGVyID0gbmV3IChleGVjKSBHZXR0ZXJTZXR0ZXI7CisgICAgR2V0dGVyU2V0dGVy
KiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKICAgICBwdXRE
aXJlY3RJbnRlcm5hbChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0
dGVyLCBTZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdl
IG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAppbmRleCAxYTE5YTIzLi5kZWNkNWU5IDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhw
bGljaXQgSlNPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYpOwogCiAgICAgICAgIC8vIFRoZSBpbmxpbmUgdmlydHVhbCBkZXN0cnVjdG9yIGNhbm5vdCBi
ZSB0aGUgZmlyc3QgdmlydHVhbCBmdW5jdGlvbiBkZWNsYXJlZAogICAgICAgICAvLyBpbiB0aGUg
Y2xhc3MgYXMgaXQgcmVzdWx0cyBpbiB0aGUgdnRhYmxlIGJlaW5nIGdlbmVyYXRlZCBhcyBhIHdl
YWsgc3ltYm9sCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcAppbmRleCA4YzdiNTNkLi5kYzAzMDRmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDExICs3MywxMSBAQCBK
U09iamVjdCogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6dG9PYmplY3QoRXhlY1N0YXRlKikgY29u
c3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjptYXJr
KCkKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYg
bWFya1N0YWNrKQogewotICAgIEpTQ2VsbDo6bWFyaygpOwotICAgIGlmIChtX29iamVjdCAmJiAh
bV9vYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBtX29iamVjdC0+bWFyaygpOworICAgIEpTQ2Vs
bDo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisgICAgaWYgKG1fb2JqZWN0KQorICAgICAgICBt
YXJrU3RhY2suYXBwZW5kKG1fb2JqZWN0KTsKIH0KIAogdm9pZCBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yOjppbnZhbGlkYXRlKCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmgKaW5kZXggOTgxN2MwNy4uNDUzNDUyOCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKKysrIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE0ICs1MSwxOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0
ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUq
KSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAgIEpTVmFsdWUgbmV4dChF
eGVjU3RhdGUqKTsKICAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KKyAgICAgICAgCisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUg
cHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUocHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUpKTsKKyAgICAgICAgfQogICAgIHBy
aXZhdGU6Ci0gICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoKTsKLSAgICAgICAgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcihKU09iamVjdCosIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlE
YXRhPiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpOworICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKEV4ZWNTdGF0ZSopOworICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgUGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IHByb3BlcnR5
TmFtZUFycmF5RGF0YSk7CiAKICAgICAgICAgSlNPYmplY3QqIG1fb2JqZWN0OwogICAgICAgICBS
ZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBtX2RhdGE7CkBAIC02NiwxNiArNzAsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y29uc3RfaXRl
cmF0b3IgbV9lbmQ7CiAgICAgfTsKIAotaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpT
UHJvcGVydHlOYW1lSXRlcmF0b3IoKQotICAgIDogSlNDZWxsKDApCitpbmxpbmUgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCisg
ICAgOiBKU0NlbGwoZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0
dXJlLmdldCgpKQogICAgICwgbV9vYmplY3QoMCkKICAgICAsIG1fcG9zaXRpb24oMCkKICAgICAs
IG1fZW5kKDApCiB7CiB9CiAKLWlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKEpTT2JqZWN0KiBvYmplY3QsIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1l
QXJyYXlEYXRhPiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpCi0gICAgOiBKU0NlbGwoMCkKK2lubGlu
ZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURh
dGE+IHByb3BlcnR5TmFtZUFycmF5RGF0YSkKKyAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRh
KCkucHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX29iamVjdChv
YmplY3QpCiAgICAgLCBtX2RhdGEocHJvcGVydHlOYW1lQXJyYXlEYXRhKQogICAgICwgbV9wb3Np
dGlvbihtX2RhdGEtPmJlZ2luKCkpCkBAIC04NiwxMiArOTAsMTIgQEAgaW5saW5lIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoSlNPYmplY3QqIG9iamVjdCwg
UGFzc1JlZlAKIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpCiB7CiAgICAgaWYgKHYu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjsKKyAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcihleGVjKTsKIAogICAgIEpTT2JqZWN0KiBvID0gdi50b09iamVjdChleGVjKTsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAgIG8tPmdldFByb3Bl
cnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcyk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcihvLCBwcm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCkpOworICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoZXhlYywgbywgcHJvcGVy
dHlOYW1lcy5yZWxlYXNlRGF0YSgpKTsKIH0KIAogaW5saW5lIEpTVmFsdWUgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6bmV4dChFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAppbmRleCA4NTkwN2M4Li5hODc3ZWM2IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDEy
ICszMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChK
U1N0YXRpY1Njb3BlT2JqZWN0KTsKIAotdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjptYXJrKCkK
K3ZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0
YWNrKQogewotICAgIEpTVmFyaWFibGVPYmplY3Q6Om1hcmsoKTsKLSAgICAKLSAgICBpZiAoIWQo
KS0+cmVnaXN0ZXJTdG9yZS5tYXJrZWQoKSkKLSAgICAgICAgZCgpLT5yZWdpc3RlclN0b3JlLm1h
cmsoKTsKKyAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKyAg
ICBtYXJrU3RhY2suYXBwZW5kKGQoKS0+cmVnaXN0ZXJTdG9yZS5qc1ZhbHVlKCkpOwogfQogCiBK
U09iamVjdCogSlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29w
ZU9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgK
aW5kZXggMmNhZjU0MC4uNWViMGU0YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAg
ICAgIHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LnVzdHJpbmcoKS5yZXAoKSwgU3ltYm9sVGFibGVF
bnRyeSgtMSwgYXR0cmlidXRlcykpOwogICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgfkpTU3Rh
dGljU2NvcGVPYmplY3QoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICAgICAgYm9vbCBpc0R5
bmFtaWNTY29wZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmpl
Y3QoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaCBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlLmgKaW5kZXggNjhmMjg5MC4uM2Q1NTA4ZCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZS5oCkBAIC0zMyw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBOdW1i
ZXJUeXBlICAgICAgICA9IDMsCiAgICAgICAgIE51bGxUeXBlICAgICAgICAgID0gNCwKICAgICAg
ICAgU3RyaW5nVHlwZSAgICAgICAgPSA1LAotICAgICAgICBPYmplY3RUeXBlICAgICAgICA9IDYs
Ci0gICAgICAgIEdldHRlclNldHRlclR5cGUgID0gNworICAgICAgICBDb21wb3VuZFR5cGUgICAg
ICA9IDYsCisgICAgICAgIE9iamVjdFR5cGUgICAgICAgID0gNywKKyAgICAgICAgR2V0dGVyU2V0
dGVyVHlwZSAgPSA4CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYWx1ZS5oCmluZGV4IGNiZjhmYzUuLjQwOGMxODcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00Miw2ICs0Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTSW1tZWRpYXRlOwogICAgIGNsYXNzIEpTT2JqZWN0
OwogICAgIGNsYXNzIEpTU3RyaW5nOworICAgIGNsYXNzIE1hcmtTdGFjazsKICAgICBjbGFzcyBQ
cm9wZXJ0eVNsb3Q7CiAgICAgY2xhc3MgUHV0UHJvcGVydHlTbG90OwogICAgIGNsYXNzIFVTdHJp
bmc7CkBAIC0xNzIsOCArMTczLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmbG9hdCB0
b0Zsb2F0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHRvTnVtYmVyKGV4ZWMpKTsgfQogCiAgICAgICAgIC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KLSAg
ICAgICAgdm9pZCBtYXJrKCk7CisgICAgICAgIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYp
OworICAgICAgICBib29sIGhhc0NoaWxkcmVuKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgbWFya2Vk
KCkgY29uc3Q7CisgICAgICAgIHZvaWQgbWFya0RpcmVjdCgpOwogCiAgICAgICAgIC8vIE9iamVj
dCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCiAgICAg
ICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9i
amVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKaW5k
ZXggZmI1NzAxOC4uMmMzOWY1YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dyYXBwZXJPYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVy
T2JqZWN0LmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1h
a3MgT3Jsb3ZpY2gKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUsIEluYy4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNiwxMSArMjYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFT
U19GSVRTX0lOX0NFTEwoSlNXcmFwcGVyT2JqZWN0KTsKIAotdm9pZCBKU1dyYXBwZXJPYmplY3Q6
Om1hcmsoKSAKK3ZvaWQgSlNXcmFwcGVyT2JqZWN0OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBt
YXJrU3RhY2spIAogewotICAgIEpTT2JqZWN0OjptYXJrKCk7Ci0gICAgaWYgKG1faW50ZXJuYWxW
YWx1ZSAmJiAhbV9pbnRlcm5hbFZhbHVlLm1hcmtlZCgpKQotICAgICAgICBtX2ludGVybmFsVmFs
dWUubWFyaygpOworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKyAgICBp
ZiAobV9pbnRlcm5hbFZhbHVlKQorICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1faW50ZXJuYWxW
YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
cmFwcGVyT2JqZWN0LmgKaW5kZXggMmEyZTNjNi4uMGIyYzY4MCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV3JhcHBlck9iamVjdC5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBKU1ZhbHVlIGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ludGVy
bmFsVmFsdWU7IH0KICAgICAgICAgdm9pZCBzZXRJbnRlcm5hbFZhbHVlKEpTVmFsdWUpOwogICAg
ICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgSlNWYWx1ZSBtX2ludGVybmFsVmFsdWU7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcmtTdGFjay5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkYmIxNwotLS0gL2Rldi9u
dWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmNwcApAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKworbmFtZXNwYWNlIEpT
QworeworCitzaXplX3QgTWFya1N0YWNrOjpzX3BhZ2VTaXplID0gMDsKKwordm9pZCBNYXJrU3Rh
Y2s6OmNvbXBhY3QoKQoreworICAgIEFTU0VSVChzX3BhZ2VTaXplKTsKKyAgICBtX3ZhbHVlcy5z
aHJpbmtBbGxvY2F0aW9uKHNfcGFnZVNpemUpOworICAgIG1fbWFya1NldHMuc2hyaW5rQWxsb2Nh
dGlvbihzX3BhZ2VTaXplKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXJrU3RhY2suaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzNTM1NQotLS0gL2Rldi9udWxsCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmgKQEAgLTAsMCArMSwxNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBN
YXJrU3RhY2tfaAorI2RlZmluZSBNYXJrU3RhY2tfaAorCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworICAgIGNs
YXNzIFJlZ2lzdGVyOworICAgIAorICAgIGVudW0gTWFya1NldFByb3BlcnRpZXMgeyBNYXlDb250
YWluTnVsbFZhbHVlcywgTm9OdWxsVmFsdWVzIH07CisgICAgCisgICAgY2xhc3MgTWFya1N0YWNr
IDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgTWFya1N0YWNrKCkKKyAgICAg
ICAgICAgIDogbV9tYXJrU2V0cygpCisgICAgICAgICAgICAsIG1fdmFsdWVzKCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChKU1ZhbHVl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICAg
ICAgaWYgKHZhbHVlLm1hcmtlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHZhbHVlLm1hcmtEaXJlY3QoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNDaGlsZHJl
bigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKEpTQ2VsbCogY2Vs
bCk7CisgICAgICAgIAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVzKFJl
Z2lzdGVyKiB2YWx1ZXMsIHNpemVfdCBjb3VudCwgTWFya1NldFByb3BlcnRpZXMgcHJvcGVydGll
cyA9IE5vTnVsbFZhbHVlcykKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVmFsdWVzKHJl
aW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHZhbHVlcyksIGNvdW50LCBwcm9wZXJ0aWVzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoSlNWYWx1
ZSogdmFsdWVzLCBzaXplX3QgY291bnQsIE1hcmtTZXRQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBO
b051bGxWYWx1ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAg
ICAgICAgICBtX21hcmtTZXRzLmFwcGVuZChNYXJrU2V0KHZhbHVlcywgdmFsdWVzICsgY291bnQs
IHByb3BlcnRpZXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSB2b2lkIGRyYWluKCk7
CisgICAgICAgIHZvaWQgY29tcGFjdCgpOworCisgICAgICAgIH5NYXJrU3RhY2soKSB7CisgICAg
ICAgICAgICBBU1NFUlQobV9tYXJrU2V0cy5pc0VtcHR5KCkpOworICAgICAgICAgICAgQVNTRVJU
KG1fdmFsdWVzLmlzRW1wdHkoKSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IHN0cnVjdCBNYXJrU2V0IHsKKyAgICAgICAgICAgIE1hcmtTZXQoSlNWYWx1ZSogdmFsdWVzLCBK
U1ZhbHVlKiBlbmQsIE1hcmtTZXRQcm9wZXJ0aWVzIHByb3BlcnRpZXMpCisgICAgICAgICAgICAg
ICAgOiBtX3ZhbHVlcyh2YWx1ZXMpCisgICAgICAgICAgICAgICAgLCBtX2VuZChlbmQpCisgICAg
ICAgICAgICAgICAgLCBtX3Byb3BlcnRpZXMocHJvcGVydGllcykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEpTVmFsdWUqIG1fdmFsdWVzOworICAgICAgICAgICAg
SlNWYWx1ZSogbV9lbmQ7CisgICAgICAgICAgICBNYXJrU2V0UHJvcGVydGllcyBtX3Byb3BlcnRp
ZXM7CisgICAgICAgIH07CisKKyAgICAgICAgc3RhdGljIHZvaWQqIHN0YWNrQWxsb2NhdGUoc2l6
ZV90IHNpemUpOworICAgICAgICBzdGF0aWMgdm9pZCBzdGFja1JlbGVhc2Uodm9pZCogYWRkciwg
c2l6ZV90IHNpemUpOworCisgICAgICAgIHN0YXRpYyBzaXplX3QgcGFnZVNpemUoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIXNfcGFnZVNpemUpCisgICAgICAgICAgICAgICAgc19wYWdl
U2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgICAgICAgICByZXR1cm4gc19wYWdlU2l6ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgTWFya1N0YWNr
QXJyYXkKKyAgICAgICAgeworICAgICAgICAgICAgTWFya1N0YWNrQXJyYXkoKQorICAgICAgICAg
ICAgICAgIDogbV90b3AoMCkKKyAgICAgICAgICAgICAgICAsIG1fYWxsb2NhdGVkKE1hcmtTdGFj
azo6cGFnZVNpemUoKSkKKyAgICAgICAgICAgICAgICAsIG1fY2FwYWNpdHkobV9hbGxvY2F0ZWQg
LyBzaXplb2YoVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxUKj4oc3RhY2tBbGxvY2F0ZShtX2FsbG9jYXRlZCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB+TWFya1N0YWNrQXJyYXkoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHN0YWNrUmVsZWFzZShtX2RhdGEsIG1fYWxsb2NhdGVkKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdm9pZCBleHBhbmQoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHNpemVfdCBvbGRBbGxvY2F0aW9uID0gbV9hbGxvY2F0ZWQ7CisgICAgICAgICAg
ICAgICAgbV9hbGxvY2F0ZWQgKj0gMjsKKyAgICAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gbV9h
bGxvY2F0ZWQgLyBzaXplb2YoVCk7CisgICAgICAgICAgICAgICAgdm9pZCogbmV3RGF0YSA9IHN0
YWNrQWxsb2NhdGUobV9hbGxvY2F0ZWQpOworICAgICAgICAgICAgICAgIG1lbWNweShuZXdEYXRh
LCBtX2RhdGEsIG9sZEFsbG9jYXRpb24pOworICAgICAgICAgICAgICAgIHN0YWNrUmVsZWFzZSht
X2RhdGEsIG9sZEFsbG9jYXRpb24pOworICAgICAgICAgICAgICAgIG1fZGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8VCo+KG5ld0RhdGEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbmxp
bmUgdm9pZCBhcHBlbmQoY29uc3QgVCYgdikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV90b3AgPT0gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICAgICAgZXhwYW5kKCk7
CisgICAgICAgICAgICAgICAgbV9kYXRhW21fdG9wKytdID0gdjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaW5saW5lIFQgcmVtb3ZlTGFzdCgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fdG9wKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhWy0t
bV90b3BdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbmxpbmUgYm9vbCBpc0VtcHR5
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV90b3AgPT0gMDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5saW5lIHNpemVfdCBzaXplKCkgeyByZXR1cm4g
bV90b3A7IH0KKworICAgICAgICAgICAgaW5saW5lIHZvaWQgc2hyaW5rQWxsb2NhdGlvbihzaXpl
X3Qgc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2l6ZSA8PSBt
X2FsbG9jYXRlZCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKDAgPT0gKHNpemUgJSBNYXJrU3Rh
Y2s6OnBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSBtX2FsbG9jYXRl
ZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHN0YWNrUmVs
ZWFzZShyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2RhdGEpICsgc2l6ZSwgbV9hbGxvY2F0ZWQg
LSBzaXplKTsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRlZCA9IHNpemU7CisgICAgICAgICAg
ICAgICAgbV9jYXBhY2l0eSA9IG1fYWxsb2NhdGVkIC8gc2l6ZW9mKFQpOworICAgICAgICAgICAg
fQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBzaXplX3QgbV90b3A7CisgICAgICAg
ICAgICBzaXplX3QgbV9hbGxvY2F0ZWQ7CisgICAgICAgICAgICBzaXplX3QgbV9jYXBhY2l0eTsK
KyAgICAgICAgICAgIFQqIG1fZGF0YTsKKyAgICAgICAgfTsKKworICAgICAgICBNYXJrU3RhY2tB
cnJheTxNYXJrU2V0PiBtX21hcmtTZXRzOworICAgICAgICBNYXJrU3RhY2tBcnJheTxKU0NlbGwq
PiBtX3ZhbHVlczsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzX3BhZ2VTaXplOworICAgIH07Cit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2tQ
b3NpeC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFja1Bvc2l4LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk1ODg5Ci0tLSAvZGV2L251bGwKKysr
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2tQb3NpeC5jcHAKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKworI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgPHN5
cy9tbWFuLmg+CisKK25hbWVzcGFjZSBKU0Mgewordm9pZCogTWFya1N0YWNrOjpzdGFja0FsbG9j
YXRlKHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCB8
IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKK30KK3ZvaWQgTWFy
a1N0YWNrOjpzdGFja1JlbGVhc2Uodm9pZCogYWRkciwgc2l6ZV90IHNpemUpCit7CisgICAgbXVu
bWFwKGFkZHIsIHNpemUpOworfQorCit9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcmtTdGFja1dpbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFja1dp
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4MzU5MwotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrV2luLmNwcApAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworCisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisKKyNp
bmNsdWRlICJ3aW5kb3dzLmgiCisKK25hbWVzcGFjZSBKU0Mgewordm9pZCogTWFya1N0YWNrOjpz
dGFja0FsbG9jYXRlKHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBWaXJ0dWFsQWxsb2MoMCwg
c2l6ZSwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdFX1JFQURXUklURSk7Cit9Cit2b2lk
IE1hcmtTdGFjazo6c3RhY2tSZWxlYXNlKHZvaWQqIGFkZHIsIHNpemVfdCBzaXplKQoreworICAg
IFZpcnR1YWxGcmVlKGFkZHIsIHNpemUsIE1FTV9SRUxFQVNFKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmggYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlQ2hhaW4uaAppbmRleCAxN2FmZjI0Li4yM2IzNjFlIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAorKysgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlQ2hhaW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwNCw3ICsyMDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX25vZGUtPmdsb2JhbE9iamVjdCgpOyB9CiAKLSAgICAgICAgdm9pZCBtYXJrKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smKSBjb25zdDsKIAog
ICAgICAgICAvLyBDYXV0aW9uOiB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGNvZGVi
bG9jayB0aGlzIGlzIGJlaW5nIHVzZWQKICAgICAgICAgLy8gd2l0aCBuZWVkcyBhIGZ1bGwgc2Nv
cGUgY2hhaW4sIG90aGVyd2lzZSB0aGlzIHJldHVybnMgdGhlIGRlcHRoIG9mCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW5NYXJrLmggYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlQ2hhaW5NYXJrLmgKaW5kZXggYjgwYjhlZi4uOTg0ZDEwMSAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluTWFyay5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbk1hcmsuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEz
ICsyNSwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGlubGluZSB2b2lkIFNjb3BlQ2hh
aW46Om1hcmsoKSBjb25zdAorICAgIGlubGluZSB2b2lkIFNjb3BlQ2hhaW46Om1hcmtBZ2dyZWdh
dGUoTWFya1N0YWNrJiBtYXJrU3RhY2spIGNvbnN0CiAgICAgewotICAgICAgICBmb3IgKFNjb3Bl
Q2hhaW5Ob2RlKiBuID0gbV9ub2RlOyBuOyBuID0gbi0+bmV4dCkgewotICAgICAgICAgICAgSlNP
YmplY3QqIG8gPSBuLT5vYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIW8tPm1hcmtlZCgpKQotICAg
ICAgICAgICAgICAgIG8tPm1hcmsoKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKFNjb3BlQ2hh
aW5Ob2RlKiBuID0gbV9ub2RlOyBuOyBuID0gbi0+bmV4dCkKKyAgICAgICAgICAgIG1hcmtTdGFj
ay5hcHBlbmQobi0+b2JqZWN0KTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCmluZGV4IDlkMWYwMWEuLjJmOTJjYzEgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKQEAgLTg1LDEwICs4NSwxMCBA
QCBTbWFsbFN0cmluZ3M6On5TbWFsbFN0cmluZ3MoKQogdm9pZCBTbWFsbFN0cmluZ3M6Om1hcmso
KQogewogICAgIGlmIChtX2VtcHR5U3RyaW5nICYmICFtX2VtcHR5U3RyaW5nLT5tYXJrZWQoKSkK
LSAgICAgICAgbV9lbXB0eVN0cmluZy0+bWFyaygpOworICAgICAgICBtX2VtcHR5U3RyaW5nLT5t
YXJrQ2VsbERpcmVjdCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0
ZXJzVG9TdG9yZTsgKytpKSB7CiAgICAgICAgIGlmIChtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3Nb
aV0gJiYgIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXS0+bWFya2VkKCkpCi0gICAgICAgICAg
ICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0tPm1hcmsoKTsKKyAgICAgICAgICAgIG1fc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nc1tpXS0+bWFya0NlbGxEaXJlY3QoKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IDg2Njk5OWQuLmYzYTBjN2MgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIklkZW50aWZp
ZXIuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVk
ZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oIgpAQCAtNzIsMTAgKzczLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgflN0cnVj
dHVyZSgpOwogCi0gICAgICAgIHZvaWQgbWFyaygpCisgICAgICAgIHZvaWQgbWFya0FnZ3JlZ2F0
ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX3By
b3RvdHlwZS5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICBtX3Byb3RvdHlwZS5tYXJrKCk7Cisg
ICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1fcHJvdG90eXBlKTsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34351</attachid>
            <date>2009-08-07 17:58:04 -0700</date>
            <delta_ts>2009-08-10 15:33:12 -0700</delta_ts>
            <desc>JavaScriptCore portion</desc>
            <filename>gc-jsc.patch</filename>
            <type>text/plain</type>
            <size>96675</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5OWQzOTYyLi43M2UwNTA5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU3
IEBACisyMDA5LTA4LTA3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhY2sgb3ZlcmZsb3cg
Y3Jhc2ggaW4gSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3RvciBtYXJrIHBhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjE2CisKKyAgICAgICAg
TWFrZSB0aGUgR0MgbWFyayBwaGFzZSBpdGVyYXRpdmUgYnkgdXNpbmcgYW4gZXhwbGljaXQgbWFy
ayBzdGFjay4KKyAgICAgICAgVG8gZG8gdGhpcyBtYXJraW5nIGFueSBzaW5nbGUgb2JqZWN0IGlz
IHBlcmZvcm1lZCBpbiBtdWx0aXBsZSBzdGFnZXMKKyAgICAgICAgICAqIFRoZSBvYmplY3QgaXMg
YXBwZW5kZWQgdG8gdGhlIE1hcmtTdGFjaywgdGhpcyBzZXRzIHRoZSBtYXJrZWQKKyAgICAgICAg
ICAgIGJpdCBmb3IgdGhlIG9iamVjdCB1c2luZyB0aGUgbmV3IG1hcmtEaXJlY3QoKSBmdW5jdGlv
biwgYW5kIHRoZW4KKyAgICAgICAgICAgIHJldHVybnMKKyAgICAgICAgICAqIFdoZW4gdGhlIE1h
cmtTdGFjayBpcyBkcmFpbigpZWQgdGhlIG9iamVjdCBpcyBwb3BwZWQgb2ZmIHRoZSBzdGFjawor
ICAgICAgICAgICAgYW5kIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKSBpcyBjYWxsZWQgb24gdGhl
IG9iamVjdCB0byBjb2xsZWN0IAorICAgICAgICAgICAgYWxsIG9mIGl0cyBjaGlsZHJlbi4gIGRy
YWluKCkgdGhlbiByZXBlYXRzIHVudGlsIHRoZSBzdGFjayBpcyBlbXB0eS4KKworICAgICAgICBB
ZGRpdGlvbmFsbHkgSSByZW5hbWVkIGEgbnVtYmVyIG9mIG1ldGhvZHMgZnJvbSAnbWFyaycgdG8g
J21hcmtBZ2dyZWdhdGUnCisgICAgICAgIGluIG9yZGVyIHRvIG1ha2UgaXQgbW9yZSBjbGVhciB0
aGF0IG1hcmtpbmcgb2YgdGhvc2Ugb2JqZWN0IHdhcyBub3QKKyAgICAgICAgZ29pbmcgdG8gcmVz
dWx0IGluIGFuIGFjdHVhbCByZWN1cnNpdmUgbWFyay4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLmd5cGk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJpOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6
bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJBY3RpdmF0aW9uOjptYXJrQ2hpbGRyZW4pOgorICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAqIGludGVycHJl
dGVyL1JlZ2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmg6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6bWFya0dsb2JhbHMpOgorICAgICAgICAoSlNDOjpS
ZWdpc3RlckZpbGU6Om1hcmtDYWxsRnJhbWVzKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpTY29wZU5vZGVEYXRhOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAg
KEpTQzo6RXZhbE5vZGU6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJv
ZHlOb2RlOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAg
ICAgKEpTQzo6U2NvcGVOb2RlOjptYXJrQWdncmVnYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Fy
Z0xpc3QuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3Rz
KToKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6bWFya0NoaWxkcmVuKToKKyAgICAg
ICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSk6CisgICAgICAg
IChKU0M6OkhlYXA6Om1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KToKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjptYXJrQ2hpbGRyZW4p
OgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRl
clNldHRlcjo6R2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6R2xvYmFsRXZhbEZ1bmN0aW9uOjptYXJrQ2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjptYXJrQ2hpbGRyZW4pOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6bWFya0NlbGxEaXJlY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTVmFsdWU6Om1hcmtEaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKU1ZhbHVlOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
OjpoYXNDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6bWFya0NoaWxkcmVuKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjptYXJrSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNOb3RBbk9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTTm90
QW5PYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpTdHJpbmdpZmllcjo6bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkpTT05PYmpl
Y3Q6Om1hcmtTdHJpbmdpZmllcnMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
bWFya0NoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZUdldHRlcik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjptYXJrQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3Bl
T2JqZWN0OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9i
amVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1l
L01hcmtTdGFjay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmNvbXBhY3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0YWNrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjop
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFjayk6CisgICAgICAgIChKU0M6Ok1h
cmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6On5NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpN
YXJrU3RhY2s6Ok1hcmtTZXQ6Ok1hcmtTZXQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnBh
Z2VTaXplKToKKyAgICAgICAgCisgICAgICAgIE1hcmtTdGFja0FycmF5IGlzIGEgbm9uLXNocmlu
a2luZywgbW1hcC1iYXNlZCB2ZWN0b3IgdHlwZQorICAgICAgICB1c2VkIGZvciBzdG9yaW5nIG9i
amVjdHMgdG8gYmUgbWFya2VkLgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0Fy
cmF5OjpNYXJrU3RhY2tBcnJheSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6TWFya1N0YWNr
QXJyYXk6On5NYXJrU3RhY2tBcnJheSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6TWFya1N0
YWNrQXJyYXk6OmV4cGFuZCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6TWFya1N0YWNrQXJy
YXk6OmFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6TWFya1N0YWNrQXJyYXk6OnJl
bW92ZUxhc3QpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFja0FycmF5Ojppc0Vt
cHR5KToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpNYXJrU3RhY2tBcnJheTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtTdGFjazo6TWFya1N0YWNrQXJyYXk6OnNocmlua0FsbG9jYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0YWNrUG9zaXguY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6TWFya1N0YWNrOjphbGxvY2F0ZVN0YWNrKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNr
OjpyZWxlYXNlU3RhY2spOgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0YWNrV2luLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgIChK
U0M6Ok1hcmtTdGFjazo6cmVsZWFzZVN0YWNrKToKKworICAgICAgICAqIHJ1bnRpbWUvU2NvcGVD
aGFpbi5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVDaGFpbk1hcmsuaDoKKyAgICAgICAgKEpT
Qzo6U2NvcGVDaGFpbjo6bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgICogcnVudGltZS9TbWFsbFN0
cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6Om1hcmspOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWFya0FnZ3Jl
Z2F0ZSk6CisKIDIwMDktMDgtMDcgIEdlb3JnZSBTdGFpa29zIDxnZW9yZ2Uuc3RhaWtvc0B0b3Jj
aG1vYmlsZS5jb20+IAogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNjcmlwdENvcmUueGNjb25m
aWcgYi9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZp
ZwppbmRleCBmOGQ2YzJjLi4wOWI2M2E4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9Db25m
aWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZworKysgYi9KYXZhU2NyaXB0Q29yZS9D
b25maWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwpAQCAtNDgsNCArNDgsNCBAQCBP
VEhFUl9DRkxBR1NfUmVsZWFzZV9ub3JtYWwgPSAkKE9USEVSX0NGTEFHU19ub3JtYWxfJChYQ09E
RV9WRVJTSU9OX0FDVFVBTCkpOwogT1RIRVJfQ0ZMQUdTX1Byb2R1Y3Rpb25fbm9ybWFsID0gJChP
VEhFUl9DRkxBR1Nfbm9ybWFsXyQoWENPREVfVkVSU0lPTl9BQ1RVQUwpKTsKIE9USEVSX0NGTEFH
U19ub3JtYWxfMDMxMCA9ICQoT1RIRVJfQ0ZMQUdTX25vcm1hbF9HQ0NfNDIpOwogT1RIRVJfQ0ZM
QUdTX25vcm1hbF8wMzIwID0gJChPVEhFUl9DRkxBR1Nfbm9ybWFsX0dDQ180Mik7Ci1PVEhFUl9D
RkxBR1Nfbm9ybWFsX0dDQ180MiA9IC1mb21pdC1mcmFtZS1wb2ludGVyIC1mdW53aW5kLXRhYmxl
czsKK09USEVSX0NGTEFHU19ub3JtYWxfR0NDXzQyID0gLWZ1bndpbmQtdGFibGVzOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5hbQppbmRleCAyNTdlOTg2Li4zY2RlMWViIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtMTkxLDYgKzE5MSw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xp
dGVyYWxQYXJzZXIuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2suY3BwIFwK
KwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5oIFwKKwlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcmtTdGFja1Bvc2l4LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFs
bFN0cmluZ3MuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oIFwK
IAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAgXApAQCAtNDM0LDYgKzQzNyw5
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcCBc
CiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXJrU3RhY2suY3BwIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFja1dpbi5jcHAgXAogCUphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWF0aE9iamVjdC5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cCBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAppbmRleCA4OWMxMjRhLi4zZmYw
Mjk5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCkBAIC0xMzEsMTcgKzEzMSwxNyBAQCBf
X1pOM0pTQzEzanNPd25lZFN0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0UK
IF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEwZ2xvYmFsRXhlY0V2CiBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3QxMmRlZmluZUdldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQ
TlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTJkZWZpbmVTZXR0ZXJFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzhKU09iamVjdEUKK19fWk4zSlNDMTRK
U0dsb2JhbE9iamVjdDEybWFya0NoaWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTjNKU0MxNEpT
R2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRl
bnRpZmllckVOU183SlNWYWx1ZUVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBOU185
RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5
U2xvdEUgIAogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NGluaXRFUE5TXzhKU09iamVjdEUKLV9f
Wk4zSlNDMTRKU0dsb2JhbE9iamVjdDRtYXJrRXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdEQy
RXYKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pO
M0pTQzE0U2FtcGxpbmdUaHJlYWQ0c3RvcEV2CiBfX1pOM0pTQzE0U2FtcGxpbmdUaHJlYWQ1c3Rh
cnRFagogX19aTjNKU0MxNFRpbWVvdXRDaGVja2VyNXJlc2V0RXYKIF9fWk4zSlNDMTRjb25zdHJ1
Y3RBcnJheUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RQotX19aTjNKU0MxNUpTV3JhcHBl
ck9iamVjdDRtYXJrRXYKK19fWk4zSlNDMTVKU1dyYXBwZXJPYmplY3QxMm1hcmtDaGlsZHJlbkVS
TlNfOU1hcmtTdGFja0UKIF9fWk4zSlNDMTV0b0ludDMyU2xvd0Nhc2VFZFJiCiBfX1pOM0pTQzE2
RnVuY3Rpb25Cb2R5Tm9kZTEzZmluaXNoUGFyc2luZ0VQTlNfMTBJZGVudGlmaWVyRW0KIF9fWk4z
SlNDMTZGdW5jdGlvbkJvZHlOb2RlMTRjb3B5UGFyYW1ldGVyc0V2CkBAIC0yMzYsNiArMjM2LDcg
QEAgX19aTjNKU0M4SlNPYmplY3QxMmRlZmluZUdldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
SWRlbnRpZmllckVQUzBfCiBfX1pOM0pTQzhKU09iamVjdDEyZGVmaW5lU2V0dGVyRVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBTMF8KIF9fWk4zSlNDOEpTT2JqZWN0MTJsb29rdXBH
ZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzhKU09iamVj
dDEybG9va3VwU2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQorX19aTjNK
U0M4SlNPYmplY3QxMm1hcmtDaGlsZHJlbkVSTlNfOU1hcmtTdGFja0UKIF9fWk4zSlNDOEpTT2Jq
ZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKIF9f
Wk4zSlNDOEpTT2JqZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVqCiBfX1pOM0pT
QzhKU09iamVjdDE1dW53cmFwcGVkT2JqZWN0RXYKQEAgLTI1MSw3ICsyNTIsNiBAQCBfX1pOM0pT
QzhKU09iamVjdDIyZmlsbEdldHRlclByb3BlcnR5U2xvdEVSTlNfMTJQcm9wZXJ0eVNsb3RFUE5T
XzdKU1ZhbHVlRQogX19aTjNKU0M4SlNPYmplY3QyM2FsbG9jYXRlUHJvcGVydHlTdG9yYWdlRW1t
CiBfX1pOM0pTQzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJF
TlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M4SlNPYmplY3QzcHV0
RVBOU185RXhlY1N0YXRlRWpOU183SlNWYWx1ZUUgIAotX19aTjNKU0M4SlNPYmplY3Q0bWFya0V2
CiBfX1pOM0pTQzhQcm9maWxlcjEzc3RvcFByb2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdV
U3RyaW5nRQogX19aTjNKU0M4UHJvZmlsZXIxNHN0YXJ0UHJvZmlsaW5nRVBOU185RXhlY1N0YXRl
RVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzhQcm9maWxlcjhwcm9maWxlckV2CkBAIC0yNTksNiAr
MjU5LDkgQEAgX19aTjNKU0M4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVFUk5TXzEwU2NvcGVDaGFp
bkVSS05TXzEwU291cmNlQ29kZUVOU183SlNWYWx1ZUUKIF9fWk4zSlNDOGpzU3RyaW5nRVBOU18x
MkpTR2xvYmFsRGF0YUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19a
TjNKU0M5Q29kZUJsb2NrRDJFdgorX19aTjNKU0M5TWFya1N0YWNrMTBzX3BhZ2VTaXplRQorX19a
TjNKU0M5TWFya1N0YWNrMTJyZWxlYXNlU3RhY2tFUHZtCitfX1pOM0pTQzlNYXJrU3RhY2sxM2Fs
bG9jYXRlU3RhY2tFbQogX19aTjNKU0M5U3RydWN0dXJlMTdzdG9wSWdub3JpbmdMZWFrc0V2CiBf
X1pOM0pTQzlTdHJ1Y3R1cmUxOHN0YXJ0SWdub3JpbmdMZWFrc0V2CiBfX1pOM0pTQzlTdHJ1Y3R1
cmUyMWFkZFByb3BlcnR5VHJhbnNpdGlvbkVQUzBfUktOU18xMElkZW50aWZpZXJFalBOU182SlND
ZWxsRVJtCkBAIC0zMjYsNiArMzI5LDcgQEAgX19aTkszSlNDMTJEYXRlSW5zdGFuY2U3Z2V0VGlt
ZUVSZFJpCiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDEydG9UaGlzU3RyaW5nRVBOU185RXhlY1N0
YXRlRQogX19aTkszSlNDMTJTdHJpbmdPYmplY3Q4dG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBf
X1pOSzNKU0MxNEpTR2xvYmFsT2JqZWN0MTRpc0R5bmFtaWNTY29wZUV2CisKIF9fWk5LM0pTQzE2
RnVuY3Rpb25Cb2R5Tm9kZTE0aXNIb3N0RnVuY3Rpb25FdgogX19aTkszSlNDMTZJbnRlcm5hbEZ1
bmN0aW9uOWNsYXNzSW5mb0V2CiBfX1pOSzNKU0MxNkpTVmFyaWFibGVPYmplY3QxNmlzVmFyaWFi
bGVPYmplY3RFdgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lw
aSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggMmQ2OWM3ZC4uNDYy
YzM4ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysg
Yi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0yNjUsNiArMjY1LDkgQEAK
ICAgICAgICAgICAgICdydW50aW1lL0xpdGVyYWxQYXJzZXIuaCcsCiAgICAgICAgICAgICAncnVu
dGltZS9Mb29rdXAuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL0xvb2t1cC5oJywKKyAgICAg
ICAgICAgICdydW50aW1lL01hcmtTdGFjay5jcHAnLAorICAgICAgICAgICAgJ3J1bnRpbWUvTWFy
a1N0YWNrLmgnLAorICAgICAgICAgICAgJ3J1bnRpbWUvTWFya1N0YWNrV2luLmNwcCcsCiAgICAg
ICAgICAgICAncnVudGltZS9NYXRoT2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9N
YXRoT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAnLApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpIGIv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCmluZGV4IDBkZTRmMTUuLmRkNDhjOWEg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQorKysgYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkKQEAgLTk4LDYgKzk4LDggQEAgU09VUkNFUyAr
PSBcCiAgICAgcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU09OT2Jq
ZWN0LmNwcCBcCiAgICAgcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcCBcCisgICAgcnVudGltZS9N
YXJrU3RhY2suY3BwIFwKKyAgICBydW50aW1lL01hcmtTdGFja1Bvc2l4LmNwcCBcCiAgICAgcnVu
dGltZS9UaW1lb3V0Q2hlY2tlci5jcHAgXAogICAgIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAgXAog
ICAgIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBcCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagppbmRleCAxNTY1ZDA0Li4xYzVlOTYzIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKQEAgLTg4NCw2
ICs4ODQsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5ccnVudGltZVxNYXJrU3RhY2suaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcTWFya1N0YWNrLmNwcCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHJ1bnRpbWVcTWFya1N0YWNrV2luLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcTWF0aE9iamVjdC5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzQ4Y2ExZi4uNmMzZDQ5ZiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xOTYsMTQgKzE5NiwxNyBAQAogCQlBNzI3MDA5MDBEQUM2QkJDMDBF
NTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzI3MDA3ODBEQUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVj
dC5jcHAgKi87IH07CiAJCUE3MjcwMUI5MERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxw
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzI3
MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVscGVycy5oICovOyB9OwogCQlBNzI3
RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzI3RkY2NjBEQTMwNTNC
MDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgKi87IH07CisJCUE3NEIzNDk5
MTAyQTVGOEUwMDMyQUI5OCAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc0QjM0OTgxMDJBNUY4RTAwMzJBQjk4IC8qIE1hcmtT
dGFjay5jcHAgKi87IH07CiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxl
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkVFNjU5MEZB
RTU5RDUwMDNGMDY5QSAvKiBOYXRpdmVGdW5jdGlvbldyYXBwZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkVFNjU4MEZBRTU5RDUwMDNGMDY5QSAv
KiBOYXRpdmVGdW5jdGlvbldyYXBwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBNzc5NTU5MDEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzc5NTU4
RjEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4MkYxQTUwRUVDOUZBMjAwMzYyNzNGIC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzgyRjFBNDBFRUM5RkEyMDAzNjI3M0YgLyogRXhlY3V0YWJsZUFs
bG9jYXRvclBvc2l4LmNwcCAqLzsgfTsKIAkJQTc5MUVGMjgwRjExRTA3OTAwQUUxRjY4IC8qIEpT
Qnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzkxRUYyNjBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzkxRUYyOTBGMTFFMDc5MDBB
RTFGNjggLyogSlNCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc5MUVGMjcwRjExRTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmNw
cCAqLzsgfTsKIAkJQTdBMUY3QUMwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ExRjdBQTBGMjUy
QjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLzsgfTsKIAkJQTdBMUY3QUQwRjI1MkIzQzAw
RTE4NEUyIC8qIEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdBMUY3QUIwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QjQ4RjQ5MEVF
ODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsgfTsKKwkJQTdDNTMwRTQxMDJBMzgxMzAwNUJD
NzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QzUzMEUzMTAyQTM4MTMwMDVCQzc0MSAvKiBNYXJrU3RhY2tQb3Np
eC5jcHAgKi87IH07CiAJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0UyRUE2
OTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oICovOyB9OwogCQlBN0UyRUE2QzBG
QjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0UyRUE2QTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0
ZXJhbFBhcnNlci5jcHAgKi87IH07CiAJCUE3Rjk5MzVGMEZENzMyNTEwMEEwQjJEMCAvKiBKU09O
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0Y5OTM1RDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5oICovOyB9OwpAQCAtNzM4LDcg
Kzc0MSw5IEBACiAJCUE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkhlbHBlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcyN0ZGNjUwREEzMDUzQjAwRTU0OEQ3IC8q
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzI3RkY2NjBEQTMwNTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTc0QjM0OTgxMDJBNUY4RTAw
MzJBQjk4IC8qIE1hcmtTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNYXJrU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZFRTY1
ODBGQUU1OUQ1MDAzRjA2OUEgLyogTmF0aXZlRnVuY3Rpb25XcmFwcGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBNzc5NTU4RjEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFjay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzgyRjFBNDBFRUM5RkEyMDAzNjI3M0YgLyogRXhlY3V0
YWJsZUFsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3OTFFRjI2MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0J5dGVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNzkxRUYyNzBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRlQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCeXRlQXJyYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ2LDYgKzc1MSw3IEBACiAJCUE3QTFGN0FC
MEYyNTJCM0MwMEUxODRFMiAvKiBCeXRlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjQ4
REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3QzUzMEUz
MTAyQTM4MTMwMDVCQzc0MSAvKiBNYXJrU3RhY2tQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNYXJrU3RhY2tQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3RTJFQTY5MEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpdGVyYWxQYXJzZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFMkVBNkEwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVy
YWxQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGl0ZXJh
bFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RTQyQzE4MEUzOTM4
ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU3RhdGljU2NvcGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0OTAsNiArMTQ5Niw5IEBACiAJCQkJNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2
IC8qIFR5cGVJbmZvLmggKi8sCiAJCQkJRjY5MkE4ODUwMjU1NTk3RDAxRkY2MEY3IC8qIFVTdHJp
bmcuY3BwICovLAogCQkJCUY2OTJBODg2MDI1NTU5N0QwMUZGNjBGNyAvKiBVU3RyaW5nLmggKi8s
CisJCQkJQTc3OTU1OEYxMDFBNzRENTAwMTE0RTU1IC8qIE1hcmtTdGFjay5oICovLAorCQkJCUE3
QzUzMEUzMTAyQTM4MTMwMDVCQzc0MSAvKiBNYXJrU3RhY2tQb3NpeC5jcHAgKi8sCisJCQkJQTc0
QjM0OTgxMDJBNUY4RTAwMzJBQjk4IC8qIE1hcmtTdGFjay5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTg5Miw2ICsxOTAx
LDcgQEAKIAkJCQkxNDI5REFFMDBFRDI2NDVCMDBCODk2MTkgLyogV1JFQ0dlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyOURBQkYwRUQyNjNFNzAwQjg5NjE5IC8qIFdSRUNQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE2MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3Nzk1NTkwMTAxQTc0RDUwMDExNEU1NSAvKiBN
YXJrU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjI1OCw2ICsyMjY4LDggQEAKIAkJCQkxNDI5
REE4MjBFRDI0ODI5MDBCODk2MTkgLyogV1JFQ0Z1bmN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MjlEQUUxMEVEMjY0NUIwMEI4OTYxOSAvKiBXUkVDR2VuZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjlEQUMwMEVEMjYzRTcwMEI4OTYxOSAvKiBXUkVDUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE3QzUzMEU0MTAyQTM4MTMwMDVCQzc0MSAvKiBNYXJrU3RhY2tQ
b3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNzRCMzQ5OTEwMkE1RjhFMDAzMkFCOTggLyog
TWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKaW5kZXggMGE3YjJmNS4uZTIyZjI1YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCkBAIC0xNDI4LDIwICsxNDI4LDIxIEBAIHZvaWQgQ29kZUJsb2NrOjpyZWZTdHJ1
Y3R1cmVzKEluc3RydWN0aW9uKiB2UEMpIGNvbnN0CiAgICAgQVNTRVJUKHZQQ1swXS51Lm9wY29k
ZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZCkgfHwgdlBDWzBdLnUub3Bj
b2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkKSB8fCB2UENbMF0udS5v
cGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWRfZ2VuZXJpYykgfHwg
dlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkX2dl
bmVyaWMpKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6Om1hcmsoKQordm9pZCBDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBp
ZiAoIW1fY29uc3RhbnRSZWdpc3RlcnNbaV0ubWFya2VkKCkpCi0gICAgICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzW2ldLm1hcmsoKTsKKyAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9j
b25zdGFudFJlZ2lzdGVyc1tpXS5qc1ZhbHVlKCkpOworICAgIH0KIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkV4cHJlc3Npb25zLnNpemUoKTsgKytpKQotICAgICAgICBt
X2Z1bmN0aW9uRXhwcmVzc2lvbnNbaV0tPmJvZHkoKS0+bWFyaygpOworICAgICAgICBtX2Z1bmN0
aW9uRXhwcmVzc2lvbnNbaV0tPmJvZHkoKS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogCiAg
ICAgaWYgKG1fcmFyZURhdGEpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Jh
cmVEYXRhLT5tX2Z1bmN0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEt
Pm1fZnVuY3Rpb25zW2ldLT5ib2R5KCktPm1hcmsoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEt
Pm1fZnVuY3Rpb25zW2ldLT5ib2R5KCktPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIAotICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUubWFyaygpOworICAgICAgICBtX3JhcmVE
YXRhLT5tX2V2YWxDb2RlQ2FjaGUubWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA0MWNjMDY4Li4zOWIxZGIzIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMjU1LDcgKzI1NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBDb2RlQmxvY2soU2NvcGVOb2RlKiBvd25lck5vZGUsIENvZGVU
eXBlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0KTsK
ICAgICAgICAgfkNvZGVCbG9jaygpOwogCi0gICAgICAgIHZvaWQgbWFyaygpOworICAgICAgICB2
b2lkIG1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJik7CiAgICAgICAgIHZvaWQgcmVmU3RydWN0dXJl
cyhJbnN0cnVjdGlvbiogdlBDKSBjb25zdDsKICAgICAgICAgdm9pZCBkZXJlZlN0cnVjdHVyZXMo
SW5zdHJ1Y3Rpb24qIHZQQykgY29uc3Q7CiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9DQUxMKQpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oIGIvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oCmluZGV4IGYwY2U3M2UuLjk4NjUy
NWMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKQEAgLTY4LDExICs2
OCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQogCi0gICAgICAgIHZvaWQgbWFyaygpCisg
ICAgICAgIHZvaWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKICAgICAgICAg
ewogICAgICAgICAgICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVu
ZCgpOwogICAgICAgICAgICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2Fj
aGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICAgICAgcHRyLT5z
ZWNvbmQtPm1hcmsoKTsKKyAgICAgICAgICAgICAgICBwdHItPnNlY29uZC0+bWFya0FnZ3JlZ2F0
ZShtYXJrU3RhY2spOwogICAgICAgICB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhDYWNoZWFibGVTb3VyY2VMZW5ndGggPSAyNTY7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGIvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAppbmRleCA0YjI1NjhmLi4zNGQwNDQ3
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24u
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM4LDExICszOCwxMiBAQCBEZWJ1Z2dlckFjdGl2YXRpb246OkRlYnVnZ2VyQWN0aXZhdGlvbihK
U09iamVjdCogYWN0aXZhdGlvbikKICAgICBtX2FjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0Fj
dGl2YXRpb24qPihhY3RpdmF0aW9uKTsKIH0KIAotdm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246Om1h
cmsoKQordm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1h
cmtTdGFjaykKIHsKLSAgICBKU09iamVjdDo6bWFyaygpOwotICAgIGlmIChtX2FjdGl2YXRpb24g
JiYgIW1fYWN0aXZhdGlvbi0+bWFya2VkKCkpCi0gICAgICAgIG1fYWN0aXZhdGlvbi0+bWFyaygp
OworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKworICAgIGlmIChtX2Fj
dGl2YXRpb24pCisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9hY3RpdmF0aW9uKTsKIH0KIAog
VVN0cmluZyBEZWJ1Z2dlckFjdGl2YXRpb246OmNsYXNzTmFtZSgpIGNvbnN0CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaCBiL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oCmluZGV4IDllMWY5ZjUuLjgyY2Rl
NGQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlv
bi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgRGVidWdn
ZXJBY3RpdmF0aW9uKEpTT2JqZWN0Kik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKICAgICAgICAg
dmlydHVhbCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgg
Yi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCmluZGV4IGJlYWQ0ZGMuLjk1
YWU1ZjYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKCkgY29uc3Q7CiAKICAg
ICAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBtYXJrKCk7CisgICAgICAg
IHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogICAgICAgICAKICAgICAgICAgUmVnaXN0
ZXIoSlNBY3RpdmF0aW9uKik7CiAgICAgICAgIFJlZ2lzdGVyKENhbGxGcmFtZSopOwpAQCAtMTIw
LDExICsxMjAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGpzVmFsdWUoKS5t
YXJrZWQoKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgUmVnaXN0ZXI6Om1hcmso
KQotICAgIHsKLSAgICAgICAganNWYWx1ZSgpLm1hcmsoKTsKLSAgICB9Ci0gICAgCiAgICAgLy8g
SW50ZXJwcmV0ZXIgZnVuY3Rpb25zCiAKICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdp
c3RlcihKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24pCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaCBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1JlZ2lzdGVyRmlsZS5oCmluZGV4IGQ0NmJkYzkuLmI1Zjc0NTIgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzYsOCArMTM2LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgUmVnaXN0ZXIqIGxhc3RHbG9iYWwoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0IC0gbV9udW1HbG9iYWxzOyB9CiAgICAgICAgIAotICAgICAgICB2b2lkIG1hcmtHbG9iYWxz
KEhlYXAqIGhlYXApIHsgaGVhcC0+bWFya0NvbnNlcnZhdGl2ZWx5KGxhc3RHbG9iYWwoKSwgbV9z
dGFydCk7IH0KLSAgICAgICAgdm9pZCBtYXJrQ2FsbEZyYW1lcyhIZWFwKiBoZWFwKSB7IGhlYXAt
Pm1hcmtDb25zZXJ2YXRpdmVseShtX3N0YXJ0LCBtX2VuZCk7IH0KKyAgICAgICAgdm9pZCBtYXJr
R2xvYmFscyhNYXJrU3RhY2smIG1hcmtTdGFjaywgSGVhcCogaGVhcCkgeyBoZWFwLT5tYXJrQ29u
c2VydmF0aXZlbHkobWFya1N0YWNrLCBsYXN0R2xvYmFsKCksIG1fc3RhcnQpOyB9CisgICAgICAg
IHZvaWQgbWFya0NhbGxGcmFtZXMoTWFya1N0YWNrJiBtYXJrU3RhY2ssIEhlYXAqIGhlYXApIHsg
aGVhcC0+bWFya0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjaywgbV9zdGFydCwgbV9lbmQpOyB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpOwpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcCBiL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAKaW5kZXggNjVkZTg5Yy4uNDMyNGEwNiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuY3BwCkBAIC0xODE4LDE0ICsxODE4LDE0IEBAIFNjb3BlTm9kZURhdGE6OlNjb3BlTm9k
ZURhdGEoUGFyc2VyQXJlbmEmIGFyZW5hLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0
CiAgICAgICAgIGNoaWxkcmVuLT5yZWxlYXNlQ29udGVudHNJbnRvVmVjdG9yKG1fY2hpbGRyZW4p
OwogfQogCi12b2lkIFNjb3BlTm9kZURhdGE6Om1hcmsoKQordm9pZCBTY29wZU5vZGVEYXRhOjpt
YXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewogICAgIEZ1bmN0aW9uU3RhY2s6
Oml0ZXJhdG9yIGVuZCA9IG1fZnVuY3Rpb25TdGFjay5lbmQoKTsKICAgICBmb3IgKEZ1bmN0aW9u
U3RhY2s6Oml0ZXJhdG9yIHB0ciA9IG1fZnVuY3Rpb25TdGFjay5iZWdpbigpOyBwdHIgIT0gZW5k
OyArK3B0cikgewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5ID0gKCpwdHIpLT5ib2R5
KCk7CiAgICAgICAgIGlmICghYm9keS0+aXNHZW5lcmF0ZWQoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBib2R5LT5nZW5lcmF0ZWRCeXRlY29kZSgpLm1hcmsoKTsKKyAgICAgICAg
Ym9keS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKS5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiAgICAg
fQogfQogCkBAIC0xOTcyLDEwICsxOTcyLDEwIEBAIEV2YWxDb2RlQmxvY2smIEV2YWxOb2RlOjpi
eXRlY29kZUZvckV4Y2VwdGlvbkluZm9SZXBhcnNlKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoCiAg
ICAgcmV0dXJuICptX2NvZGU7CiB9CiAKLXZvaWQgRXZhbE5vZGU6Om1hcmsoKQordm9pZCBFdmFs
Tm9kZTo6bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICAvLyBXZSBk
b24ndCBuZWVkIHRvIG1hcmsgb3VyIG93biBDb2RlQmxvY2sgYXMgdGhlIEpTR2xvYmFsT2JqZWN0
IHRha2VzIGNhcmUgb2YgdGhhdAotICAgIGRhdGEoKS0+bWFyaygpOworICAgIGRhdGEoKS0+bWFy
a0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTIwMzAsMTAg
KzIwMzAsMTAgQEAgdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKElkZW50aWZp
ZXIqIHBhcmFtZXRlcnMsIHNpemVfdCBwYXJhbWV0ZXJDb3UKICAgICBtX3BhcmFtZXRlckNvdW50
ID0gcGFyYW1ldGVyQ291bnQ7CiB9CiAKLXZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6bWFyaygpCit2
b2lkIEZ1bmN0aW9uQm9keU5vZGU6Om1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBtYXJrU3RhY2sp
CiB7CiAgICAgaWYgKG1fY29kZSkKLSAgICAgICAgbV9jb2RlLT5tYXJrKCk7CisgICAgICAgIG1f
Y29kZS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgKaW5kZXggNGU1Yjg2NC4uNzAzYjM4NCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmgKQEAgLTEzOTAsNyArMTM5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbV9u
dW1Db25zdGFudHM7CiAgICAgICAgIFN0YXRlbWVudFZlY3RvciBtX2NoaWxkcmVuOwogCi0gICAg
ICAgIHZvaWQgbWFyaygpOworICAgICAgICB2b2lkIG1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJik7
CiAgICAgfTsKIAogICAgIGNsYXNzIFNjb3BlTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBw
dWJsaWMgUGFyc2VyQXJlbmFSZWZDb3VudGVkIHsKQEAgLTE0MzYsNyArMTQzNiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+bV9udW1Db25zdGFudHMgKyAy
OwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKSB7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIG1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJikgeyB9CiAKICNpZiBFTkFCTEUo
SklUKQogICAgICAgICBKSVRDb2RlJiBnZW5lcmF0ZWRKSVRDb2RlKCkKQEAgLTE1MTUsNyArMTUx
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEV2YWxDb2RlQmxvY2smIGJ5dGVjb2Rl
Rm9yRXhjZXB0aW9uSW5mb1JlcGFyc2UoU2NvcGVDaGFpbk5vZGUqLCBDb2RlQmxvY2sqKTsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0Fn
Z3JlZ2F0ZShNYXJrU3RhY2smKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVENvZGUm
IGppdENvZGUoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCkBAIC0xNTYzLDcgKzE1NjMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzSG9zdEZ1bmN0aW9uKCkgY29uc3Q7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1h
cmtBZ2dyZWdhdGUoTWFya1N0YWNrJik7CiAKICAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKGNv
bnN0IFNvdXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2RlKik7CiAgICAgICAgIHZvaWQgZmluaXNoUGFy
c2luZyhJZGVudGlmaWVyKiBwYXJhbWV0ZXJzLCBzaXplX3QgcGFyYW1ldGVyQ291bnQpOwpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcCBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKaW5kZXggMGI1ZDk1OC4uYWIyYjVkNyAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ0xpc3QuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzcsMTYgKzM3LDEyIEBAIHZvaWQgQXJnTGlzdDo6Z2V0U2xpY2UoaW50IHN0YXJ0SW5k
ZXgsIEFyZ0xpc3QmIHJlc3VsdCkgY29uc3QKICAgICByZXN1bHQgPSBBcmdMaXN0KG1fYXJncyAr
IHN0YXJ0SW5kZXgsIG1fYXJnQ291bnQgLSBzdGFydEluZGV4KTsKIH0KIAotdm9pZCBNYXJrZWRB
cmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKExpc3RTZXQmIG1hcmtTZXQpCit2b2lkIE1hcmtlZEFy
Z3VtZW50QnVmZmVyOjptYXJrTGlzdHMoTWFya1N0YWNrJiBtYXJrU3RhY2ssIExpc3RTZXQmIG1h
cmtTZXQpCiB7CiAgICAgTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gbWFya1NldC5lbmQoKTsKICAg
ICBmb3IgKExpc3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbWFya1NldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIqIGxpc3QgPSAqaXQ7Ci0KLSAg
ICAgICAgaXRlcmF0b3IgZW5kMiA9IGxpc3QtPmVuZCgpOwotICAgICAgICBmb3IgKGl0ZXJhdG9y
IGl0MiA9IGxpc3QtPmJlZ2luKCk7IGl0MiAhPSBlbmQyOyArK2l0MikKLSAgICAgICAgICAgIGlm
ICghKCppdDIpLm1hcmtlZCgpKQotICAgICAgICAgICAgICAgICgqaXQyKS5tYXJrKCk7CisgICAg
ICAgIG1hcmtTdGFjay5hcHBlbmRWYWx1ZXMocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obGlz
dC0+bV9idWZmZXIpLCBsaXN0LT5tX3NpemUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z0xpc3QuaAppbmRleCBhNjVmNTU5Li5hYjUwMWI2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ0xpc3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3Qu
aApAQCAtMTM1LDcgKzEzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CiAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyICsgbV9zaXplOyB9CiAKLSAgICAg
ICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKExpc3RTZXQmKTsKKyAgICAgICAgc3RhdGljIHZvaWQg
bWFya0xpc3RzKE1hcmtTdGFjayYsIExpc3RTZXQmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgc2xvd0FwcGVuZChKU1ZhbHVlKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNw
cAppbmRleCBmODY3ZmU4Li5lYzljNDUwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyZ3VtZW50cy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
Y3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJv
biBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENvcHlyaWdodCAoQykgMjAw
NyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtNDMsMzAgKzQzLDIyIEBAIEFyZ3VtZW50czo6fkFyZ3Vt
ZW50cygpCiAgICAgICAgIGRlbGV0ZSBbXSBkLT5leHRyYUFyZ3VtZW50czsKIH0KIAotdm9pZCBB
cmd1bWVudHM6Om1hcmsoKQordm9pZCBBcmd1bWVudHM6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2sm
IG1hcmtTdGFjaykKIHsKLSAgICBKU09iamVjdDo6bWFyaygpOworICAgIEpTT2JqZWN0OjptYXJr
Q2hpbGRyZW4obWFya1N0YWNrKTsKIAotICAgIGlmIChkLT5yZWdpc3RlckFycmF5KSB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkLT5udW1QYXJhbWV0ZXJzOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICghZC0+cmVnaXN0ZXJBcnJheVtpXS5tYXJrZWQoKSkKLSAgICAgICAgICAg
ICAgICBkLT5yZWdpc3RlckFycmF5W2ldLm1hcmsoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBp
ZiAoZC0+cmVnaXN0ZXJBcnJheSkKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhyZWlu
dGVycHJldF9jYXN0PEpTVmFsdWUqPihkLT5yZWdpc3RlckFycmF5LmdldCgpKSwgZC0+bnVtUGFy
YW1ldGVycyk7CiAKICAgICBpZiAoZC0+ZXh0cmFBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWdu
ZWQgbnVtRXh0cmFBcmd1bWVudHMgPSBkLT5udW1Bcmd1bWVudHMgLSBkLT5udW1QYXJhbWV0ZXJz
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmd1bWVudHM7ICsr
aSkgewotICAgICAgICAgICAgaWYgKCFkLT5leHRyYUFyZ3VtZW50c1tpXS5tYXJrZWQoKSkKLSAg
ICAgICAgICAgICAgICBkLT5leHRyYUFyZ3VtZW50c1tpXS5tYXJrKCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihk
LT5leHRyYUFyZ3VtZW50cyksIG51bUV4dHJhQXJndW1lbnRzKTsKICAgICB9CiAKLSAgICBpZiAo
IWQtPmNhbGxlZS0+bWFya2VkKCkpCi0gICAgICAgIGQtPmNhbGxlZS0+bWFyaygpOworICAgIG1h
cmtTdGFjay5hcHBlbmQoZC0+Y2FsbGVlKTsKIAotICAgIGlmIChkLT5hY3RpdmF0aW9uICYmICFk
LT5hY3RpdmF0aW9uLT5tYXJrZWQoKSkKLSAgICAgICAgZC0+YWN0aXZhdGlvbi0+bWFyaygpOwor
ICAgIGlmIChkLT5hY3RpdmF0aW9uKQorICAgICAgICBtYXJrU3RhY2suYXBwZW5kKGQtPmFjdGl2
YXRpb24pOwogfQogCiB2b2lkIEFyZ3VtZW50czo6Y29weVRvUmVnaXN0ZXJzKEV4ZWNTdGF0ZSog
ZXhlYywgUmVnaXN0ZXIqIGJ1ZmZlciwgdWludDMyX3QgbWF4U2l6ZSkKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ3VtZW50cy5oCmluZGV4IDBmYTk0NGMuLjc5ZmU3MjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAo
Y3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxv
dmljaAogICoKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAKICAgICAg
ICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwog
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKaW5kZXggOWE2MTk4MC4uYzE4ODAxNiAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNPTk9iamVjdC5o
IgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTY0Miw3ICs2NDMsNyBAQCB2b2lkIEhlYXA6OnJlZ2lz
dGVyVGhyZWFkKCkKIC8vIGNlbGwgc2l6ZSBuZWVkcyB0byBiZSBhIHBvd2VyIG9mIHR3byBmb3Ig
dGhpcyB0byBiZSB2YWxpZAogI2RlZmluZSBJU19IQUxGX0NFTExfQUxJR05FRChwKSAoKChpbnRw
dHJfdCkocCkgJiAoQ0VMTF9NQVNLID4+IDEpKSA9PSAwKQogCi12b2lkIEhlYXA6Om1hcmtDb25z
ZXJ2YXRpdmVseSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKQordm9pZCBIZWFwOjptYXJrQ29uc2Vy
dmF0aXZlbHkoTWFya1N0YWNrJiBtYXJrU3RhY2ssIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCiB7
CiAgICAgaWYgKHN0YXJ0ID4gZW5kKSB7CiAgICAgICAgIHZvaWQqIHRtcCA9IHN0YXJ0OwpAQCAt
NjgzLDkgKzY4NCw4IEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KHZvaWQqIHN0YXJ0
LCB2b2lkKiBlbmQpCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwg
dXNlZFByaW1hcnlCbG9ja3M7IGJsb2NrKyspIHsKICAgICAgICAgICAgICAgICBpZiAoKHByaW1h
cnlCbG9ja3NbYmxvY2tdID09IGJsb2NrQWRkcikgJiAob2Zmc2V0IDw9IGxhc3RDZWxsT2Zmc2V0
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDxDb2xsZWN0b3JD
ZWxsKj4oeEFzQml0cyktPnUuZnJlZUNlbGwuemVyb0lmRnJlZSAhPSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBKU0NlbGwqIGltcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oeEFz
Qml0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltcC0+bWFya2VkKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW1wLT5tYXJrKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtYXJrU3RhY2suYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oeEFzQml0cykp
OworICAgICAgICAgICAgICAgICAgICAgICAgbWFya1N0YWNrLmRyYWluKCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQpAQCAtNjk2LDE1ICs2OTYsMTUgQEAgdm9pZCBIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkodm9p
ZCogc3RhcnQsIHZvaWQqIGVuZCkKICAgICB9CiB9CiAKLXZvaWQgTkVWRVJfSU5MSU5FIEhlYXA6
Om1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbCgpCit2b2lkIE5FVkVSX0lO
TElORSBIZWFwOjptYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5SW50ZXJuYWwoTWFya1N0
YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgdm9pZCogZHVtbXk7CiAgICAgdm9pZCogc3RhY2tQb2lu
dGVyID0gJmR1bW15OwogICAgIHZvaWQqIHN0YWNrQmFzZSA9IGN1cnJlbnRUaHJlYWRTdGFja0Jh
c2UoKTsKLSAgICBtYXJrQ29uc2VydmF0aXZlbHkoc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UpOwor
ICAgIG1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ssIHN0YWNrUG9pbnRlciwgc3RhY2tCYXNl
KTsKIH0KIAotdm9pZCBIZWFwOjptYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KCkKK3Zv
aWQgSGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smIG1hcmtT
dGFjaykKIHsKICAgICAvLyBzZXRqbXAgZm9yY2VzIHZvbGF0aWxlIHJlZ2lzdGVycyBvbnRvIHRo
ZSBzdGFjawogICAgIGptcF9idWYgcmVnaXN0ZXJzOwpAQCAtNzE3LDcgKzcxNyw3IEBAIHZvaWQg
SGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSgpCiAjcHJhZ21hIHdhcm5pbmco
cG9wKQogI2VuZGlmCiAKLSAgICBtYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5SW50ZXJu
YWwoKTsKKyAgICBtYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5SW50ZXJuYWwobWFya1N0
YWNrKTsKIH0KIAogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKQEAgLTg0OSw3ICs4
NDksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQqIG90aGVyVGhyZWFkU3RhY2tQb2ludGVyKGNvbnN0
IFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJzJiByZWdzKQogI2VuZGlmCiB9CiAKLXZvaWQgSGVhcDo6
bWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoVGhyZWFkKiB0aHJlYWQpCit2b2lkIEhlYXA6
Om1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCBUaHJl
YWQqIHRocmVhZCkKIHsKICAgICBzdXNwZW5kVGhyZWFkKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQp
OwogCkBAIC04NTcsMTkgKzg1NywxOSBAQCB2b2lkIEhlYXA6Om1hcmtPdGhlclRocmVhZENvbnNl
cnZhdGl2ZWx5KFRocmVhZCogdGhyZWFkKQogICAgIHNpemVfdCByZWdTaXplID0gZ2V0UGxhdGZv
cm1UaHJlYWRSZWdpc3RlcnModGhyZWFkLT5wbGF0Zm9ybVRocmVhZCwgcmVncyk7CiAKICAgICAv
LyBtYXJrIHRoZSB0aHJlYWQncyByZWdpc3RlcnMKLSAgICBtYXJrQ29uc2VydmF0aXZlbHkoc3Rh
dGljX2Nhc3Q8dm9pZCo+KCZyZWdzKSwgc3RhdGljX2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZyZWdzKSArIHJlZ1NpemUpKTsKKyAgICBtYXJrQ29uc2VydmF0aXZlbHkobWFy
a1N0YWNrLCBzdGF0aWNfY2FzdDx2b2lkKj4oJnJlZ3MpLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oJnJlZ3MpICsgcmVnU2l6ZSkpOwogCiAgICAgdm9pZCogc3Rh
Y2tQb2ludGVyID0gb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIocmVncyk7Ci0gICAgbWFya0NvbnNl
cnZhdGl2ZWx5KHN0YWNrUG9pbnRlciwgdGhyZWFkLT5zdGFja0Jhc2UpOworICAgIG1hcmtDb25z
ZXJ2YXRpdmVseShtYXJrU3RhY2ssIHN0YWNrUG9pbnRlciwgdGhyZWFkLT5zdGFja0Jhc2UpOwog
CiAgICAgcmVzdW1lVGhyZWFkKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQpOwogfQogCiAjZW5kaWYK
IAotdm9pZCBIZWFwOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoKQordm9pZCBIZWFw
OjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7
Ci0gICAgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseSgpOworICAgIG1hcmtDdXJyZW50
VGhyZWFkQ29uc2VydmF0aXZlbHkobWFya1N0YWNrKTsKIAogI2lmIEVOQUJMRShKU0NfTVVMVElQ
TEVfVEhSRUFEUykKIApAQCAtODc5LDcgKzg3OSw3IEBAIHZvaWQgSGVhcDo6bWFya1N0YWNrT2Jq
ZWN0c0NvbnNlcnZhdGl2ZWx5KCkKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8gRm9yYmlk
IG1hbGxvYyBkdXJpbmcgdGhlIG1hcmsgcGhhc2UuIE1hcmtpbmcgYSB0aHJlYWQgc3VzcGVuZHMg
aXQsIHNvIAotICAgICAgICAvLyBhIG1hbGxvYyBpbnNpZGUgbWFyaygpIHdvdWxkIHJpc2sgYSBk
ZWFkbG9jayB3aXRoIGEgdGhyZWFkIHRoYXQgaGFkIGJlZW4gCisgICAgICAgIC8vIGEgbWFsbG9j
IGluc2lkZSBtYXJrQ2hpbGRyZW4oKSB3b3VsZCByaXNrIGEgZGVhZGxvY2sgd2l0aCBhIHRocmVh
ZCB0aGF0IGhhZCBiZWVuIAogICAgICAgICAvLyBzdXNwZW5kZWQgd2hpbGUgaG9sZGluZyB0aGUg
bWFsbG9jIGxvY2suCiAgICAgICAgIGZhc3RNYWxsb2NGb3JiaWQoKTsKICNlbmRpZgpAQCAtODg3
LDcgKzg4Nyw3IEBAIHZvaWQgSGVhcDo6bWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KCkK
ICAgICAgICAgLy8gYW5kIHNpbmNlIHRoaXMgaXMgYSBzaGFyZWQgaGVhcCwgdGhleSBhcmUgcmVh
bCBsb2Nrcy4KICAgICAgICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAoIXB0
aHJlYWRfZXF1YWwodGhyZWFkLT5wb3NpeFRocmVhZCwgcHRocmVhZF9zZWxmKCkpKQotICAgICAg
ICAgICAgICAgIG1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KHRocmVhZCk7CisgICAgICAg
ICAgICAgICAgbWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkobWFya1N0YWNrLCB0aHJlYWQp
OwogICAgICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBmYXN0TWFsbG9jQWxsb3coKTsK
QEAgLTk0Nyw3ICs5NDcsNyBAQCBIZWFwKiBIZWFwOjpoZWFwKEpTVmFsdWUgdikKICAgICByZXR1
cm4gSGVhcDo6Y2VsbEJsb2NrKHYuYXNDZWxsKCkpLT5oZWFwOwogfQogCi12b2lkIEhlYXA6Om1h
cmtQcm90ZWN0ZWRPYmplY3RzKCkKK3ZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoTWFy
a1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgaWYgKG1fcHJvdGVjdGVkVmFsdWVzTXV0ZXgpCiAg
ICAgICAgIG1fcHJvdGVjdGVkVmFsdWVzTXV0ZXgtPmxvY2soKTsKQEAgLTk1NSw4ICs5NTUsMTAg
QEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cygpCiAgICAgUHJvdGVjdENvdW50U2V0
OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKICAgICBmb3IgKFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgSlNDZWxsKiB2YWwgPSBpdC0+Zmlyc3Q7Ci0gICAgICAg
IGlmICghdmFsLT5tYXJrZWQoKSkKLSAgICAgICAgICAgIHZhbC0+bWFyaygpOworICAgICAgICBp
ZiAoIXZhbC0+bWFya2VkKCkpIHsKKyAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQodmFsKTsK
KyAgICAgICAgICAgIG1hcmtTdGFjay5kcmFpbigpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKG1fcHJvdGVjdGVkVmFsdWVzTXV0ZXgpCkBAIC0xMDYxLDcgKzEwNjMsNyBAQCB0ZW1wbGF0
ZSA8SGVhcFR5cGUgaGVhcFR5cGU+IHNpemVfdCBIZWFwOjpzd2VlcCgpCiAgICAgaGVhcC5leHRy
YUNvc3QgPSAwOwogICAgIHJldHVybiBudW1MaXZlT2JqZWN0czsKIH0KLSAgICAKKwogYm9vbCBI
ZWFwOjpjb2xsZWN0KCkKIHsKICNpZm5kZWYgTkRFQlVHCkBAIC0xMDgwLDIwICsxMDgyLDIyIEBA
IGJvb2wgSGVhcDo6Y29sbGVjdCgpCiAgICAgbnVtYmVySGVhcC5vcGVyYXRpb25JblByb2dyZXNz
ID0gQ29sbGVjdGlvbjsKIAogICAgIC8vIE1BUks6IGZpcnN0IG1hcmsgYWxsIHJlZmVyZW5jZWQg
b2JqZWN0cyByZWN1cnNpdmVseSBzdGFydGluZyBvdXQgZnJvbSB0aGUgc2V0IG9mIHJvb3Qgb2Jq
ZWN0cwotCi0gICAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KCk7Ci0gICAgbWFya1By
b3RlY3RlZE9iamVjdHMoKTsKKyAgICBNYXJrU3RhY2smIG1hcmtTdGFjayA9IG1fZ2xvYmFsRGF0
YS0+bWFya1N0YWNrOworICAgIG1hcmtTdGFja09iamVjdHNDb25zZXJ2YXRpdmVseShtYXJrU3Rh
Y2spOworICAgIG1hcmtQcm90ZWN0ZWRPYmplY3RzKG1hcmtTdGFjayk7CiAgICAgaWYgKG1fbWFy
a0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6bWFya0xpc3RzKCptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXI6Om1hcmtMaXN0cyhtYXJrU3RhY2ssICptX21hcmtMaXN0U2V0KTsKICAgICBpZiAo
bV9nbG9iYWxEYXRhLT5leGNlcHRpb24gJiYgIW1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uLm1hcmtl
ZCgpKQotICAgICAgICBtX2dsb2JhbERhdGEtPmV4Y2VwdGlvbi5tYXJrKCk7Ci0gICAgbV9nbG9i
YWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkubWFya0NhbGxGcmFtZXModGhpcyk7
CisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9nbG9iYWxEYXRhLT5leGNlcHRpb24pOworICAg
IG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLm1hcmtDYWxsRnJhbWVz
KG1hcmtTdGFjaywgdGhpcyk7CiAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MubWFyaygp
OwogICAgIGlmIChtX2dsb2JhbERhdGEtPnNjb3BlTm9kZUJlaW5nUmVwYXJzZWQpCi0gICAgICAg
IG1fZ2xvYmFsRGF0YS0+c2NvcGVOb2RlQmVpbmdSZXBhcnNlZC0+bWFyaygpOworICAgICAgICBt
X2dsb2JhbERhdGEtPnNjb3BlTm9kZUJlaW5nUmVwYXJzZWQtPm1hcmtBZ2dyZWdhdGUobWFya1N0
YWNrKTsKICAgICBpZiAobV9nbG9iYWxEYXRhLT5maXJzdFN0cmluZ2lmaWVyVG9NYXJrKQotICAg
ICAgICBKU09OT2JqZWN0OjptYXJrU3RyaW5naWZpZXJzKG1fZ2xvYmFsRGF0YS0+Zmlyc3RTdHJp
bmdpZmllclRvTWFyayk7CisgICAgICAgIEpTT05PYmplY3Q6Om1hcmtTdHJpbmdpZmllcnMobWFy
a1N0YWNrLCBtX2dsb2JhbERhdGEtPmZpcnN0U3RyaW5naWZpZXJUb01hcmspOwogCisgICAgbWFy
a1N0YWNrLmRyYWluKCk7CisgICAgbWFya1N0YWNrLmNvbXBhY3QoKTsKICAgICBKQVZBU0NSSVBU
Q09SRV9HQ19NQVJLRUQoKTsKIAogICAgIHNpemVfdCBvcmlnaW5hbExpdmVPYmplY3RzID0gcHJp
bWFyeUhlYXAubnVtTGl2ZU9iamVjdHMgKyBudW1iZXJIZWFwLm51bUxpdmVPYmplY3RzOwpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaCBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgKaW5kZXggOWE4ODI2Mi4uODc3Zjg5MCAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbGxlY3Rvci5oCkBAIC0zOSwxMSArMzksMTIgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLSAgICBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKICAgICBjbGFzcyBDb2xsZWN0
b3JCbG9jazsKICAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAg
IGNsYXNzIEpTVmFsdWU7CisgICAgY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CisgICAgY2xh
c3MgTWFya1N0YWNrOwogCiAgICAgZW51bSBPcGVyYXRpb25JblByb2dyZXNzIHsgTm9PcGVyYXRp
b24sIEFsbG9jYXRpb24sIENvbGxlY3Rpb24gfTsKICAgICBlbnVtIEhlYXBUeXBlIHsgUHJpbWFy
eUhlYXAsIE51bWJlckhlYXAgfTsKQEAgLTExMSw3ICsxMTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIGJvb2wgaXNDZWxsTWFya2VkKGNvbnN0IEpTQ2VsbCopOwogICAgICAg
ICBzdGF0aWMgdm9pZCBtYXJrQ2VsbChKU0NlbGwqKTsKIAotICAgICAgICB2b2lkIG1hcmtDb25z
ZXJ2YXRpdmVseSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKKyAgICAgICAgdm9pZCBtYXJrQ29u
c2VydmF0aXZlbHkoTWFya1N0YWNrJiwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CiAKICAgICAg
ICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlzdFNldCgpIHsgaWYgKCFt
X21hcmtMaXN0U2V0KSBtX21hcmtMaXN0U2V0ID0gbmV3IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRC
dWZmZXIqPjsgcmV0dXJuICptX21hcmtMaXN0U2V0OyB9CiAKQEAgLTEzMywxMSArMTM0LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB+SGVhcCgpOwogCiAgICAgICAgIHZvaWQgcmVjb3Jk
RXh0cmFDb3N0KHNpemVfdCk7Ci0gICAgICAgIHZvaWQgbWFya1Byb3RlY3RlZE9iamVjdHMoKTsK
LSAgICAgICAgdm9pZCBtYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KCk7Ci0gICAgICAg
IHZvaWQgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseUludGVybmFsKCk7Ci0gICAgICAg
IHZvaWQgbWFya090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoVGhyZWFkKik7Ci0gICAgICAgIHZv
aWQgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KCk7CisgICAgICAgIHZvaWQgbWFya1By
b3RlY3RlZE9iamVjdHMoTWFya1N0YWNrJik7CisgICAgICAgIHZvaWQgbWFya0N1cnJlbnRUaHJl
YWRDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smKTsKKyAgICAgICAgdm9pZCBtYXJrQ3VycmVudFRo
cmVhZENvbnNlcnZhdGl2ZWx5SW50ZXJuYWwoTWFya1N0YWNrJik7CisgICAgICAgIHZvaWQgbWFy
a090aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJiwgVGhyZWFkKik7CisgICAgICAg
IHZvaWQgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYpOwogCiAgICAg
ICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4gUHJvdGVjdENvdW50U2V0OwogCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKaW5kZXggY2QxYjQwYS4uY2M4NTM1
NCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcApAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjgsMTQgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEdldHRlclNldHRlcjo6
bWFyaygpCit2b2lkIEdldHRlclNldHRlcjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0
YWNrKQogewotICAgIEpTQ2VsbDo6bWFyaygpOworICAgIEpTQ2VsbDo6bWFya0NoaWxkcmVuKG1h
cmtTdGFjayk7CiAKICAgICBpZiAobV9nZXR0ZXIgJiYgIW1fZ2V0dGVyLT5tYXJrZWQoKSkKLSAg
ICAgICAgbV9nZXR0ZXItPm1hcmsoKTsKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX2dldHRl
cik7CiAgICAgaWYgKG1fc2V0dGVyICYmICFtX3NldHRlci0+bWFya2VkKCkpCi0gICAgICAgIG1f
c2V0dGVyLT5tYXJrKCk7CisgICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9zZXR0ZXIpOwogfQog
CiBKU1ZhbHVlIEdldHRlclNldHRlcjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCmlu
ZGV4IGU2Yjc0YTEuLjY3YzE0NzMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIu
aApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMjAg
KzMzLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGZvciBhIHByb3BlcnR5LgogICAgIGNs
YXNzIEdldHRlclNldHRlciA6IHB1YmxpYyBKU0NlbGwgewogICAgIHB1YmxpYzoKLSAgICAgICAg
R2V0dGVyU2V0dGVyKCkKLSAgICAgICAgICAgIDogSlNDZWxsKDApCisgICAgICAgIEdldHRlclNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxE
YXRhKCkuZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBtX2dldHRl
cigwKQogICAgICAgICAgICAgLCBtX3NldHRlcigwKQogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0No
aWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2dldHRlcjsgfQogICAgICAgICB2b2lkIHNldEdldHRlcihKU09iamVjdCogZ2V0
dGVyKSB7IG1fZ2V0dGVyID0gZ2V0dGVyOyB9CiAgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIoKSBj
b25zdCB7IHJldHVybiBtX3NldHRlcjsgfQogICAgICAgICB2b2lkIHNldFNldHRlcihKU09iamVj
dCogc2V0dGVyKSB7IG1fc2V0dGVyID0gc2V0dGVyOyB9Ci0KKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5
cGVJbmZvKEdldHRlclNldHRlclR5cGUpKTsKKyAgICAgICAgfQogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0dldHRlclNldHRlcigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxGdW5jdGlvbi5jcHAgYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxGdW5jdGlvbi5jcHAKaW5kZXggYjBkNGMyNS4uMzA3NGY5
NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24u
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmNwcApA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndh
cmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFr
cyBPcmxvdmljaAogICoKQEAgLTM5LDExICszOSwxMCBAQCBHbG9iYWxFdmFsRnVuY3Rpb246Okds
b2JhbEV2YWxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBz
dAogICAgIEFTU0VSVF9BUkcoY2FjaGVkR2xvYmFsT2JqZWN0LCBjYWNoZWRHbG9iYWxPYmplY3Qp
OwogfQogCi12b2lkIEdsb2JhbEV2YWxGdW5jdGlvbjo6bWFyaygpCit2b2lkIEdsb2JhbEV2YWxG
dW5jdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIFByb3Rv
dHlwZUZ1bmN0aW9uOjptYXJrKCk7Ci0gICAgaWYgKCFtX2NhY2hlZEdsb2JhbE9iamVjdC0+bWFy
a2VkKCkpCi0gICAgICAgIG1fY2FjaGVkR2xvYmFsT2JqZWN0LT5tYXJrKCk7CisgICAgUHJvdG90
eXBlRnVuY3Rpb246Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworICAgIG1hcmtTdGFjay5hcHBl
bmQobV9jYWNoZWRHbG9iYWxPYmplY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxGdW5jdGlvbi5oCmluZGV4IDQ5YjE4NDcuLmNk
YmE0YTAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0
aW9uLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24uaApA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3
YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAogICoKQEAg
LTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBj
YWNoZWRHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEdsb2JhbE9iamVjdDsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogbV9jYWNoZWRHbG9iYWxPYmplY3Q7CiAgICAgfTsKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcAppbmRleCAzYmVmMjYzLi44N2FkYmNkIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw5ICs0OSw5IEBAIEpTQWN0aXZhdGlvbjo6
fkpTQWN0aXZhdGlvbigpCiAgICAgZGVsZXRlIGQoKTsKIH0KIAotdm9pZCBKU0FjdGl2YXRpb246
Om1hcmsoKQordm9pZCBKU0FjdGl2YXRpb246Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtT
dGFjaykKIHsKLSAgICBCYXNlOjptYXJrKCk7CisgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtT
dGFjayk7CiAKICAgICBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSA9IGQoKS0+cmVnaXN0ZXJBcnJh
eS5nZXQoKTsKICAgICBpZiAoIXJlZ2lzdGVyQXJyYXkpCkBAIC01OSwyNSArNTksMTMgQEAgdm9p
ZCBKU0FjdGl2YXRpb246Om1hcmsoKQogCiAgICAgc2l6ZV90IG51bVBhcmFtZXRlcnNNaW51c1Ro
aXMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKS5tX251bVBhcmFtZXRl
cnMgLSAxOwogCi0gICAgc2l6ZV90IGkgPSAwOwotICAgIHNpemVfdCBjb3VudCA9IG51bVBhcmFt
ZXRlcnNNaW51c1RoaXM7IAotICAgIGZvciAoIDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
UmVnaXN0ZXImIHIgPSByZWdpc3RlckFycmF5W2ldOwotICAgICAgICBpZiAoIXIubWFya2VkKCkp
Ci0gICAgICAgICAgICByLm1hcmsoKTsKLSAgICB9CisgICAgc2l6ZV90IGNvdW50ID0gbnVtUGFy
YW1ldGVyc01pbnVzVGhpczsKKyAgICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKHJlZ2lzdGVyQXJy
YXksIGNvdW50KTsKIAogICAgIHNpemVfdCBudW1WYXJzID0gZCgpLT5mdW5jdGlvbkJvZHktPmdl
bmVyYXRlZEJ5dGVjb2RlKCkubV9udW1WYXJzOwogCiAgICAgLy8gU2tpcCB0aGUgY2FsbCBmcmFt
ZSwgd2hpY2ggc2l0cyBiZXR3ZWVuIHRoZSBwYXJhbWV0ZXJzIGFuZCB2YXJzLgotICAgIGkgKz0g
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgIGNvdW50ICs9IFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bVZhcnM7Ci0KLSAgICBmb3IgKCA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIFJlZ2lzdGVyJiByID0gcmVnaXN0ZXJBcnJheVtpXTsKLSAg
ICAgICAgaWYgKHIuanNWYWx1ZSgpICYmICFyLm1hcmtlZCgpKQotICAgICAgICAgICAgci5tYXJr
KCk7Ci0gICAgfQorICAgIG1hcmtTdGFjay5hcHBlbmRWYWx1ZXMocmVnaXN0ZXJBcnJheSArIGNv
dW50ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBudW1WYXJzLCBNYXlDb250
YWluTnVsbFZhbHVlcyk7CiB9CiAKIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCmluZGV4IGMx
ODNkYWMuLjZhMDg0MzkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
NyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNBY3RpdmF0aW9uKENhbGxGcmFt
ZSosIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4pOwogICAgICAgICB2aXJ0dWFsIH5KU0Fj
dGl2YXRpb24oKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0R5bmFtaWNTY29wZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApp
bmRleCA3MDhlZjk5Li43ZDdkNGM0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKQEAg
LTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtNjAxLDI2
ICs2MDEsMTkgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKICAgICBwdXRTbG93Q2FzZShleGVjLCBtX3N0b3JhZ2UtPm1fbGVuZ3RoKyssIHZhbHVl
KTsKIH0KIAotdm9pZCBKU0FycmF5OjptYXJrKCkKK3ZvaWQgSlNBcnJheTo6bWFya0NoaWxkcmVu
KE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEpTT2JqZWN0OjptYXJrKCk7CisgICAgSlNP
YmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOwogCiAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihz
dG9yYWdlLT5tX2xlbmd0aCwgc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICBpZiAodmFsdWUgJiYgIXZh
bHVlLm1hcmtlZCgpKQotICAgICAgICAgICAgdmFsdWUubWFyaygpOwotICAgIH0KKyAgICBtYXJr
U3RhY2suYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPm1fdmVjdG9yLCB1c2VkVmVjdG9yTGVuZ3RoLCBN
YXlDb250YWluTnVsbFZhbHVlcyk7CiAKICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjppdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBpdC0+c2Vjb25kOwotICAgICAgICAgICAgaWYg
KCF2YWx1ZS5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICB2YWx1ZS5tYXJrKCk7Ci0gICAgICAg
IH0KKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChp
dC0+c2Vjb25kKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggZWE0
OTBkOC4uNDlkZjZjNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtODgsNyArODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
aygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwogCiAg
ICAgICAgIHZvaWQqIGxhenlDcmVhdGlvbkRhdGEoKTsKICAgICAgICAgdm9pZCBzZXRMYXp5Q3Jl
YXRpb25EYXRhKHZvaWQqKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4IDAyNDM3MWMuLjc1
Y2NmN2YgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtODUsNyArODUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCog
b3BlcmF0b3IgbmV3KHNpemVfdCwgRXhlY1N0YXRlKik7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9y
IG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOwogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXco
c2l6ZV90LCB2b2lkKiBwbGFjZW1lbnROZXdEZXN0aW5hdGlvbikgeyByZXR1cm4gcGxhY2VtZW50
TmV3RGVzdGluYXRpb247IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKworICAgICAg
ICB2b2lkIG1hcmtDZWxsRGlyZWN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRy
ZW4oTWFya1N0YWNrJik7CiAgICAgICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7CiAKICAgICAgICAg
Ly8gT2JqZWN0IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRl
ZC4KQEAgLTE1Myw5ICsxNTUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBI
ZWFwOjppc0NlbGxNYXJrZWQodGhpcyk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSlNDZWxs
OjptYXJrKCkKKyAgICBpbmxpbmUgdm9pZCBKU0NlbGw6Om1hcmtDZWxsRGlyZWN0KCkKKyAgICB7
CisgICAgICAgIEhlYXA6Om1hcmtDZWxsKHRoaXMpOworICAgIH0KKworICAgIGlubGluZSB2b2lk
IEpTQ2VsbDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYpCiAgICAgewotICAgICAgICByZXR1cm4g
SGVhcDo6bWFya0NlbGwodGhpcyk7CisgICAgICAgIEFTU0VSVChtYXJrZWQoKSk7CiAgICAgfQog
CiAgICAgaW5saW5lIHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC0yMjQsOSArMjMxLDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSlNWYWx1
ZTo6bWFyaygpCisgICAgaW5saW5lIHZvaWQgSlNWYWx1ZTo6bWFya0RpcmVjdCgpCiAgICAgewot
ICAgICAgICBhc0NlbGwoKS0+bWFyaygpOyAvLyBjYWxsZXJzIHNob3VsZCBjaGVjayAhbWFya2Vk
KCkgYmVmb3JlIGNhbGxpbmcgbWFyaygpLCBzbyB0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3
aXRoIGNlbGxzCisgICAgICAgIEFTU0VSVCghbWFya2VkKCkpOworICAgICAgICBhc0NlbGwoKS0+
bWFya0NlbGxEaXJlY3QoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBKU1ZhbHVlOjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCisgICAgeworICAgICAgICBBU1NFUlQobWFy
a2VkKCkpOworICAgICAgICBhc0NlbGwoKS0+bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAgICAg
fQogCiAgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6bWFya2VkKCkgY29uc3QKQEAgLTMzOSw2ICsz
NTMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPmdl
dEpTTnVtYmVyKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQorICAgIAorICAg
IGlubGluZSBib29sIEpTVmFsdWU6Omhhc0NoaWxkcmVuKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBhc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID49IENvbXBv
dW5kVHlwZTsKKyAgICB9CisgICAgCiAKICAgICBpbmxpbmUgSlNPYmplY3QqIEpTVmFsdWU6OnRv
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICB7CkBAIC0zNTAsNiArMzcwLDM5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+dG9U
aGlzT2JqZWN0KGV4ZWMpIDogdG9UaGlzT2JqZWN0U2xvd0Nhc2UoZXhlYyk7CiAgICAgfQogCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTQ2VsbCogY2VsbCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChjZWxsKTsKKyAgICAgICAgaWYgKGNlbGwtPm1hcmtlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjZWxsLT5tYXJrQ2VsbERpcmVjdCgpOworICAg
ICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID49IENvbXBvdW5k
VHlwZSkKKyAgICAgICAgICAgIG1fdmFsdWVzLmFwcGVuZChjZWxsKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgdm9pZCBNYXJrU3RhY2s6OmRyYWluKCkgeworICAgICAgICB3aGlsZSAoIW1fbWFya1Nl
dHMuaXNFbXB0eSgpIHx8ICFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHdoaWxl
ICgoIW1fbWFya1NldHMuaXNFbXB0eSgpKSAmJiBtX3ZhbHVlcy5zaXplKCkgPCA1MCkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IE1hcmtTZXQmIGN1cnJlbnQgPSBtX21hcmtTZXRzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlKiBwdHIgPSBjdXJyZW50Lm1fdmFsdWVzOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWUqIGVuZCA9IGN1cnJlbnQubV9lbmQ7CisgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnQubV9wcm9wZXJ0aWVzID09IE5vTnVsbFZhbHVlcykgeworICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAocHRyICE9IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZCgqcHRyKyspOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChwdHIgIT0gZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
SlNWYWx1ZSB2YWx1ZSA9ICpwdHIrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBKU0NlbGwqIGN1cnJlbnQgPSBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQtPm1hcmtlZCgpKTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50LT5tYXJrQ2hpbGRyZW4oKnRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0NlbGxfaApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggN2ZlZGFkNy4uODRjNjI2MyAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9v
LmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtODMsMTIg
KzgzLDEyIEBAIEpTRnVuY3Rpb246On5KU0Z1bmN0aW9uKCkKICAgICAgICAgc2NvcGVDaGFpbigp
Ln5TY29wZUNoYWluKCk7IC8vIEZJWE1FOiBEb24ndCB3ZSBuZWVkIHRvIGRvIHRoaXMgaW4gdGhl
IGludGVycHJldGVyIHRvbz8KIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjptYXJrKCkKK3ZvaWQgSlNG
dW5jdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEJhc2U6
Om1hcmsoKTsKLSAgICBtX2JvZHktPm1hcmsoKTsKKyAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFy
a1N0YWNrKTsKKyAgICBtX2JvZHktPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBpZiAo
IWlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIHNjb3BlQ2hhaW4oKS5tYXJrKCk7CisgICAgICAg
IHNjb3BlQ2hhaW4oKS5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiB9CiAKIENhbGxUeXBlIEpT
RnVuY3Rpb246OmdldENhbGxEYXRhKENhbGxEYXRhJiBjYWxsRGF0YSkKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKaW5kZXggMTliMTI2MS4uY2FiMWU1YiAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKQEAgLTY4LDcgKzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgc2V0Qm9keShQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkpIHsgbV9ib2R5
ID0gYm9keTsgfQogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KCkgY29uc3QgeyByZXR1
cm4gbV9ib2R5LmdldCgpOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAgICAgICBzdGF0
aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gaW5mbzsKIApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IDE1NmQxMDIuLjBmOTBlOGUgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUg
IkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgorI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTExOCw2ICsx
MjAsOCBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShib29sIGlzU2hhcmVkLCBjb25zdCBW
UHRyU2V0JiB2cHRyU2V0KQogICAgICwgc3RyaW5nU3RydWN0dXJlKEpTU3RyaW5nOjpjcmVhdGVT
dHJ1Y3R1cmUoanNOdWxsKCkpKQogICAgICwgbm90QW5PYmplY3RFcnJvclN0dWJTdHJ1Y3R1cmUo
SlNOb3RBbk9iamVjdEVycm9yU3R1Yjo6Y3JlYXRlU3RydWN0dXJlKGpzTnVsbCgpKSkKICAgICAs
IG5vdEFuT2JqZWN0U3RydWN0dXJlKEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShqc051
bGwoKSkpCisgICAgLCBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZShKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQorICAgICwgZ2V0dGVyU2V0dGVy
U3RydWN0dXJlKEdldHRlclNldHRlcjo6Y3JlYXRlU3RydWN0dXJlKGpzTnVsbCgpKSkKICNpZiBV
U0UoSlNWQUxVRTMyKQogICAgICwgbnVtYmVyU3RydWN0dXJlKEpTTnVtYmVyQ2VsbDo6Y3JlYXRl
U3RydWN0dXJlKGpzTnVsbCgpKSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmgKaW5kZXggNzQzNGQ5OS4uMjliYTQ5YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1
ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgogI2luY2x1ZGUgIlRp
bWVvdXRDaGVja2VyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTk3LDYgKzk4LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVj
dHVyZTsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbm90QW5PYmplY3RFcnJvclN0dWJTdHJ1
Y3R1cmU7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0dXJlOwor
ICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZTsK
KyAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gZ2V0dGVyU2V0dGVyU3RydWN0dXJlOwogI2lmIFVT
RShKU1ZBTFVFMzIpCiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IG51bWJlclN0cnVjdHVyZTsK
ICNlbmRpZgpAQCAtMTQzLDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTY29w
ZU5vZGUqIHNjb3BlTm9kZUJlaW5nUmVwYXJzZWQ7CiAgICAgICAgIFN0cmluZ2lmaWVyKiBmaXJz
dFN0cmluZ2lmaWVyVG9NYXJrOwogCisgICAgICAgIE1hcmtTdGFjayBtYXJrU3RhY2s7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgSlNHbG9iYWxEYXRhKGJvb2wgaXNTaGFyZWQsIGNvbnN0IFZQdHJT
ZXQmKTsKICAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSomIHNoYXJlZEluc3RhbmNlSW50ZXJu
YWwoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggYzU2
Yjg0Yi4uNzIwM2NiYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKQEAgLTgwLDE2ICs4MCwxNiBAQCBzdGF0aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291bnRU
aHJlc2hvbGQgPSAyNTU7CiAvLyBQcmVmZXJyZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3
ZWVuIGVhY2ggdGltZW91dCBjaGVjawogc3RhdGljIGNvbnN0IGludCBwcmVmZXJyZWRTY3JpcHRD
aGVja1RpbWVJbnRlcnZhbCA9IDEwMDA7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVk
ZWQoSlNWYWx1ZSB2KQorc3RhdGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChNYXJrU3RhY2sm
IG1hcmtTdGFjaywgSlNWYWx1ZSB2KQogewotICAgIGlmICh2ICYmICF2Lm1hcmtlZCgpKQotICAg
ICAgICB2Lm1hcmsoKTsKKyAgICBpZiAodikKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2KTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChjb25zdCBSZWZQdHI8U3RydWN0
dXJlPiYgcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBtYXJr
U3RhY2ssIGNvbnN0IFJlZlB0cjxTdHJ1Y3R1cmU+JiBzKQogewogICAgIGlmIChzKQotICAgICAg
ICBzLT5tYXJrKCk7CisgICAgICAgIHMtPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIH0KIAog
SlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCkBAIC0zNTcsNDMgKzM1Nyw0MyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICAgICAgb2xkTGFzdEluUHJvdG90eXBlQ2hhaW4tPnNldFByb3RvdHlwZShvYmplY3RQcm90b3R5
cGUpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0OjptYXJrKCkKK3ZvaWQgSlNHbG9iYWxPYmpl
Y3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBKU1ZhcmlhYmxl
T2JqZWN0OjptYXJrKCk7CisgICAgSlNWYXJpYWJsZU9iamVjdDo6bWFya0NoaWxkcmVuKG1hcmtT
dGFjayk7CiAgICAgCiAgICAgSGFzaFNldDxQcm9ncmFtQ29kZUJsb2NrKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGNvZGVCbG9ja3MoKS5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8UHJvZ3JhbUNv
ZGVCbG9jayo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvZGVCbG9ja3MoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5tYXJrKCk7CisgICAgICAgICgqaXQpLT5tYXJr
QWdncmVnYXRlKG1hcmtTdGFjayk7CiAKICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmlsZSA9
IGdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpOwogICAgIGlmIChyZWdp
c3RlckZpbGUuZ2xvYmFsT2JqZWN0KCkgPT0gdGhpcykKLSAgICAgICAgcmVnaXN0ZXJGaWxlLm1h
cmtHbG9iYWxzKCZnbG9iYWxEYXRhKCktPmhlYXApOwotCi0gICAgbWFya0lmTmVlZGVkKGQoKS0+
cmVnRXhwQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmVycm9yQ29uc3RydWN0
b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPmV2YWxFcnJvckNvbnN0cnVjdG9yKTsKLSAgICBt
YXJrSWZOZWVkZWQoZCgpLT5yYW5nZUVycm9yQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRl
ZChkKCktPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCkt
PnN5bnRheEVycm9yQ29uc3RydWN0b3IpOwotICAgIG1hcmtJZk5lZWRlZChkKCktPnR5cGVFcnJv
ckNvbnN0cnVjdG9yKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5VUklFcnJvckNvbnN0cnVjdG9y
KTsKLQotICAgIG1hcmtJZk5lZWRlZChkKCktPmV2YWxGdW5jdGlvbik7Ci0gICAgbWFya0lmTmVl
ZGVkKGQoKS0+Y2FsbEZ1bmN0aW9uKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5hcHBseUZ1bmN0
aW9uKTsKLQotICAgIG1hcmtJZk5lZWRlZChkKCktPm9iamVjdFByb3RvdHlwZSk7Ci0gICAgbWFy
a0lmTmVlZGVkKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwotICAgIG1hcmtJZk5lZWRlZChkKCkt
PmFycmF5UHJvdG90eXBlKTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5ib29sZWFuUHJvdG90eXBl
KTsKLSAgICBtYXJrSWZOZWVkZWQoZCgpLT5zdHJpbmdQcm90b3R5cGUpOwotICAgIG1hcmtJZk5l
ZWRlZChkKCktPm51bWJlclByb3RvdHlwZSk7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+ZGF0ZVBy
b3RvdHlwZSk7Ci0gICAgbWFya0lmTmVlZGVkKGQoKS0+cmVnRXhwUHJvdG90eXBlKTsKLQotICAg
IG1hcmtJZk5lZWRlZChkKCktPm1ldGhvZENhbGxEdW1teSk7Ci0KLSAgICBtYXJrSWZOZWVkZWQo
ZCgpLT5lcnJvclN0cnVjdHVyZSk7CisgICAgICAgIHJlZ2lzdGVyRmlsZS5tYXJrR2xvYmFscyht
YXJrU3RhY2ssICZnbG9iYWxEYXRhKCktPmhlYXApOworCisgICAgbWFya0lmTmVlZGVkKG1hcmtT
dGFjaywgZCgpLT5yZWdFeHBDb25zdHJ1Y3Rvcik7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFj
aywgZCgpLT5lcnJvckNvbnN0cnVjdG9yKTsKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBk
KCktPmV2YWxFcnJvckNvbnN0cnVjdG9yKTsKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBk
KCktPnJhbmdlRXJyb3JDb25zdHJ1Y3Rvcik7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywg
ZCgpLT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKTsKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0
YWNrLCBkKCktPnN5bnRheEVycm9yQ29uc3RydWN0b3IpOworICAgIG1hcmtJZk5lZWRlZChtYXJr
U3RhY2ssIGQoKS0+dHlwZUVycm9yQ29uc3RydWN0b3IpOworICAgIG1hcmtJZk5lZWRlZChtYXJr
U3RhY2ssIGQoKS0+VVJJRXJyb3JDb25zdHJ1Y3Rvcik7CisKKyAgICBtYXJrSWZOZWVkZWQobWFy
a1N0YWNrLCBkKCktPmV2YWxGdW5jdGlvbik7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywg
ZCgpLT5jYWxsRnVuY3Rpb24pOworICAgIG1hcmtJZk5lZWRlZChtYXJrU3RhY2ssIGQoKS0+YXBw
bHlGdW5jdGlvbik7CisKKyAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPm9iamVjdFBy
b3RvdHlwZSk7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSk7CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgZCgpLT5hcnJheVByb3RvdHlwZSk7
CisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKKyAg
ICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBkKCktPnN0cmluZ1Byb3RvdHlwZSk7CisgICAgbWFy
a0lmTmVlZGVkKG1hcmtTdGFjaywgZCgpLT5udW1iZXJQcm90b3R5cGUpOworICAgIG1hcmtJZk5l
ZWRlZChtYXJrU3RhY2ssIGQoKS0+ZGF0ZVByb3RvdHlwZSk7CisgICAgbWFya0lmTmVlZGVkKG1h
cmtTdGFjaywgZCgpLT5yZWdFeHBQcm90b3R5cGUpOworCisgICAgbWFya0lmTmVlZGVkKG1hcmtT
dGFjaywgZCgpLT5tZXRob2RDYWxsRHVtbXkpOworCisgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFj
aywgZCgpLT5lcnJvclN0cnVjdHVyZSk7CiAKICAgICAvLyBObyBuZWVkIHRvIG1hcmsgdGhlIG90
aGVyIHN0cnVjdHVyZXMsIGJlY2F1c2UgdGhlaXIgcHJvdG90eXBlcyBhcmUgYWxsCiAgICAgLy8g
Z3VhcmFudGVlZCB0byBiZSByZWZlcmVuY2VkIGVsc2V3aGVyZS4KQEAgLTQwMywxMSArNDAzLDcg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6bWFyaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNp
emVfdCBzaXplID0gZCgpLT5yZWdpc3RlckFycmF5U2l6ZTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBSZWdpc3RlciYgciA9IHJlZ2lzdGVyQXJyYXlb
aV07Ci0gICAgICAgIGlmICghci5tYXJrZWQoKSkKLSAgICAgICAgICAgIHIubWFyaygpOwotICAg
IH0KKyAgICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+
KHJlZ2lzdGVyQXJyYXkpLCBzaXplKTsKIH0KIAogRXhlY1N0YXRlKiBKU0dsb2JhbE9iamVjdDo6
Z2xvYmFsRXhlYygpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXgg
NzU1YTdlMS4uY2RhNDliZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTE2Niw3ICsxNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgfkpTR2xvYmFsT2JqZWN0KCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmso
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGhhc093blBy
b3BlcnR5Rm9yV3JpdGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAKaW5kZXggOTM3ZGMyYi4uYTU0MmE5ZiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCwxMSArNzQsMTAgQEAg
SlNPYmplY3QqIEpTTm90QW5PYmplY3Q6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
IH0KIAogLy8gTWFya2luZwotdm9pZCBKU05vdEFuT2JqZWN0OjptYXJrKCkKK3ZvaWQgSlNOb3RB
bk9iamVjdDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewotICAgIEpTQ2Vs
bDo6bWFyaygpOwotICAgIGlmICghbV9leGNlcHRpb24tPm1hcmtlZCgpKQotICAgICAgICBtX2V4
Y2VwdGlvbi0+bWFyaygpOworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsK
KyAgICBtYXJrU3RhY2suYXBwZW5kKG1fZXhjZXB0aW9uKTsKIH0KIAogLy8gSlNPYmplY3QgbWV0
aG9kcwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0Lmgg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAppbmRleCBhOGUzNmJkLi5i
NjVmZjVmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3Qu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzUs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3Qo
RXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAgICAgLy8gTWFya2luZwotICAgICAgICB2aXJ0dWFs
IHZvaWQgbWFyaygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYpOwogCiAgICAgICAgIC8vIEpTT2JqZWN0IG1ldGhvZHMKICAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAK
aW5kZXggMmYwMmIxZC4uM2I4YTBiYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB+U3RyaW5naWZpZXIoKTsKICAgICBK
U1ZhbHVlIHN0cmluZ2lmeShKU1ZhbHVlKTsKIAotICAgIHZvaWQgbWFyaygpOworICAgIHZvaWQg
bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smKTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIFVTdHJp
bmcgU3RyaW5nQnVpbGRlcjsKQEAgLTIyMSwxNSArMjIxLDEyIEBAIFN0cmluZ2lmaWVyOjp+U3Ry
aW5naWZpZXIoKQogICAgIG1fZXhlYy0+Z2xvYmFsRGF0YSgpLmZpcnN0U3RyaW5naWZpZXJUb01h
cmsgPSBtX25leHRTdHJpbmdpZmllclRvTWFyazsKIH0KIAotdm9pZCBTdHJpbmdpZmllcjo6bWFy
aygpCit2b2lkIFN0cmluZ2lmaWVyOjptYXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNr
KQogewogICAgIGZvciAoU3RyaW5naWZpZXIqIHN0cmluZ2lmaWVyID0gdGhpczsgc3RyaW5naWZp
ZXI7IHN0cmluZ2lmaWVyID0gc3RyaW5naWZpZXItPm1fbmV4dFN0cmluZ2lmaWVyVG9NYXJrKSB7
CiAgICAgICAgIHNpemVfdCBzaXplID0gbV9ob2xkZXJTdGFjay5zaXplKCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gbV9ob2xkZXJTdGFja1tpXS5vYmplY3QoKTsKLSAgICAgICAgICAgIGlmICghb2Jq
ZWN0LT5tYXJrZWQoKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPm1hcmsoKTsKLSAgICAgICAg
fQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAg
IG1hcmtTdGFjay5hcHBlbmQobV9ob2xkZXJTdGFja1tpXS5vYmplY3QoKSk7CiAgICAgfQogfQog
CkBAIC01ODMsOSArNTgwLDkgQEAgYm9vbCBKU09OT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU4KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBKU09OT2JqZWN0OjptYXJrU3RyaW5naWZpZXJzKFN0cmluZ2lmaWVy
KiBzdHJpbmdpZmllcikKK3ZvaWQgSlNPTk9iamVjdDo6bWFya1N0cmluZ2lmaWVycyhNYXJrU3Rh
Y2smIG1hcmtTdGFjaywgU3RyaW5naWZpZXIqIHN0cmluZ2lmaWVyKQogewotICAgIHN0cmluZ2lm
aWVyLT5tYXJrKCk7CisgICAgc3RyaW5naWZpZXItPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsK
IH0KIAogY2xhc3MgV2Fsa2VyIHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgKaW5kZXgg
OGQ1MzY0YS4uZmFjYTdjNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgKQEAgLTQ0
LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBzdGF0aWMgdm9pZCBtYXJrU3RyaW5naWZpZXJzKFN0cmluZ2lmaWVyKik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIG1hcmtTdHJpbmdpZmllcnMoTWFya1N0YWNrJiwgU3RyaW5naWZpZXIq
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCA0MTVjMjVkLi40MTlkZmU5IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTYyLDIxICs2
MiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU09i
amVjdCk7CiAKLXZvaWQgSlNPYmplY3Q6Om1hcmsoKQordm9pZCBKU09iamVjdDo6bWFya0NoaWxk
cmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewogICAgIEpTT0JKRUNUX01BUktfQkVHSU4oKTsK
IAotICAgIEpTQ2VsbDo6bWFyaygpOwotICAgIG1fc3RydWN0dXJlLT5tYXJrKCk7CisgICAgSlND
ZWxsOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKyAgICBtX3N0cnVjdHVyZS0+bWFya0FnZ3Jl
Z2F0ZShtYXJrU3RhY2spOwogCiAgICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSBwcm9wZXJ0
eVN0b3JhZ2UoKTsKLQogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IG1fc3RydWN0dXJlLT5wcm9w
ZXJ0eVN0b3JhZ2VTaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9yYWdlU2l6
ZTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IEpTVmFsdWU6OmRlY29kZShzdG9yYWdlW2ld
KTsKLSAgICAgICAgaWYgKCF2Lm1hcmtlZCgpKQotICAgICAgICAgICAgdi5tYXJrKCk7Ci0gICAg
fQorICAgIG1hcmtTdGFjay5hcHBlbmRWYWx1ZXMocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4o
c3RvcmFnZSksIHN0b3JhZ2VTaXplKTsKIAogICAgIEpTT0JKRUNUX01BUktfRU5EKCk7CiB9CkBA
IC0zMTAsNyArMzA1LDcgQEAgdm9pZCBKU09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU08KICAgICB9CiAKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5l
dyAoZXhlYykgR2V0dGVyU2V0dGVyOworICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0g
bmV3IChleGVjKSBHZXR0ZXJTZXR0ZXIoZXhlYyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgR2V0dGVyLCB0cnVl
LCBzbG90KTsKIAogICAgIC8vIHB1dERpcmVjdCB3aWxsIGNoYW5nZSBvdXIgU3RydWN0dXJlIGlm
IHdlIGFkZCBhIG5ldyBwcm9wZXJ0eS4gRm9yCkBAIC0zMzcsNyArMzMyLDcgQEAgdm9pZCBKU09i
amVjdDo6ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU08KICAgICB9CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0dGVyOworICAg
IEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gbmV3IChleGVjKSBHZXR0ZXJTZXR0ZXIoZXhl
Yyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsIGdldHRlclNldHRlciwgU2V0dGVyLCB0cnVlLCBzbG90KTsKIAogICAgIC8vIHB1dERpcmVj
dCB3aWxsIGNoYW5nZSBvdXIgU3RydWN0dXJlIGlmIHdlIGFkZCBhIG5ldyBwcm9wZXJ0eS4gRm9y
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKaW5kZXggMWExOWEyMy4uZGVjZDVlOSAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmln
aHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIGV4cGxpY2l0IEpTT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGls
ZHJlbihNYXJrU3RhY2smKTsKIAogICAgICAgICAvLyBUaGUgaW5saW5lIHZpcnR1YWwgZGVzdHJ1
Y3RvciBjYW5ub3QgYmUgdGhlIGZpcnN0IHZpcnR1YWwgZnVuY3Rpb24gZGVjbGFyZWQKICAgICAg
ICAgLy8gaW4gdGhlIGNsYXNzIGFzIGl0IHJlc3VsdHMgaW4gdGhlIHZ0YWJsZSBiZWluZyBnZW5l
cmF0ZWQgYXMgYSB3ZWFrIHN5bWJvbApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKaW5kZXggOGM3YjUzZC4uZGMwMzA0ZiAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Mywx
MSArNzMsMTEgQEAgSlNPYmplY3QqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnRvT2JqZWN0KEV4
ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcjo6bWFyaygpCit2b2lkIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Om1hcmtDaGlsZHJl
bihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBKU0NlbGw6Om1hcmsoKTsKLSAgICBpZiAo
bV9vYmplY3QgJiYgIW1fb2JqZWN0LT5tYXJrZWQoKSkKLSAgICAgICAgbV9vYmplY3QtPm1hcmso
KTsKKyAgICBKU0NlbGw6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworICAgIGlmIChtX29iamVj
dCkKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX29iamVjdCk7CiB9CiAKIHZvaWQgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcjo6aW52YWxpZGF0ZSgpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCmluZGV4IDk4MTdjMDcuLjQ1MzQ1MjggMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSwx
NCArNTEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0
cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmpl
Y3QoRXhlY1N0YXRlKikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAogICAgICAgICBK
U1ZhbHVlIG5leHQoRXhlY1N0YXRlKik7CiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVj
dHVyZShKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlKSk7CisgICAg
ICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCk7Ci0g
ICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoSlNPYmplY3QqLCBQYXNzUmVmUHRyPFByb3Bl
cnR5TmFtZUFycmF5RGF0YT4gcHJvcGVydHlOYW1lQXJyYXlEYXRhKTsKKyAgICAgICAgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcihFeGVjU3RhdGUqKTsKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlE
YXRhPiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpOwogCiAgICAgICAgIEpTT2JqZWN0KiBtX29iamVj
dDsKICAgICAgICAgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9kYXRhOwpAQCAtNjYs
MTYgKzcwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheURh
dGE6OmNvbnN0X2l0ZXJhdG9yIG1fZW5kOwogICAgIH07CiAKLWlubGluZSBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCkKLSAgICA6IEpTQ2VsbCgwKQoraW5s
aW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoRXhlY1N0
YXRlKiBleGVjKQorICAgIDogSlNDZWxsKGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVJ
dGVyYXRvclN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fb2JqZWN0KDApCiAgICAgLCBtX3Bvc2l0
aW9uKDApCiAgICAgLCBtX2VuZCgwKQogewogfQogCi1pbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihKU09iamVjdCogb2JqZWN0LCBQYXNzUmVmUHRy
PFByb3BlcnR5TmFtZUFycmF5RGF0YT4gcHJvcGVydHlOYW1lQXJyYXlEYXRhKQotICAgIDogSlND
ZWxsKDApCitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFBhc3NSZWZQdHI8UHJvcGVy
dHlOYW1lQXJyYXlEYXRhPiBwcm9wZXJ0eU5hbWVBcnJheURhdGEpCisgICAgOiBKU0NlbGwoZXhl
Yy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLmdldCgpKQogICAg
ICwgbV9vYmplY3Qob2JqZWN0KQogICAgICwgbV9kYXRhKHByb3BlcnR5TmFtZUFycmF5RGF0YSkK
ICAgICAsIG1fcG9zaXRpb24obV9kYXRhLT5iZWdpbigpKQpAQCAtODYsMTIgKzkwLDEyIEBAIGlu
bGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKEpTT2Jq
ZWN0KiBvYmplY3QsIFBhc3NSZWZQCiBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KQog
ewogICAgIGlmICh2LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I7CisgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IoZXhlYyk7CiAKICAgICBKU09iamVjdCogbyA9IHYudG9PYmpl
Y3QoZXhlYyk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKICAg
ICBvLT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMpOwotICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IobywgcHJvcGVydHlOYW1lcy5yZWxlYXNl
RGF0YSgpKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKGV4
ZWMsIG8sIHByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKSk7CiB9CiAKIGlubGluZSBKU1ZhbHVl
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Om5leHQoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBiL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKaW5kZXggODU5MDdjOC4u
YTg3N2VjNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3Bl
T2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmpl
Y3QuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSwxMiArMzEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19G
SVRTX0lOX0NFTEwoSlNTdGF0aWNTY29wZU9iamVjdCk7CiAKLXZvaWQgSlNTdGF0aWNTY29wZU9i
amVjdDo6bWFyaygpCit2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbihNYXJr
U3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrKCk7Ci0gICAg
Ci0gICAgaWYgKCFkKCktPnJlZ2lzdGVyU3RvcmUubWFya2VkKCkpCi0gICAgICAgIGQoKS0+cmVn
aXN0ZXJTdG9yZS5tYXJrKCk7CisgICAgSlNWYXJpYWJsZU9iamVjdDo6bWFya0NoaWxkcmVuKG1h
cmtTdGFjayk7CisgICAgbWFya1N0YWNrLmFwcGVuZChkKCktPnJlZ2lzdGVyU3RvcmUuanNWYWx1
ZSgpKTsKIH0KIAogSlNPYmplY3QqIEpTU3RhdGljU2NvcGVPYmplY3Q6OnRvVGhpc09iamVjdChF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5oCmluZGV4IDJjYWY1NDAuLjVlYjBlNGIgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBK
U0N7CiAgICAgICAgICAgICBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC51c3RyaW5nKCkucmVwKCks
IFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKICAgICAgICAgfQogICAgICAgICB2
aXJ0dWFsIH5KU1N0YXRpY1Njb3BlT2JqZWN0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAgICAg
ICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU09iamVj
dCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCmluZGV4IDY4ZjI4OTAuLjNkNTUwOGQgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKKysrIGIvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtMzMsOCArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgTnVtYmVyVHlwZSAgICAgICAgPSAzLAogICAgICAgICBOdWxsVHlwZSAgICAgICAg
ICA9IDQsCiAgICAgICAgIFN0cmluZ1R5cGUgICAgICAgID0gNSwKLSAgICAgICAgT2JqZWN0VHlw
ZSAgICAgICAgPSA2LAotICAgICAgICBHZXR0ZXJTZXR0ZXJUeXBlICA9IDcKKyAgICAgICAgQ29t
cG91bmRUeXBlICAgICAgPSA2LAorICAgICAgICBPYmplY3RUeXBlICAgICAgICA9IDcsCisgICAg
ICAgIEdldHRlclNldHRlclR5cGUgID0gOAogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmggYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVmFsdWUuaAppbmRleCBjYmY4ZmM1Li40MDhjMTg3IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDIs
NiArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0ltbWVkaWF0ZTsKICAgICBj
bGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1N0cmluZzsKKyAgICBjbGFzcyBNYXJrU3RhY2s7
CiAgICAgY2xhc3MgUHJvcGVydHlTbG90OwogICAgIGNsYXNzIFB1dFByb3BlcnR5U2xvdDsKICAg
ICBjbGFzcyBVU3RyaW5nOwpAQCAtMTcyLDggKzE3MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgZmxvYXQgdG9GbG9hdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0Pih0b051bWJlcihleGVjKSk7IH0KIAogICAgICAgICAvLyBHYXJiYWdlIGNv
bGxlY3Rpb24uCi0gICAgICAgIHZvaWQgbWFyaygpOworICAgICAgICB2b2lkIG1hcmtDaGlsZHJl
bihNYXJrU3RhY2smKTsKKyAgICAgICAgYm9vbCBoYXNDaGlsZHJlbigpIGNvbnN0OwogICAgICAg
ICBib29sIG1hcmtlZCgpIGNvbnN0OworICAgICAgICB2b2lkIG1hcmtEaXJlY3QoKTsKIAogICAg
ICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGlu
Y2x1ZGVkLgogICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJP
YmplY3QuY3BwCmluZGV4IGZiNTcwMTguLjJjMzlmNWMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMjAwNiBNYWtzIE9ybG92aWNoCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlLCBJbmMuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMTEgKzI2LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTV3JhcHBlck9iamVjdCk7CiAKLXZvaWQgSlNX
cmFwcGVyT2JqZWN0OjptYXJrKCkgCit2b2lkIEpTV3JhcHBlck9iamVjdDo6bWFya0NoaWxkcmVu
KE1hcmtTdGFjayYgbWFya1N0YWNrKSAKIHsKLSAgICBKU09iamVjdDo6bWFyaygpOwotICAgIGlm
IChtX2ludGVybmFsVmFsdWUgJiYgIW1faW50ZXJuYWxWYWx1ZS5tYXJrZWQoKSkKLSAgICAgICAg
bV9pbnRlcm5hbFZhbHVlLm1hcmsoKTsKKyAgICBKU09iamVjdDo6bWFya0NoaWxkcmVuKG1hcmtT
dGFjayk7CisgICAgaWYgKG1faW50ZXJuYWxWYWx1ZSkKKyAgICAgICAgbWFya1N0YWNrLmFwcGVu
ZChtX2ludGVybmFsVmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmggYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCmluZGV4IDJhMmUzYzYuLjBiMmM2ODAgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaApAQCAtMzYsNyArMzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBpbnRlcm5hbFZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnRlcm5hbFZhbHVlOyB9CiAgICAgICAgIHZvaWQgc2V0SW50ZXJuYWxWYWx1ZShK
U1ZhbHVlKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CiAgICAgICAgIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIEpTVmFsdWUgbV9pbnRlcm5hbFZhbHVlOwpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2suY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXJrU3RhY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZGJi
MTcKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5j
cHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisK
K25hbWVzcGFjZSBKU0MKK3sKKworc2l6ZV90IE1hcmtTdGFjazo6c19wYWdlU2l6ZSA9IDA7CisK
K3ZvaWQgTWFya1N0YWNrOjpjb21wYWN0KCkKK3sKKyAgICBBU1NFUlQoc19wYWdlU2l6ZSk7Cisg
ICAgbV92YWx1ZXMuc2hyaW5rQWxsb2NhdGlvbihzX3BhZ2VTaXplKTsKKyAgICBtX21hcmtTZXRz
LnNocmlua0FsbG9jYXRpb24oc19wYWdlU2l6ZSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
cmtTdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYzIyMWUKLS0t
IC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5oCkBAIC0w
LDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgTWFya1N0YWNrX2gKKyNkZWZpbmUgTWFya1N0YWNrX2gKKworI2luY2x1ZGUg
IkpTVmFsdWUuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICBjbGFzcyBSZWdpc3RlcjsKKyAgICAKKyAgICBlbnVtIE1hcmtTZXRQcm9wZXJ0
aWVzIHsgTWF5Q29udGFpbk51bGxWYWx1ZXMsIE5vTnVsbFZhbHVlcyB9OworICAgIAorICAgIGNs
YXNzIE1hcmtTdGFjayA6IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE1hcmtT
dGFjaygpCisgICAgICAgICAgICA6IG1fbWFya1NldHMoKQorICAgICAgICAgICAgLCBtX3ZhbHVl
cygpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
cHBlbmQoSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHZhbHVl
KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5tYXJrZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB2YWx1ZS5tYXJrRGlyZWN0KCk7CisgICAgICAgICAgICBpZiAodmFs
dWUuaGFzQ2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUu
YXNDZWxsKCkpOworICAgICAgICB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVu
ZChKU0NlbGwqIGNlbGwpOworICAgICAgICAKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFw
cGVuZFZhbHVlcyhSZWdpc3RlciogdmFsdWVzLCBzaXplX3QgY291bnQsIE1hcmtTZXRQcm9wZXJ0
aWVzIHByb3BlcnRpZXMgPSBOb051bGxWYWx1ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFw
cGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPih2YWx1ZXMpLCBjb3VudCwgcHJv
cGVydGllcyk7CisgICAgICAgIH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
VmFsdWVzKEpTVmFsdWUqIHZhbHVlcywgc2l6ZV90IGNvdW50LCBNYXJrU2V0UHJvcGVydGllcyBw
cm9wZXJ0aWVzID0gTm9OdWxsVmFsdWVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291
bnQpCisgICAgICAgICAgICAgICAgbV9tYXJrU2V0cy5hcHBlbmQoTWFya1NldCh2YWx1ZXMsIHZh
bHVlcyArIGNvdW50LCBwcm9wZXJ0aWVzKSk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUg
dm9pZCBkcmFpbigpOworICAgICAgICB2b2lkIGNvbXBhY3QoKTsKKworICAgICAgICB+TWFya1N0
YWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fbWFya1NldHMuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChtX3ZhbHVlcy5pc0VtcHR5KCkpOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1Y3QgTWFya1NldCB7CisgICAgICAgICAgICBNYXJr
U2V0KEpTVmFsdWUqIHZhbHVlcywgSlNWYWx1ZSogZW5kLCBNYXJrU2V0UHJvcGVydGllcyBwcm9w
ZXJ0aWVzKQorICAgICAgICAgICAgICAgIDogbV92YWx1ZXModmFsdWVzKQorICAgICAgICAgICAg
ICAgICwgbV9lbmQoZW5kKQorICAgICAgICAgICAgICAgICwgbV9wcm9wZXJ0aWVzKHByb3BlcnRp
ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBKU1ZhbHVlKiBt
X3ZhbHVlczsKKyAgICAgICAgICAgIEpTVmFsdWUqIG1fZW5kOworICAgICAgICAgICAgTWFya1Nl
dFByb3BlcnRpZXMgbV9wcm9wZXJ0aWVzOworICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZVN0YWNrKHNpemVfdCBzaXplKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVs
ZWFzZVN0YWNrKHZvaWQqIGFkZHIsIHNpemVfdCBzaXplKTsKKworICAgICAgICBzdGF0aWMgc2l6
ZV90IHBhZ2VTaXplKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFzX3BhZ2VTaXplKQor
ICAgICAgICAgICAgICAgIHNfcGFnZVNpemUgPSBnZXRwYWdlc2l6ZSgpOworICAgICAgICAgICAg
cmV0dXJuIHNfcGFnZVNpemU7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gc3RydWN0IE1hcmtTdGFja0FycmF5IHsKKyAgICAgICAgICAgIE1hcmtTdGFja0FycmF5
KCkKKyAgICAgICAgICAgICAgICA6IG1fdG9wKDApCisgICAgICAgICAgICAgICAgLCBtX2FsbG9j
YXRlZChNYXJrU3RhY2s6OnBhZ2VTaXplKCkpCisgICAgICAgICAgICAgICAgLCBtX2NhcGFjaXR5
KG1fYWxsb2NhdGVkIC8gc2l6ZW9mKFQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGFsbG9jYXRlU3RhY2sobV9hbGxvY2F0ZWQp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfk1hcmtTdGFja0FycmF5KCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWxlYXNlU3RhY2sobV9kYXRhLCBtX2FsbG9jYXRl
ZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZXhwYW5kKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qgb2xkQWxsb2NhdGlvbiA9IG1fYWxsb2NhdGVk
OworICAgICAgICAgICAgICAgIG1fYWxsb2NhdGVkICo9IDI7CisgICAgICAgICAgICAgICAgbV9j
YXBhY2l0eSA9IG1fYWxsb2NhdGVkIC8gc2l6ZW9mKFQpOworICAgICAgICAgICAgICAgIHZvaWQq
IG5ld0RhdGEgPSBhbGxvY2F0ZVN0YWNrKG1fYWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICBt
ZW1jcHkobmV3RGF0YSwgbV9kYXRhLCBvbGRBbGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBy
ZWxlYXNlU3RhY2sobV9kYXRhLCBvbGRBbGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBtX2Rh
dGEgPSByZWludGVycHJldF9jYXN0PFQqPihuZXdEYXRhKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaW5saW5lIHZvaWQgYXBwZW5kKGNvbnN0IFQmIHYpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fdG9wID09IG1fY2FwYWNpdHkpCisgICAgICAgICAgICAgICAg
ICAgIGV4cGFuZCgpOworICAgICAgICAgICAgICAgIG1fZGF0YVttX3RvcCsrXSA9IHY7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlubGluZSBUIHJlbW92ZUxhc3QoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX3RvcCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YVstLW1fdG9wXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5saW5l
IGJvb2wgaXNFbXB0eSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
dG9wID09IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlubGluZSBzaXplX3Qgc2l6
ZSgpIHsgcmV0dXJuIG1fdG9wOyB9CisKKyAgICAgICAgICAgIGlubGluZSB2b2lkIHNocmlua0Fs
bG9jYXRpb24oc2l6ZV90IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHNpemUgPD0gbV9hbGxvY2F0ZWQpOworICAgICAgICAgICAgICAgIEFTU0VSVCgwID09IChz
aXplICUgTWFya1N0YWNrOjpwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUg
PT0gbV9hbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICByZWxlYXNlU3RhY2socmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9kYXRhKSArIHNpemUs
IG1fYWxsb2NhdGVkIC0gc2l6ZSk7CisgICAgICAgICAgICAgICAgbV9hbGxvY2F0ZWQgPSBzaXpl
OworICAgICAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBtX2FsbG9jYXRlZCAvIHNpemVvZihUKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgc2l6ZV90IG1f
dG9wOworICAgICAgICAgICAgc2l6ZV90IG1fYWxsb2NhdGVkOworICAgICAgICAgICAgc2l6ZV90
IG1fY2FwYWNpdHk7CisgICAgICAgICAgICBUKiBtX2RhdGE7CisgICAgICAgIH07CisKKyAgICAg
ICAgTWFya1N0YWNrQXJyYXk8TWFya1NldD4gbV9tYXJrU2V0czsKKyAgICAgICAgTWFya1N0YWNr
QXJyYXk8SlNDZWxsKj4gbV92YWx1ZXM7CisgICAgICAgIHN0YXRpYyBzaXplX3Qgc19wYWdlU2l6
ZTsKKyAgICB9OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFya1N0YWNrUG9zaXguY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2tQ
b3NpeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxZDM4MgotLS0g
L2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrUG9zaXguY3Bw
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIK
KyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCituYW1lc3BhY2UgSlNDIHsKK3ZvaWQqIE1hcmtTdGFj
azo6YWxsb2NhdGVTdGFjayhzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gbW1hcCgwLCBzaXpl
LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7
Cit9Cit2b2lkIE1hcmtTdGFjazo6cmVsZWFzZVN0YWNrKHZvaWQqIGFkZHIsIHNpemVfdCBzaXpl
KQoreworICAgIG11bm1hcChhZGRyLCBzaXplKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2tXaW4uY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXJrU3RhY2tXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2
ZGM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFj
a1dpbi5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKworI2luY2x1ZGUgIk1hcmtT
dGFjay5oIgorCisjaW5jbHVkZSAid2luZG93cy5oIgorCituYW1lc3BhY2UgSlNDIHsKK3ZvaWQq
IE1hcmtTdGFjazo6YWxsb2NhdGVTdGFjayhzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gVmly
dHVhbEFsbG9jKDAsIHNpemUsIE1FTV9DT01NSVQgfCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJ
VEUpOworfQordm9pZCBNYXJrU3RhY2s6OnJlbGVhc2VTdGFjayh2b2lkKiBhZGRyLCBzaXplX3Qg
c2l6ZSkKK3sKKyAgICBWaXJ0dWFsRnJlZShhZGRyLCBzaXplLCBNRU1fUkVMRUFTRSk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbi5oIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgKaW5kZXggMTdhZmYyNC4uMjNiMzYxZSAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMDQsNyArMjA0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLT5nbG9iYWxPYmplY3QoKTsgfQogCi0gICAgICAg
IHZvaWQgbWFyaygpIGNvbnN0OworICAgICAgICB2b2lkIG1hcmtBZ2dyZWdhdGUoTWFya1N0YWNr
JikgY29uc3Q7CiAKICAgICAgICAgLy8gQ2F1dGlvbjogdGhpcyBzaG91bGQgb25seSBiZSB1c2Vk
IGlmIHRoZSBjb2RlYmxvY2sgdGhpcyBpcyBiZWluZyB1c2VkCiAgICAgICAgIC8vIHdpdGggbmVl
ZHMgYSBmdWxsIHNjb3BlIGNoYWluLCBvdGhlcndpc2UgdGhpcyByZXR1cm5zIHRoZSBkZXB0aCBv
ZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluTWFyay5oIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluTWFyay5oCmluZGV4IGI4MGI4ZWYuLjk4
NGQxMDEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbk1hcmsu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW5NYXJrLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSwxMyArMjUsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBpbmxpbmUg
dm9pZCBTY29wZUNoYWluOjptYXJrKCkgY29uc3QKKyAgICBpbmxpbmUgdm9pZCBTY29wZUNoYWlu
OjptYXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKSBjb25zdAogICAgIHsKLSAgICAg
ICAgZm9yIChTY29wZUNoYWluTm9kZSogbiA9IG1fbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKLSAg
ICAgICAgICAgIEpTT2JqZWN0KiBvID0gbi0+b2JqZWN0OwotICAgICAgICAgICAgaWYgKCFvLT5t
YXJrZWQoKSkKLSAgICAgICAgICAgICAgICBvLT5tYXJrKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
Zm9yIChTY29wZUNoYWluTm9kZSogbiA9IG1fbm9kZTsgbjsgbiA9IG4tPm5leHQpCisgICAgICAg
ICAgICBtYXJrU3RhY2suYXBwZW5kKG4tPm9iamVjdCk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNw
cCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAppbmRleCA5ZDFmMDFh
Li4yZjkyY2MxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5n
cy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCkBAIC04
NSwxMCArODUsMTAgQEAgU21hbGxTdHJpbmdzOjp+U21hbGxTdHJpbmdzKCkKIHZvaWQgU21hbGxT
dHJpbmdzOjptYXJrKCkKIHsKICAgICBpZiAobV9lbXB0eVN0cmluZyAmJiAhbV9lbXB0eVN0cmlu
Zy0+bWFya2VkKCkpCi0gICAgICAgIG1fZW1wdHlTdHJpbmctPm1hcmsoKTsKKyAgICAgICAgbV9l
bXB0eVN0cmluZy0+bWFya0NlbGxEaXJlY3QoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ2hhcmFjdGVyc1RvU3RvcmU7ICsraSkgewogICAgICAgICBpZiAobV9zaW5nbGVDaGFy
YWN0ZXJTdHJpbmdzW2ldICYmICFtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0tPm1hcmtlZCgp
KQotICAgICAgICAgICAgbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2ldLT5tYXJrKCk7CisgICAg
ICAgICAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0tPm1hcmtDZWxsRGlyZWN0KCk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCA4NjY5OTlkLi5mM2Ew
YzdjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRh
YmxlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUuaCIKQEAgLTcyLDEwICs3Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIH5TdHJ1Y3R1cmUoKTsKIAotICAgICAgICB2b2lkIG1hcmsoKQorICAgICAgICB2b2lk
IG1hcmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBtYXJrU3RhY2spCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghbV9wcm90b3R5cGUubWFya2VkKCkpCi0gICAgICAgICAgICAgICAgbV9wcm90b3R5
cGUubWFyaygpOworICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChtX3Byb3RvdHlwZSk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24u
ICAK
</data>
<flag name="review"
          id="18529"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>