<?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>152759</bug_id>
          
          <creation_ts>2016-01-05 14:18:14 -0800</creation_ts>
          <short_desc>REGRESSION(r181345): SVG polyline and polygon leak page</short_desc>
          <delta_ts>2016-02-08 12:54:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>WebKit Local Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=151810</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=83856</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=114280</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Vienneau">chris.vno</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>nakim</cc>
    
    <cc>nikos.andronikos</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1152890</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-05 14:18:14 -0800</bug_when>
    <thetext>The source of the leak appears to come from the below callstack.  A cache of animation points is being created in SVGAnimatedProperty(SVGElement* contextElement, const QualifiedName&amp; attributeName, AnimatedPropertyType animatedPropertyType), however the destructor for SVGAnimatedProperty is never called.  The passed in contextElement gains a ref when the SVGAnimatedProperty is created, however I’m not seeing a code path where the animation points should be destroyed.  This effects both svg polyline and polygon, and results in leaking the whole page.  Note that i&apos;m using code based off of change 188436.
 
Thanks for any help you can provide,
 
Chris Vienneau
 
 
\WebCore\svg\properties\SVGAnimatedProperty.cpp
SVGAnimatedProperty::SVGAnimatedProperty(SVGElement* contextElement, const QualifiedName&amp; attributeName, AnimatedPropertyType animatedPropertyType)
    : m_contextElement(contextElement)
    , m_attributeName(attributeName)
    , m_animatedPropertyType(animatedPropertyType)
    , m_isAnimating(false)
    , m_isReadOnly(false)
{
}
 
&gt;             EAWebKitd.dll!WebCore::SVGAnimatedProperty::SVGAnimatedProperty(WebCore::SVGElement * contextElement, const WebCore::QualifiedName &amp; attributeName, WebCore::AnimatedPropertyType animatedPropertyType) Line 29                C++
                EAWebKitd.dll!WebCore::SVGAnimatedListPropertyTearOff&lt;WebCore::SVGPointList&gt;::SVGAnimatedListPropertyTearOff&lt;WebCore::SVGPointList&gt;(WebCore::SVGElement * contextElement, const WebCore::QualifiedName &amp; attributeName, WebCore::AnimatedPropertyType animatedPropertyType, WebCore::SVGPointList &amp; values) Line 166         C++
                EAWebKitd.dll!WebCore::SVGAnimatedListPropertyTearOff&lt;WebCore::SVGPointList&gt;::create(WebCore::SVGElement * contextElement, const WebCore::QualifiedName &amp; attributeName, WebCore::AnimatedPropertyType animatedPropertyType, WebCore::SVGPointList &amp; values) Line 159         C++
                EAWebKitd.dll!WebCore::SVGAnimatedProperty::lookupOrCreateWrapper&lt;WebCore::SVGPolyElement,WebCore::SVGAnimatedListPropertyTearOff&lt;WebCore::SVGPointList&gt;,WebCore::SVGPointList&gt;(WebCore::SVGPolyElement * element, const WebCore::SVGPropertyInfo * info, WebCore::SVGPointList &amp; property) Line 57             C++
               EAWebKitd.dll!WebCore::SVGPolyElement::lookupOrCreatePointsWrapper(WebCore::SVGElement * contextElement) Line 117            C++
               EAWebKitd.dll!WebCore::SVGPolyElement::animatedPoints() Line 130  C++
               EAWebKitd.dll!WebCore::updatePathFromPolylineElement(WebCore::SVGElement * element, WebCore::Path &amp; path) Line 106               C++
               EAWebKitd.dll!WebCore::updatePathFromGraphicsElement(WebCore::SVGElement * element, WebCore::Path &amp; path) Line 172               C++
               EAWebKitd.dll!WebCore::RenderSVGShape::updateShapeFromElement() Line 84           C++
               EAWebKitd.dll!WebCore::RenderSVGPath::updateShapeFromElement() Line 48              C++
               EAWebKitd.dll!WebCore::RenderSVGShape::layout() Line 164   C++
               EAWebKitd.dll!WebCore::SVGRenderSupport::layoutChildren(WebCore::RenderElement &amp; start, bool selfNeedsLayout) Line 281           C++
               EAWebKitd.dll!WebCore::RenderSVGRoot::layout() Line 181      C++
               EAWebKitd.dll!WebCore::RenderElement::layoutIfNeeded() Line 135    C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutLineBoxes(bool relayoutChildren, WebCore::LayoutUnit &amp; repaintLogicalTop, WebCore::LayoutUnit &amp; repaintLogicalBottom) Line 1621   C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutInlineChildren(bool relayoutChildren, WebCore::LayoutUnit &amp; repaintLogicalTop, WebCore::LayoutUnit &amp; repaintLogicalBottom) Line 652        C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlock(bool relayoutChildren, WebCore::LayoutUnit pageLogicalHeight) Line 484        C++
               EAWebKitd.dll!WebCore::RenderBlock::layout() Line 930              C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlockChild(WebCore::RenderBox &amp; child, WebCore::RenderBlockFlow::MarginInfo &amp; marginInfo, WebCore::LayoutUnit &amp; previousFloatLogicalBottom, WebCore::LayoutUnit &amp; maxFloatLogicalBottom) Line 712            C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, WebCore::LayoutUnit &amp; maxFloatLogicalBottom) Line 633            C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlock(bool relayoutChildren, WebCore::LayoutUnit pageLogicalHeight) Line 488        C++
               EAWebKitd.dll!WebCore::RenderBlock::layout() Line 930              C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlockChild(WebCore::RenderBox &amp; child, WebCore::RenderBlockFlow::MarginInfo &amp; marginInfo, WebCore::LayoutUnit &amp; previousFloatLogicalBottom, WebCore::LayoutUnit &amp; maxFloatLogicalBottom) Line 712            C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, WebCore::LayoutUnit &amp; maxFloatLogicalBottom) Line 633            C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlock(bool relayoutChildren, WebCore::LayoutUnit pageLogicalHeight) Line 488        C++
               EAWebKitd.dll!WebCore::RenderBlock::layout() Line 930              C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlockChild(WebCore::RenderBox &amp; child, WebCore::RenderBlockFlow::MarginInfo &amp; marginInfo, WebCore::LayoutUnit &amp; previousFloatLogicalBottom, WebCore::LayoutUnit &amp; maxFloatLogicalBottom) Line 712            C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, WebCore::LayoutUnit &amp; maxFloatLogicalBottom) Line 633            C++
               EAWebKitd.dll!WebCore::RenderBlockFlow::layoutBlock(bool relayoutChildren, WebCore::LayoutUnit pageLogicalHeight) Line 488        C++
               EAWebKitd.dll!WebCore::RenderBlock::layout() Line 930              C++
               EAWebKitd.dll!WebCore::RenderView::layoutContent(const WebCore::LayoutState &amp; state) Line 256   C++
               EAWebKitd.dll!WebCore::RenderView::layout() Line 382              C++
               EAWebKitd.dll!WebCore::FrameView::layout(bool allowSubtree) Line 1426         C++
               EAWebKitd.dll!WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive() Line 4153    C++
               EAWebKitd.dll!EA::WebKit::View::Paint() Line 278            C++
               EAWebKitDemoUTFWin.exe!EA::Browser::BrowserWinView::OnTick() Line 1039              C++
               EAWebKitDemoUTFWin.exe!EA::UTFWin::CustomWindow::DoMessage(const EA::UTFWin::Message &amp; msg) Line 46  C++
               EAWebKitDemoUTFWin.exe!EA::Browser::BrowserWinView::DoMessage(const EA::UTFWin::Message &amp; msg) Line 649     C++
               EAWebKitDemoUTFWin.exe!EA::UTFWin::WindowMgr::DispatchMsgToWindow(EA::UTFWin::Window * target, const EA::UTFWin::Message &amp; msg, bool outbound) Line 2120     C++
               EAWebKitDemoUTFWin.exe!EA::UTFWin::WindowMgr::SendMsg(EA::UTFWin::IWindow * src, EA::UTFWin::IWindow * dst0, const EA::UTFWin::Message &amp; msg, bool inheritable, bool reversePriority) Line 249                C++
               EAWebKitDemoUTFWin.exe!EA::UTFWin::WindowMgr::ProcessMessages() Line 451     C++
               EAWebKitDemoUTFWin.exe!EA::Browser::BrowserApp::TickEAWebKitThread() Line 781              C++
               EAWebKitDemoUTFWin.exe!EA::Browser::BrowserApp::RunEAWebKit(void * instance) Line 838              C++
                EAWebKitDemoUTFWin.exe!EA::Debug::ExceptionHandler::ExecuteUserFunction(EA::Debug::ExceptionHandler::UserFunctionUnion userFunctionUnion, EA::Debug::ExceptionHandler::UserFunctionType userFunctionType, void * pContext) Line 900                C++
                EAWebKitDemoUTFWin.exe!EA::Debug::ExceptionHandlerWin32::RunTrapped(EA::Debug::ExceptionHandler::UserFunctionUnion userFunctionUnion, EA::Debug::ExceptionHandler::UserFunctionType userFunctionType, void * pContext, bool &amp; exceptionCaught) Line 529          C++
                EAWebKitDemoUTFWin.exe!EA::Debug::ExceptionHandler::RunTrappedInternal(EA::Debug::ExceptionHandler::UserFunctionUnion userFunctionUnion, EA::Debug::ExceptionHandler::UserFunctionType userFunctionType, void * pContext, bool &amp; exceptionCaught) Line 881          C++
               EAWebKitDemoUTFWin.exe!EA::Debug::ExceptionHandler::RunTrapped(void (void *) * userFunction, void * pContext) Line 925          C++
               EAWebKitDemoUTFWin.exe!EA::Browser::BrowserApp::Run(void * __formal) Line 855 C++
               EAWebKitDemoUTFWin.exe!RunnableObjectInternal(void * pContext) Line 608               C++
               EAWebKitDemoUTFWin.exe!invoke_thread_procedure(unsigned int (void *) * const procedure, void * const context) Line 92    C++
               EAWebKitDemoUTFWin.exe!thread_start&lt;unsigned int (__cdecl*)(void * __ptr64)&gt;(void * const parameter) Line 115       C++
               [External Code]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152891</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-05 14:21:31 -0800</bug_when>
    <thetext>Chris, can you attach a test case to this bug please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152916</commentid>
    <comment_count>2</comment_count>
      <attachid>268332</attachid>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-05 15:12:27 -0800</bug_when>
    <thetext>Created attachment 268332
Repro Page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152917</commentid>
    <comment_count>3</comment_count>
      <attachid>268333</attachid>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-05 15:12:56 -0800</bug_when>
    <thetext>Created attachment 268333
Image for repro page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152919</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-05 15:25:58 -0800</bug_when>
    <thetext>I’ve attached a repro page, which is pretty basic, I think the real trick here is recognizing that anything is leaking.  I suggest you ensure that page caching and memory cache are off, this will make the leak more predictable and apparent.  Breakpoints on SVGAnimatedProperty
 and ~SVGAnimatedProperty will show the basic problem.  On my local build I have quite a lot of instrumentation at the moment; for example, I enabled DUMP_NODE_STATISTICS and tweaked the code a bit, with breakpoints in:

WebCore\dom\Node.cpp
{code}
#if DUMP_NODE_STATISTICS
	if (this-&gt;m_nodeFlags &amp; IsSVGFlag)
	{
		DbgPrint(&quot;Added svg node:%p\n&quot;, this);
	}
	liveNodeSet.add(this);
#endif
}
{code}

{code}
#if DUMP_NODE_STATISTICS
	if (this-&gt;m_nodeFlags &amp; IsSVGFlag)
	{
		DbgPrint(&quot;Removed svg node:%p\n&quot;, this);
	}
liveNodeSet.remove(this);
#endif
{code}

You’ll be able to see two svg nodes added when you visit the page, and one svg node removed when you navigate away from the page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154040</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-08 15:40:40 -0800</bug_when>
    <thetext>I initially stated that polyline and polygon leak, I now believe in fact any svg node that creates a SVGAnimatedProperty will leak.  It just so happens that polyline and polygon always create it.  In older code based on based on 157437 the SVGAnimatedProperty would be created less often for polyline and polygon, additionally when it was created it didn&apos;t leak.

For now i&apos;m using a workaround by restoring WebCore\rendering\svg\SVGPathData.cpp updatePathFromPolygonElement() and updatePathFromPolylineElement() to their older version in order to hit the failure case less often.  I&apos;m also immediately releasing the reference kept on the &quot;SVGElement* contextElement&quot; in SVGAnimatedProperty constructor; so when the error case happens we don&apos;t leak the whole page (only the SVGAnimatedProperty).  

This greatly reduces the memory leaked and our soaks come out pretty good now. and I haven&apos;t encountered any issue with releasing the ref early.  I&apos;m moving on to other more urgent issues for the time being, these workarounds I&apos;m using i only consider temporary, I&apos;d be interested in a better fix if one becomes available.

Chris</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154378</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-11 08:36:30 -0800</bug_when>
    <thetext>Said mentioned this in email:

This seems to be a reference cycle between SVGAnimatedListPropertyTearOff and SVGListPropertyTearOff. In SVGAnimatedListPropertyTearOff::animVal(), m_animVal is assigned to a new Ref&lt;SVGListPropertyTearOff&gt; but this new Ref increments the refcount of this. This looks similar to https://bugs.webkit.org/show_bug.cgi?id=151810.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154791</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-12 11:25:59 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Said mentioned this in email:
&gt; 
&gt; This seems to be a reference cycle between SVGAnimatedListPropertyTearOff
&gt; and SVGListPropertyTearOff. In SVGAnimatedListPropertyTearOff::animVal(),
&gt; m_animVal is assigned to a new Ref&lt;SVGListPropertyTearOff&gt; but this new Ref
&gt; increments the refcount of this. This looks similar to
&gt; https://bugs.webkit.org/show_bug.cgi?id=151810.

Thanks, i&apos;ll watch that bug too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160897</commentid>
    <comment_count>8</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-01 09:51:02 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I initially stated that polyline and polygon leak, I now believe in fact any
&gt; svg node that creates a SVGAnimatedProperty will leak.  It just so happens
&gt; that polyline and polygon always create it.  In older code based on based on
&gt; 157437 the SVGAnimatedProperty would be created less often for polyline and
&gt; polygon, additionally when it was created it didn&apos;t leak.
&gt; 
&gt; For now i&apos;m using a workaround by restoring
&gt; WebCore\rendering\svg\SVGPathData.cpp updatePathFromPolygonElement() and
&gt; updatePathFromPolylineElement() to their older version in order to hit the
&gt; failure case less often.  I&apos;m also immediately releasing the reference kept
&gt; on the &quot;SVGElement* contextElement&quot; in SVGAnimatedProperty constructor; so
&gt; when the error case happens we don&apos;t leak the whole page (only the
&gt; SVGAnimatedProperty).  
&gt; 
&gt; This greatly reduces the memory leaked and our soaks come out pretty good
&gt; now. and I haven&apos;t encountered any issue with releasing the ref early.  I&apos;m
&gt; moving on to other more urgent issues for the time being, these workarounds
&gt; I&apos;m using i only consider temporary, I&apos;d be interested in a better fix if
&gt; one becomes available.
&gt; 
&gt; Chris

Yes the SVGAnimatedProperty leak happens because of the reference cycle between SVGListPropertyTearOff and SVGAnimatedListPropertyTearOff (which is derived form SVGAnimatedProperty). But the document leak happens because we cache the SVGAnimatedProperty in a global cache which SVGAnimatedProperty::animatedPropertyCache() returns. The entries of this cache never gets deleted. And because the SVGAnimatedProperty has &quot;RefPtr&lt;SVGElement&gt; m_contextElement&quot;, the SVGElement ref count never get to zero so the whole document can&apos;t be deleted.

This cache is required since it is the place the property value keep changing while animation. But having it in a global cache without notification from the garbage collector that the property wrapper is no longer needed is wrong. I think the cached wrappers have to be stored with the SVGElement itself. Once all the wrappers are not referenced anymore, the SVGElement itself can be deleted and hence all the cached wrappers can be deleted also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161894</commentid>
    <comment_count>9</comment_count>
      <attachid>270630</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-03 21:52:57 -0800</bug_when>
    <thetext>Created attachment 270630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161896</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-03 21:54:18 -0800</bug_when>
    <thetext>Attachment 270630 did not pass style-queue:


ERROR: Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161897</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-02-03 21:54:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/24498164&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162644</commentid>
    <comment_count>12</comment_count>
      <attachid>270630</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-06 10:42:22 -0800</bug_when>
    <thetext>Comment on attachment 270630
Patch

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

review- because of the problem in SVGPathSegWithContext::animatedProperty

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4251
&gt; +    if ($codeGenerator-&gt;IsSVGTypeNeedingTearOff($type) and $type =~ /(?&lt;!String)List$/) {

We normally try to avoid putting rules that are quite so specific into the code generator. Is there a future way to do this that’s less dependent on a regular expression and more on explicit flags in the IDL instead?

&gt; Source/WebCore/svg/SVGPathElement.cpp:354
&gt;      return 0;

nullptr

&gt; Source/WebCore/svg/SVGPathSegWithContext.h:44
&gt; +            return SVGAnimatedProperty::lookupWrapper&lt;SVGPathElement, SVGAnimatedPathSegListPropertyTearOff&gt;(m_element.get(), SVGPathElement::dPropertyInfo()).get();

I don’t understand how this can possibly be safe. Presumably lookupWrapper returns a RefPtr because the object it returns is new and might not have any other references. So how can it be safe to let that RefPtr be destroyed and return the raw pointer it was holding.

&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:49
&gt; +        return m_baseVal;

This should say return property (or WTFMove(property)), to avoid unnecessary reference count churn.

&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:59
&gt; +        return m_animVal;

This should say return property (or WTFMove(property)), to avoid unnecessary reference count churn.

&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:62
&gt; +    void propertyWillBeDeleted(ListProperty* property)

This function should take a reference, not a pointer.

&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:77
&gt; +        return static_cast&lt;ListPropertyTearOff*&gt;(baseVal().get())-&gt;findItem(static_cast&lt;ListItemTearOff*&gt;(property));

Should use references here instead of pointers and avoid the .get():

    return static_cast&lt;ListPropertyTearOff&amp;&gt;(*baseVal()).findItem ...

&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:84
&gt; +        static_cast&lt;ListPropertyTearOff*&gt;(baseVal().get())-&gt;removeItemFromList(itemIndex, shouldSynchronizeWrappers);

Ditto.

&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:95
&gt;          ASSERT(m_animVal);

Peculiar to assert m_animVal but then use m_animatingAnimVal.

&gt; Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:41
&gt; +        return m_baseVal;

Same comments as above.

&gt; Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:51
&gt; +        return m_animVal;

Same comments as above.

&gt; Source/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h:38
&gt; +        return m_baseVal;

Same comment again.

&gt; Source/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h:48
&gt; +        return m_animVal;

Same comment again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162926</commentid>
    <comment_count>13</comment_count>
      <attachid>270865</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-08 10:55:03 -0800</bug_when>
    <thetext>Created attachment 270865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162927</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-08 10:56:37 -0800</bug_when>
    <thetext>Attachment 270865 did not pass style-queue:


ERROR: Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162936</commentid>
    <comment_count>15</comment_count>
      <attachid>270865</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-08 11:09:53 -0800</bug_when>
    <thetext>Comment on attachment 270865
Patch

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

&gt; Source/WebCore/svg/SVGViewSpec.cpp:153
&gt; +    return static_cast&lt;SVGTransformListPropertyTearOff*&gt;(static_reference_cast&lt;SVGAnimatedTransformList&gt;(lookupOrCreateTransformWrapper(this))-&gt;animVal().get());

Can we use static_pointer_cast here instead of using get()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162943</commentid>
    <comment_count>16</comment_count>
      <attachid>270630</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-08 11:19:13 -0800</bug_when>
    <thetext>Comment on attachment 270630
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4251
&gt;&gt; +    if ($codeGenerator-&gt;IsSVGTypeNeedingTearOff($type) and $type =~ /(?&lt;!String)List$/) {
&gt; 
&gt; We normally try to avoid putting rules that are quite so specific into the code generator. Is there a future way to do this that’s less dependent on a regular expression and more on explicit flags in the IDL instead?

I agree. I logged https://bugs.webkit.org/show_bug.cgi?id=153994 and I kept my ugly change as is since the right fix of this issue is outside the scope of this bug.

&gt;&gt; Source/WebCore/svg/SVGPathElement.cpp:354
&gt;&gt;      return 0;
&gt; 
&gt; nullptr

Done.

&gt;&gt; Source/WebCore/svg/SVGPathSegWithContext.h:44
&gt;&gt; +            return SVGAnimatedProperty::lookupWrapper&lt;SVGPathElement, SVGAnimatedPathSegListPropertyTearOff&gt;(m_element.get(), SVGPathElement::dPropertyInfo()).get();
&gt; 
&gt; I don’t understand how this can possibly be safe. Presumably lookupWrapper returns a RefPtr because the object it returns is new and might not have any other references. So how can it be safe to let that RefPtr be destroyed and return the raw pointer it was holding.

You are right. I changed the return value of this function to be RefPtr&lt;&gt;. So the caller will be guaranteed to have a valid pointer as long as it holds the RefPtr&lt;&gt;.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:49
&gt;&gt; +        return m_baseVal;
&gt; 
&gt; This should say return property (or WTFMove(property)), to avoid unnecessary reference count churn.

Done.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:59
&gt;&gt; +        return m_animVal;
&gt; 
&gt; This should say return property (or WTFMove(property)), to avoid unnecessary reference count churn.

Done.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:62
&gt;&gt; +    void propertyWillBeDeleted(ListProperty* property)
&gt; 
&gt; This function should take a reference, not a pointer.

Done.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:77
&gt;&gt; +        return static_cast&lt;ListPropertyTearOff*&gt;(baseVal().get())-&gt;findItem(static_cast&lt;ListItemTearOff*&gt;(property));
&gt; 
&gt; Should use references here instead of pointers and avoid the .get():
&gt; 
&gt;     return static_cast&lt;ListPropertyTearOff&amp;&gt;(*baseVal()).findItem ...

Done. I used static_pointer_cast then I realized it is more expensive than just simply cast the raw reference.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:84
&gt;&gt; +        static_cast&lt;ListPropertyTearOff*&gt;(baseVal().get())-&gt;removeItemFromList(itemIndex, shouldSynchronizeWrappers);
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h:95
&gt;&gt;          ASSERT(m_animVal);
&gt; 
&gt; Peculiar to assert m_animVal but then use m_animatingAnimVal.

Done. Now the assertion is ASSERT(m_animatingAnimVal)

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:41
&gt;&gt; +        return m_baseVal;
&gt; 
&gt; Same comments as above.

Done.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:51
&gt;&gt; +        return m_animVal;
&gt; 
&gt; Same comments as above.

Done.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h:38
&gt;&gt; +        return m_baseVal;
&gt; 
&gt; Same comment again.

Done,

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h:48
&gt;&gt; +        return m_animVal;
&gt; 
&gt; Same comment again.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162945</commentid>
    <comment_count>17</comment_count>
      <attachid>270868</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-08 11:25:30 -0800</bug_when>
    <thetext>Created attachment 270868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162947</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-08 11:28:42 -0800</bug_when>
    <thetext>Attachment 270868 did not pass style-queue:


ERROR: Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162948</commentid>
    <comment_count>19</comment_count>
      <attachid>270865</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-08 11:28:59 -0800</bug_when>
    <thetext>Comment on attachment 270865
Patch

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

&gt;&gt; Source/WebCore/svg/SVGViewSpec.cpp:153
&gt;&gt; +    return static_cast&lt;SVGTransformListPropertyTearOff*&gt;(static_reference_cast&lt;SVGAnimatedTransformList&gt;(lookupOrCreateTransformWrapper(this))-&gt;animVal().get());
&gt; 
&gt; Can we use static_pointer_cast here instead of using get()?

Done. I also did similar casting in SVGViewSpec::setTransformString().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162985</commentid>
    <comment_count>20</comment_count>
      <attachid>270868</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-08 12:54:08 -0800</bug_when>
    <thetext>Comment on attachment 270868
Patch

Clearing flags on attachment: 270868

Committed r196268: &lt;http://trac.webkit.org/changeset/196268&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162986</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-08 12:54:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>268332</attachid>
            <date>2016-01-05 15:12:27 -0800</date>
            <delta_ts>2016-01-05 15:12:27 -0800</delta_ts>
            <desc>Repro Page</desc>
            <filename>svg.html</filename>
            <type>text/html</type>
            <size>686</size>
            <attacher name="Chris Vienneau">chris.vno</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+DQoNCjxodG1sPg0KPHRpdGxlPlNWRyBwb2x5bGluZSB0ZXN0PC90aXRs
ZT4NCjxoZWFkPlNWRyBwb2x5bGluZSB0ZXN0PC9oZWFkPg0KPHN0eWxlPg0KI3BpYyB7DQp9DQo8
L3N0eWxlPg0KPGJvZHk+DQo8ZGl2Pg0KDQoNCjwhLS0gQ2F1c2VzIExFQUtTIC0tPg0KPHN2ZyBo
ZWlnaHQ9IjIwMCIgd2lkdGg9IjUwMCI+DQogIDxwb2x5bGluZSBwb2ludHM9IjIwLDIwIDQ4MCwx
ODAiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOmJsYWNrO3N0cm9rZS13aWR0aDozIiAvPg0KPC9z
dmc+DQoNCjwhLS0gYWxzbyBsZWFrcw0KPHN2ZyBoZWlnaHQ9IjIxMCIgd2lkdGg9IjUwMCI+DQog
IDxwb2x5Z29uIHBvaW50cz0iMjAwLDEwIDI1MCwxOTAgMTYwLDIxMCIgc3R5bGU9ImZpbGw6bGlt
ZTtzdHJva2U6cHVycGxlO3N0cm9rZS13aWR0aDoxIiAvPg0KPC9zdmc+DQotLT4NCg0KPCEtLSBv
dGhlcnMgYXJlIGZpbmUsIGxpa2UgY2lyY2xlIC0tPg0KPCEtLSBDSVJDTEUNCjxzdmcgaGVpZ2h0
PSIxMDAiIHdpZHRoPSIxMDAiPg0KICA8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ry
b2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIzIiBmaWxsPSJyZWQiIC8+DQo8L3N2Zz4NCi0tPg0K
DQo8aW1nIGlkPSJwaWMiIHNyYz0idGVzdC5qcGciPg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+
DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>268333</attachid>
            <date>2016-01-05 15:12:56 -0800</date>
            <delta_ts>2016-01-05 15:12:56 -0800</delta_ts>
            <desc>Image for repro page</desc>
            <filename>test.jpg</filename>
            <type>image/jpeg</type>
            <size>19671</size>
            <attacher name="Chris Vienneau">chris.vno</attacher>
            
              <data encoding="base64">/9j/4AAQSkZJRgABAQEAtAC0AAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdC
IFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAA
AADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj
cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAA
ABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAAD
TAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJD
AAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5
OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEA
AAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAA
AAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAA
AA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBo
dHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt
IHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt
IHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcg
Q29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENv
bmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAA
ABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAA
AAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAK
AA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUA
mgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEy
ATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMC
DAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMh
Ay0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4E
jASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3
BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDII
RghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqY
Cq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUAN
Wg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh
EH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT
5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReu
F9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9oc
AhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCY
IMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZcl
xyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2
K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIx
SjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDec
N9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+
oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXe
RiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN
3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYP
VlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1f
D19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/
aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy
S3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyB
fOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuH
n4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLj
k02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6f
HZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1
q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm4
0blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZG
xsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnU
y9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj
4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozz
GfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t/////gAcY21wMy4x
MC4zLjJMcTMgMHgxZjdkNjI1YgD/2wBDAAMCBQMFAgMDAwMEBwMEBQgFBQkJBQsHDwYIDQsNDRcL
DAwOHSURDg8jDwwMERghIxUWFxcXGR8ZMS0WGiUpFxb/2wBDAQcEBAUEBRMFBRMWGwwbFhYWFhYW
FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhb/wAARCAC0APADAREA
AhEBAxEB/8QAHQAAAAcBAQEAAAAAAAAAAAAAAgMEBQYHCAEACf/EAFsQAAEDAgMEBQgECQgFBw0A
AAIBAwQAEQUSIQYTIjEHMkFRYQgUI0JScYGRM2JyoRUkgpKisbLB8BYXNENjk8LRU7PD0uIlJjVV
g5ThJzY3OERUZHN1tNTj8f/EABoBAAMBAQEBAAAAAAAAAAAAAAABAgMEBQb/xABAEQABAwIDBAkB
BQYFBQEAAAABAAIRAyEEEjFBUWGRBRMiMnGBscHwoRQjM9HhUmJygrLxFSRCkqI0NUNEwiX/2gAM
AwEAAhEDEQA/ANIZa1WCDahNctQhBy0BC5lpohcyUIXt39WhELm7o1She3dCALLm7oRC5u/ChC5u
/CiQiEHd0Ihe3fhRZEL27olEIKh4USiEFQ15UTuRCCo60IhVDjZuu9PDzBspuIODZGyzX6+Q/l6S
spmtPBdQGXo/xf6CPZSNlND0TRe+1aLnWdPKC/8ASFE/+mx/2naRXThB2PMqsJ3UG6aXWhputqo7
KLZQLagl0WgkpMaIR1g0uCc6UlVkBXUy6XFKJKeUL3D7KW91ElLKEBy1k0TVFoClwEJ02bQlktIB
IiqLnZUYo9hXgwesEcVcvknfT7X/AGIf7T1b7Pm5cOKEAefsr/NKQWKsPdhUSVULm7HwozJ5ZXSb
FO6iUQg5B8KJKIQsg+FElEIW7CiU8qHuxokohc3YUSUZV7INEpZVzdj7NElELmQO5KJKIQd2HdRJ
ShA3Q9lGYoi69uhozFEIJND2U8yISd1tbXRKA5CTEBeyvyoQijBexFolEKm8IzPdJvSBLsmRqTHg
Cv2B/wCGs6Rl7ncY5LqxAyYWmzgTzKkLKKidVdVH4VoFzkLOHlBadIcW/bhkf9p2kSunCDseaq+d
1A11VaGm62q91FNkNiuSXRddeygpNIRqkmuqac6FVl5SHXVNEpBEiVzMl9V5JQiQi3CS6JfVEphS
7cnrZVUWYyPejlZ4v8NXggOsHmrl8k7+lbY255In7b1bg9lcOL0HmtAOX7tKFhCse1ZyrXbFQnBX
stCIXMtEpQh5aJT4IVqEIdqOCNEG1NB1XbUIhe91JBug600tq5ZaUhC7aiUL1qaF7KvdQhAUNOVK
URKAo0SiFxptFebQh4c2vjRKRFlnroQKVJ2dx7FJrbe9n4048hCmh+jC/wAiKs6B7GYbyu3pAZKo
p7mgKfMtpbl7NaZlzELLvlKog9JcUU7MKjX/ADnaYMrowo7HmqjxFbMgqdirQ25uta1myiwJ25IL
KLlFS0UisKe7stQQFOct3KZM7M9IzgNuM9HuPk2YoYF5mdjFff2Wo7I1U/awNISfFdn9vYcdt7Ed
h8WZZcPIJOMqKKXz52oAa4wEDFeCaDg7QC0bjuBSRbBNVyKVvkt6ZpwkMSCYt9U1PK8O9A2xQgvm
RRJFRU9/JaVgVRc5wlO2zKl52zlJUKx6p2VniTDFrhBmeB4rQHkYti5I23zJ1Rhftv1o4w35uXHi
BMea0m7Gbstk1pByxLFLLVMqoXLU5RCFalKcBDEe6iUWKFlozIjch5KMyMq7lolKEG1OULlu6hEL
mWiUoXLd9EohBt4UJL1l5UIQhFacp3QstKUAIKp30SnCCqUSiE07Uvea7L41iH/ukCQ+n5LRUnuy
tngqpMz1AziB9VUvQyybXRPgAuWzub1/8507VFK1MDgt8e4Oxbjxj6KXNDVysYWUfKh06UYY92ER
f2nqbbrfDd3zVOYp9Cnvqm6rWt3Vd3kxYO3OkbU4w47cosF/CWmrWznJZMVLutkzD71pOJDVhiXQ
Mi11sG4kjYDZaaYpnkYNBdLt1Vhv99J85/NYaKGeUBkHZDDhQUueIj2dzR06Pf5pt0+b1W2wmzuJ
4thzuIsTIjEQHiZBTEyUyT6o8k/fWlSoGGFIJVLeUFgJ4Bte3HcnsvFisM8R4GyDdqrhNqPFqvEO
b41m1wc5dNF5dTv4KFbLqvnjC39vttUYr8MrowRioJ4rRvkR6ytvbdiQf236t/c+blx4j81p9xF7
qkLImyl+7b8KiSrgIW7a8KUkIgLm6bozFGUIW7bSgOJRAXsjdOSiAiiEKclBARRDTBUwi8tMFJet
QhetRKFy1EoQhFO+gkogLuUe+jMhDyj30SnC7lTleiUIshpSiEUQ+NEpKt/KFecjdDu0LrRtobqM
RiUkvlBx0BX45c1RXdFO66Oj2F+KAHjyCbdg2pDXR5sxGlhklNYfHB0fZPJVzFlNUh9QuG8p3YFL
c+waJUELJnlUIidK8XvXB4n7T1Nht83Low47PmVTGJ/QjbnerZqtK3dWyvJDjoPRsy+9HUEl4s66
JZMu+bQ93m71S4GPwqKhi3Bc1aC9Wt0Mgv8ANPss0SEjkWKcIrreysvOs/7Oh7pM+HoFmW3UP8pF
UHB9nmU5nMePl3Nj/vVVAy/yRAy8vdP/AEHiKdGOFEKJc3pRl4rvj/dSrnt8lIVN+XSxJXAtjcQF
hVhsPzYzh6cDjjbRiPfqjTnhpSpntrbDkXCy/sxm88Yymokmey25UsV3LrqwnfC0l5D39M6QEvqi
Qf236t57PzcuXE6+ZWo3KkLByWtPkhZhPWqLAVIeQbI8ZLmdSQ+dLqwn1hQxlO3vnT5JR1YT6woD
sp1RVFPRdeVqBTCRqFEjJcFNHFt86fVhHWEI9qWF7Opb3JSNLcmKm9LQMCDOBIorUkEapgh113hp
3TQdKEl26WpaoXrj3UQheumtEIldRUpwhdRUohEryqlEIQCJKUIlFkSU4Qqc8qAic2GwfBmlXe4t
jUeOOl+rm/xEFZVxMNG9dfRcNqmodjSVKZCjZzL1Ufct7s5Vod65wk7S6p9kaEFZJ8qdf/KvGv8A
9Tw/2nqbNF0YXu+ZVM4n9EPvqmawtK3dW2/JzIh6HdmVTsZdt/3yRUuHaXLW/E+bgrE6LyUMExqF
xfiW0WKMpdb8Jvb9Ph6ehwsPD0ssyVAPKScJXNnWktwI6f5xf8FVQHaTElvn7KRdBsqL/Nzh0U5s
Pzhl2RmDfjmD0pFxD+VTrNl0hTJVf+Wu8yfRRhINvskaY23oLol/7M/UNbDpWmHPaPh7hZG2YW02
P+XSxN6ZXZg4DwStI+RKtp/SEid8H9t+qN6Yn5ZcuLs7zK0+ZLQFzkpOjnjWllCEjmnOiyLISOeN
EBCATi350WQgE540IQd5400ShNvOAWZtwk+NEA6ozJ2hTr8L6D4Kic6h1LcqFTenNp5k+qSVJaRq
qDwULeN8s4/OlBTzBeFxlRIlNLDdSutrJ30ZSEg4Isn4qCpLKj5R5+mDSjK5GYJs/CuB53A/CkbM
2qoWq808e2q6t8SkajEQ/jeAAJ3noSj2A0RZv3ffTFJ+1LrWouPj2AGqIUwguqpxskNvilBouCBW
aUXPx/BGlBG3zdUrX3YdVPj20Ci4oNVoSBzaTB/VjTV/IBLffR9ndtR17VTfTBjay+kbo7SLFcTD
4EwJj6KSIRnvg7tETI3WdSnFcMPErswTx9jqVfAc1LP5QYfuVRGJKWNSS6JxLm8OVadSQLrm60Sg
Fj2GoIq0zJVbDmuKDZKXUOQaoWafKLlMTOkqNKj5siYVFBUXsJCdoyltiurBnMyRvKqbGb+ZGgqq
FlK3hQw3Wta7YW1Oj/E8Fg7G4DBjtIMdrDo9hbDq341+OYipmkSZXA+p2rp02KxyC1jW2TabwAkY
hHxAODMq54rTa+HWYpila/FQ+ptCjPTfKGVicEwdA2wZasqLfnvioY3K5XSJcyTvPsqo9Hb0gt/F
KolW2Ao50gjGLZGf6NnRW8tkHh4xpO0VtgmFANmlXz2MiFbUuzlWGJ7i6sJ3wtDeRi/GZxPbtqRJ
aB1xIeTMWXNxv1o0F1O3D0XJjSA6OJWm3ZcAXt0c6MhovLe8qA0rnLgow3jETLxxXkJfFC++terK
zDoS1jEcPPlIQFVbIhJlpZEZk4I8zvBb86jbw1sKb8dflRCaTzpLDA5pDqCl7d/3U8qUwmpzFoOt
kdVU5cHOnkKU7UAcWicVwdTTTSjIUSiH8YC9moyqPbcudPqyjNsRLmNOZ7tR0yW1u5zo6tGYpO5j
GIKNgIA17E5UdWNqMxSCZPnvaPy3FFF0S/KnkA0SJJSA3Fut1XXVdb3pwESgZx7ES/uohEwvK4vf
RG5IXUY6Qscg4Hs8WJzWn3n3XRjw2G0ucx8tEbBPeuui28V0qalQUhPILSjRdXdlGmpO5Vft3J6X
I+yn8op+1OF4a8UliOMKJhjUpWd6WVEdkO3uSL1rZk/VUVqlWkzrHLXD0qNep1TONyY0+bgq42A2
72tjbUMvbXY/KmYDunBfaHD4+ZDy8JASZVTi+Fq56XSJzfe6cF21+g25PuNeOnurVXpH2MyoqxMd
/wC6NLb9OtT0hQG/l+qwHQeK/d5n8k+tTGcQ2nwzFYouJFcwtuS3nFBVBdDMnLRF9J41IPWYzMNM
o+v91o6mcN0Z1btTUP8Axt7J6z+j/LX9qugriQEcXTXsSknKqDpUXNti0v8A8Iz/AI6yqGCuzA/h
+ZUIxb+j9nIqmmtqwstBYC4g4RAG/KKz+zW4uvNqmHeZR+Hu5Npnk1/GYen/AGbn/wC2gKHd3zRG
PmhTuaaZaW1bUu4PD1JQ9nEa80cdMAUzcypcc1qazruM5U0dKqtLsDiyC23orPIP7UKl47KMKfvg
PH0VMbM/02KneRVz4r8Nerg++FYfQoeXEtqE01Vn9pyt8PJp8vRcPSdn+ZVqC9ZOGtBK4yVJFPRb
rVIXFc7KEL287rWTnQhCJ1wyREUiIR99kT91ICEJCMqITyNDNiE8t0QUktkq216qLenZOCjt6F+s
nhRKIXc6dndQkuZktfvpoXN53LQhe3lCFzOludBKFxT0v++lKIEIO8TSndKyrDaoke8oHYVmSY+Z
YdhM/EwuugPCBpvPgiX8LXrF0HE3/Zn6ldLARgC4bXAelvr9UwYtL2m2wwc2dm4GGxNjwltusy5m
9U5psle7TQcgzc9PC99KT82Lblb3eO1WAzo9+Z5+8jQRAnfPzgg4FsHhIbP7nHHmXcaz6OR3X2AQ
EH1hJVUivxeqnZXPiujKlRkYcgG9yCd0e60Z05Xae1pssPyRybB7M3sSybeE1z/KuV3Q3SsQ2qz/
AGFWOnngy4eie9mBVnGcRiNsmEOCyESMm8U8rTbm7TNf1srY13YWDVc4cBy/sjpFzvstMO1Mu/3X
91IFIsmq6KS10cVxcUUp66Kmg99KEKq+klVXaxtV7YrP+Osq2q7cB+F5n2UPxX6AreqmvhUsW9bR
WxhkmUsGICuZG0ZbHg1VbZvW/JrbtaLznhoM+KE+8TcmPJE3uE8pFvCVcpfu6tAEXSguEW5JUb6n
IJSJVEi0Ve2loLrRsTATnh77TWFZzK2UiJdfrVYFpK5616kJl6RnlPYbEhTLlNGrW7fShSqgZZVY
X8cefoVU2z+ZJ0URUc6H21y4k/dr1MIO2FOOiUiHEtorqmb0N/zjrfC3p+QXF0p3vMqx96t+aVsA
uJSpw1sq30RL0k0QjxKaAAKqry7b/KnG5ImES5ISy2IFsnFY0W3+VEEJqvcccw/E8U2hc2mkspsf
s683EVlx9W2pEnIDhOv2+kRFcbAB1RVuvhWdnkl/dmP7+y2AcxobS75E8Y2AeVyf0ilWMLdm7cT8
W2JwyOyMGQU+Gf4POGgojuYSZUxyKtlDTnauWqysHGvSmNbTPkNvgvQw+KwdHDihi+9obA7N8qy9
mB6Wf5Q4WeK426WFjKbKWKyWuNnNr1RqMLjcXVrhj21Im5LIEcTsU4p3RHUEUQM0GPHZtVwg8VuJ
V5V6PgvKXHHiRL3XXxpolcCQnbQiVx14lXhMudJCAjrma6H++mlJCPiujvxCQ9laVbKWW+X4Jqqf
fSOlkwb3R7SgchWWXhIvVuihn08aJgSUC5ss7eU9Ncg7SirWbfSNnZUBFFeqjrll+GRCH41yYmrl
rx+6B/yK9Lo+l1mDnc8nk1qvGAseNhWHYfEZQYcOI0wylrWEQHu/jtrsDYEBedUeXvk6yUsSSO7F
PN0UrrfjXl8KUFLMI4pOkgkJSJUy+7lThFzYKI4G66ISHXOu4/mXtv8Axmrl6PGajn4kr0umeziB
SGgaAlrj67tcqcSEtu2t8q4wU0YzijzBA286zlNpLXREXreHhUuIYtKVM1RA1UC26J4toc0hvKYM
tjlzqtx4qzqzmhdGBjqpG8qM4mo7nICLluVtLUmN3Laq6ymsSWqwGUAwS8cgBUXOSOJmtw8svEVa
Ztm2y4SO1J047b6fS6dsHhOmZvzpLyZxymiGo3H61BfAgKXEEyFIYcXDkdyNR1HhzGSun6ME9apL
iRdAJRz/AJs5CcYJgliOlwiThEp/aKkDl0RxKZNsdwuASYYmDbSbppF7uL/hoqPcWXToNAq5hqqz
2eB9JsV82y3Tr3Avtdf/AHaxxIml5L0MI4dapx0VCpY1tEItmvE1ey/XOtsKSKfkFx9KiHzxKl2E
uuOsibw9ZplxLLltnCtmOm65ajA10DeVMGeOO6avN8HYpalVExqoF1AtsXITuNs4di5OlgzEIJbj
AZiXEZDr+5BnIH0n0bhZeqRc+FKlxBdDtPUkwPRa0WOyZ2d6SJ3ACSZ2ai/K5UCw7ZzHW9o8VxvB
/N8HNx0xYEAZJdwfq+hVRH1dK5quHxTT1uH13SBbxuPouyn0jhOqFCu3Nx4+YBTds09uek7E8K2l
nPS3sMmO4iAo1vfPcQMI7QkDXruZd4X1etTwhqTlxHeuSJm9h5pY4tdSFTDCAQBuhokxOwTzViBt
XghYnNhYo7MivxSyH5xkLjzZVH0SlW32yjnyO18D+qxb0TjH0hVpCQdI9bwpXhcqNKgR5sJ/eRZA
Z2yRF4h+OtaNc17czdFz1KVSg/qqne2hLNbrfRL662pqYS6EUMUIX5AZnRUU0Kzf2rc6l2bYmMqS
yVjoaiD4FlVdUFeKmCSJKDASxppHIiOtOtKCIl1vbKv1qReWmEwzMJEJqMrHot7dtVsURC8RFaxJ
QhdbLWxKmWhELOnlWqq4xhV75vwe7+0VcGOIGKH8I9SvX6JaTgD/ABH+lq0HGdHcsJdPom/2K9Aj
avINyj3UeFsHDacQD6iqKpm+PbSkJ5SkOLE63g02SDZKrbeiJzLNw/HnWeJqCnSJO4rbAUTWxLWc
R+fsmLB7lhIv6C3vHOa2yohW5+5KjCQygBwXT0lmqYxzuI9EnSQw7IZhxZjBSjeVs0Qsyt24urzq
3PEwFi2g/LmdMeuxRPbYZrBPKTpumACDjgtbiybtteouqJxVkZcO1Hzmuil1be6Od9qjQE+84oCj
iuoGRgCLMpkpWyDb7fuSi7rlUT1PZjj8+idMRgzWN0xNBpJCZ2TbujuQ107ORaD3/wCbPVG7Ofz0
KxFatE1CPIKQbORH2QBDG7zaaqpX3X/F+qgkFZklykKE6LKuK2KMh1EvzX99KZUo6cstpoYKZVkO
qJyfqlzRu/x+dEgmyYEJNvZG+sgAoND30WRCj2K5pLTcWVKbZYfdI3HCKyAI0nuDWyqoA57KIQN2
3tKxEhyxkR2zytGgqG84i9r7VZVnF1OCu3CUG0qwqf6t022DTyTZiUt5jGJYAD4uq76jyhetcOJp
CNyyxdSKpDo1KtXo5ScOAOOzG3EzODlRXd4oAjY/D4Vq0RYrixLw90hW7Ci5gb/5SjbnrOW9Wm6o
oDAVWm1TBt9OWybAPgebApklxB9pvfW/1hfOoFQnEX3fmtw0DBED9oe35BSl3MPK2b7VbzIXMqBe
ecZ8p3GBiPAMqa8UBhxWs+5J5poVcy/Zz1yh0YggayV6DmZsACdMs+MbOauocLwOO465DiE5vnN8
ZP5pREXaWZz1vdWj8Jh64y1gDtvv8oXI7FVx3Cd0CwjwTrEJGhbQYrWQb2TLl0+HJK0bSZTZ1dPT
YBsWZe57sz9V2W6DioiN5T9bivmX49tU0EJOINlFtqZkuM1KSIkTex2Bd9IhOK86e8ystNNrmM13
Tn2aipULBbWPrsC0oUBUPb0nZFhaSSdgkeKJ2ambQP8AmoYps26zvBXevI8KCi9ZPRL6RKzo4upU
q9S9rp3wcu/WI+q1xWFwlJhqUagO4Rfdr9dFLmUWyLmtzutlHLb7q3JXMAo7Lx/AGZsUcSg4kDU5
gpUZzKOUw9vdjd0RX1bjWNTE06Jiobbyt6GArYlpdSjWCJAP1tbbdSOA9hb8BmW21MJp4N42onlz
B+UlaNfnGZuiyfTNN/Vv10Kb5M/BwxT8HNyIqTOLgN/Xhp5xMON0203xna0x4E+ioHyqDM8SwUyO
98PPL+eVcOOj7V/KPUr1uiZOAM/tu/patAsK84EVtGyJ4WW9EH6td5huq8YnMbcfVOk6W7BwDzqU
QNxY6IBGKo7nUi7uxdazeWDtOWlMuHZaoHjeP4O6xIQZhK6Zpf0RJdE15L2ae6scU41KPV09eK6e
j3Nw+KGIr6X03wQEAZrCYUUBhJgZki5lyLlVCIFX0jegr1tFsv6qYcGgUzw9kEF7zVJGrjrfUxbk
nHEnGEkwBbbjpmfdJVHNdV3bndVZRmnaoD+yfAeoUK2omqR4jBwyF51OfIARERHMvosi5UXVSun8
cqDMTsTacsG83Mecz4JFhaON4Xhcl9wymA4ptjbIouC4KZMvNERBLwsvwqXO7UN0/vN+NuXFNocB
29pB84j5sNtwUowmO75wT76os9xVI157lF1/OosLKXOzJ8aEVs0CIjIdbxX+P8qku2pQlUNQu7iL
wIsaJZGx/wBI6vIaZMCBqjUpuaIyN2S6SqaqqqveS60jYQjik5kgwnHVTrUbURCbAlMQ8ViTJLT5
x4sZ51xG2VcVOH9VTXe1jJdotMPTdVdlbE8lA9vsUjvbRM43guFAx5uBESuG2pSeL6Q2hXPesG4h
tU9W33jnEfVdlGi3DXqG/gSmyBCdxXGHmmcXa84fYOSv4oQW6tw7xXiGqpDEud1YjLvnZ4R7qK2K
wzPvXtv+fMbFONmgcwtvBYzrJxp5vNtSMsnetTmTPIp928HM37P5Q10sJZDT/fjzhcdWK5L2xlue
LTEgcQYI2jwKuo5Mtes4K+9sa2yg2XPMKucdkSv5+dkXSfLeDgU1u/8Ae1DgPtEcD7rdk/Yj/EPZ
Tp90jbIS3a+8K0Ai4WGqzjiXD5ULXL/paP8A6puuX/2/NeiB/wDmfyH1WhvZJMtdU2heahIo+yN+
2gzCNULNdey3uSgCEKKNnbpafDMmQdnm3B0ThJZBAvu4ahpPXxw91uQPsU/vn+mVC+lqZOax9WmJ
rwh5u1lEXFHVfd21nXGapB0RRsyQoaxNnmAtnPkZFbO6K8XEij99ZvpsAlascSVd/R7wbH4DNQF8
6kwGHnnPWdMmx6x+tXSxofSGbcNbrDFQ3EOaNJIHNSASRX21JR1KraIsFkdFDdnI2GzcCjSMSgNP
uNvS47aODvEbAZLnVHq+rmv41l1LMQyKun68IK3qV6uGqRRJGhtaZaNecDcqP8ohWkx/zZlpAbjB
ugRPZ3DVhrkxcDE5RplA+pXp9GEno/Odczj5wLrRsBAj4QzGitIEVmPwgnLqZq72tbTZDdOfqvGf
UfWqZn6zr9FWW0MyKSR0lsyzl+btvqQvoCGrrYOcSJxKll8ErDEZqjcrTff+i6ab+ocQAIuLidJ5
fJULw8wIxU77wxL1RLVfAtFqHMD2wfnJX1r6FTsfNqseFJ3uxLMh0cqtEDK8Wb6J0Qze/gze/Sty
4ZcxWLGzUga3+oJ90Q47PxiUEHAjJlpsnPOJJpkFgUAr8fIeFfBb6eNZurCb/r9FqyiKbCSROg8i
EqgtYRhmBYHPSIJbTI46Zug6uqpvWxML8kUCzezqhVLnlzsrdEAT2napVgsVwXllPCn4Qf1EbfQj
7uygWEbFDjmUiEUbbFltU3haqv8Ai/jt0pEkohDfuLYx2hJXCslu1b6fO6/OgXugibIePkLbjWFt
Kitw7iap67y8/wCO6gGTKIgJBJ4Yzbac10+K/wDhRMmUQicSS0ZttO1aAUGUgYhQcQ2p8xnI75sD
BOWBxQ5furPEN6xuX4fnNa4eq6j2maqrOliNAg7TYjFw5ox83FplVLL6SwCWb38VTSYKdPK3Rb0a
rqz5frZJ9nZywtqHZjbee0Ldoma3MxrZji18jcuao3Nh4P7XspF0sTDdibKI3lQpDvnKpm1G4D93
FV1rEKMG0Q+f2fdXjm9r7q3jcubUKv8AHVH+e3ZW1/8AoaZ/tKzNsQJ3H3W9P/oHfxD2U6vflZPf
Wy5xdUDin/rMMX/60i/6puuM/wDWea9Rv/a/5T6laCcyJ1SKusXXmFeTics2pap3UTAuhccAkHeK
vDmy80S9qA4bEEbVVvSFJlRNtn5MJ9Qf/ATA3REXTzpzvrCs4irbcPUrqogPwd/2z/SFXeOzpsiM
RynyMlcDVRS/53O1QGw6UptCT4RIlDFJWXBQbFf0Yrf560PYDqmxxBspd0YOSB2h2fYafMWHIhbw
ELhc9H7NPDGHJ48S9x2yfVXezlRW1zczGukG91xnRR3YnKOzWRST+nT/AP7x6po9zn6la4v8Xyb/
AEhUR5RX/nVK5a//AI7VcOMvi/IL1uiwf8O83LRbhquHByS0X/Z16DtF4p73n7qlccJN4yttfwfC
+P4s3XO/Xl6BdNQds+LvUpgwdFKUCInJv5cNKbKq13/NwUr2bWZMYYwWNvgaZcdfecbjo+SZ3cic
JaImdwf1+FN7iKct5G31vxTFMtpmsInQCbxtMeWqkcNJmE4E9h0iTMaxOI3IwjFREmkafJxk8u7A
NTX0ubMvHdb9iVDnGoYgRsvci2thERvII4oYXT24jZ+qOwZs3HUxWeHpLIEYL3yimic/D/OnEWUu
MqVRhEGjddVFcJePVFt8Pj86RKUQlEfhA33bZ11XVNPh/GtSTsQAlmCZWwmYy+nBET0evWeXl8UT
9K1MmLBETZMcdFORdxUuqqp+/mtHdbCepQ3uKUN7XG5r4KtIWQbonELLPjtiSKKLpyW9vupg2SKM
2JW+2807KojG1qKpsraOyqc6YieXafHxmpHOd5y3nNsDFEs0PDxL9mnbJ2dLrXCT1h8lF4PFixWT
+o7vrVf+ryWZ/A/m9kPG33XcQib/ACKQPNAC5dRAByIH2aKhkglLDCGu/hK1aUd//Qyf7iurMuOF
X+ONl/PfsiBNv8WEzf6rX+srNx/zA8D7remIwLv4h7KwcvDrGf8A7urJKwWfsZ08qCLZk834Uh8P
b9E3XN/7ccV6Tf8Atc/un1K0OW+LnhzucuO+7rpiF5yJJmVnukKQl+XAmlObJXXDalLlEoMjKPLh
oBCNVUHSs2abYiDjRgjmCt2zD2JKPvrnrkdd5D1K68OP8n/P/wDIVaYuGWAZaWR0aAZKlCwEFLDj
PsTPfWk8wm0dpS/o3E12o2VyDcljHon/AMqlhz27qscO07xPqrslDOZw6RMSDIIY7Lki2XrZAzf4
a6XuDRmXJTbncGHeBzMKu+jmfiT2AOGuHstwUekOtObwiV03HTc4R9lM/OsGV3BkBdmLwtJtTUzY
RwAjXjGip7paffax2YiDHIzPm5Gbe9T66VylxFa/y678OwVMJF+ZGxaXiIpYc0i5yNI46IOp+jrs
bVLRBXk1aQe6RvVXSYmIOR4jjMF8gWFFtwW4kjtiun2k+dQ435ei0fGc+LvUpn2aikw2uKYsw+GG
tg20iaIchwnRbyMgvWVEXiXkP3UTIyt1VVIz34egVjbKrCwd3GpiRyTF5SLBTizZEB0zTT2uMPgl
Rmc5uUaKm04OZyasNbWZK8+xEhFhnmhFfeGmimSr1i0/w1QaQLKXvEwpbCVpXEkOONafRCp2096c
l+VBBUSEpRxhx9B84BWm1REud7ly+VvuoLTtRIK9Mej5xbR8MgJmXXn8O/8A/nhSDSLpyCYCXbU/
i8SDgrlkdZHzmWl/64vV8bKmXwy0AFxhE7U3Q8iRzVXB4lyfv/Un30jJKARCKhOArxvK6KLmXLx5
NU159+nzoLXIkaJKbgLjBip/RN96VQaYSkIzYs0HHMTdVt8rttiORL86zeCVro0KNY5hEfFtu8Xw
9t+M3LxhszbNxBXzZxtwuERvfNkZD8kvGmwZm5UUqnVE1PBQ3a7BXcK2riRRd3zcuAcoMoKm7BHs
mUtb1Rs+OCUg4eR+17KK4rGltyYCuQ3030gRC7apnL/OhxEhGH7rv4V9ItyF19AHf1a0lcsKlOkZ
/DIXlK9HruJSGWWAwHEQcza5SLeImiaot1qZ+98vzWzGk4Qx+0PZSxzaTY7NlYfkurmQfRwS5rpz
K1VmlZdW4LLW0s+E55XsbGo7D6wW8YhO5MgiSi200K8PK9wrHNOI816Aaf8ADsv7p9StRjtBhCaf
gifo2Dn9VqhHk7+9a2zLz8hSn8PYQh5Vwmd18i6Nezm7+VGZGQotdosIRtwlwedwN73VWkv6TJRm
TyFZ86fJ7GIdIsU40NxkWME83JCMSzZZbvFWbr1fL3K6KQjCR+9/8qtZ8cnobreZzQt4Vhvlt+6n
MGVEIcOPuMP3Ybz8pO8aHHMm0QUo2cllCXAJjEgmpatg1HPPkUMzXterSYFWJg1DO8p7xraCG8LL
MnG1N55ANUV10lXMXU4qpoc8wAfn5KX0m0xmkRr8sFPsImYdiGBeeYbdGE9GoZcqsfUocCNUoLXQ
VnTpmT/nBJ8f92uV343zevUwY/yi1BAzeZsLZfoQ/YrpmLleU4Xsm4ncIfgR8QfxBW0kgDoIpiiq
Kjm6q631pEybLTqstnKJYuzCObCYam4k7h0cheBs3iaEnczl+HRORDrlVV5VLKbQ/rABmiJgTGsT
rE3jTbqtHPkX1/QBPbESQ5KcmSm0BXSzrdFRVX6qc+zwX7POrAAWVSrNmp3jwiNQVxrJHBU0Uez3
c7VUrLW6UEw6baNNZkFdVsqqmblm99vkmlKQiEpZim3DRwRFAK4iRKgp7kX1l77X0095MlGiU4SD
MV0ppZzlCqE25ksja97YrqbnddEQefikvqicjdfTx3eGqprTqdPmiaJIuvzXHiHiJUSya5URLIKK
vPT5rrTaMo4pG5shTQ3bAtgSclTRL3Jedu9OSe5KE+CFFZyxyKy5lTdrzS6Lqt+9LWTs59tCRlNM
du7sl9USxL3ckpzZBsU89E6+dwMYxFCVGSmrFa8QaAB+HFm+NZuMLWpYRwUY6ccPcwrDk2owPEcU
DETlOb1wDFEYzjl9VLpfq9vdU5y0wrwzWvljuHqq8wzEmn9q4z21j2KSYw4eUdCafbEwRXRP10sS
Xzdy1ZcS5TlHUR+97JXt3O2S8+2eKDD2i81iT23pSuusopspmuLWXRC99I5pkp0GNggfs8Vtza5+
RF2Sx3EIlklxMPkyGVvyMGiJPvStXGBK5WiXQVgViQru1+F4jIkcTbbrTxGeYiMs3HfmWq1nEuld
IeBRLNsgqx8GkYd5uDxT44M+ci0hG6I5lA/1cPxSqDpuVnUplrobuGnHZ5aFVdi0qEPTY3iiSBLD
xlsyM4opXBBHs5rWIP367Gg/YY2wfdTLbPa6IxNwqHgjim16BMQcJmybsXc27BS5c+JexK37xkLi
ywIcn/ANq4r3nL2N4ZKjfjm9ZREFM7CN/WsWakXBtin1L36aWSTHdqsLTCcRWE1ISW5D80bUxsgO
EfX4b6JQHyICoYfK6X6cNyhO0WMNYhtHDxgWSbNyJuXA3akhGThHw9tqX/kW1GnT6gtfMSY8Yt4+
/BNmHvypL8OO3ipRiThzKIt5yJwRQT4qeIcxn4TZ0tP1my53SxsnW+ltnEo6dPaGECYMc9thMnnY
uSRc3zi8/Vtbi50ixjCCPnoup+IbXp9W1oFyQQL6aTeQNRtSmFh+OyMMbGDs9MODwCBHnsuUd4n5
OTMVS3LMnjHofyWVQAvnahTcHxbD4z7OJOwo85hSsISGroImYbvg9bO2X3Uy4HRFMwZKcdk3GoeP
OzmpU+UIq4wQsjlSQ32Ebjn+72JVF0iApLS7vKFdJjkY8RckS4r5b0cw5JQBl4fctYOgVYdqu7Cl
5w33cRfZw8Qr6xGHjU8IkdTajQG2wsKvkZO8PWIGv1Z63LgvPBg21TzgmBxY7LbZq6SFeykqRkt7
g4lS6+1UyEy95EJ+gx8PZujLYo6q6o22g3T7ScS08ymJS4N2IqTYg2KKq5r5lTs58u2lmKMqM3I7
pp5+4tmtmlcJU3n2ATiP4Cqfrp5iUjAQjcji0RMCOQFym46iIgr9jUUX35y8BqX1Q05P9W4e50Hn
5Aoa1zhOzf8Alv8AJM8x/eSVeE3CcVMpuGt1JOVkFeSfxw0oe/8AE03DTnqfoOCoZW93Xf8Aps+X
RYCRlvHDPJfLddbr3J2r/HKqDgwQ1IgkyUYSoiKAIWui8vkvf/HOjNeUQgtNjnV10zUr27Et4D4/
BUSlnRlSacZEQsNrZbZVVOxO5KYcjKo3t68jOyeIi0RI6UdwG7c82Xw7aC6bJtb2k6+TxKwmbsYc
VpCCdCNd82jxinF/WDZeSl99Z1Za5aOE3Tr05wmHujbGU37oJFYKYPpjXMTfF26Lp9+tZ5jmV0HZ
H/Tykcll+RcMZES6os5Lon2f3VuHAmVLmkUyP3vzSvGwVRgOioKBTQa7/a+61NxvCmgCATwK3R0w
YhDw/o02glSgJReinBbRF6zjw7tPBE1I/ci1dQgNuueiwvfA8eSwfIJ3dssm4W5B7Og+Klb4LZKk
XWoSGQRIcVUPkSovvQ/GgBBchxWwdeVTZaV4zRsSLh3ar6+ZOQ6fKlAm60FR+WLwnVjDZjGIFiZx
L+bNuuMSBUjAQVvR4S9m5c+YrrTc4gQFLe9deKI8atG6gs5gO5maemuJfE/WqAA3RXncTCb1YZWP
I3kxeI8g5WlVF4PnemLIc4m+zRCjRg30Qhblnukbz6iOch/dTJMygOAZkPinEGWt426eFxCcbMHE
V6YqouUs3EN0TL6tISLBDnMcZcl+FpPJoImH+bru3RfaRqEclWyFzeplyivDn7KZBJkqczRopMcL
bCYzlnu4wQKmiPyPMg9nqXzdX+zpQAln3J2wjZq2UnXo43X+piE+q/8AaO8P6FOwSLyVJHMHw2Mx
vHoZuOtEOXzhzfZPyPox/NokpaqiemV1l3GyaxB6Xu44buOgAFgH2eysTBqydf1XoYbO3CwwDjyW
iNknnzw1lFC2eMFxJOrwjW7ohef/AKoT3oo5nFXKuVfZui+Cc1+S1KE4usiwQMzTUJGRHFZbZ35i
i+sYaA0Nl9YvGmGkqS4DRENv3b30VltptoLEakLxNkmnE856MF09Ubp31NStTpuyXLtw189g8yE2
se8Ztm825bT5JolzAWQ8cdN8+4tzcNTyl+UvpHvuGpy1avesNw183WPKPEqgGM013n2H5z4JudJ1
10HH3SccFLAlkRG0+oKaClUxjKTcrNOCTi5xlyXQmxVTeeW7YKiWRbZiVOqnjpde5KZMohHvmqDm
NRzWslktlTuFOxKWiNUSFkaV1Ml1Th7LUEwEJTNUd6622vom1VsOJC0TS900VbpdexedCEzMEm+L
vW68700KLbfA4sQXGnLWLLz6h+qf5+X4UgU2mCq62Pek4Zj0/EMOcJlJEB91nl6F1viVv4F+itDz
LYK1NjK0XhOJSXsG30+Ky9uYTUk1SzRERCwPZwX3jxeygpb31k4Xy8fc/klaVWnSngLkrHpGJwtw
wETNAkIol6aShj7Oi9cQ770MfkVd5mTzVUY3HxBtGWXYj4uMSkNxLKuX82tesabhKlTdedxWt/K3
VR6E5jrR2dbxSASKnYuc0/fV1e6scD+N5H2WOwejGT29UGTbcHKKN2AruEnNPo0/OTt8KzZUI1XT
WwwcZanqNDI8MJwAFVjSVJ1zmCCn9p1ST7qoPCwfSe03TrghMRtoNpZGdRaTCpBs5UReNxsbDp4n
VNIGqWXNYJa7iyvbDYnCfYRDjYccdv0mZEbIm0Qe9E4PvpVDnAHFAaaZlQNqZIbY86BfSAma2hIX
UHi7KpzM9n/SyA4juJ5Q8McewtiNENuS49+MONukG8z9UMhcIInF9q9D2hvZaRp9d3km6pnMwQ2T
E6nTtTpfds0vqpFhEbCSxN9hWnXBBN2qOKTuc8mbN3W9X51IJhS4bQpHg/mjgXw9uIIWHqNiirfi
996Ugpmm5uqccJci7iUDsx5xxmQe8bR4hXiI/wAm3q0SNAkWmJKQbO4s+7jsyJHkxwCNM3YZHd4r
re7cLN+iNUQIkIII+aKUnNxAnTPfZjNcxKTYlepQicQlYkSRIjbG+ekunoI9UW294pfo0IVG9Kkd
pzGHXJySmiNvONgHWoLB1klduHrubQytj55K8cJmNR2Y7brRo6TA5Ut7IDWx0uuE3cnnBZwrjUR1
tx1HGHEeVUG+7QOLN3eNSXtb2naIyl1m6qUTJWFzRfmTXm2pZkrguZXHGDc5Z3mh9K0VufNKmrQd
VbAJjcDEjxF48CEU6gYZIE848tJUcmwcTIW5M55mTBaVVZKO+D7QIuvAgdT42Km1jWC+nz5KC/Mb
apoIs0pW0VUEdE1venJhOIT9hbDByWWSdUGjW7h3RLDz7dOSfupeKFx4g36gAEDLaqLQEWbIniva
WiKuiXXXSkEFJJYlnvmXL8KE0obIbsGCrZshL7NlRbp40FC7LICkSVacVQJ0yFVUVUkUlW65dL2V
FXW1/CkLWQRKZjVQkrntZfq86qEkTirIPxHQIUJtwch+6loU1VGOx53njgNn+POioPtGqJ50iDk3
rd9CVR7uK9BA1VteIgp+wTaRhrD5WG4nhzzbyxRiiQEpZMrrJcQFxWys+K31qcsukfNT7qurBMhW
WGL7OTmJyQ8Vik9I2iamNAp7klaKQxxZD15ZvhUZS0wfmqRaVEOkbAHpzuNzIzjLbuHOtvqeXMpg
kICyack+dDSWiSm2oGq3PK1sPQZixElxGfAze7e2+etdFQZhC58I7JVngViOSvC+aKitkoqipr/W
X7OS2rGCDC9EPDhIXjIgclE2ZISuEui25Hf40C6HCNE6lOmLMkLJRl4TZbaLOKjw5vaCyp1R+VAd
AspNNp1SvCpuHtzZO+YkhFNtEIEVH0LN7alYlS6fxzqhWcLlRUwrSIbPqiQahvty4kedADIjmRDX
dqZ9ZBES6qL4lVCs0m6j7LUaIb+SP2eivJi0TDpKEy+b7eQ898ub1u61LE4hlOiazdgJ5CYUdTUb
2X6Kb5USbi6wzHdtx+FRLqZWXP1U2uzNzDh9VBEGD8CE0gls7tBIJsEamxxlAlr7st1qPvRwCp5T
OU6o6wahQqQ/JHEN6Eh4SntHv7EvFmrapSaGczyKypYh5qRuI9Ab/om3Zcozcp+TIkSW3Ggzx93z
Q/4y/OszpZaAlzrqabfSmXMH2ZnmiFBek+dLuj0XKOrX8d1SGmYKct1CXy8ew53H8GlsyZLMWE6T
0oTiA5Yi4U+1TaxwuUjl2Jq6aiYexOCbSGhnDIX7pls5nPqj6vurJ3fsurDCKV9/sE97BSFl43Pf
ciOtOvADxXUsq+iAUIf7ut3ANuFySTY77KTvFOjyRfjtqhAuYCE10qYnRAI2pfhOJRScAJgmxIHk
4OYkX7Y9YfhdPCsXU6rDnoG+43afLVvi3krBY4RU5izvyPnzS3DW08ylTGmEK8qSqvMPKK2V4l4l
HS2ulxTSmzF5XilVa4G1wMzZOzMNL2uBySfQluemRG42dbht8ilWcHIjJuPRXV0RPOIaX1/tmuKt
mFlU5WQToYNweO0eayOemJdMaidD4IUknmIqTIYz47gyGA3kef5ygiToAun0qLlKyd66UsiYfOqV
PHCdN3zXF43nKuqiMG2UTdBa/Crqr4pbX3rSLDsTFQbUCQOLNNoTkcyYsmu7Ev0h0X50tNVQIOiQ
tyCzqgKCH26qlvhSQlLc5XZRt4gLypHRtlTsjiiCN3QUEtFFEVE5ovZ4UESjwXnHWCNwAEiEdcyB
a6d9i4kpCQmkykxn4EsaL7HL5U0kkxJvD5EQ40+O2cdzmiouqr96L8lpCyai+K4K062qQsTAgQeF
uQO/QPsn9IP6VPxTa4t0UVxXBpTaKjmFS937TBJMH8z6RE+dFiqFV09pMrBz4rjkXDsdNpwhUTa8
4OKpCv8AZHzS3voyJ9a12v1W4emDCExzo3x7Z9CyypLO9iLnyIklvjDN2ZcyZe7W9aOEi2q5qTxT
qZjovnXi0TF8Lx7HsEmRmhxDDm3m5QK5vEaJvKXCo8J6+9FSocAdV2zIztQ80V5nEnmzIEaVT4lS
6gvFmyc0T51BYQVQrQYelJA5vTcBMwq2JXS66Zi7F1Spday1Y4P7qIetnJP7JP8AHRo1AiUXJQVx
SQK/6QP8NEmEwAjYb0uOd4Mp9olZG+R1QvxOfCixCUdqE6MYhN/CLLswGJFmNN4Jacf1La02vcwy
35zU1KDKoyvAhSGHjDH4Pew1MKMG3lcsoSiPLvBy/wBZfSm6tUccxWYwVFthMcP1TTs5IwNUclSc
QkBIkRCbQFiKIiRNZevdVIas13EQVBwLRdh5opuM2JMNYdMjvzDbzLkcFBTK51sx218KBiGg3SOC
qRIjmpZi2HIz0czGxB0mWFanIO8BVQkDIXiPtWqhUYXLM0qje8DyUT2aZbkbQQmJDbSxXii70boq
ZEy9bxqzYLNSXpev55AVCv8AixdlvWrEjtX3Lpw9qfn7BMGzuJT8PdmyYDgA8u5YThvzz2L35hGt
p2rncJsVZGxcyVKlOR5MqW1IZhfjDSohozKB3dr9JrZRylWRYAbK88tvGu5SsYb8hzdNtsPOqnJG
URf0VRaO0EszNvr/AHUew+O/v5aoKtTWJbrJjvVBQJPtIi0SdiIYdZ5Ap8GbjTbYo+0L7YdhRkcV
bfXa4rVhX6Pw2JdnqNGbeLHm0g81pTxD6IysdbcdORBCJYxfA5mHi4APMl5w1mK+cRymBeBDw8Xr
VNOhiKN6L3RezxnH+6zhB8bWVVAxxio1s2u05Ty0UsVSlxUbjYhFmNrchA/TKKfYc40objcZTtXp
zxpun/i6HfVS7B0f/G4jg8R/ybISGSDUaZuzhuRn3FCysvmxzd62QtF0HwTtrowmKp4tmalO4hwI
IMTEHhulYV6DsO6HxvBBBG7Yl4vOlHAExWOYKmZBmYaLlkX+0b1/8a0DcwzDTh+ijMWmL/PFNUcX
fwnieTBo7lyZzea4io5fQ+qJ80/fpS6sQn1hSuSEENZMfGWBvzdw7OiX+u3pSyblXWIMd6Are6j4
1hRt3z5HQQf20v8ApUi0oDwd6KxaFKI4jrbDBCs9nLuXxcylxeN6WUp5gvS48hvR+O+lk1zsENqU
wq10SVqM841vWGXTBOeRUO376cwkm7EWAdbKPNbbcBOYusXtQELUxOBqliStoWCrnpe2bwbaTC5H
nCtM495n5jFlqBurHa3m8UN3fKqLxD7SIvwpFgN1dGu6kY2LH3SLszi+ADiv8ookchmKkbC5LZiQ
yFbZuuQV9IPCo8xTXSs3BzfBddGsyr4/moq0GIjiWCHFfbkSpGEK/wCmNV3YpnXJmHVOr8eVKxsg
0wW2SrE5UZvGFbxbIDLsNs0HdKdnOJOunEn3otTkBFlZdVpLjTLMjEcTNnfp5u/zREdQ+7h61ItI
Cr7QGmHotyPIGQIN2MhYAisuupH6vO1LQXWjXte6WogswutISEhbnut61AurQ2iXeCt+S6UbEEXS
KBbcM39gaNqUWQSyk9HAgFcrbnZzuQU5MILBPzglzDshhoHI0l1t1D0UXFGlsukAc1krmTZ6v4bI
kvtvvNbzJvQ3m7Id3YvfTADdEoziHaSdRwTji+LLMLNiuHNmQBu0Jt1WV1L5XoGaZUikwCAORSJ5
3C1mtNtlLZbId+RqnnBETbhe5BSqFZ8yVDsHSItM34qxMIxjBC2hl4nJlxwelRxacysuNKpCXW7U
6tM1b6H1WZwZyw0ieSmkSdhEgPQYnEMV7CUaXWsKg4Su3ZygpNsvMjvO40xFko4Hn7jpZcyot8g+
smX1eyqa4OU1KT6Z7SkUVYm89O26l10yqKW+5UpxZQSquwPd/wA22NqShnFwh5rfqNfC1SO6tqv4
gPgpPs1h8V/ZfCX1YVFWI0RkmTS/308oIuoe9zahy70XjjeJRsJ85w/FpIA1IYEh84NLgroh1S4b
cdEDYhry4w7juKeRPH21yG4rwBwJo0eifD/KuV3QuDNTrWCHay1zmnfsK1HSNYtyOjLuIBQGJTX4
QxApIEBmjXXhEWqB/Zlp+Yv7q0bhq9JoDHv296HzebkieAg6KDUo1DL2D+Ulse3FLp+KtRGAlNz2
ibKQDSozNcaIM/BnJt4R4b+9e3xpsq4xlqmUjhYk8/YDikcPhX2ZmB439E+n+GiYd32ESX2kbFtS
SOxNRL/WaVVo/wAQptMVWuHi10cwIQMCXXpObzg8imLF/wAFi56TA0jmkprPlivxFQULq91FPpPA
Vj929vPYm7o7GUxLhbS17pRh70LM15jjs9or6oM5t7J+SWtatfTqDskc1i6hWp94HkuEWIm5EdXF
Gnc7x5EfgKvDxdY6qAUjmbrKXgc9yNlOFhj4g7lRBxQ2iT8gl50Cm03UmodivROS3tp4VrCULhKt
uetJJI8Zi4fNw9+FiuHxJMI+u28wLol8C5L8logIBLTZZr8orZHZjZ7Y1jbHZVJsWaZk1uRkK42I
nouVDuac/atUVWCF0YSs978hVG7MOlL2hbkSW21J3BHEJLLrZy3bWbgG2C6Q41BmckcqLHdxPa6Y
e830OcwLVjUeuZUNMNVPaDUgoraN0o+08chbA/8Ak/TMirbr/Gmy6zrsa0WTjiLrv8oNnmTVCZmD
6ZCTNe/30msa4XS659JmYfW6f8Wgw2JDSsoaXPvvWbhlXRh6hrtl30UKQEBtoRVeoNM6q2mWyijR
EkMFrxI5f4ZKNiAbo4+q2n1qNiQKDJ+lZTucP9kKUeibe7z9ENUTL7ypkI2eS46qrKjISqto7gp4
elo1TgAc/ZBXlfv/AN2lN0oB1SiMAFMaBbpmdEVtpzqmdp+UqHwymXDdKUA9LbkzUZlvgIyn8qI4
qZfSlUAAtvuHoqc5wcSN59U4xMa2hYVtGcUf07yzVQYIlQ5+azo8wlEbEsQfw4IOZtqI8+G/FkEY
32b2suvq1LnuarbRpVLkCVamByHGsPixmm20bigjTfMuFPfqtNldzjBWdfA0u8JSvaI1/kxIJBFC
KTGH3fjDVatdPNcuQNfbj6KSzVQZboq22tjX1ES9/dThRFkNmKzkxOVnczIsSyXS3E0fxoJMIAEq
LdIrLKbHTnUHiQ2bf3rdBMjknT7/AD9ErnRYoy3TbBRJHCsorlt++nlAFktdUU5KxQBBG8XxDKD7
ZihSSdRDQutx6XrOoxla1UA7LgG3mm1xZdn0t6Jh2rxSc8OErLZiOOQsWjPtETCXT0mo92VawHRm
CBLWNAkZTltI8oAjYRcb1u3GYhpkk2uJvfzUikRYIjgRjEaQpTbzrmUd3ewfV7OKultNjRktAEcr
LHrKkzJ5p8wuBFdgwz300CcdK+WY6vt+0tq+c6U6bx2A6QqUqJ7I0BAgd3z2716mDwVDE4Zjqovt
O+xPsv/Z
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270630</attachid>
            <date>2016-02-03 21:52:57 -0800</date>
            <delta_ts>2016-02-08 10:54:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152759-20160203215234.patch</filename>
            <type>text/plain</type>
            <size>42195</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxNi0wMi0wMyAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJ
T04ocjE4MTM0NSk6IFNWRyBwb2x5bGluZSBhbmQgcG9seWdvbiBsZWFrIHBhZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBsZWFrIGhhcHBlbnMg
YmVjYXVzZSBvZiBjeWNsaWMgcmVmZXJlbmNlIGJldHdlZW4gU1ZHTGlzdFByb3BlcnR5VGVhck9m
ZiAKKyAgICAgICAgYW5kIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiB3aGljaCBpcyBk
ZXJpdmVkIGZyb20gU1ZHQW5pbWF0ZWRQcm9wZXJ0eS4KKyAgICAgICAgVGhlcmUgaXMgYWxzbyBj
eWNsaWMgcmVmZXJlbmNlIGJldHdlZW4gU1ZHQW5pbWF0ZWRQcm9wZXJ0eSBhbmQgU1ZHRWxlbWVu
dAorICAgICAgICBhbmQgdGhpcyBjYXVzZXMgdGhlIHdob2xlIGRvY3VtZW50IHRvIGJlIGxlYWtl
ZC4gU28gaWYgYSB1c2UgcmVxdWVzdHMsIGZvcgorICAgICAgICBleGFtcGxlLCBhbiBpbnN0YW5j
ZSBvZiBTVkdQb2x5bGluZUVsZW1lbnQucG9pbnRzLCB0aGUgd2hvbGUgZG9jdW1lbnQgd2lsbCBi
ZQorICAgICAgICBsZWFrZWQuCisKKyAgICAgICAgVGhlIGZpeCBkZXBlbmRzIG9uIGhhdmluZyB0
aGUgY3ljbGljIHJlZmVyZW5jZSBhcyBpcyBzaW5jZSB0aGUgb3duaW5nIGFuZCB0aGUKKyAgICAg
ICAgb3duZWQgY2xhc3NlcyBoYXZlIHRvIGxpdmUgdG9nZXRoZXIgaWYgYW55IHRoZW0gaXMgcmVm
ZXJlbmNlZC4gQnV0IHRoZSBvd25pbmcKKyAgICAgICAgY2xhc3MgY2FjaGVzIGEgcmF3ICdyZWYt
Y291bnRlZCcgcG9pbnRlciBvZiB0aGUgb3duZWQgY2xhc3MuIElmIGl0IGlzIHJlcXVlc3RlZAor
ICAgICAgICBmb3IgYW4gaW5zdGFuY2Ugb2YgdGhlIG93bmVkIGNsYXNzIGl0IHJldHVybmVkIGEg
UmVmUHRyPD4gb2YgaXQuIE9uY2UgdGhlIG93bmVkCisgICAgICAgIGNsYXNzIGlzIG5vdCB1c2Vk
LCBpdCBjYW4gZGVsZXRlIGl0c2VsZi4gVGhlIG9ubHkgdGhpbmcgbmVlZGVkIGhlcmUgaXMgdG8g
bm90aWZ5CisgICAgICAgIHRoZSBvd25lciBjbGFzcyBvZiB0aGUgZGVsZXRpb24gc28gaXQgY2xl
YW5zIGl0cyBjYWNoZXMgYW5kIGJlIGFibGUgdG8gY3JlYXRlIGEKKyAgICAgICAgbmV3IHBvaW50
ZXIgaWYgaXQgaXMgcmVxdWVzdGVkIGZvciB0aGUgb3duZWQgY2xhc3MgbGF0ZXIuCisKKyAgICAg
ICAgUmV2ZXJ0IHRoZSBjaGFuZ2Ugb2YgcjE4MTM0NSBpbiBTVkdBbmltYXRlZFByb3BlcnR5Ojps
b29rdXBPckNyZWF0ZVdyYXBwZXIoKQorICAgICAgICB0byBicmVhayB0aGUgY3ljbGljIHJlZmVy
ZW5jZSBiZXR3ZWVuIFNWR0VsZW1lbnQgYW5kIFNWR0FuaW1hdGVkUHJvcGVydHkuCisgICAgICAg
IAorICAgICAgICBBbHNvIGFwcGx5IHRoZSBzYW1lIGFwcHJvYWNoIGluIFNWR0FuaW1hdGVkTGlz
dFByb3BlcnR5VGVhck9mZjo6YmFzZVZhbCgpIGFuZAorICAgICAgICBhbmltVmFsKCkgdG8gYnJl
YWsgY3ljbGljIHJlZmVyZW5jZSBiZXR3ZWVuIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmYgYW5kCisg
ICAgICAgIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi4KKworICAgICAgICBUZXN0OiBz
dmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5jZXMuc3ZnCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKE5h
dGl2ZVRvSlNWYWx1ZSk6IFRoZSBTVkcgbm9uLXN0cmluZyBsaXN0IHRlYXItb2ZmIHByb3BlcnRp
ZXMgYmVjYW1lIG9mCisgICAgICAgIHR5cGUgUmVmUHRyPD4uIFNvIHdlIG5lZWQgdG8gdXNlIGdl
dCgpIHdpdGggdGhlIGNhc3RpbmcgZXhwcmVzc2lvbnMuCisgICAgICAgIAorICAgICAgICAqIHN2
Zy9TVkdNYXJrZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1l
bnQ6Om9yaWVudFR5cGUpOgorICAgICAgICBVc2UgJ2F1dG8nIHR5cGUgZm9yIHRoZSByZXR1cm4g
b2YgU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcigpLgorICAgICAgICAKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVs
ZW1lbnQ6OnBhdGhCeXRlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50
Ojpsb29rdXBPckNyZWF0ZURXcmFwcGVyKToKKyAgICAgICAgU2luY2UgU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eTo6bG9va3VwV3JhcHBlKCkgcmV0dXJucyBhIFJlZlB0cjw+IHdlIG5lZWQgdG8gCisgICAg
ICAgIHVzZSBnZXQoKSBmb3IgdGhlIGNhc3RpbmcgZXhwcmVzc2lvbnMuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhFbGVtZW50Ojpub3JtYWxpemVkUGF0aFNlZ0xpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmFuaW1hdGVkUGF0aFNlZ0xpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KToK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1
cm4gdmFsdWUgZnJvbSByYXcgcG9pbnRlciB0byBSZWZQdHI8Pi4KKyAgICAgICAgCisgICAgICAg
ICogc3ZnL1NWR1BhdGhTZWdXaXRoQ29udGV4dC5oOgorICAgICAgICBTaW5jZSBTVkdBbmltYXRl
ZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyKCkgcmV0dXJucyBhIFJlZlB0cjw+IHdlIG5lZWQgdG8g
CisgICAgICAgIHVzZSBnZXQoKSBmb3IgdGhlIGNhc3RpbmcgZXhwcmVzc2lvbnMuCisKKyAgICAg
ICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgU2luY2UgU1ZHQW5pbWF0ZWRQcm9wZXJ0
eTo6bG9va3VwV3JhcHBlcigpIHJldHVybnMgYSBSZWZQdHI8PiB3ZSBuZWVkIHRvIAorICAgICAg
ICB1c2UgZ2V0KCkgZm9yIHRoZSBjYXN0aW5nIGV4cHJlc3Npb25zLgorICAgICAgICAKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojpwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUG9seUVsZW1lbnQ6OmFuaW1hdGVkUG9pbnRzKToKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVs
ZW1lbnQuaDoKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSByYXcgcG9pbnRl
ciB0byBSZWZQdHI8Pi4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpzZXRUcmFuc2Zvcm1TdHJpbmcpOgorICAg
ICAgICBTaW5jZSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyKCkgcmV0dXJucyBh
IFJlZlB0cjw+IHdlIG5lZWQgdG8gCisgICAgICAgIHVzZSBnZXQoKSBmb3IgdGhlIGNhc3Rpbmcg
ZXhwcmVzc2lvbnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjp0cmFuc2Zvcm0p
OgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5oOgorICAgICAgICBDaGFuZ2UgdGhlIHJldHVy
biB2YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRvIFJlZlB0cjw+LgorICAgICAgICAKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6YmFzZVZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmFuaW1WYWwp
OgorICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRvIFJl
ZlB0cjw+IGFuZCBjaGFuZ2UgdGhlIGNhY2hlZAorICAgICAgICB2YWx1ZSBmcm9tIFJlZlB0cjw+
IHRvIHJhdyBwb2ludGVyLiBJZiB0aGUgcHJvcGVydHkgaXMgbnVsbCwgaXQgd2lsbCBiZQorICAg
ICAgICBjcmVhdGVkLCBpdHMgcmF3IHBvaW50ZXIgd2lsbCBiZSBjYWNoZWQgYW5kIHRoZSBvbmx5
IHJlZi1jb3VudGVkIFJlZlB0cjw+CisgICAgICAgIHdpbGwgYmUgcmV0dXJuZWQuIFRoaXMgd2ls
bCBndWFyYW50ZWUsIHRoZSBSZWZQdHI8PiB3aWxsIGJlIGRlbGV0ZWQgb25jZQorICAgICAgICBp
dCBpcyBub3QgdXNlZCBhbnltb3JlLiAKKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OnByb3BlcnR5V2lsbEJlRGVsZXRlZCk6CisgICAg
ICAgIENsZWFuIHRoZSByYXcgcG9pbnRlciBjYWNoZXMgbV9iYXNlVmFsIGFuZCBtX2FuaW1WYWwg
dXBvbiBkZWxldGluZyB0aGUKKyAgICAgICAgYWN0dWFsIHBvaW50ZXIuIFRoaXMgZnVuY3Rpb24g
d2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgZGVzdHJ1Y3RvciBvZgorICAgICAgICBTVkdMaXN0UHJv
cGVydHlUZWFyT2ZmLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlz
dFByb3BlcnR5VGVhck9mZjo6ZmluZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZW1vdmVJdGVtRnJvbUxpc3QpOgorICAgICAgICBXZSBo
YXZlIHRvIGVuc3VyZSB0aGUgYmFzZVZhbCgpIGlzIGNyZWF0ZWQgYmVmb3JlIHVzaW5nIGl0Lgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9m
Zjo6ZGV0YWNoTGlzdFdyYXBwZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlz
dFByb3BlcnR5VGVhck9mZjo6Y3VycmVudEFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjphbmltYXRpb25TdGFydGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6YW5pbWF0aW9u
RW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2Zm
OjpzeW5jaHJvbml6ZVdyYXBwZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjphbmltVmFsV2lsbENoYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmFuaW1WYWxEaWRDaGFuZ2Up
OgorICAgICAgICBGb3IgYW5pbWF0aW9uLCBhIHNlcGFyYXRlIFJlZlB0cjw+ICdtX2FuaW1hdGlu
Z0FuaW1WYWwnIHdpbGwgYmUgYXNzaWduZWQKKyAgICAgICAgdG8gdGhlIGFuaW1WYWwoKS4gVGhp
cyB3aWxsIHByZXZlbnQgZGVsZXRpbmcgbV9hbmltVmFsIHdoaWxlIGFuaW1hdGlvbi4KKyAgICAg
ICAgCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3Bl
cnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFBy
b3BlcnR5VGVhck9mZjo6YmFzZVZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjphbmltVmFsKToKKyAgICAgICAgU2FtZSBhcyB3aGF0
IGlzIGRvbmUgaW4gU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmZp
bmRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmY6OnJlbW92ZUl0ZW1Gcm9tTGlzdCk6CisgICAgICAgIFNhbWUgYXMgd2hhdCBpcyBk
b25lIGluIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi4KKyAgICAgICAgCisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKToKKyAgICAgICAg
Q2hhbmdlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSByYXcgcmVmZXJlbmNlIHRvIFJlZjw+IGFuZCBj
aGFuZ2UgdGhlCisgICAgICAgIGNhY2hlZCB2YWx1ZSBmcm9tIFJlZjw+IHRvIHJhdyBwb2ludGVy
LiBUaGlzIHJldmVydHMgdGhlIGNoYW5nZSBvZgorICAgICAgICByMTgxMzQ1IGluIHRoaXMgZnVu
Y3Rpb24uCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6
bG9va3VwV3JhcHBlcik6CisgICAgICAgIENoYW5nZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcmF3
IHBvaW50ZXIgdG8gUmVmUHRyPD4uCisgICAgICAgIAorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3MuaDoKKyAgICAgICAgVXNlICdhdXRvJyB0eXBlIGZv
ciB0aGUgcmV0dXJuIG9mIFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXIoKS4KKyAg
ICAgICAgCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
UHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3RQcm9wZXJ0eVRlYXJPZmY6OmJhc2VWYWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmOjphbmltVmFsKToKKyAgICAgICAgU2Ft
ZSBhcyB3aGF0IGlzIGRvbmUgaW4gU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLgorCisg
ICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5VGVhck9mZjo6flNWR0xpc3RQcm9wZXJ0eVRlYXJP
ZmYpOgorICAgICAgICBDYWxsIHRoZSBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OnBy
b3BlcnR5V2lsbEJlRGVsZXRlZCgpIHRvIGNsZWFuCisgICAgICAgIGl0cyByYXcgcG9pbnRlcnMg
d2hlbiB0aGUgUmVmUHRyPD4gZGVsZXRlcyBpdHNlbGYuCisKIDIwMTYtMDItMDMgIEFuZHJlYXMg
S2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFRocm93IGF3YXkgbGlu
a2VkIGNvZGUgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNp
b24gMTk1OTc3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTQyNDcsNyArNDI0NywxMSBAQCBzdWIgTmF0aXZl
VG9KU1ZhbHVlCiAgICAgICAgIHJldHVybiAidG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgJGdsb2Jh
bE9iamVjdCwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOwogICAgIH0KIAotICAgIGlmICgkY29kZUdl
bmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZU5hbWUpIG9yICRpbnRlcmZhY2VO
YW1lIGVxICJTVkdWaWV3U3BlYyIpIHsKKyAgICAjICR0eXBlIGhhcyB0byBiZSB1c2VkIGhlcmUg
YmVjYXVzZSBTVkdWaWV3U3BlYy50cmFuc2Zvcm0gaXMgb2YgdHlwZSBTVkdUcmFuc2Zvcm1MaXN0
LgorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUp
IGFuZCAkdHlwZSA9fiAvKD88IVN0cmluZylMaXN0JC8pIHsKKyAgICAgICAgIyBDb252ZXJ0IGZy
b20gYWJzdHJhY3QgUmVmUHRyPExpc3RQcm9wZXJ0eT4gdG8gcmVhbCB0eXBlLCBzbyB0aGUgcmln
aHQgdG9KUygpIG1ldGhvZCBjYW4gYmUgaW52b2tlZC4KKyAgICAgICAgJHZhbHVlID0gInN0YXRp
Y19jYXN0PCIgLiBHZXROYXRpdmVUeXBlKCR0eXBlKSAuICI+KCR2YWx1ZSIgLiAiLmdldCgpKSI7
CisgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRpbnRlcmZh
Y2VOYW1lKSBvciAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHVmlld1NwZWMiKSB7CiAgICAgICAgICMg
Q29udmVydCBmcm9tIGFic3RyYWN0IFNWR1Byb3BlcnR5IHRvIHJlYWwgdHlwZSwgc28gdGhlIHJp
Z2h0IHRvSlMoKSBtZXRob2QgY2FuIGJlIGludm9rZWQuCiAgICAgICAgICR2YWx1ZSA9ICJzdGF0
aWNfY2FzdDwiIC4gR2V0TmF0aXZlVHlwZSgkdHlwZSkgLiAiPigkdmFsdWUpIjsKICAgICB9IGVs
c2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUpIGFuZCBu
b3QgJGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTk1OTc3KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcg
QEAgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR01hcmtlckVsZW1lbgogCiBTVkdNYXJrZXJP
cmllbnRUeXBlJiBTVkdNYXJrZXJFbGVtZW50OjpvcmllbnRUeXBlKCkgY29uc3QKIHsKLSAgICBp
ZiAoU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6
Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJUeXBlLCBTVkdBbmltYXRlZEVudW1lcmF0aW9uPih0aGlz
LCBvcmllbnRUeXBlUHJvcGVydHlJbmZvKCkpKSB7CisgICAgaWYgKGF1dG8gd3JhcHBlciA9IFNW
R0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJUeXBlLCBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uPih0aGlzLCBvcmllbnRUeXBlUHJvcGVydHlJbmZvKCkpKSB7CiAgICAgICAg
IGlmICh3cmFwcGVyLT5pc0FuaW1hdGluZygpKSB7CiAgICAgICAgICAgICBBU1NFUlQod3JhcHBl
ci0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKSA8IFNWR01hcmtlck9yaWVudE1heCk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTVkdNYXJrZXJPcmllbnRUeXBlJj4od3JhcHBl
ci0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NTk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwxMSArMjk0LDExIEBAIHZvaWQg
U1ZHUGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4KIAogY29uc3QgU1ZHUGF0aEJ5dGVT
dHJlYW0mIFNWR1BhdGhFbGVtZW50OjpwYXRoQnl0ZVN0cmVhbSgpIGNvbnN0CiB7Ci0gICAgU1ZH
QW5pbWF0ZWRQcm9wZXJ0eSogcHJvcGVydHkgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBX
cmFwcGVyPFNWR1BhdGhFbGVtZW50LCBTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmPih0aGlzLCBkUHJvcGVydHlJbmZvKCkpOworICAgIGF1dG8gcHJvcGVydHkgPSBTVkdBbmlt
YXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BhdGhFbGVtZW50LCBTVkdBbmltYXRlZFBh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPih0aGlzLCBkUHJvcGVydHlJbmZvKCkpOwogICAgIGlm
ICghcHJvcGVydHkgfHwgIXByb3BlcnR5LT5pc0FuaW1hdGluZygpKQogICAgICAgICByZXR1cm4g
bV9wYXRoQnl0ZVN0cmVhbTsKICAgICAKLSAgICBTVkdQYXRoQnl0ZVN0cmVhbSogYW5pbWF0ZWRQ
YXRoQnl0ZVN0cmVhbSA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmYqPihwcm9wZXJ0eSktPmFuaW1hdGVkUGF0aEJ5dGVTdHJlYW0oKTsKKyAgICBTVkdQ
YXRoQnl0ZVN0cmVhbSogYW5pbWF0ZWRQYXRoQnl0ZVN0cmVhbSA9IHN0YXRpY19jYXN0PFNWR0Fu
aW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqPihwcm9wZXJ0eS5nZXQoKSktPmFuaW1h
dGVkUGF0aEJ5dGVTdHJlYW0oKTsKICAgICBpZiAoIWFuaW1hdGVkUGF0aEJ5dGVTdHJlYW0pCiAg
ICAgICAgIHJldHVybiBtX3BhdGhCeXRlU3RyZWFtOwogCkBAIC0zMTAsNyArMzEwLDcgQEAgUmVm
PFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhFbGVtZW50OgogICAgIEFTU0VSVChjb250ZXh0
RWxlbWVudCk7CiAgICAgU1ZHUGF0aEVsZW1lbnQmIG93bmVyVHlwZSA9IGRvd25jYXN0PFNWR1Bh
dGhFbGVtZW50PigqY29udGV4dEVsZW1lbnQpOwogCi0gICAgaWYgKFNWR0FuaW1hdGVkUHJvcGVy
dHkqIHByb3BlcnR5ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxTVkdQYXRo
RWxlbWVudCwgU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4oJm93bmVyVHlw
ZSwgZFByb3BlcnR5SW5mbygpKSkKKyAgICBpZiAoYXV0byBwcm9wZXJ0eSA9IFNWR0FuaW1hdGVk
UHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8U1ZHUGF0aEVsZW1lbnQsIFNWR0FuaW1hdGVkUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmY+KCZvd25lclR5cGUsIGRQcm9wZXJ0eUluZm8oKSkpCiAgICAg
ICAgIHJldHVybiAqcHJvcGVydHk7CiAKICAgICAvLyBCdWlsZCBpbml0aWFsIFNWR1BhdGhTZWdM
aXN0LgpAQCAtMzI5LDI2ICszMjksMjYgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3luY2hyb25p
emVEKFNWR0VsZQogICAgIG93bmVyVHlwZS5tX3BhdGhTZWdMaXN0LnN5bmNocm9uaXplKCZvd25l
clR5cGUsIGRQcm9wZXJ0eUluZm8oKS0+YXR0cmlidXRlTmFtZSwgb3duZXJUeXBlLm1fcGF0aFNl
Z0xpc3QudmFsdWUudmFsdWVBc1N0cmluZygpKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdCgpCitSZWZQdHI8U1ZHUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmY+IFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdCgpCiB7CiAg
ICAgbV9wYXRoU2VnTGlzdC5zaG91bGRTeW5jaHJvbml6ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxvb2t1cE9yQ3Jl
YXRlRFdyYXBwZXIodGhpcykpLT5iYXNlVmFsKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdB
bmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNyZWF0ZURXcmFwcGVy
KHRoaXMpKS0+YmFzZVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRl
YXJPZmYqIFNWR1BhdGhFbGVtZW50Ojpub3JtYWxpemVkUGF0aFNlZ0xpc3QoKQorUmVmUHRyPFNW
R1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBTVkdQYXRoRWxlbWVudDo6bm9ybWFsaXplZFBh
dGhTZWdMaXN0KCkKIHsKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NDEyIC0gSW1wbGVtZW50IG5vcm1hbGl6ZWQgcGF0aCBzZWdtZW50IGxp
c3RzIQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1TVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZiogU1ZHUGF0aEVsZW1lbnQ6OmFuaW1hdGVkUGF0aFNlZ0xpc3Qo
KQorUmVmUHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBTVkdQYXRoRWxlbWVudDo6
YW5pbWF0ZWRQYXRoU2VnTGlzdCgpCiB7CiAgICAgbV9wYXRoU2VnTGlzdC5zaG91bGRTeW5jaHJv
bml6ZSA9IHRydWU7CiAgICAgbV9pc0FuaW1WYWxPYnNlcnZlZCA9IHRydWU7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxvb2t1cE9y
Q3JlYXRlRFdyYXBwZXIodGhpcykpLT5hbmltVmFsKCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxT
VkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNyZWF0ZURXcmFw
cGVyKHRoaXMpKS0+YW5pbVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgp
CitSZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IFNWR1BhdGhFbGVtZW50Ojph
bmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpCiB7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQxMiAtIEltcGxlbWVudCBub3JtYWxp
emVkIHBhdGggc2VnbWVudCBsaXN0cyEKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxOTU5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDEwIEBAIHB1
YmxpYzoKICAgICBSZWY8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw+IGNyZWF0
ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKGZsb2F0IHgsIGZsb2F0IHksIFNW
R1BhdGhTZWdSb2xlID0gUGF0aFNlZ1VuZGVmaW5lZFJvbGUpOwogCiAgICAgLy8gVXNlZCBpbiB0
aGUgYmluZGluZ3Mgb25seS4KLSAgICBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiogcGF0
aFNlZ0xpc3QoKTsKLSAgICBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiogYW5pbWF0ZWRQ
YXRoU2VnTGlzdCgpOwotICAgIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKiBub3JtYWxp
emVkUGF0aFNlZ0xpc3QoKTsKLSAgICBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiogYW5p
bWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKTsKKyAgICBSZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmY+IHBhdGhTZWdMaXN0KCk7CisgICAgUmVmUHRyPFNWR1BhdGhTZWdMaXN0
UHJvcGVydHlUZWFyT2ZmPiBhbmltYXRlZFBhdGhTZWdMaXN0KCk7CisgICAgUmVmUHRyPFNWR1Bh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBub3JtYWxpemVkUGF0aFNlZ0xpc3QoKTsKKyAgICBS
ZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IGFuaW1hdGVkTm9ybWFsaXplZFBh
dGhTZWdMaXN0KCk7CiAKICAgICBjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYgcGF0aEJ5dGVTdHJl
YW0oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdXaXRoQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnV2l0aENv
bnRleHQuaAkocmV2aXNpb24gMTk1OTc3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWdXaXRoQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBQYXRoU2VnVW5kZWZpbmVkUm9sZToKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICBjYXNlIFBhdGhTZWdVbmFsdGVyZWRSb2xlOgotICAgICAgICAgICAg
cmV0dXJuIFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8U1ZHUGF0aEVsZW1lbnQs
IFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KG1fZWxlbWVudC5nZXQoKSwg
U1ZHUGF0aEVsZW1lbnQ6OmRQcm9wZXJ0eUluZm8oKSk7CisgICAgICAgICAgICByZXR1cm4gU1ZH
QW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxTVkdQYXRoRWxlbWVudCwgU1ZHQW5pbWF0
ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4obV9lbGVtZW50LmdldCgpLCBTVkdQYXRoRWxl
bWVudDo6ZFByb3BlcnR5SW5mbygpKS5nZXQoKTsKICAgICAgICAgY2FzZSBQYXRoU2VnTm9ybWFs
aXplZFJvbGU6CiAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NDEyIC0gSW1wbGVtZW50IG5vcm1hbGl6ZWQgcGF0aCBzZWdtZW50
IGxpc3RzIQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NTk3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDggQEAg
dm9pZCBTVkdQb2x5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29ucwogICAgICAgICBpZiAoIXBv
aW50c0xpc3RGcm9tU1ZHRGF0YShuZXdMaXN0LCB2YWx1ZSkpCiAgICAgICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRFcnJvcigiUHJvYmxlbSBwYXJzaW5nIHBv
aW50cz1cIiIgKyB2YWx1ZSArICJcIiIpOwogCi0gICAgICAgIGlmIChTVkdBbmltYXRlZFByb3Bl
cnR5KiB3cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxTVkdQb2x5
RWxlbWVudCwgU1ZHQW5pbWF0ZWRQb2ludExpc3Q+KHRoaXMsIHBvaW50c1Byb3BlcnR5SW5mbygp
KSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Kj4od3JhcHBl
ciktPmRldGFjaExpc3RXcmFwcGVycyhuZXdMaXN0LnNpemUoKSk7CisgICAgICAgIGlmIChhdXRv
IHdyYXBwZXIgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BvbHlFbGVt
ZW50LCBTVkdBbmltYXRlZFBvaW50TGlzdD4odGhpcywgcG9pbnRzUHJvcGVydHlJbmZvKCkpKQor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludExpc3QqPih3cmFwcGVyLmdl
dCgpKS0+ZGV0YWNoTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKIAogICAgICAgICBtX3Bv
aW50cy52YWx1ZSA9IG5ld0xpc3Q7CiAgICAgICAgIHJldHVybjsKQEAgLTExOCwxNiArMTE4LDE2
IEBAIFJlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdQb2x5RWxlbWVudDoKICAgICAgICAgKCZv
d25lclR5cGUsIHBvaW50c1Byb3BlcnR5SW5mbygpLCBvd25lclR5cGUubV9wb2ludHMudmFsdWUp
OwogfQogCi1TVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4qIFNWR1BvbHlFbGVt
ZW50Ojpwb2ludHMoKQorUmVmUHRyPFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0
Pj4gU1ZHUG9seUVsZW1lbnQ6OnBvaW50cygpCiB7CiAgICAgbV9wb2ludHMuc2hvdWxkU3luY2hy
b25pemUgPSB0cnVlOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdMaXN0UHJvcGVydHlUZWFy
T2ZmPFNWR1BvaW50TGlzdD4qPihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2lu
dExpc3Q+KGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcih0aGlzKSktPmJhc2VWYWwoKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0
Pio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBvaW50TGlzdD4obG9va3VwT3JD
cmVhdGVQb2ludHNXcmFwcGVyKHRoaXMpKS0+YmFzZVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHTGlz
dFByb3BlcnR5VGVhck9mZjxTVkdQb2ludExpc3Q+KiBTVkdQb2x5RWxlbWVudDo6YW5pbWF0ZWRQ
b2ludHMoKQorUmVmUHRyPFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pj4gU1ZH
UG9seUVsZW1lbnQ6OmFuaW1hdGVkUG9pbnRzKCkKIHsKICAgICBtX3BvaW50cy5zaG91bGRTeW5j
aHJvbml6ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRl
YXJPZmY8U1ZHUG9pbnRMaXN0Pio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBv
aW50TGlzdD4obG9va3VwT3JDcmVhdGVQb2ludHNXcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQb2ludExp
c3Q+Kj4oc3RhdGljX3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pihsb29rdXBP
ckNyZWF0ZVBvaW50c1dyYXBwZXIodGhpcykpLT5hbmltVmFsKCkuZ2V0KCkpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAkocmV2aXNpb24gMTk1OTc3KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdQb2x5RWxlbWVudCA6
IHB1YmxpYyBTVkdHcmFwaGljc0VsZW1lbnQsIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkIHsKIHB1YmxpYzoKLSAgICBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlz
dD4qIHBvaW50cygpOwotICAgIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Piog
YW5pbWF0ZWRQb2ludHMoKTsKKyAgICBSZWZQdHI8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQ
b2ludExpc3Q+PiBwb2ludHMoKTsKKyAgICBSZWZQdHI8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxT
VkdQb2ludExpc3Q+PiBhbmltYXRlZFBvaW50cygpOwogCiAgICAgU1ZHUG9pbnRMaXN0JiBwb2lu
dExpc3QoKSBjb25zdCB7IHJldHVybiBtX3BvaW50cy52YWx1ZTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDE5NTk3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsOCBAQCB2
b2lkIFNWR1ZpZXdTcGVjOjpzZXRUcmFuc2Zvcm1TdHJpbmcoY29uCiAgICAgU1ZHVHJhbnNmb3Jt
TGlzdCBuZXdMaXN0OwogICAgIG5ld0xpc3QucGFyc2UodHJhbnNmb3JtKTsKIAotICAgIGlmIChT
VkdBbmltYXRlZFByb3BlcnR5KiB3cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3Vw
V3JhcHBlcjxTVkdFbGVtZW50LCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KG1fY29udGV4dEVs
ZW1lbnQsIHRyYW5zZm9ybVByb3BlcnR5SW5mbygpKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0Kj4od3JhcHBlciktPmRldGFjaExpc3RXcmFwcGVycyhuZXdM
aXN0LnNpemUoKSk7CisgICAgaWYgKGF1dG8gd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6
Omxvb2t1cFdyYXBwZXI8U1ZHRWxlbWVudCwgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX2Nv
bnRleHRFbGVtZW50LCB0cmFuc2Zvcm1Qcm9wZXJ0eUluZm8oKSkpCisgICAgICAgIHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCo+KHdyYXBwZXIuZ2V0KCkpLT5kZXRhY2hMaXN0
V3JhcHBlcnMobmV3TGlzdC5zaXplKCkpOwogCiAgICAgbV90cmFuc2Zvcm0gPSBuZXdMaXN0Owog
fQpAQCAtMTQ1LDEyICsxNDUsMTIgQEAgU1ZHRWxlbWVudCogU1ZHVmlld1NwZWM6OnZpZXdUYXJn
ZXQoKSBjbwogICAgIHJldHVybiBkb3duY2FzdDxTVkdFbGVtZW50PihlbGVtZW50KTsKIH0KIAot
U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZiogU1ZHVmlld1NwZWM6OnRyYW5zZm9ybSgp
CitSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZj4gU1ZHVmlld1NwZWM6OnRy
YW5zZm9ybSgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRFbGVtZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAvLyBSZXR1cm4gdGhlIGFuaW1WYWwgaGVyZSwgYXMgaXRzIHJlYWRvbmx5
IGJ5IGRlZmF1bHQgLSB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudCBoZXJlLgotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4obG9va3VwT3JDcmVhdGVU
cmFuc2Zvcm1XcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KGxvb2t1cE9yQ3JlYXRlVHJhbnNmb3JtV3JhcHBl
cih0aGlzKSktPmFuaW1WYWwoKS5nZXQoKSk7CiB9CiAKIFJlZlB0cjxTVkdBbmltYXRlZFJlY3Q+
IFNWR1ZpZXdTcGVjOjp2aWV3Qm94QW5pbWF0ZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1ZpZXdTcGVjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdT
cGVjLmgJKHJldmlzaW9uIDE5NTk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3Bl
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
c2V0Q29udGV4dEVsZW1lbnQoKSB7IG1fY29udGV4dEVsZW1lbnQgPSBudWxscHRyOyB9CiAKICAg
ICAvLyBDdXN0b20gbm9uLWFuaW1hdGVkICd0cmFuc2Zvcm0nIHByb3BlcnR5LgotICAgIFNWR1Ry
YW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYqIHRyYW5zZm9ybSgpOworICAgIFJlZlB0cjxTVkdU
cmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmPiB0cmFuc2Zvcm0oKTsKICAgICBTVkdUcmFuc2Zv
cm1MaXN0IHRyYW5zZm9ybUJhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9
CiAKICAgICAvLyBDdXN0b20gYW5pbWF0ZWQgJ3ZpZXdCb3gnIHByb3BlcnR5LgpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2Zm
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE5NTk3NykKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwzNSArMzksNDkgQEAgcHVibGljOgogICAgIHR5cGVkZWYgU1ZHTGlz
dFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+IExpc3RQcm9wZXJ0eVRlYXJPZmY7CiAgICAg
dHlwZWRlZiBQcm9wZXJ0eVR5cGUgQ29udGVudFR5cGU7CiAKLSAgICB2aXJ0dWFsIExpc3RQcm9w
ZXJ0eSogYmFzZVZhbCgpCisgICAgdmlydHVhbCBSZWZQdHI8TGlzdFByb3BlcnR5PiBiYXNlVmFs
KCkKICAgICB7Ci0gICAgICAgIGlmICghbV9iYXNlVmFsKQotICAgICAgICAgICAgbV9iYXNlVmFs
ID0gTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xlLCBtX3ZhbHVl
cywgbV93cmFwcGVycyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMaXN0UHJvcGVydHkq
PihtX2Jhc2VWYWwuZ2V0KCkpOworICAgICAgICBpZiAobV9iYXNlVmFsKQorICAgICAgICAgICAg
cmV0dXJuIG1fYmFzZVZhbDsKKworICAgICAgICBhdXRvIHByb3BlcnR5ID0gTGlzdFByb3BlcnR5
VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xlLCBtX3ZhbHVlcywgbV93cmFwcGVycyk7
CisgICAgICAgIG1fYmFzZVZhbCA9IHByb3BlcnR5LnB0cigpOworICAgICAgICByZXR1cm4gbV9i
YXNlVmFsOwogICAgIH0KIAotICAgIHZpcnR1YWwgTGlzdFByb3BlcnR5KiBhbmltVmFsKCkKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxMaXN0UHJvcGVydHk+IGFuaW1WYWwoKQogICAgIHsKLSAgICAgICAg
aWYgKCFtX2FuaW1WYWwpCi0gICAgICAgICAgICBtX2FuaW1WYWwgPSBMaXN0UHJvcGVydHlUZWFy
T2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExpc3RQcm9wZXJ0eSo+KG1fYW5pbVZhbC5nZXQoKSk7
CisgICAgICAgIGlmIChtX2FuaW1WYWwpCisgICAgICAgICAgICByZXR1cm4gbV9hbmltVmFsOwor
CisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhp
cywgQW5pbVZhbFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKKyAgICAgICAgbV9hbmltVmFs
ID0gcHJvcGVydHkucHRyKCk7CisgICAgICAgIHJldHVybiBtX2FuaW1WYWw7CisgICAgfQorCisg
ICAgdm9pZCBwcm9wZXJ0eVdpbGxCZURlbGV0ZWQoTGlzdFByb3BlcnR5KiBwcm9wZXJ0eSkKKyAg
ICB7CisgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBtX2Jhc2VWYWwpCisgICAgICAgICAgICBtX2Jh
c2VWYWwgPSBudWxscHRyOworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBtX2FuaW1WYWwp
CisgICAgICAgICAgICBtX2FuaW1WYWwgPSBudWxscHRyOwogICAgIH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0FuaW1hdGVkTGlzdFRlYXJPZmYoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICBpbnQgZmluZEl0ZW0oU1ZHUHJvcGVydHkqIHByb3BlcnR5KSBjb25zdAorICAg
IGludCBmaW5kSXRlbShTVkdQcm9wZXJ0eSogcHJvcGVydHkpCiAgICAgewogICAgICAgICAvLyBU
aGlzIHNob3VsZCBldmVyIGJlIGNhbGxlZCBmb3Igb3VyIGJhc2VWYWwsIGFzIGFuaW1WYWwgY2Fu
J3QgbW9kaWZ5IHRoZSBsaXN0LgogICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2FzdCB0byBMaXN0
UHJvcGVydHlUZWFyT2ZmIGhlcmUgYXMgYWxsIGNsYXNzZXMgaW5oZXJpdGluZyBmcm9tIHVzIHN1
cHBseSB0aGVpciBvd24gcmVtb3ZlSXRlbUZyb21MaXN0KCkgbWV0aG9kLgogICAgICAgICB0eXBl
ZGVmIFNWR1Byb3BlcnR5VGVhck9mZjx0eXBlbmFtZSBTVkdQcm9wZXJ0eVRyYWl0czxQcm9wZXJ0
eVR5cGU+OjpMaXN0SXRlbVR5cGU+IExpc3RJdGVtVGVhck9mZjsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PExpc3RQcm9wZXJ0eVRlYXJPZmYqPihtX2Jhc2VWYWwuZ2V0KCkpLT5maW5kSXRl
bShzdGF0aWNfY2FzdDxMaXN0SXRlbVRlYXJPZmYqPihwcm9wZXJ0eSkpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TGlzdFByb3BlcnR5VGVhck9mZio+KGJhc2VWYWwoKS5nZXQoKSktPmZp
bmRJdGVtKHN0YXRpY19jYXN0PExpc3RJdGVtVGVhck9mZio+KHByb3BlcnR5KSk7CiAgICAgfQog
CiAgICAgdm9pZCByZW1vdmVJdGVtRnJvbUxpc3Qoc2l6ZV90IGl0ZW1JbmRleCwgYm9vbCBzaG91
bGRTeW5jaHJvbml6ZVdyYXBwZXJzKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBzaG91bGQgZXZl
ciBiZSBjYWxsZWQgZm9yIG91ciBiYXNlVmFsLCBhcyBhbmltVmFsIGNhbid0IG1vZGlmeSB0aGUg
bGlzdC4KICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNhc3QgdG8gTGlzdFByb3BlcnR5VGVhck9m
ZiBoZXJlIGFzIGFsbCBjbGFzc2VzIGluaGVyaXRpbmcgZnJvbSB1cyBzdXBwbHkgdGhlaXIgb3du
IHJlbW92ZUl0ZW1Gcm9tTGlzdCgpIG1ldGhvZC4KLSAgICAgICAgc3RhdGljX2Nhc3Q8TGlzdFBy
b3BlcnR5VGVhck9mZio+KG1fYmFzZVZhbC5nZXQoKSktPnJlbW92ZUl0ZW1Gcm9tTGlzdChpdGVt
SW5kZXgsIHNob3VsZFN5bmNocm9uaXplV3JhcHBlcnMpOworICAgICAgICBzdGF0aWNfY2FzdDxM
aXN0UHJvcGVydHlUZWFyT2ZmKj4oYmFzZVZhbCgpLmdldCgpKS0+cmVtb3ZlSXRlbUZyb21MaXN0
KGl0ZW1JbmRleCwgc2hvdWxkU3luY2hyb25pemVXcmFwcGVycyk7CiAgICAgfQogCiAgICAgdm9p
ZCBkZXRhY2hMaXN0V3JhcHBlcnModW5zaWduZWQgbmV3TGlzdFNpemUpCkBAIC03OSw3ICs5Myw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2lzQW5pbWF0aW5nKTsKICAgICAg
ICAgQVNTRVJUKG1fYW5pbVZhbCk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMaXN0UHJv
cGVydHkqPihtX2FuaW1WYWwuZ2V0KCkpLT52YWx1ZXMoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PExpc3RQcm9wZXJ0eSo+KG1fYW5pbWF0aW5nQW5pbVZhbC5nZXQoKSktPnZhbHVlcygp
OwogICAgIH0KIAogICAgIGNvbnN0IFByb3BlcnR5VHlwZSYgY3VycmVudEJhc2VWYWx1ZSgpIGNv
bnN0CkBAIC05MCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVk
KFByb3BlcnR5VHlwZSogbmV3QW5pbVZhbCwgYm9vbCBzaG91bGRPd25WYWx1ZXMgPSBmYWxzZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9pc0FuaW1hdGluZyk7CisgICAgICAgIEFTU0VSVCgh
bV9hbmltYXRpbmdBbmltVmFsKTsKICAgICAgICAgQVNTRVJUKG5ld0FuaW1WYWwpOwogICAgICAg
ICBBU1NFUlQobV92YWx1ZXMuc2l6ZSgpID09IG1fd3JhcHBlcnMuc2l6ZSgpKTsKICAgICAgICAg
QVNTRVJUKG1fYW5pbWF0ZWRXcmFwcGVycy5pc0VtcHR5KCkpOwpAQCAtOTgsNTcgKzExMyw1NSBA
QCBwdWJsaWM6CiAgICAgICAgIGlmICghbmV3QW5pbVZhbC0+aXNFbXB0eSgpKQogICAgICAgICAg
ICAgbV9hbmltYXRlZFdyYXBwZXJzLmZpbGwoMCwgbmV3QW5pbVZhbC0+c2l6ZSgpKTsKIAotICAg
ICAgICBMaXN0UHJvcGVydHkqIGFuaW1WYWwgPSBzdGF0aWNfY2FzdDxMaXN0UHJvcGVydHkqPih0
aGlzLT5hbmltVmFsKCkpOwotICAgICAgICBhbmltVmFsLT5zZXRWYWx1ZXNBbmRXcmFwcGVycyhu
ZXdBbmltVmFsLCAmbV9hbmltYXRlZFdyYXBwZXJzLCBzaG91bGRPd25WYWx1ZXMpOwotICAgICAg
ICBBU1NFUlQoYW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpID09IGFuaW1WYWwtPndyYXBwZXJzKCku
c2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUKGFuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpID09IG1f
YW5pbWF0ZWRXcmFwcGVycy5zaXplKCkpOworICAgICAgICBtX2FuaW1hdGluZ0FuaW1WYWwgPSBh
bmltVmFsKCk7CisgICAgICAgIG1fYW5pbWF0aW5nQW5pbVZhbC0+c2V0VmFsdWVzQW5kV3JhcHBl
cnMobmV3QW5pbVZhbCwgJm1fYW5pbWF0ZWRXcmFwcGVycywgc2hvdWxkT3duVmFsdWVzKTsKKyAg
ICAgICAgQVNTRVJUKG1fYW5pbWF0aW5nQW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpID09IG1fYW5p
bWF0aW5nQW5pbVZhbC0+d3JhcHBlcnMoKS5zaXplKCkpOworICAgICAgICBBU1NFUlQobV9hbmlt
YXRpbmdBbmltVmFsLT53cmFwcGVycygpLnNpemUoKSA9PSBtX2FuaW1hdGVkV3JhcHBlcnMuc2l6
ZSgpKTsKICAgICAgICAgbV9pc0FuaW1hdGluZyA9IHRydWU7CiAgICAgfQogCiAgICAgdm9pZCBh
bmltYXRpb25FbmRlZCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9pc0FuaW1hdGluZyk7Ci0g
ICAgICAgIEFTU0VSVChtX2FuaW1WYWwpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmlt
VmFsKTsKICAgICAgICAgQVNTRVJUKG1fdmFsdWVzLnNpemUoKSA9PSBtX3dyYXBwZXJzLnNpemUo
KSk7CiAKLSAgICAgICAgTGlzdFByb3BlcnR5KiBhbmltVmFsID0gc3RhdGljX2Nhc3Q8TGlzdFBy
b3BlcnR5Kj4obV9hbmltVmFsLmdldCgpKTsKLSAgICAgICAgQVNTRVJUKGFuaW1WYWwtPnZhbHVl
cygpLnNpemUoKSA9PSBhbmltVmFsLT53cmFwcGVycygpLnNpemUoKSk7Ci0gICAgICAgIEFTU0VS
VChhbmltVmFsLT53cmFwcGVycygpLnNpemUoKSA9PSBtX2FuaW1hdGVkV3JhcHBlcnMuc2l6ZSgp
KTsKLQotICAgICAgICBhbmltVmFsLT5zZXRWYWx1ZXNBbmRXcmFwcGVycygmbV92YWx1ZXMsICZt
X3dyYXBwZXJzLCBmYWxzZSk7Ci0gICAgICAgIEFTU0VSVChhbmltVmFsLT52YWx1ZXMoKS5zaXpl
KCkgPT0gYW5pbVZhbC0+d3JhcHBlcnMoKS5zaXplKCkpOwotICAgICAgICBBU1NFUlQoYW5pbVZh
bC0+d3JhcHBlcnMoKS5zaXplKCkgPT0gbV93cmFwcGVycy5zaXplKCkpOworICAgICAgICBBU1NF
UlQobV9hbmltYXRpbmdBbmltVmFsLT52YWx1ZXMoKS5zaXplKCkgPT0gbV9hbmltYXRpbmdBbmlt
VmFsLT53cmFwcGVycygpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVChtX2FuaW1hdGluZ0FuaW1W
YWwtPndyYXBwZXJzKCkuc2l6ZSgpID09IG1fYW5pbWF0ZWRXcmFwcGVycy5zaXplKCkpOworCisg
ICAgICAgIG1fYW5pbWF0aW5nQW5pbVZhbC0+c2V0VmFsdWVzQW5kV3JhcHBlcnMoJm1fdmFsdWVz
LCAmbV93cmFwcGVycywgZmFsc2UpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFs
LT52YWx1ZXMoKS5zaXplKCkgPT0gbV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVycygpLnNpemUo
KSk7CisgICAgICAgIEFTU0VSVChtX2FuaW1hdGluZ0FuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgp
ID09IG1fd3JhcHBlcnMuc2l6ZSgpKTsKIAogICAgICAgICBtX2FuaW1hdGVkV3JhcHBlcnMuY2xl
YXIoKTsKKyAgICAgICAgbV9hbmltYXRpbmdBbmltVmFsID0gbnVsbHB0cjsKICAgICAgICAgbV9p
c0FuaW1hdGluZyA9IGZhbHNlOwogICAgIH0KIAogICAgIHZvaWQgc3luY2hyb25pemVXcmFwcGVy
c0lmTmVlZGVkKCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2lzQW5pbWF0aW5nKTsKKyAgICAg
ICAgQVNTRVJUKG1fYW5pbWF0aW5nQW5pbVZhbCk7CisKICAgICAgICAgLy8gRXZlbnR1YWxseSB0
aGUgd3JhcHBlciBsaXN0IG5lZWRzIHN5bmNocm9uaXphdGlvbiBiZWNhdXNlIGFueSBTVkdBbmlt
YXRlTGVuZ3RoTGlzdDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSgpIGNhbGwgbWF5CiAgICAgICAg
IC8vIG11dGF0ZSB0aGUgbGVuZ3RoIG9mIG91ciB2YWx1ZXMoKSBsaXN0LCBhbmQgdGh1cyB0aGUg
d3JhcHBlcigpIGNhY2hlIG5lZWRzIHN5bmNocm9uaXphdGlvbiwgdG8gaGF2ZSB0aGUgc2FtZSBz
aXplLgogICAgICAgICAvLyBBbHNvIGV4aXN0aW5nIHdyYXBwZXJzIHdoaWNoIHBvaW50IGRpcmVj
dGx5IGF0IGVsZW1lbnRzIGluIHRoZSBleGlzdGluZyBTVkdMZW5ndGhMaXN0IGhhdmUgdG8gYmUg
ZGV0YWNoZWQgKHNvIGEgY29weQogICAgICAgICAvLyBvZiB0aGVtIGlzIGNyZWF0ZWQsIHNvIGV4
aXN0aW5nIGFuaW1WYWwgdmFyaWFibGVzIGluIEpTIGFyZSBrZXB0LWFsaXZlKS4gSWYgd2UnZCBk
ZXRhY2ggdGhlbSBsYXRlciB0aGUgdW5kZXJseWluZwogICAgICAgICAvLyBTVkdMZW5ndGhMaXN0
IHdhcyBhbHJlYWR5IG11dGF0ZWQsIGFuZCBvdXIgbGlzdCBpdGVtIHdyYXBwZXIgdGVhciBvZmZz
IHdvdWxkIHBvaW50IG5vd2hlcmUuIEFzc2VydGlvbnMgd291bGQgZmlyZS4KLSAgICAgICAgTGlz
dFByb3BlcnR5KiBhbmltVmFsID0gc3RhdGljX2Nhc3Q8TGlzdFByb3BlcnR5Kj4obV9hbmltVmFs
LmdldCgpKTsKLSAgICAgICAgYW5pbVZhbC0+ZGV0YWNoTGlzdFdyYXBwZXJzKGFuaW1WYWwtPnZh
bHVlcygpLnNpemUoKSk7CisgICAgICAgIG1fYW5pbWF0aW5nQW5pbVZhbC0+ZGV0YWNoTGlzdFdy
YXBwZXJzKG1fYW5pbWF0aW5nQW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpKTsKIAotICAgICAgICBB
U1NFUlQoYW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpID09IGFuaW1WYWwtPndyYXBwZXJzKCkuc2l6
ZSgpKTsKLSAgICAgICAgQVNTRVJUKGFuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpID09IG1fYW5p
bWF0ZWRXcmFwcGVycy5zaXplKCkpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFs
LT52YWx1ZXMoKS5zaXplKCkgPT0gbV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVycygpLnNpemUo
KSk7CisgICAgICAgIEFTU0VSVChtX2FuaW1hdGluZ0FuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgp
ID09IG1fYW5pbWF0ZWRXcmFwcGVycy5zaXplKCkpOwogICAgIH0KIAogICAgIHZvaWQgYW5pbVZh
bFdpbGxDaGFuZ2UoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1faXNBbmltYXRpbmcpOwotICAg
ICAgICBBU1NFUlQobV9hbmltVmFsKTsKICAgICAgICAgQVNTRVJUKG1fdmFsdWVzLnNpemUoKSA9
PSBtX3dyYXBwZXJzLnNpemUoKSk7CiAgICAgICAgIHN5bmNocm9uaXplV3JhcHBlcnNJZk5lZWRl
ZCgpOwogICAgIH0KIAogICAgIHZvaWQgYW5pbVZhbERpZENoYW5nZSgpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9pc0FuaW1hdGluZyk7Ci0gICAgICAgIEFTU0VSVChtX2FuaW1WYWwpOwogICAg
ICAgICBBU1NFUlQobV92YWx1ZXMuc2l6ZSgpID09IG1fd3JhcHBlcnMuc2l6ZSgpKTsKICAgICAg
ICAgc3luY2hyb25pemVXcmFwcGVyc0lmTmVlZGVkKCk7CiAgICAgfQpAQCAtMTczLDggKzE4Niwx
MyBAQCBwcm90ZWN0ZWQ6CiAgICAgTGlzdFdyYXBwZXJDYWNoZSBtX3dyYXBwZXJzOwogICAgIExp
c3RXcmFwcGVyQ2FjaGUgbV9hbmltYXRlZFdyYXBwZXJzOwogCi0gICAgUmVmUHRyPFNWR1Byb3Bl
cnR5PiBtX2Jhc2VWYWw7Ci0gICAgUmVmUHRyPFNWR1Byb3BlcnR5PiBtX2FuaW1WYWw7CisgICAg
Ly8gQ2FjaGUgdGhlIHJhdyBwb2ludGVyIGJ1dCByZXR1cm4gYSBSZWZQdHI8Pi4gVGhpcyB3aWxs
IGJyZWFrIHRoZSBjeWNsaWMgcmVmZXJlbmNlCisgICAgLy8gYmV0d2VlbiBTVkdMaXN0UHJvcGVy
dHlUZWFyT2ZmIGFuZCBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYgb25jZSB0aGUgcHJv
cGVydHkKKyAgICAvLyBwb2ludGVyIGlzIG5vdCBuZWVkZWQuCisgICAgTGlzdFByb3BlcnR5KiBt
X2Jhc2VWYWwgeyBudWxscHRyIH07CisgICAgTGlzdFByb3BlcnR5KiBtX2FuaW1WYWwgeyBudWxs
cHRyIH07CisKKyAgICBSZWZQdHI8TGlzdFByb3BlcnR5PiBtX2FuaW1hdGluZ0FuaW1WYWw7CiB9
OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oCShy
ZXZpc2lvbiAxOTU5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMy
ICszMSwzNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0FuaW1hdGVkUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYgOiBwdWJsaWMgU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFy
T2ZmPFNWR1BhdGhTZWdMaXN0PiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBTVkdMaXN0UHJvcGVy
dHk8U1ZHUGF0aFNlZ0xpc3Q+KiBiYXNlVmFsKCkgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIFJlZlB0
cjxMaXN0UHJvcGVydHk+IGJhc2VWYWwoKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKCFt
X2Jhc2VWYWwpCi0gICAgICAgICAgICBtX2Jhc2VWYWwgPSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5
VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xlLCBQYXRoU2VnVW5hbHRlcmVkUm9sZSwg
bV92YWx1ZXMsIG1fd3JhcHBlcnMpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlz
dFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0Pio+KG1fYmFzZVZhbC5nZXQoKSk7CisgICAgICAgIGlm
IChtX2Jhc2VWYWwpCisgICAgICAgICAgICByZXR1cm4gbV9iYXNlVmFsOworCisgICAgICAgIGF1
dG8gcHJvcGVydHkgPSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKHRoaXMs
IEJhc2VWYWxSb2xlLCBQYXRoU2VnVW5hbHRlcmVkUm9sZSwgbV92YWx1ZXMsIG1fd3JhcHBlcnMp
OworICAgICAgICBtX2Jhc2VWYWwgPSBwcm9wZXJ0eS5wdHIoKTsKKyAgICAgICAgcmV0dXJuIG1f
YmFzZVZhbDsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFNWR0xpc3RQcm9wZXJ0eTxTVkdQYXRoU2Vn
TGlzdD4qIGFuaW1WYWwoKSBvdmVycmlkZQorICAgIHZpcnR1YWwgUmVmUHRyPExpc3RQcm9wZXJ0
eT4gYW5pbVZhbCgpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIW1fYW5pbVZhbCkKLSAg
ICAgICAgICAgIG1fYW5pbVZhbCA9IFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVh
dGUodGhpcywgQW5pbVZhbFJvbGUsIFBhdGhTZWdVbmFsdGVyZWRSb2xlLCBtX3ZhbHVlcywgbV93
cmFwcGVycyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdMaXN0UHJvcGVydHk8U1ZH
UGF0aFNlZ0xpc3Q+Kj4obV9hbmltVmFsLmdldCgpKTsKKyAgICAgICAgaWYgKG1fYW5pbVZhbCkK
KyAgICAgICAgICAgIHJldHVybiBtX2FuaW1WYWw7CisKKyAgICAgICAgYXV0byBwcm9wZXJ0eSA9
IFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJvbGUs
IFBhdGhTZWdVbmFsdGVyZWRSb2xlLCBtX3ZhbHVlcywgbV93cmFwcGVycyk7CisgICAgICAgIG1f
YW5pbVZhbCA9IHByb3BlcnR5LnB0cigpOworICAgICAgICByZXR1cm4gbV9hbmltVmFsOwogICAg
IH0KIAotICAgIGludCBmaW5kSXRlbShjb25zdCBSZWZQdHI8U1ZHUGF0aFNlZz4mIHNlZ21lbnQp
IGNvbnN0CisgICAgaW50IGZpbmRJdGVtKGNvbnN0IFJlZlB0cjxTVkdQYXRoU2VnPiYgc2VnbWVu
dCkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGV2ZXIgYmUgY2FsbGVkIGZvciBvdXIg
YmFzZVZhbCwgYXMgYW5pbVZhbCBjYW4ndCBtb2RpZnkgdGhlIGxpc3QuCi0gICAgICAgIEFTU0VS
VChtX2Jhc2VWYWwpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmYqPihtX2Jhc2VWYWwuZ2V0KCkpLT5maW5kSXRlbShzZWdtZW50KTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4o
YmFzZVZhbCgpLmdldCgpKS0+ZmluZEl0ZW0oc2VnbWVudCk7CiAgICAgfQogCiAgICAgdm9pZCBy
ZW1vdmVJdGVtRnJvbUxpc3Qoc2l6ZV90IGl0ZW1JbmRleCwgYm9vbCBzaG91bGRTeW5jaHJvbml6
ZVdyYXBwZXJzKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBzaG91bGQgZXZlciBiZSBjYWxsZWQg
Zm9yIG91ciBiYXNlVmFsLCBhcyBhbmltVmFsIGNhbid0IG1vZGlmeSB0aGUgbGlzdC4KLSAgICAg
ICAgQVNTRVJUKG1fYmFzZVZhbCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0
UHJvcGVydHlUZWFyT2ZmKj4obV9iYXNlVmFsLmdldCgpKS0+cmVtb3ZlSXRlbUZyb21MaXN0KGl0
ZW1JbmRleCwgc2hvdWxkU3luY2hyb25pemVXcmFwcGVycyk7CisgICAgICAgIHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4oYmFzZVZhbCgpLmdldCgpKS0+cmVtb3Zl
SXRlbUZyb21MaXN0KGl0ZW1JbmRleCwgc2hvdWxkU3luY2hyb25pemVXcmFwcGVycyk7CiAgICAg
fQogCiAgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2Zm
PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBl
LCBTVkdQYXRoU2VnTGlzdCYgdmFsdWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAkocmV2aXNpb24gMTk1OTc3KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwyMiArNDgsMjcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNW
R0FuaW1hdGVkUHJvcGVydHkoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwg
dHlwZW5hbWUgVGVhck9mZlR5cGUsIHR5cGVuYW1lIFByb3BlcnR5VHlwZT4KLSAgICBzdGF0aWMg
VGVhck9mZlR5cGUmIGxvb2t1cE9yQ3JlYXRlV3JhcHBlcihPd25lclR5cGUqIGVsZW1lbnQsIGNv
bnN0IFNWR1Byb3BlcnR5SW5mbyogaW5mbywgUHJvcGVydHlUeXBlJiBwcm9wZXJ0eSkKKyAgICBz
dGF0aWMgUmVmPFRlYXJPZmZUeXBlPiBsb29rdXBPckNyZWF0ZVdyYXBwZXIoT3duZXJUeXBlKiBl
bGVtZW50LCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8sIFByb3BlcnR5VHlwZSYgcHJvcGVy
dHkpCiAgICAgewogICAgICAgICBBU1NFUlQoaW5mbyk7CiAgICAgICAgIFNWR0FuaW1hdGVkUHJv
cGVydHlEZXNjcmlwdGlvbiBrZXkoZWxlbWVudCwgaW5mby0+cHJvcGVydHlJZGVudGlmaWVyKTsK
LSAgICAgICAgYXV0byYgc2xvdCA9IGFuaW1hdGVkUHJvcGVydHlDYWNoZSgpLT5hZGQoa2V5LCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmICghc2xvdCkgewotICAgICAgICAg
ICAgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IHdyYXBwZXIgPSBUZWFyT2ZmVHlwZTo6Y3JlYXRl
KGVsZW1lbnQsIGluZm8tPmF0dHJpYnV0ZU5hbWUsIGluZm8tPmFuaW1hdGVkUHJvcGVydHlUeXBl
LCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBpZiAoaW5mby0+YW5pbWF0ZWRQcm9wZXJ0eVN0YXRl
ID09IFByb3BlcnR5SXNSZWFkT25seSkKLSAgICAgICAgICAgICAgICB3cmFwcGVyLT5zZXRJc1Jl
YWRPbmx5KCk7Ci0gICAgICAgICAgICBzbG90ID0gJndyYXBwZXIubGVha1JlZigpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZWFyT2ZmVHlwZSY+KCpzbG90KTsKKwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IGFuaW1hdGVkUHJvcGVydHlDYWNoZSgpLT5hZGQoa2V5LCBu
dWxscHRyKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUZWFyT2ZmVHlwZSY+KCpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsK
KworICAgICAgICBSZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gd3JhcHBlciA9IFRlYXJPZmZUeXBl
OjpjcmVhdGUoZWxlbWVudCwgaW5mby0+YXR0cmlidXRlTmFtZSwgaW5mby0+YW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUsIHByb3BlcnR5KTsKKyAgICAgICAgaWYgKGluZm8tPmFuaW1hdGVkUHJvcGVydHlT
dGF0ZSA9PSBQcm9wZXJ0eUlzUmVhZE9ubHkpCisgICAgICAgICAgICB3cmFwcGVyLT5zZXRJc1Jl
YWRPbmx5KCk7CisKKyAgICAgICAgLy8gQ2FjaGUgdGhlIHJhdyBwb2ludGVyIGJ1dCByZXR1cm4g
YSBSZWY8Pi4gVGhpcyB3aWxsIGJyZWFrIHRoZSBjeWNsaWMgcmVmZXJlbmNlCisgICAgICAgIC8v
IGJldHdlZW4gU1ZHQW5pbWF0ZWRQcm9wZXJ0eSBhbmQgU1ZHRWxlbWVudCBvbmNlIHRoZSBwcm9w
ZXJ0eSBwb2ludGVyIGlzIG5vdCBuZWVkZWQuCisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSB3cmFwcGVyLnB0cigpOworICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PFRlYXJPZmZUeXBlPih3cmFwcGVyKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
d25lclR5cGUsIHR5cGVuYW1lIFRlYXJPZmZUeXBlPgotICAgIHN0YXRpYyBUZWFyT2ZmVHlwZSog
bG9va3VwV3JhcHBlcihPd25lclR5cGUqIGVsZW1lbnQsIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyog
aW5mbykKKyAgICBzdGF0aWMgUmVmUHRyPFRlYXJPZmZUeXBlPiBsb29rdXBXcmFwcGVyKE93bmVy
VHlwZSogZWxlbWVudCwgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZvKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGluZm8pOwogICAgICAgICBTVkdBbmltYXRlZFByb3BlcnR5RGVzY3JpcHRpb24g
a2V5KGVsZW1lbnQsIGluZm8tPnByb3BlcnR5SWRlbnRpZmllcik7CkBAIC03MSw3ICs3Niw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUsIHR5cGVu
YW1lIFRlYXJPZmZUeXBlPgotICAgIHN0YXRpYyBUZWFyT2ZmVHlwZSogbG9va3VwV3JhcHBlcihj
b25zdCBPd25lclR5cGUqIGVsZW1lbnQsIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyogaW5mbykKKyAg
ICBzdGF0aWMgUmVmUHRyPFRlYXJPZmZUeXBlPiBsb29rdXBXcmFwcGVyKGNvbnN0IE93bmVyVHlw
ZSogZWxlbWVudCwgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZvKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGxvb2t1cFdyYXBwZXI8T3duZXJUeXBlLCBUZWFyT2ZmVHlwZT4oY29uc3RfY2FzdDxP
d25lclR5cGUqPihlbGVtZW50KSwgaW5mbyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eU1hY3Jvcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3Mu
aAkocmV2aXNpb24gMTk1OTc3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eU1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcg
QEAgcHVibGljOiBcCiAgICAgc3RhdGljIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyogTG93ZXJQcm9w
ZXJ0eSMjUHJvcGVydHlJbmZvKCk7IFwKICAgICBQcm9wZXJ0eVR5cGUmIExvd2VyUHJvcGVydHko
KSBjb25zdCBcCiAgICAgeyBcCi0gICAgICAgIGlmIChUZWFyT2ZmVHlwZSogd3JhcHBlciA9IFNW
R0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJUeXBlLCBUZWFyT2ZmVHlw
ZT4odGhpcywgTG93ZXJQcm9wZXJ0eSMjUHJvcGVydHlJbmZvKCkpKSB7IFwKKyAgICAgICAgaWYg
KGF1dG8gd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3du
ZXJUeXBlLCBUZWFyT2ZmVHlwZT4odGhpcywgTG93ZXJQcm9wZXJ0eSMjUHJvcGVydHlJbmZvKCkp
KSB7IFwKICAgICAgICAgICAgIGlmICh3cmFwcGVyLT5pc0FuaW1hdGluZygpKSBcCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHdyYXBwZXItPmN1cnJlbnRBbmltYXRlZFZhbHVlKCk7IFwKICAgICAg
ICAgfSBcCkBAIC0xODQsNyArMTg0LDcgQEAgcHJpdmF0ZTogXAogREVDTEFSRV9BTklNQVRFRF9Q
Uk9QRVJUWShUZWFyT2ZmVHlwZSwgUHJvcGVydHlUeXBlLCBVcHBlclByb3BlcnR5LCBMb3dlclBy
b3BlcnR5LCApIFwKIHZvaWQgZGV0YWNoQW5pbWF0ZWQjI1VwcGVyUHJvcGVydHkjI0xpc3RXcmFw
cGVycyh1bnNpZ25lZCBuZXdMaXN0U2l6ZSkgXAogeyBcCi0gICAgaWYgKFRlYXJPZmZUeXBlKiB3
cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxVc2VPd25lclR5cGUs
IFRlYXJPZmZUeXBlPih0aGlzLCBMb3dlclByb3BlcnR5IyNQcm9wZXJ0eUluZm8oKSkpIFwKKyAg
ICBpZiAoYXV0byB3cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxV
c2VPd25lclR5cGUsIFRlYXJPZmZUeXBlPih0aGlzLCBMb3dlclByb3BlcnR5IyNQcm9wZXJ0eUlu
Zm8oKSkpIFwKICAgICAgICAgd3JhcHBlci0+ZGV0YWNoTGlzdFdyYXBwZXJzKG5ld0xpc3RTaXpl
KTsgXAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJP
ZmYuaAkocmV2aXNpb24gMTk1OTc3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDE4ICsyOCwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZiA6IHB1YmxpYyBTVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtTGlzdD4gewogcHVibGljOgotICAgIHZpcnR1YWwg
U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1MaXN0PiogYmFzZVZhbCgpIG92ZXJy
aWRlCisgICAgdmlydHVhbCBSZWZQdHI8TGlzdFByb3BlcnR5PiBiYXNlVmFsKCkgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGlmICghbV9iYXNlVmFsKQotICAgICAgICAgICAgbV9iYXNlVmFsID0g
U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xl
LCBtX3ZhbHVlcywgbV93cmFwcGVycyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdM
aXN0UHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybUxpc3Q+Kj4obV9iYXNlVmFsLmdldCgpKTsK
KyAgICAgICAgaWYgKG1fYmFzZVZhbCkKKyAgICAgICAgICAgIHJldHVybiBtX2Jhc2VWYWw7CisK
KyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY6
OmNyZWF0ZSh0aGlzLCBCYXNlVmFsUm9sZSwgbV92YWx1ZXMsIG1fd3JhcHBlcnMpOworICAgICAg
ICBtX2Jhc2VWYWwgPSBwcm9wZXJ0eS5wdHIoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZVZhbDsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3Jt
TGlzdD4qIGFuaW1WYWwoKSBvdmVycmlkZQorICAgIHZpcnR1YWwgUmVmUHRyPExpc3RQcm9wZXJ0
eT4gYW5pbVZhbCgpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIW1fYW5pbVZhbCkKLSAg
ICAgICAgICAgIG1fYW5pbVZhbCA9IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY6OmNy
ZWF0ZSh0aGlzLCBBbmltVmFsUm9sZSwgbV92YWx1ZXMsIG1fd3JhcHBlcnMpOwotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1MaXN0
Pio+KG1fYW5pbVZhbC5nZXQoKSk7CisgICAgICAgIGlmIChtX2FuaW1WYWwpCisgICAgICAgICAg
ICByZXR1cm4gbV9hbmltVmFsOworCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBTVkdUcmFuc2Zv
cm1MaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJvbGUsIG1fdmFsdWVz
LCBtX3dyYXBwZXJzKTsKKyAgICAgICAgbV9hbmltVmFsID0gcHJvcGVydHkucHRyKCk7CisgICAg
ICAgIHJldHVybiBtX2FuaW1WYWw7CiAgICAgfQogCiAgICAgc3RhdGljIFJlZjxTVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIFNWR1RyYW5zZm9ybUxpc3QmIHZhbHVlcykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eVRlYXJP
ZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0
UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE5NTk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIwLDYgKzEyMCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAorICAgIHZpcnR1YWwg
flNWR0xpc3RQcm9wZXJ0eVRlYXJPZmYoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYW5pbWF0ZWRQ
cm9wZXJ0eSkKKyAgICAgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eS0+cHJvcGVydHlXaWxsQmVE
ZWxldGVkKHRoaXMpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5KCkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChtX3JvbGUgPT0gQW5pbVZhbFJvbGUpCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTU5NzcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wMi0wMyAgU2FpZCBBYm91LUhhbGxhd2Eg
IDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04ocjE4MTM0NSk6
IFNWRyBwb2x5bGluZSBhbmQgcG9seWdvbiBsZWFrIHBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczogUmVtb3ZlIGZs
YWt5IHRlc3RzIGZyb20gdGVzdCBleHBlY3RhdGlvbi4KKyAgICAgICAgCisgICAgICAgICogc3Zn
L2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3QtcHJvcGVydHktaW5zdGFuY2VzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3QtcHJvcGVy
dHktaW5zdGFuY2VzLnN2ZzogQWRkZWQuCisgICAgICAgIEVuc3VyZSBpZiBTVkdQb2x5bGluZUVs
ZW1lbnQucG9pbnRzIGlzIHJlcXVlc3RlZCBmcm9tIEpTLCB0aGUgZG9jdW1lbnQgd2lsbAorICAg
ICAgICBub3QgbGVhay4KKwogMjAxNi0wMi0wMSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFw
cGxlLmNvbT4KIAogICAgICAgICBNYXJraW5nIGZhc3QvcmVwbGFjZWQvcHJlZmVycmVkLXdpZHRo
cy5odG1sIGFzIGZsYWt5IG9uIGlvcy1zaW11bGF0b3IKSW5kZXg6IExheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwko
cmV2aXNpb24gMTk1OTc3KQorKysgTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwkod29ya2lu
ZyBjb3B5KQpAQCAtNjM2LDEyICs2MzYsNiBAQCB3ZWJraXQub3JnL2IvMTQxNjk1IFsgRGVidWcg
XSBmYXN0L3NlbGVjCiAjIENvbnRlbnQgZXh0ZW5zaW9ucyBhcmUgTWFjLVdLMi1vbmx5IGZvciBu
b3cKIGh0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMgWyBTa2lwIF0KIAotIyBUaGVzZSB0ZXN0
cyB3ZXJlIGZsYWt5IG9uIE1hYyBvbmx5IGJ1dCB0aGV5IGJlY2FtZSBmbGFreSBvbiBhbGwgcG9y
dHMgYWZ0ZXIgcjE4MTM0NQotd2Via2l0Lm9yZy9iLzExNDI4MCBzdmcvYW5pbWF0aW9ucy9zbWls
LWxlYWstZHluYW1pY2FsbHktYWRkZWQtZWxlbWVudC1pbnN0YW5jZXMuc3ZnIFsgUGFzcyBGYWls
dXJlIF0KLXdlYmtpdC5vcmcvYi8xMTQyODAgc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWVsZW1l
bnQtaW5zdGFuY2VzLW5vQmFzZVZhbFJlZi5zdmcgWyBQYXNzIEZhaWx1cmUgXQotd2Via2l0Lm9y
Zy9iLzExNDI4MCBzdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstZWxlbWVudC1pbnN0YW5jZXMuc3Zn
IFsgUGFzcyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMTQyODAgc3ZnL2FuaW1hdGlvbnMvc21p
bC1sZWFrLWVsZW1lbnRzLnN2ZyBbIFBhc3MgRmFpbHVyZSBdCi0KIHdlYmtpdC5vcmcvYi8xNDkw
NzIgc3ZnL2FuaW1hdGlvbnMvc3ZnYm9vbGVhbi1hbmltYXRpb24tMS5odG1sIFsgUGFzcyBGYWls
dXJlIF0KIAogd2Via2l0Lm9yZy9iLzE0MzA4NSBtZWRpYS90cmFjay90cmFjay1tb2RlLmh0bWwg
WyBQYXNzIFRpbWVvdXQgXQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1s
ZWFrLWxpc3QtcHJvcGVydHktaW5zdGFuY2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5j
ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc21pbC1sZWFrLWxpc3QtcHJvcGVydHktaW5zdGFuY2VzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxIEBACitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9zbWlsLWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5jZXMuc3ZnCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1saXN0LXByb3BlcnR5LWluc3Rh
bmNlcy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWls
LWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5jZXMuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODcgQEAKKzxzdmcgaWQ9InN2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb25sb2FkPSJsb2Fk
KCkiPgorPGRlZnM+CisgICAgPHBvbHlsaW5lIGlkPSJwb2x5bGluZSIgcG9pbnRzPSIyMCwyMCA4
MCwyMCA4MCw4MCAyMCw4MCIgLz4KKzwvZGVmcz4KKzxnIGlkPSJnIi8+Cis8dGV4dCB4PSI1MCIg
eT0iNTAiIGlkPSJsb2ciLz4KKzxzY3JpcHQgaWQ9InNjcmlwdCI+Cis8IVtDREFUQVsKKwordmFy
IGcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZyIpOworCitmdW5jdGlvbiBsb2cobWVzc2Fn
ZSkgeworICAgIHZhciBsb2dEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7Cisg
ICAgbG9nRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsK
K30KKworZnVuY3Rpb24gY3JlYXRlQW5pbWF0ZWRQb2x5bGluZUluc3RhbmNlKCkgeworICAgIHZh
ciB1c2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIiwgInVzZSIpOworICAgIHVzZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcv
MTk5OS94bGluayIsICJocmVmIiwgIiNwb2x5bGluZSIpOworCisgICAgdmFyIGFuaW0gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgImFuaW1h
dGUiKTsKKyAgICBhbmltLnNldEF0dHJpYnV0ZSgiYXR0cmlidXRlVHlwZSIsICJYTUwiKTsKKyAg
ICBhbmltLnNldEF0dHJpYnV0ZSgiYXR0cmlidXRlTmFtZSIsICJwb2ludHMiKTsKKyAgICBhbmlt
LnNldEF0dHJpYnV0ZSgiZnJvbSIsICIyMCwyMCA4MCwyMCA4MCw4MCAyMCw4MCIpOworICAgIGFu
aW0uc2V0QXR0cmlidXRlKCJ0byIsICIxMCwxMCA5MCwxMCA5MCw5MCAxMCw5MCIpOworICAgIGFu
aW0uc2V0QXR0cmlidXRlKCJiZWdpbiIsICIwcyIpOworICAgIGFuaW0uc2V0QXR0cmlidXRlKCJk
dXIiLCAiMTAuMHMiKTsKKyAgICBhbmltLnNldEF0dHJpYnV0ZSgicmVwZWF0Q291bnQiLCAxKTsK
KworICAgIHVzZS5hcHBlbmRDaGlsZChhbmltKTsKKworICAgIHJldHVybiB1c2U7Cit9CisKK2Z1
bmN0aW9uIHN0YXJ0VGVzdCgpIHsKKyAgICAvLyBDb2xsZWN0IGdhcmJhZ2UgYmVmb3JlIHJlY29y
ZGluZyBzdGFydGluZyBsaXZlIG5vZGUgY291bnQsIGluIGNhc2UgdGhlcmUgYXJlIGxpdmUgZWxl
bWVudHMgZnJvbSBwcmV2aW91cyB0ZXN0cy4KKyAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOwor
ICAgIG9yaWdpbmFsTGl2ZUVsZW1lbnRzID0gd2luZG93LmludGVybmFscy5udW1iZXJPZkxpdmVO
b2RlcygpOworCisgICAgLy8gSG9sZCByZWZlcmVuY2VzIHRvIHBvaW50cyBhbmQgYW5pbWF0ZWRQ
b2ludHMgb24gdGhlIHJvb3QgaW5zdGFuY2UuCisgICAgcG9pbnRzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInBvbHlsaW5lIikucG9pbnRzOworICAgIGFuaW1hdGVkUG9pbnRzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInBvbHlsaW5lIikuYW5pbWF0ZWRQb2ludHM7CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgICAgICBnLmFwcGVuZENoaWxkKGNyZWF0ZUFu
aW1hdGVkUG9seWxpbmVJbnN0YW5jZSgpKTsKKworICAgIHNldFRpbWVvdXQoY29udGludWVUZXN0
LCAwKTsKK30KKworZnVuY3Rpb24gY29udGludWVUZXN0KCkgeworICAgIHdoaWxlIChnLmhhc0No
aWxkTm9kZXMoKSkKKyAgICAgICAgZy5yZW1vdmVDaGlsZChnLmxhc3RDaGlsZCk7CisKKyAgICBz
ZXRUaW1lb3V0KGZpbmlzaFRlc3QsIDApOworfQorCit2YXIgYXR0ZW1wdHNUb0ZpbmlzaCA9IDU7
CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsK
KworICAgIHZhciBsaXZlRGVsdGEgPSB3aW5kb3cuaW50ZXJuYWxzLm51bWJlck9mTGl2ZU5vZGVz
KCkgLSBvcmlnaW5hbExpdmVFbGVtZW50czsKKyAgICBpZiAobGl2ZURlbHRhID09IDApCisgICAg
ICAgIGxvZygiUEFTUyIpOworICAgIGVsc2UgaWYgKC0tYXR0ZW1wdHNUb0ZpbmlzaCkgeworICAg
ICAgICBzZXRUaW1lb3V0KGZpbmlzaFRlc3QsIDEwMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
IGVsc2UKKyAgICAgICAgbG9nKCJGQUlMOiAiICsgbGl2ZURlbHRhICsgIiBleHRyYSBsaXZlIG5v
ZGUocykiKTsKKworICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBs
b2FkKCkgeworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuR0NDb250cm9sbGVy
ICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxvZygiVGhpcyB0ZXN0IG9ubHkgd29ya3Mgd2hlbiBydW4gd2l0aCB0aGUgdGVzdFJ1bm5l
ciwgR0NDb250cm9sbGVyLCBhbmQgaW50ZXJuYWxzIGF2YWlsYWJsZS4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHNldFRpbWVvdXQoc3RhcnRUZXN0LCAwKTsKK30KK11dPgorPC9z
Y3JpcHQ+Cis8L3N2Zz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270865</attachid>
            <date>2016-02-08 10:55:03 -0800</date>
            <delta_ts>2016-02-08 11:25:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152759-20160208105440.patch</filename>
            <type>text/plain</type>
            <size>43815</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjI1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxNi0wMi0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJ
T04ocjE4MTM0NSk6IFNWRyBwb2x5bGluZSBhbmQgcG9seWdvbiBsZWFrIHBhZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBsZWFrIGhhcHBlbnMg
YmVjYXVzZSBvZiBjeWNsaWMgcmVmZXJlbmNlIGJldHdlZW4gU1ZHTGlzdFByb3BlcnR5VGVhck9m
ZiAKKyAgICAgICAgYW5kIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiB3aGljaCBpcyBk
ZXJpdmVkIGZyb20gU1ZHQW5pbWF0ZWRQcm9wZXJ0eS4KKyAgICAgICAgVGhlcmUgaXMgYWxzbyBj
eWNsaWMgcmVmZXJlbmNlIGJldHdlZW4gU1ZHQW5pbWF0ZWRQcm9wZXJ0eSBhbmQgU1ZHRWxlbWVu
dAorICAgICAgICBhbmQgdGhpcyBjYXVzZXMgdGhlIHdob2xlIGRvY3VtZW50IHRvIGJlIGxlYWtl
ZC4gU28gaWYgdGhlIEpTIHJlcXVlc3RzLCBmb3IKKyAgICAgICAgZXhhbXBsZSwgYW4gaW5zdGFu
Y2Ugb2YgU1ZHUG9seWxpbmVFbGVtZW50LnBvaW50cywgdGhlIHdob2xlIGRvY3VtZW50IHdpbGwg
YmUKKyAgICAgICAgbGVha2VkLgorCisgICAgICAgIFRoZSBmaXggZGVwZW5kcyBvbiBoYXZpbmcg
dGhlIGN5Y2xpYyByZWZlcmVuY2UgYXMgaXMgc2luY2UgdGhlIG93bmluZyBhbmQgdGhlCisgICAg
ICAgIG93bmVkIGNsYXNzZXMgaGF2ZSB0byBsaXZlIHRvZ2V0aGVyIGlmIGFueSBvZiB0aGVtIGlz
IHJlZmVyZW5jZWQuIEJ1dCB0aGUgb3duaW5nCisgICAgICAgIGNsYXNzIGNhY2hlcyBhIHJhdyAn
cmVmLWNvdW50ZWQnIHBvaW50ZXIgb2YgdGhlIG93bmVkIGNsYXNzLiBJZiBpdCBpcyByZXF1ZXN0
ZWQKKyAgICAgICAgZm9yIGFuIGluc3RhbmNlIG9mIHRoZSBvd25lZCBjbGFzcyBpdCByZXR1cm5l
ZCBhIFJlZlB0cjw+IG9mIGl0LiBPbmNlIHRoZSBvd25lZAorICAgICAgICBjbGFzcyBpcyBub3Qg
dXNlZCwgaXQgY2FuIGRlbGV0ZSBpdHNlbGYuIFRoZSBvbmx5IHRoaW5nIG5lZWRlZCBoZXJlIGlz
IHRvIG5vdGlmeQorICAgICAgICB0aGUgb3duZXIgY2xhc3Mgb2YgdGhlIGRlbGV0aW9uIHNvIGl0
IGNsZWFucyBpdHMgY2FjaGVzIGFuZCBiZSBhYmxlIHRvIGNyZWF0ZSBhCisgICAgICAgIG5ldyBw
b2ludGVyIGlmIGl0IGlzIHJlcXVlc3RlZCBmb3IgYW4gaW5zdGFuY2Ugb2YgdGhlIG93bmVkIGNs
YXNzIGxhdGVyLgorCisgICAgICAgIFJldmVydCB0aGUgY2hhbmdlIG9mIHIxODEzNDUgaW4gU1ZH
QW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKCkKKyAgICAgICAgdG8gYnJl
YWsgdGhlIGN5Y2xpYyByZWZlcmVuY2UgYmV0d2VlbiBTVkdFbGVtZW50IGFuZCBTVkdBbmltYXRl
ZFByb3BlcnR5LgorICAgICAgICAKKyAgICAgICAgQWxzbyBhcHBseSB0aGUgc2FtZSBhcHByb2Fj
aCBpbiBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmJhc2VWYWwoKSBhbmQKKyAgICAg
ICAgYW5pbVZhbCgpIHRvIGJyZWFrIGN5Y2xpYyByZWZlcmVuY2UgYmV0d2VlbiBTVkdMaXN0UHJv
cGVydHlUZWFyT2ZmIGFuZAorICAgICAgICBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYu
CisKKyAgICAgICAgVGVzdDogc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3QtcHJvcGVydHkt
aW5zdGFuY2VzLnN2ZworCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG06CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOiBUaGUgU1ZHIG5vbi1zdHJpbmcgbGlz
dCB0ZWFyLW9mZiBwcm9wZXJ0aWVzIGJlY2FtZSBvZgorICAgICAgICB0eXBlIFJlZlB0cjw+LiBT
byB3ZSBuZWVkIHRvIHVzZSBnZXQoKSB3aXRoIHRoZSBjYXN0aW5nIGV4cHJlc3Npb25zLgorICAg
ICAgICAKKyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNYXJrZXJFbGVtZW50OjpvcmllbnRUeXBlKToKKyAgICAgICAgVXNlICdhdXRvJyB0
eXBlIGZvciB0aGUgcmV0dXJuIG9mIFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXIo
KS4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoRWxlbWVudDo6cGF0aEJ5dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlRFdyYXBwZXIpOgorICAgICAgICBTaW5jZSBTVkdB
bmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGUoKSByZXR1cm5zIGEgUmVmUHRyPD4gd2UgbmVl
ZCB0byAKKyAgICAgICAgdXNlIGdldCgpIGZvciB0aGUgY2FzdGluZyBleHByZXNzaW9ucy4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6Om5vcm1hbGl6ZWRQYXRoU2VnTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWRQYXRoU2VnTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWROb3JtYWxpemVkUGF0
aFNlZ0xpc3QpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAgICAgICBDaGFu
Z2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRvIFJlZlB0cjw+LgorCisgICAg
ICAgICogc3ZnL1NWR1BhdGhTZWdXaXRoQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ1dpdGhDb250ZXh0OjphbmltYXRlZFByb3BlcnR5KToKKyAgICAgICAgQ2hhbmdlIHRo
ZSByZXR1cm4gdHlwZSB0byBiZSBSZWZQdHI8PiB0byBwcmVzZXJ2ZSB0aGUgdmFsdWUgZnJvbSBi
ZWluZyBkZWxldGVkLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAg
ICAgICAgU2luY2UgU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcigpIHJldHVybnMg
YSBSZWZQdHI8PiB3ZSBuZWVkIHRvIAorICAgICAgICB1c2UgZ2V0KCkgZm9yIHRoZSBjYXN0aW5n
IGV4cHJlc3Npb25zLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50
Ojpwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OmFuaW1hdGVkUG9p
bnRzKToKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuaDoKKyAgICAgICAgQ2hhbmdlIHRo
ZSByZXR1cm4gdmFsdWUgZnJvbSByYXcgcG9pbnRlciB0byBSZWZQdHI8Pi4KKyAgICAgICAgCisg
ICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdT
cGVjOjpzZXRUcmFuc2Zvcm1TdHJpbmcpOgorICAgICAgICBTaW5jZSBTVkdBbmltYXRlZFByb3Bl
cnR5Ojpsb29rdXBXcmFwcGVyKCkgcmV0dXJucyBhIFJlZlB0cjw+IHdlIG5lZWQgdG8gCisgICAg
ICAgIHVzZSBnZXQoKSBmb3IgdGhlIGNhc3RpbmcgZXhwcmVzc2lvbnMuCisKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1ZpZXdTcGVjOjp0cmFuc2Zvcm0pOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3Bl
Yy5oOgorICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRv
IFJlZlB0cjw+LgorICAgICAgICAKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZExpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlz
dFByb3BlcnR5VGVhck9mZjo6YmFzZVZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmFuaW1WYWwpOgorICAgICAgICBDaGFuZ2UgdGhlIHJldHVy
biB2YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRvIFJlZlB0cjw+IGFuZCBjaGFuZ2UgdGhlIGNhY2hl
ZAorICAgICAgICB2YWx1ZSBmcm9tIFJlZlB0cjw+IHRvIHJhdyBwb2ludGVyLiBJZiB0aGUgcHJv
cGVydHkgaXMgbnVsbCwgaXQgd2lsbCBiZQorICAgICAgICBjcmVhdGVkLCBpdHMgcmF3IHBvaW50
ZXIgd2lsbCBiZSBjYWNoZWQgYW5kIHRoZSBvbmx5IHJlZi1jb3VudGVkIFJlZlB0cjw+CisgICAg
ICAgIHdpbGwgYmUgcmV0dXJuZWQuIFRoaXMgd2lsbCBndWFyYW50ZWUsIHRoZSBSZWZQdHI8PiB3
aWxsIGJlIGRlbGV0ZWQgb25jZQorICAgICAgICBpdCBpcyBub3QgdXNlZCBhbnltb3JlLiAKKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6
OnByb3BlcnR5V2lsbEJlRGVsZXRlZCk6CisgICAgICAgIENsZWFuIHRoZSByYXcgcG9pbnRlciBj
YWNoZXMgbV9iYXNlVmFsIGFuZCBtX2FuaW1WYWwgdXBvbiBkZWxldGluZyB0aGUKKyAgICAgICAg
YWN0dWFsIHBvaW50ZXIuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgZGVz
dHJ1Y3RvciBvZgorICAgICAgICBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmLgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6ZmluZEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZW1v
dmVJdGVtRnJvbUxpc3QpOgorICAgICAgICBXZSBoYXZlIHRvIGVuc3VyZSB0aGUgYmFzZVZhbCgp
IGlzIGNyZWF0ZWQgYmVmb3JlIHVzaW5nIGl0LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6ZGV0YWNoTGlzdFdyYXBwZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6Y3VycmVudEFu
aW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlU
ZWFyT2ZmOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
TGlzdFByb3BlcnR5VGVhck9mZjo6YW5pbWF0aW9uRW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjpzeW5jaHJvbml6ZVdyYXBwZXJzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjph
bmltVmFsV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9w
ZXJ0eVRlYXJPZmY6OmFuaW1WYWxEaWRDaGFuZ2UpOgorICAgICAgICBGb3IgYW5pbWF0aW9uLCBh
IHNlcGFyYXRlIFJlZlB0cjw+ICdtX2FuaW1hdGluZ0FuaW1WYWwnIHdpbGwgYmUgYXNzaWduZWQK
KyAgICAgICAgdG8gdGhlIGFuaW1WYWwoKS4gVGhpcyB3aWxsIHByZXZlbnQgZGVsZXRpbmcgbV9h
bmltVmFsIHdoaWxlIGFuaW1hdGlvbi4KKyAgICAgICAgCisgICAgICAgICogc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6YmFzZVZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjph
bmltVmFsKToKKyAgICAgICAgU2FtZSBhcyB3aGF0IGlzIGRvbmUgaW4gU1ZHQW5pbWF0ZWRMaXN0
UHJvcGVydHlUZWFyT2ZmLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmZpbmRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OnJlbW92ZUl0ZW1Gcm9tTGlz
dCk6CisgICAgICAgIFNhbWUgYXMgd2hhdCBpcyBkb25lIGluIFNWR0FuaW1hdGVkTGlzdFByb3Bl
cnR5VGVhck9mZi4KKyAgICAgICAgCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQcm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9v
a3VwT3JDcmVhdGVXcmFwcGVyKToKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gdmFsdWUgZnJv
bSByYXcgcmVmZXJlbmNlIHRvIFJlZjw+IGFuZCBjaGFuZ2UgdGhlCisgICAgICAgIGNhY2hlZCB2
YWx1ZSBmcm9tIFJlZjw+IHRvIHJhdyBwb2ludGVyLiBUaGlzIHJldmVydHMgdGhlIGNoYW5nZSBv
ZgorICAgICAgICByMTgxMzQ1IGluIHRoaXMgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcik6CisgICAgICAgIENo
YW5nZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcmF3IHBvaW50ZXIgdG8gUmVmUHRyPD4uCisgICAg
ICAgIAorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3Mu
aDoKKyAgICAgICAgVXNlICdhdXRvJyB0eXBlIGZvciB0aGUgcmV0dXJuIG9mIFNWR0FuaW1hdGVk
UHJvcGVydHk6Omxvb2t1cFdyYXBwZXIoKS4KKyAgICAgICAgCisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY6OmJhc2VW
YWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlU
ZWFyT2ZmOjphbmltVmFsKToKKyAgICAgICAgU2FtZSBhcyB3aGF0IGlzIGRvbmUgaW4gU1ZHQW5p
bWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLgorCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZH
TGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5
VGVhck9mZjo6flNWR0xpc3RQcm9wZXJ0eVRlYXJPZmYpOgorICAgICAgICBDYWxsIHRoZSBTVkdB
bmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OnByb3BlcnR5V2lsbEJlRGVsZXRlZCgpIHRvIGNs
ZWFuCisgICAgICAgIGl0cyByYXcgcG9pbnRlcnMgd2hlbiB0aGUgUmVmUHRyPD4gZGVsZXRlcyBp
dHNlbGYuCisKIDIwMTYtMDItMDggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTYyNTMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTQyNTIsNyArNDI1MiwxMSBAQCBz
dWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIHJldHVybiAidG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgJGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOwogICAgIH0KIAotICAgIGlm
ICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZU5hbWUpIG9yICRp
bnRlcmZhY2VOYW1lIGVxICJTVkdWaWV3U3BlYyIpIHsKKyAgICAjICR0eXBlIGhhcyB0byBiZSB1
c2VkIGhlcmUgYmVjYXVzZSBTVkdWaWV3U3BlYy50cmFuc2Zvcm0gaXMgb2YgdHlwZSBTVkdUcmFu
c2Zvcm1MaXN0LgorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJP
ZmYoJHR5cGUpIGFuZCAkdHlwZSA9fiAvKD88IVN0cmluZylMaXN0JC8pIHsKKyAgICAgICAgIyBD
b252ZXJ0IGZyb20gYWJzdHJhY3QgUmVmUHRyPExpc3RQcm9wZXJ0eT4gdG8gcmVhbCB0eXBlLCBz
byB0aGUgcmlnaHQgdG9KUygpIG1ldGhvZCBjYW4gYmUgaW52b2tlZC4KKyAgICAgICAgJHZhbHVl
ID0gInN0YXRpY19jYXN0PCIgLiBHZXROYXRpdmVUeXBlKCR0eXBlKSAuICI+KCR2YWx1ZSIgLiAi
LmdldCgpKSI7CisgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBl
KCRpbnRlcmZhY2VOYW1lKSBvciAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHVmlld1NwZWMiKSB7CiAg
ICAgICAgICMgQ29udmVydCBmcm9tIGFic3RyYWN0IFNWR1Byb3BlcnR5IHRvIHJlYWwgdHlwZSwg
c28gdGhlIHJpZ2h0IHRvSlMoKSBtZXRob2QgY2FuIGJlIGludm9rZWQuCiAgICAgICAgICR2YWx1
ZSA9ICJzdGF0aWNfY2FzdDwiIC4gR2V0TmF0aXZlVHlwZSgkdHlwZSkgLiAiPigkdmFsdWUpIjsK
ICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5
cGUpIGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykgewpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEs
NyArMjUxLDcgQEAgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR01hcmtlckVsZW1lbgogCiBT
VkdNYXJrZXJPcmllbnRUeXBlJiBTVkdNYXJrZXJFbGVtZW50OjpvcmllbnRUeXBlKCkgY29uc3QK
IHsKLSAgICBpZiAoU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogd3JhcHBlciA9IFNWR0FuaW1hdGVk
UHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJUeXBlLCBTVkdBbmltYXRlZEVudW1lcmF0
aW9uPih0aGlzLCBvcmllbnRUeXBlUHJvcGVydHlJbmZvKCkpKSB7CisgICAgaWYgKGF1dG8gd3Jh
cHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJUeXBlLCBT
VkdBbmltYXRlZEVudW1lcmF0aW9uPih0aGlzLCBvcmllbnRUeXBlUHJvcGVydHlJbmZvKCkpKSB7
CiAgICAgICAgIGlmICh3cmFwcGVyLT5pc0FuaW1hdGluZygpKSB7CiAgICAgICAgICAgICBBU1NF
UlQod3JhcHBlci0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKSA8IFNWR01hcmtlck9yaWVudE1heCk7
CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTVkdNYXJrZXJPcmllbnRUeXBl
Jj4od3JhcHBlci0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwxMSArMjk0LDEx
IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4KIAogY29uc3QgU1ZH
UGF0aEJ5dGVTdHJlYW0mIFNWR1BhdGhFbGVtZW50OjpwYXRoQnl0ZVN0cmVhbSgpIGNvbnN0CiB7
Ci0gICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSogcHJvcGVydHkgPSBTVkdBbmltYXRlZFByb3BlcnR5
Ojpsb29rdXBXcmFwcGVyPFNWR1BhdGhFbGVtZW50LCBTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJv
cGVydHlUZWFyT2ZmPih0aGlzLCBkUHJvcGVydHlJbmZvKCkpOworICAgIGF1dG8gcHJvcGVydHkg
PSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BhdGhFbGVtZW50LCBTVkdB
bmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPih0aGlzLCBkUHJvcGVydHlJbmZvKCkp
OwogICAgIGlmICghcHJvcGVydHkgfHwgIXByb3BlcnR5LT5pc0FuaW1hdGluZygpKQogICAgICAg
ICByZXR1cm4gbV9wYXRoQnl0ZVN0cmVhbTsKICAgICAKLSAgICBTVkdQYXRoQnl0ZVN0cmVhbSog
YW5pbWF0ZWRQYXRoQnl0ZVN0cmVhbSA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xp
c3RQcm9wZXJ0eVRlYXJPZmYqPihwcm9wZXJ0eSktPmFuaW1hdGVkUGF0aEJ5dGVTdHJlYW0oKTsK
KyAgICBTVkdQYXRoQnl0ZVN0cmVhbSogYW5pbWF0ZWRQYXRoQnl0ZVN0cmVhbSA9IHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqPihwcm9wZXJ0eS5nZXQo
KSktPmFuaW1hdGVkUGF0aEJ5dGVTdHJlYW0oKTsKICAgICBpZiAoIWFuaW1hdGVkUGF0aEJ5dGVT
dHJlYW0pCiAgICAgICAgIHJldHVybiBtX3BhdGhCeXRlU3RyZWFtOwogCkBAIC0zMTAsNyArMzEw
LDcgQEAgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhFbGVtZW50OgogICAgIEFTU0VS
VChjb250ZXh0RWxlbWVudCk7CiAgICAgU1ZHUGF0aEVsZW1lbnQmIG93bmVyVHlwZSA9IGRvd25j
YXN0PFNWR1BhdGhFbGVtZW50PigqY29udGV4dEVsZW1lbnQpOwogCi0gICAgaWYgKFNWR0FuaW1h
dGVkUHJvcGVydHkqIHByb3BlcnR5ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBl
cjxTVkdQYXRoRWxlbWVudCwgU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4o
Jm93bmVyVHlwZSwgZFByb3BlcnR5SW5mbygpKSkKKyAgICBpZiAoYXV0byBwcm9wZXJ0eSA9IFNW
R0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8U1ZHUGF0aEVsZW1lbnQsIFNWR0FuaW1h
dGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KCZvd25lclR5cGUsIGRQcm9wZXJ0eUluZm8o
KSkpCiAgICAgICAgIHJldHVybiAqcHJvcGVydHk7CiAKICAgICAvLyBCdWlsZCBpbml0aWFsIFNW
R1BhdGhTZWdMaXN0LgpAQCAtMzI5LDI5ICszMjksMjkgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6
c3luY2hyb25pemVEKFNWR0VsZQogICAgIG93bmVyVHlwZS5tX3BhdGhTZWdMaXN0LnN5bmNocm9u
aXplKCZvd25lclR5cGUsIGRQcm9wZXJ0eUluZm8oKS0+YXR0cmlidXRlTmFtZSwgb3duZXJUeXBl
Lm1fcGF0aFNlZ0xpc3QudmFsdWUudmFsdWVBc1N0cmluZygpKTsKIH0KIAotU1ZHUGF0aFNlZ0xp
c3RQcm9wZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdCgpCitSZWZQdHI8
U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlz
dCgpCiB7CiAgICAgbV9wYXRoU2VnTGlzdC5zaG91bGRTeW5jaHJvbml6ZSA9IHRydWU7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxv
b2t1cE9yQ3JlYXRlRFdyYXBwZXIodGhpcykpLT5iYXNlVmFsKCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNyZWF0
ZURXcmFwcGVyKHRoaXMpKS0+YmFzZVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50Ojpub3JtYWxpemVkUGF0aFNlZ0xpc3QoKQor
UmVmUHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBTVkdQYXRoRWxlbWVudDo6bm9y
bWFsaXplZFBhdGhTZWdMaXN0KCkKIHsKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDEyIC0gSW1wbGVtZW50IG5vcm1hbGl6ZWQgcGF0aCBz
ZWdtZW50IGxpc3RzIQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1T
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiogU1ZHUGF0aEVsZW1lbnQ6OmFuaW1hdGVkUGF0
aFNlZ0xpc3QoKQorUmVmUHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBTVkdQYXRo
RWxlbWVudDo6YW5pbWF0ZWRQYXRoU2VnTGlzdCgpCiB7CiAgICAgbV9wYXRoU2VnTGlzdC5zaG91
bGRTeW5jaHJvbml6ZSA9IHRydWU7CiAgICAgbV9pc0FuaW1WYWxPYnNlcnZlZCA9IHRydWU7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+
KGxvb2t1cE9yQ3JlYXRlRFdyYXBwZXIodGhpcykpLT5hbmltVmFsKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNy
ZWF0ZURXcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHUGF0aFNlZ0xp
c3RQcm9wZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRo
U2VnTGlzdCgpCitSZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IFNWR1BhdGhF
bGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpCiB7CiAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQxMiAtIEltcGxlbWVu
dCBub3JtYWxpemVkIHBhdGggc2VnbWVudCBsaXN0cyEKLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2Vk
KFNWR1BhdGhTZWdSb2xlIHJvbGUsIExpc3RNb2RpZmljYXRpb24gbGlzdE1vZGlmaWNhdGlvbikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxOTYyNTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsMTAgKzgyLDEwIEBAIHB1YmxpYzoKICAgICBSZWY8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhSZWw+IGNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKGZs
b2F0IHgsIGZsb2F0IHksIFNWR1BhdGhTZWdSb2xlID0gUGF0aFNlZ1VuZGVmaW5lZFJvbGUpOwog
CiAgICAgLy8gVXNlZCBpbiB0aGUgYmluZGluZ3Mgb25seS4KLSAgICBTVkdQYXRoU2VnTGlzdFBy
b3BlcnR5VGVhck9mZiogcGF0aFNlZ0xpc3QoKTsKLSAgICBTVkdQYXRoU2VnTGlzdFByb3BlcnR5
VGVhck9mZiogYW5pbWF0ZWRQYXRoU2VnTGlzdCgpOwotICAgIFNWR1BhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmKiBub3JtYWxpemVkUGF0aFNlZ0xpc3QoKTsKLSAgICBTVkdQYXRoU2VnTGlzdFBy
b3BlcnR5VGVhck9mZiogYW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKTsKKyAgICBSZWZQ
dHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IHBhdGhTZWdMaXN0KCk7CisgICAgUmVm
UHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBhbmltYXRlZFBhdGhTZWdMaXN0KCk7
CisgICAgUmVmUHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBub3JtYWxpemVkUGF0
aFNlZ0xpc3QoKTsKKyAgICBSZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IGFu
aW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCk7CiAKICAgICBjb25zdCBTVkdQYXRoQnl0ZVN0
cmVhbSYgcGF0aEJ5dGVTdHJlYW0oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTZWdXaXRoQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoU2VnV2l0aENvbnRleHQuaAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdXaXRoQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0
eSogYW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0CisgICAgUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVy
dHk+IGFuaW1hdGVkUHJvcGVydHkoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2VsZW1l
bnQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvbHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOCBAQCB2b2lk
IFNWR1BvbHlFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zCiAgICAgICAgIGlmICghcG9pbnRz
TGlzdEZyb21TVkdEYXRhKG5ld0xpc3QsIHZhbHVlKSkKICAgICAgICAgICAgIGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgcG9pbnRz
PVwiIiArIHZhbHVlICsgIlwiIik7CiAKLSAgICAgICAgaWYgKFNWR0FuaW1hdGVkUHJvcGVydHkq
IHdyYXBwZXIgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BvbHlFbGVt
ZW50LCBTVkdBbmltYXRlZFBvaW50TGlzdD4odGhpcywgcG9pbnRzUHJvcGVydHlJbmZvKCkpKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludExpc3QqPih3cmFwcGVyKS0+
ZGV0YWNoTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKKyAgICAgICAgaWYgKGF1dG8gd3Jh
cHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8U1ZHUG9seUVsZW1lbnQs
IFNWR0FuaW1hdGVkUG9pbnRMaXN0Pih0aGlzLCBwb2ludHNQcm9wZXJ0eUluZm8oKSkpCisgICAg
ICAgICAgICBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pih3cmFwcGVy
KS0+ZGV0YWNoTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKIAogICAgICAgICBtX3BvaW50
cy52YWx1ZSA9IG5ld0xpc3Q7CiAgICAgICAgIHJldHVybjsKQEAgLTExOCwxNiArMTE4LDE2IEBA
IFJlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdQb2x5RWxlbWVudDoKICAgICAgICAgKCZvd25l
clR5cGUsIHBvaW50c1Byb3BlcnR5SW5mbygpLCBvd25lclR5cGUubV9wb2ludHMudmFsdWUpOwog
fQogCi1TVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4qIFNWR1BvbHlFbGVtZW50
Ojpwb2ludHMoKQorUmVmUHRyPFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pj4g
U1ZHUG9seUVsZW1lbnQ6OnBvaW50cygpCiB7CiAgICAgbV9wb2ludHMuc2hvdWxkU3luY2hyb25p
emUgPSB0cnVlOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdMaXN0UHJvcGVydHlUZWFyT2Zm
PFNWR1BvaW50TGlzdD4qPihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludExp
c3Q+KGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcih0aGlzKSktPmJhc2VWYWwoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pio+
KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBvaW50TGlzdD4obG9va3VwT3JDcmVh
dGVQb2ludHNXcmFwcGVyKHRoaXMpKS0+YmFzZVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHTGlzdFBy
b3BlcnR5VGVhck9mZjxTVkdQb2ludExpc3Q+KiBTVkdQb2x5RWxlbWVudDo6YW5pbWF0ZWRQb2lu
dHMoKQorUmVmUHRyPFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pj4gU1ZHUG9s
eUVsZW1lbnQ6OmFuaW1hdGVkUG9pbnRzKCkKIHsKICAgICBtX3BvaW50cy5zaG91bGRTeW5jaHJv
bml6ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJP
ZmY8U1ZHUG9pbnRMaXN0Pio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBvaW50
TGlzdD4obG9va3VwT3JDcmVhdGVQb2ludHNXcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQb2ludExpc3Q+
Kj4oc3RhdGljX3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pihsb29rdXBPckNy
ZWF0ZVBvaW50c1dyYXBwZXIodGhpcykpLT5hbmltVmFsKCkuZ2V0KCkpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAkocmV2aXNpb24gMTk2MjU0KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDgg
KzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdQb2x5RWxlbWVudCA6IHB1
YmxpYyBTVkdHcmFwaGljc0VsZW1lbnQsIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkIHsKIHB1YmxpYzoKLSAgICBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4q
IHBvaW50cygpOwotICAgIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0PiogYW5p
bWF0ZWRQb2ludHMoKTsKKyAgICBSZWZQdHI8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQb2lu
dExpc3Q+PiBwb2ludHMoKTsKKyAgICBSZWZQdHI8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQ
b2ludExpc3Q+PiBhbmltYXRlZFBvaW50cygpOwogCiAgICAgU1ZHUG9pbnRMaXN0JiBwb2ludExp
c3QoKSBjb25zdCB7IHJldHVybiBtX3BvaW50cy52YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsOCBAQCB2b2lk
IFNWR1ZpZXdTcGVjOjpzZXRUcmFuc2Zvcm1TdHJpbmcoY29uCiAgICAgU1ZHVHJhbnNmb3JtTGlz
dCBuZXdMaXN0OwogICAgIG5ld0xpc3QucGFyc2UodHJhbnNmb3JtKTsKIAotICAgIGlmIChTVkdB
bmltYXRlZFByb3BlcnR5KiB3cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3Jh
cHBlcjxTVkdFbGVtZW50LCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KG1fY29udGV4dEVsZW1l
bnQsIHRyYW5zZm9ybVByb3BlcnR5SW5mbygpKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0Kj4od3JhcHBlciktPmRldGFjaExpc3RXcmFwcGVycyhuZXdMaXN0
LnNpemUoKSk7CisgICAgaWYgKGF1dG8gd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxv
b2t1cFdyYXBwZXI8U1ZHRWxlbWVudCwgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX2NvbnRl
eHRFbGVtZW50LCB0cmFuc2Zvcm1Qcm9wZXJ0eUluZm8oKSkpCisgICAgICAgIHN0YXRpY19jYXN0
PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCo+KHdyYXBwZXIuZ2V0KCkpLT5kZXRhY2hMaXN0V3Jh
cHBlcnMobmV3TGlzdC5zaXplKCkpOwogCiAgICAgbV90cmFuc2Zvcm0gPSBuZXdMaXN0OwogfQpA
QCAtMTQ1LDEyICsxNDUsMTIgQEAgU1ZHRWxlbWVudCogU1ZHVmlld1NwZWM6OnZpZXdUYXJnZXQo
KSBjbwogICAgIHJldHVybiBkb3duY2FzdDxTVkdFbGVtZW50PihlbGVtZW50KTsKIH0KIAotU1ZH
VHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZiogU1ZHVmlld1NwZWM6OnRyYW5zZm9ybSgpCitS
ZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZj4gU1ZHVmlld1NwZWM6OnRyYW5z
Zm9ybSgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAvLyBSZXR1cm4gdGhlIGFuaW1WYWwgaGVyZSwgYXMgaXRzIHJlYWRvbmx5IGJ5
IGRlZmF1bHQgLSB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudCBoZXJlLgotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4obG9va3VwT3JDcmVhdGVUcmFu
c2Zvcm1XcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KGxvb2t1cE9yQ3JlYXRlVHJhbnNmb3JtV3JhcHBlcih0
aGlzKSktPmFuaW1WYWwoKS5nZXQoKSk7CiB9CiAKIFJlZlB0cjxTVkdBbmltYXRlZFJlY3Q+IFNW
R1ZpZXdTcGVjOjp2aWV3Qm94QW5pbWF0ZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZpZXdTcGVjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVj
LmgJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0
Q29udGV4dEVsZW1lbnQoKSB7IG1fY29udGV4dEVsZW1lbnQgPSBudWxscHRyOyB9CiAKICAgICAv
LyBDdXN0b20gbm9uLWFuaW1hdGVkICd0cmFuc2Zvcm0nIHByb3BlcnR5LgotICAgIFNWR1RyYW5z
Zm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYqIHRyYW5zZm9ybSgpOworICAgIFJlZlB0cjxTVkdUcmFu
c2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmPiB0cmFuc2Zvcm0oKTsKICAgICBTVkdUcmFuc2Zvcm1M
aXN0IHRyYW5zZm9ybUJhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAK
ICAgICAvLyBDdXN0b20gYW5pbWF0ZWQgJ3ZpZXdCb3gnIHByb3BlcnR5LgpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRM
aXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwzNSArMzksNDkgQEAgcHVibGljOgogICAgIHR5cGVkZWYgU1ZHTGlzdFBy
b3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+IExpc3RQcm9wZXJ0eVRlYXJPZmY7CiAgICAgdHlw
ZWRlZiBQcm9wZXJ0eVR5cGUgQ29udGVudFR5cGU7CiAKLSAgICB2aXJ0dWFsIExpc3RQcm9wZXJ0
eSogYmFzZVZhbCgpCisgICAgdmlydHVhbCBSZWZQdHI8TGlzdFByb3BlcnR5PiBiYXNlVmFsKCkK
ICAgICB7Ci0gICAgICAgIGlmICghbV9iYXNlVmFsKQotICAgICAgICAgICAgbV9iYXNlVmFsID0g
TGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xlLCBtX3ZhbHVlcywg
bV93cmFwcGVycyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMaXN0UHJvcGVydHkqPiht
X2Jhc2VWYWwuZ2V0KCkpOworICAgICAgICBpZiAobV9iYXNlVmFsKQorICAgICAgICAgICAgcmV0
dXJuIG1fYmFzZVZhbDsKKworICAgICAgICBhdXRvIHByb3BlcnR5ID0gTGlzdFByb3BlcnR5VGVh
ck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xlLCBtX3ZhbHVlcywgbV93cmFwcGVycyk7Cisg
ICAgICAgIG1fYmFzZVZhbCA9IHByb3BlcnR5LnB0cigpOworICAgICAgICByZXR1cm4gV1RGTW92
ZShwcm9wZXJ0eSk7CisgICAgfQorCisgICAgdmlydHVhbCBSZWZQdHI8TGlzdFByb3BlcnR5PiBh
bmltVmFsKCkKKyAgICB7CisgICAgICAgIGlmIChtX2FuaW1WYWwpCisgICAgICAgICAgICByZXR1
cm4gbV9hbmltVmFsOworCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBMaXN0UHJvcGVydHlUZWFy
T2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKKyAg
ICAgICAgbV9hbmltVmFsID0gcHJvcGVydHkucHRyKCk7CisgICAgICAgIHJldHVybiBXVEZNb3Zl
KHByb3BlcnR5KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIExpc3RQcm9wZXJ0eSogYW5pbVZhbCgp
CisgICAgdm9pZCBwcm9wZXJ0eVdpbGxCZURlbGV0ZWQoY29uc3QgTGlzdFByb3BlcnR5JiBwcm9w
ZXJ0eSkKICAgICB7Ci0gICAgICAgIGlmICghbV9hbmltVmFsKQotICAgICAgICAgICAgbV9hbmlt
VmFsID0gTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEFuaW1WYWxSb2xlLCBtX3Zh
bHVlcywgbV93cmFwcGVycyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxMaXN0UHJvcGVy
dHkqPihtX2FuaW1WYWwuZ2V0KCkpOworICAgICAgICBpZiAoJnByb3BlcnR5ID09IG1fYmFzZVZh
bCkKKyAgICAgICAgICAgIG1fYmFzZVZhbCA9IG51bGxwdHI7CisgICAgICAgIGVsc2UgaWYgKCZw
cm9wZXJ0eSA9PSBtX2FuaW1WYWwpCisgICAgICAgICAgICBtX2FuaW1WYWwgPSBudWxscHRyOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0FuaW1hdGVkTGlzdFRlYXJPZmYoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBpbnQgZmluZEl0ZW0oU1ZHUHJvcGVydHkq
IHByb3BlcnR5KSBjb25zdAorICAgIGludCBmaW5kSXRlbShTVkdQcm9wZXJ0eSogcHJvcGVydHkp
CiAgICAgewogICAgICAgICAvLyBUaGlzIHNob3VsZCBldmVyIGJlIGNhbGxlZCBmb3Igb3VyIGJh
c2VWYWwsIGFzIGFuaW1WYWwgY2FuJ3QgbW9kaWZ5IHRoZSBsaXN0LgogICAgICAgICAvLyBJdCdz
IHNhZmUgdG8gY2FzdCB0byBMaXN0UHJvcGVydHlUZWFyT2ZmIGhlcmUgYXMgYWxsIGNsYXNzZXMg
aW5oZXJpdGluZyBmcm9tIHVzIHN1cHBseSB0aGVpciBvd24gcmVtb3ZlSXRlbUZyb21MaXN0KCkg
bWV0aG9kLgogICAgICAgICB0eXBlZGVmIFNWR1Byb3BlcnR5VGVhck9mZjx0eXBlbmFtZSBTVkdQ
cm9wZXJ0eVRyYWl0czxQcm9wZXJ0eVR5cGU+OjpMaXN0SXRlbVR5cGU+IExpc3RJdGVtVGVhck9m
ZjsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExpc3RQcm9wZXJ0eVRlYXJPZmYqPihtX2Jh
c2VWYWwuZ2V0KCkpLT5maW5kSXRlbShzdGF0aWNfY2FzdDxMaXN0SXRlbVRlYXJPZmYqPihwcm9w
ZXJ0eSkpOworICAgICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxMaXN0UHJvcGVydHlU
ZWFyT2ZmPihiYXNlVmFsKCkpLT5maW5kSXRlbShzdGF0aWNfY2FzdDxMaXN0SXRlbVRlYXJPZmYq
Pihwcm9wZXJ0eSkpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlSXRlbUZyb21MaXN0KHNpemVf
dCBpdGVtSW5kZXgsIGJvb2wgc2hvdWxkU3luY2hyb25pemVXcmFwcGVycykKICAgICB7CiAgICAg
ICAgIC8vIFRoaXMgc2hvdWxkIGV2ZXIgYmUgY2FsbGVkIGZvciBvdXIgYmFzZVZhbCwgYXMgYW5p
bVZhbCBjYW4ndCBtb2RpZnkgdGhlIGxpc3QuCiAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjYXN0
IHRvIExpc3RQcm9wZXJ0eVRlYXJPZmYgaGVyZSBhcyBhbGwgY2xhc3NlcyBpbmhlcml0aW5nIGZy
b20gdXMgc3VwcGx5IHRoZWlyIG93biByZW1vdmVJdGVtRnJvbUxpc3QoKSBtZXRob2QuCi0gICAg
ICAgIHN0YXRpY19jYXN0PExpc3RQcm9wZXJ0eVRlYXJPZmYqPihtX2Jhc2VWYWwuZ2V0KCkpLT5y
ZW1vdmVJdGVtRnJvbUxpc3QoaXRlbUluZGV4LCBzaG91bGRTeW5jaHJvbml6ZVdyYXBwZXJzKTsK
KyAgICAgICAgc3RhdGljX3BvaW50ZXJfY2FzdDxMaXN0UHJvcGVydHlUZWFyT2ZmPihiYXNlVmFs
KCkpLT5yZW1vdmVJdGVtRnJvbUxpc3QoaXRlbUluZGV4LCBzaG91bGRTeW5jaHJvbml6ZVdyYXBw
ZXJzKTsKICAgICB9CiAKICAgICB2b2lkIGRldGFjaExpc3RXcmFwcGVycyh1bnNpZ25lZCBuZXdM
aXN0U2l6ZSkKQEAgLTc4LDggKzkyLDggQEAgcHVibGljOgogICAgIFByb3BlcnR5VHlwZSYgY3Vy
cmVudEFuaW1hdGVkVmFsdWUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faXNBbmltYXRpbmcp
OwotICAgICAgICBBU1NFUlQobV9hbmltVmFsKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PExpc3RQcm9wZXJ0eSo+KG1fYW5pbVZhbC5nZXQoKSktPnZhbHVlcygpOworICAgICAgICBBU1NF
UlQobV9hbmltYXRpbmdBbmltVmFsKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nh
c3Q8TGlzdFByb3BlcnR5PihtX2FuaW1hdGluZ0FuaW1WYWwpLT52YWx1ZXMoKTsKICAgICB9CiAK
ICAgICBjb25zdCBQcm9wZXJ0eVR5cGUmIGN1cnJlbnRCYXNlVmFsdWUoKSBjb25zdApAQCAtOTAs
NiArMTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChQcm9wZXJ0eVR5
cGUqIG5ld0FuaW1WYWwsIGJvb2wgc2hvdWxkT3duVmFsdWVzID0gZmFsc2UpCiAgICAgewogICAg
ICAgICBBU1NFUlQoIW1faXNBbmltYXRpbmcpOworICAgICAgICBBU1NFUlQoIW1fYW5pbWF0aW5n
QW5pbVZhbCk7CiAgICAgICAgIEFTU0VSVChuZXdBbmltVmFsKTsKICAgICAgICAgQVNTRVJUKG1f
dmFsdWVzLnNpemUoKSA9PSBtX3dyYXBwZXJzLnNpemUoKSk7CiAgICAgICAgIEFTU0VSVChtX2Fu
aW1hdGVkV3JhcHBlcnMuaXNFbXB0eSgpKTsKQEAgLTk4LDU3ICsxMTMsNTUgQEAgcHVibGljOgog
ICAgICAgICBpZiAoIW5ld0FuaW1WYWwtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fYW5pbWF0
ZWRXcmFwcGVycy5maWxsKDAsIG5ld0FuaW1WYWwtPnNpemUoKSk7CiAKLSAgICAgICAgTGlzdFBy
b3BlcnR5KiBhbmltVmFsID0gc3RhdGljX2Nhc3Q8TGlzdFByb3BlcnR5Kj4odGhpcy0+YW5pbVZh
bCgpKTsKLSAgICAgICAgYW5pbVZhbC0+c2V0VmFsdWVzQW5kV3JhcHBlcnMobmV3QW5pbVZhbCwg
Jm1fYW5pbWF0ZWRXcmFwcGVycywgc2hvdWxkT3duVmFsdWVzKTsKLSAgICAgICAgQVNTRVJUKGFu
aW1WYWwtPnZhbHVlcygpLnNpemUoKSA9PSBhbmltVmFsLT53cmFwcGVycygpLnNpemUoKSk7Ci0g
ICAgICAgIEFTU0VSVChhbmltVmFsLT53cmFwcGVycygpLnNpemUoKSA9PSBtX2FuaW1hdGVkV3Jh
cHBlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9hbmltYXRpbmdBbmltVmFsID0gYW5pbVZhbCgpOwor
ICAgICAgICBtX2FuaW1hdGluZ0FuaW1WYWwtPnNldFZhbHVlc0FuZFdyYXBwZXJzKG5ld0FuaW1W
YWwsICZtX2FuaW1hdGVkV3JhcHBlcnMsIHNob3VsZE93blZhbHVlcyk7CisgICAgICAgIEFTU0VS
VChtX2FuaW1hdGluZ0FuaW1WYWwtPnZhbHVlcygpLnNpemUoKSA9PSBtX2FuaW1hdGluZ0FuaW1W
YWwtPndyYXBwZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW5nQW5pbVZh
bC0+d3JhcHBlcnMoKS5zaXplKCkgPT0gbV9hbmltYXRlZFdyYXBwZXJzLnNpemUoKSk7CiAgICAg
ICAgIG1faXNBbmltYXRpbmcgPSB0cnVlOwogICAgIH0KIAogICAgIHZvaWQgYW5pbWF0aW9uRW5k
ZWQoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faXNBbmltYXRpbmcpOwotICAgICAgICBBU1NF
UlQobV9hbmltVmFsKTsKKyAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW5nQW5pbVZhbCk7CiAgICAg
ICAgIEFTU0VSVChtX3ZhbHVlcy5zaXplKCkgPT0gbV93cmFwcGVycy5zaXplKCkpOwogCi0gICAg
ICAgIExpc3RQcm9wZXJ0eSogYW5pbVZhbCA9IHN0YXRpY19jYXN0PExpc3RQcm9wZXJ0eSo+KG1f
YW5pbVZhbC5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChhbmltVmFsLT52YWx1ZXMoKS5zaXplKCkg
PT0gYW5pbVZhbC0+d3JhcHBlcnMoKS5zaXplKCkpOwotICAgICAgICBBU1NFUlQoYW5pbVZhbC0+
d3JhcHBlcnMoKS5zaXplKCkgPT0gbV9hbmltYXRlZFdyYXBwZXJzLnNpemUoKSk7Ci0KLSAgICAg
ICAgYW5pbVZhbC0+c2V0VmFsdWVzQW5kV3JhcHBlcnMoJm1fdmFsdWVzLCAmbV93cmFwcGVycywg
ZmFsc2UpOwotICAgICAgICBBU1NFUlQoYW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpID09IGFuaW1W
YWwtPndyYXBwZXJzKCkuc2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUKGFuaW1WYWwtPndyYXBwZXJz
KCkuc2l6ZSgpID09IG1fd3JhcHBlcnMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fYW5pbWF0
aW5nQW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpID09IG1fYW5pbWF0aW5nQW5pbVZhbC0+d3JhcHBl
cnMoKS5zaXplKCkpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVy
cygpLnNpemUoKSA9PSBtX2FuaW1hdGVkV3JhcHBlcnMuc2l6ZSgpKTsKKworICAgICAgICBtX2Fu
aW1hdGluZ0FuaW1WYWwtPnNldFZhbHVlc0FuZFdyYXBwZXJzKCZtX3ZhbHVlcywgJm1fd3JhcHBl
cnMsIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW5nQW5pbVZhbC0+dmFsdWVzKCku
c2l6ZSgpID09IG1fYW5pbWF0aW5nQW5pbVZhbC0+d3JhcHBlcnMoKS5zaXplKCkpOworICAgICAg
ICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVycygpLnNpemUoKSA9PSBtX3dyYXBw
ZXJzLnNpemUoKSk7CiAKICAgICAgICAgbV9hbmltYXRlZFdyYXBwZXJzLmNsZWFyKCk7CisgICAg
ICAgIG1fYW5pbWF0aW5nQW5pbVZhbCA9IG51bGxwdHI7CiAgICAgICAgIG1faXNBbmltYXRpbmcg
PSBmYWxzZTsKICAgICB9CiAKICAgICB2b2lkIHN5bmNocm9uaXplV3JhcHBlcnNJZk5lZWRlZCgp
CiAgICAgeworICAgICAgICBBU1NFUlQobV9pc0FuaW1hdGluZyk7CisgICAgICAgIEFTU0VSVCht
X2FuaW1hdGluZ0FuaW1WYWwpOworCiAgICAgICAgIC8vIEV2ZW50dWFsbHkgdGhlIHdyYXBwZXIg
bGlzdCBuZWVkcyBzeW5jaHJvbml6YXRpb24gYmVjYXVzZSBhbnkgU1ZHQW5pbWF0ZUxlbmd0aExp
c3Q6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoKSBjYWxsIG1heQogICAgICAgICAvLyBtdXRhdGUg
dGhlIGxlbmd0aCBvZiBvdXIgdmFsdWVzKCkgbGlzdCwgYW5kIHRodXMgdGhlIHdyYXBwZXIoKSBj
YWNoZSBuZWVkcyBzeW5jaHJvbml6YXRpb24sIHRvIGhhdmUgdGhlIHNhbWUgc2l6ZS4KICAgICAg
ICAgLy8gQWxzbyBleGlzdGluZyB3cmFwcGVycyB3aGljaCBwb2ludCBkaXJlY3RseSBhdCBlbGVt
ZW50cyBpbiB0aGUgZXhpc3RpbmcgU1ZHTGVuZ3RoTGlzdCBoYXZlIHRvIGJlIGRldGFjaGVkIChz
byBhIGNvcHkKICAgICAgICAgLy8gb2YgdGhlbSBpcyBjcmVhdGVkLCBzbyBleGlzdGluZyBhbmlt
VmFsIHZhcmlhYmxlcyBpbiBKUyBhcmUga2VwdC1hbGl2ZSkuIElmIHdlJ2QgZGV0YWNoIHRoZW0g
bGF0ZXIgdGhlIHVuZGVybHlpbmcKICAgICAgICAgLy8gU1ZHTGVuZ3RoTGlzdCB3YXMgYWxyZWFk
eSBtdXRhdGVkLCBhbmQgb3VyIGxpc3QgaXRlbSB3cmFwcGVyIHRlYXIgb2ZmcyB3b3VsZCBwb2lu
dCBub3doZXJlLiBBc3NlcnRpb25zIHdvdWxkIGZpcmUuCi0gICAgICAgIExpc3RQcm9wZXJ0eSog
YW5pbVZhbCA9IHN0YXRpY19jYXN0PExpc3RQcm9wZXJ0eSo+KG1fYW5pbVZhbC5nZXQoKSk7Ci0g
ICAgICAgIGFuaW1WYWwtPmRldGFjaExpc3RXcmFwcGVycyhhbmltVmFsLT52YWx1ZXMoKS5zaXpl
KCkpOworICAgICAgICBtX2FuaW1hdGluZ0FuaW1WYWwtPmRldGFjaExpc3RXcmFwcGVycyhtX2Fu
aW1hdGluZ0FuaW1WYWwtPnZhbHVlcygpLnNpemUoKSk7CiAKLSAgICAgICAgQVNTRVJUKGFuaW1W
YWwtPnZhbHVlcygpLnNpemUoKSA9PSBhbmltVmFsLT53cmFwcGVycygpLnNpemUoKSk7Ci0gICAg
ICAgIEFTU0VSVChhbmltVmFsLT53cmFwcGVycygpLnNpemUoKSA9PSBtX2FuaW1hdGVkV3JhcHBl
cnMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW5nQW5pbVZhbC0+dmFsdWVzKCku
c2l6ZSgpID09IG1fYW5pbWF0aW5nQW5pbVZhbC0+d3JhcHBlcnMoKS5zaXplKCkpOworICAgICAg
ICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVycygpLnNpemUoKSA9PSBtX2FuaW1h
dGVkV3JhcHBlcnMuc2l6ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIGFuaW1WYWxXaWxsQ2hhbmdl
KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2lzQW5pbWF0aW5nKTsKLSAgICAgICAgQVNTRVJU
KG1fYW5pbVZhbCk7CiAgICAgICAgIEFTU0VSVChtX3ZhbHVlcy5zaXplKCkgPT0gbV93cmFwcGVy
cy5zaXplKCkpOwogICAgICAgICBzeW5jaHJvbml6ZVdyYXBwZXJzSWZOZWVkZWQoKTsKICAgICB9
CiAKICAgICB2b2lkIGFuaW1WYWxEaWRDaGFuZ2UoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
aXNBbmltYXRpbmcpOwotICAgICAgICBBU1NFUlQobV9hbmltVmFsKTsKICAgICAgICAgQVNTRVJU
KG1fdmFsdWVzLnNpemUoKSA9PSBtX3dyYXBwZXJzLnNpemUoKSk7CiAgICAgICAgIHN5bmNocm9u
aXplV3JhcHBlcnNJZk5lZWRlZCgpOwogICAgIH0KQEAgLTE3Myw4ICsxODYsMTMgQEAgcHJvdGVj
dGVkOgogICAgIExpc3RXcmFwcGVyQ2FjaGUgbV93cmFwcGVyczsKICAgICBMaXN0V3JhcHBlckNh
Y2hlIG1fYW5pbWF0ZWRXcmFwcGVyczsKIAotICAgIFJlZlB0cjxTVkdQcm9wZXJ0eT4gbV9iYXNl
VmFsOwotICAgIFJlZlB0cjxTVkdQcm9wZXJ0eT4gbV9hbmltVmFsOworICAgIC8vIENhY2hlIHRo
ZSByYXcgcG9pbnRlciBidXQgcmV0dXJuIGEgUmVmUHRyPD4uIFRoaXMgd2lsbCBicmVhayB0aGUg
Y3ljbGljIHJlZmVyZW5jZQorICAgIC8vIGJldHdlZW4gU1ZHTGlzdFByb3BlcnR5VGVhck9mZiBh
bmQgU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmIG9uY2UgdGhlIHByb3BlcnR5CisgICAg
Ly8gcG9pbnRlciBpcyBub3QgbmVlZGVkLgorICAgIExpc3RQcm9wZXJ0eSogbV9iYXNlVmFsIHsg
bnVsbHB0ciB9OworICAgIExpc3RQcm9wZXJ0eSogbV9hbmltVmFsIHsgbnVsbHB0ciB9OworCisg
ICAgUmVmUHRyPExpc3RQcm9wZXJ0eT4gbV9hbmltYXRpbmdBbmltVmFsOwogfTsKIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFBy
b3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAkocmV2aXNpb24gMTk2
MjU0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzMiArMzEsMzYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmIDogcHVibGljIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQYXRo
U2VnTGlzdD4gewogcHVibGljOgotICAgIHZpcnR1YWwgU1ZHTGlzdFByb3BlcnR5PFNWR1BhdGhT
ZWdMaXN0PiogYmFzZVZhbCgpIG92ZXJyaWRlCisgICAgdmlydHVhbCBSZWZQdHI8TGlzdFByb3Bl
cnR5PiBiYXNlVmFsKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmICghbV9iYXNlVmFsKQot
ICAgICAgICAgICAgbV9iYXNlVmFsID0gU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNy
ZWF0ZSh0aGlzLCBCYXNlVmFsUm9sZSwgUGF0aFNlZ1VuYWx0ZXJlZFJvbGUsIG1fdmFsdWVzLCBt
X3dyYXBwZXJzKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eTxT
VkdQYXRoU2VnTGlzdD4qPihtX2Jhc2VWYWwuZ2V0KCkpOworICAgICAgICBpZiAobV9iYXNlVmFs
KQorICAgICAgICAgICAgcmV0dXJuIG1fYmFzZVZhbDsKKworICAgICAgICBhdXRvIHByb3BlcnR5
ID0gU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSh0aGlzLCBCYXNlVmFsUm9s
ZSwgUGF0aFNlZ1VuYWx0ZXJlZFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKKyAgICAgICAg
bV9iYXNlVmFsID0gcHJvcGVydHkucHRyKCk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKHByb3Bl
cnR5KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFNWR0xpc3RQcm9wZXJ0eTxTVkdQYXRoU2VnTGlz
dD4qIGFuaW1WYWwoKSBvdmVycmlkZQorICAgIHZpcnR1YWwgUmVmUHRyPExpc3RQcm9wZXJ0eT4g
YW5pbVZhbCgpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIW1fYW5pbVZhbCkKLSAgICAg
ICAgICAgIG1fYW5pbVZhbCA9IFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUo
dGhpcywgQW5pbVZhbFJvbGUsIFBhdGhTZWdVbmFsdGVyZWRSb2xlLCBtX3ZhbHVlcywgbV93cmFw
cGVycyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdMaXN0UHJvcGVydHk8U1ZHUGF0
aFNlZ0xpc3Q+Kj4obV9hbmltVmFsLmdldCgpKTsKKyAgICAgICAgaWYgKG1fYW5pbVZhbCkKKyAg
ICAgICAgICAgIHJldHVybiBtX2FuaW1WYWw7CisKKyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IFNW
R1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJvbGUsIFBh
dGhTZWdVbmFsdGVyZWRSb2xlLCBtX3ZhbHVlcywgbV93cmFwcGVycyk7CisgICAgICAgIG1fYW5p
bVZhbCA9IHByb3BlcnR5LnB0cigpOworICAgICAgICByZXR1cm4gV1RGTW92ZShwcm9wZXJ0eSk7
CiAgICAgfQogCi0gICAgaW50IGZpbmRJdGVtKGNvbnN0IFJlZlB0cjxTVkdQYXRoU2VnPiYgc2Vn
bWVudCkgY29uc3QKKyAgICBpbnQgZmluZEl0ZW0oY29uc3QgUmVmUHRyPFNWR1BhdGhTZWc+JiBz
ZWdtZW50KQogICAgIHsKICAgICAgICAgLy8gVGhpcyBzaG91bGQgZXZlciBiZSBjYWxsZWQgZm9y
IG91ciBiYXNlVmFsLCBhcyBhbmltVmFsIGNhbid0IG1vZGlmeSB0aGUgbGlzdC4KLSAgICAgICAg
QVNTRVJUKG1fYmFzZVZhbCk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZio+KG1fYmFzZVZhbC5nZXQoKSktPmZpbmRJdGVtKHNlZ21lbnQp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJP
ZmYqPihiYXNlVmFsKCkuZ2V0KCkpLT5maW5kSXRlbShzZWdtZW50KTsKICAgICB9CiAKICAgICB2
b2lkIHJlbW92ZUl0ZW1Gcm9tTGlzdChzaXplX3QgaXRlbUluZGV4LCBib29sIHNob3VsZFN5bmNo
cm9uaXplV3JhcHBlcnMpCiAgICAgewogICAgICAgICAvLyBUaGlzIHNob3VsZCBldmVyIGJlIGNh
bGxlZCBmb3Igb3VyIGJhc2VWYWwsIGFzIGFuaW1WYWwgY2FuJ3QgbW9kaWZ5IHRoZSBsaXN0Lgot
ICAgICAgICBBU1NFUlQobV9iYXNlVmFsKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYqPihtX2Jhc2VWYWwuZ2V0KCkpLT5yZW1vdmVJdGVtRnJvbUxp
c3QoaXRlbUluZGV4LCBzaG91bGRTeW5jaHJvbml6ZVdyYXBwZXJzKTsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqPihiYXNlVmFsKCkuZ2V0KCkpLT5y
ZW1vdmVJdGVtRnJvbUxpc3QoaXRlbUluZGV4LCBzaG91bGRTeW5jaHJvbml6ZVdyYXBwZXJzKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgUmVmPFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRl
YXJPZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgYW5pbWF0ZWRQcm9wZXJ0
eVR5cGUsIFNWR1BhdGhTZWdMaXN0JiB2YWx1ZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCShyZXZpc2lvbiAxOTYy
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIyICs0OCwyNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJU
eXBlLCB0eXBlbmFtZSBUZWFyT2ZmVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlUeXBlPgotICAgIHN0
YXRpYyBUZWFyT2ZmVHlwZSYgbG9va3VwT3JDcmVhdGVXcmFwcGVyKE93bmVyVHlwZSogZWxlbWVu
dCwgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZvLCBQcm9wZXJ0eVR5cGUmIHByb3BlcnR5KQor
ICAgIHN0YXRpYyBSZWY8VGVhck9mZlR5cGU+IGxvb2t1cE9yQ3JlYXRlV3JhcHBlcihPd25lclR5
cGUqIGVsZW1lbnQsIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyogaW5mbywgUHJvcGVydHlUeXBlJiBw
cm9wZXJ0eSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmZvKTsKICAgICAgICAgU1ZHQW5pbWF0
ZWRQcm9wZXJ0eURlc2NyaXB0aW9uIGtleShlbGVtZW50LCBpbmZvLT5wcm9wZXJ0eUlkZW50aWZp
ZXIpOwotICAgICAgICBhdXRvJiBzbG90ID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCktPmFkZChr
ZXksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgaWYgKCFzbG90KSB7Ci0gICAg
ICAgICAgICBSZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gd3JhcHBlciA9IFRlYXJPZmZUeXBlOjpj
cmVhdGUoZWxlbWVudCwgaW5mby0+YXR0cmlidXRlTmFtZSwgaW5mby0+YW5pbWF0ZWRQcm9wZXJ0
eVR5cGUsIHByb3BlcnR5KTsKLSAgICAgICAgICAgIGlmIChpbmZvLT5hbmltYXRlZFByb3BlcnR5
U3RhdGUgPT0gUHJvcGVydHlJc1JlYWRPbmx5KQotICAgICAgICAgICAgICAgIHdyYXBwZXItPnNl
dElzUmVhZE9ubHkoKTsKLSAgICAgICAgICAgIHNsb3QgPSAmd3JhcHBlci5sZWFrUmVmKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlYXJPZmZUeXBlJj4oKnNsb3Qp
OworCisgICAgICAgIGF1dG8gcmVzdWx0ID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCktPmFkZChr
ZXksIG51bGxwdHIpOworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlYXJPZmZUeXBlJj4oKnJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOworCisgICAgICAgIFJlZjxTVkdBbmltYXRlZFByb3BlcnR5PiB3cmFwcGVyID0gVGVhck9m
ZlR5cGU6OmNyZWF0ZShlbGVtZW50LCBpbmZvLT5hdHRyaWJ1dGVOYW1lLCBpbmZvLT5hbmltYXRl
ZFByb3BlcnR5VHlwZSwgcHJvcGVydHkpOworICAgICAgICBpZiAoaW5mby0+YW5pbWF0ZWRQcm9w
ZXJ0eVN0YXRlID09IFByb3BlcnR5SXNSZWFkT25seSkKKyAgICAgICAgICAgIHdyYXBwZXItPnNl
dElzUmVhZE9ubHkoKTsKKworICAgICAgICAvLyBDYWNoZSB0aGUgcmF3IHBvaW50ZXIgYnV0IHJl
dHVybiBhIFJlZjw+LiBUaGlzIHdpbGwgYnJlYWsgdGhlIGN5Y2xpYyByZWZlcmVuY2UKKyAgICAg
ICAgLy8gYmV0d2VlbiBTVkdBbmltYXRlZFByb3BlcnR5IGFuZCBTVkdFbGVtZW50IG9uY2UgdGhl
IHByb3BlcnR5IHBvaW50ZXIgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IHdyYXBwZXIucHRyKCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8VGVhck9mZlR5cGU+KHdyYXBwZXIpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgVGVhck9mZlR5cGU+Ci0gICAgc3RhdGljIFRlYXJPZmZU
eXBlKiBsb29rdXBXcmFwcGVyKE93bmVyVHlwZSogZWxlbWVudCwgY29uc3QgU1ZHUHJvcGVydHlJ
bmZvKiBpbmZvKQorICAgIHN0YXRpYyBSZWZQdHI8VGVhck9mZlR5cGU+IGxvb2t1cFdyYXBwZXIo
T3duZXJUeXBlKiBlbGVtZW50LCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8pCiAgICAgewog
ICAgICAgICBBU1NFUlQoaW5mbyk7CiAgICAgICAgIFNWR0FuaW1hdGVkUHJvcGVydHlEZXNjcmlw
dGlvbiBrZXkoZWxlbWVudCwgaW5mby0+cHJvcGVydHlJZGVudGlmaWVyKTsKQEAgLTcxLDcgKzc2
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwg
dHlwZW5hbWUgVGVhck9mZlR5cGU+Ci0gICAgc3RhdGljIFRlYXJPZmZUeXBlKiBsb29rdXBXcmFw
cGVyKGNvbnN0IE93bmVyVHlwZSogZWxlbWVudCwgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZv
KQorICAgIHN0YXRpYyBSZWZQdHI8VGVhck9mZlR5cGU+IGxvb2t1cFdyYXBwZXIoY29uc3QgT3du
ZXJUeXBlKiBlbGVtZW50LCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8pCiAgICAgewogICAg
ICAgICByZXR1cm4gbG9va3VwV3JhcHBlcjxPd25lclR5cGUsIFRlYXJPZmZUeXBlPihjb25zdF9j
YXN0PE93bmVyVHlwZSo+KGVsZW1lbnQpLCBpbmZvKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5TWFjcm9zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eU1h
Y3Jvcy5oCShyZXZpc2lvbiAxOTYyNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZFByb3BlcnR5TWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsx
MjMsNyBAQCBwdWJsaWM6IFwKICAgICBzdGF0aWMgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBMb3dl
clByb3BlcnR5IyNQcm9wZXJ0eUluZm8oKTsgXAogICAgIFByb3BlcnR5VHlwZSYgTG93ZXJQcm9w
ZXJ0eSgpIGNvbnN0IFwKICAgICB7IFwKLSAgICAgICAgaWYgKFRlYXJPZmZUeXBlKiB3cmFwcGVy
ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxVc2VPd25lclR5cGUsIFRlYXJP
ZmZUeXBlPih0aGlzLCBMb3dlclByb3BlcnR5IyNQcm9wZXJ0eUluZm8oKSkpIHsgXAorICAgICAg
ICBpZiAoYXV0byB3cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxV
c2VPd25lclR5cGUsIFRlYXJPZmZUeXBlPih0aGlzLCBMb3dlclByb3BlcnR5IyNQcm9wZXJ0eUlu
Zm8oKSkpIHsgXAogICAgICAgICAgICAgaWYgKHdyYXBwZXItPmlzQW5pbWF0aW5nKCkpIFwKICAg
ICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlci0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKTsgXAog
ICAgICAgICB9IFwKQEAgLTE4NCw3ICsxODQsNyBAQCBwcml2YXRlOiBcCiBERUNMQVJFX0FOSU1B
VEVEX1BST1BFUlRZKFRlYXJPZmZUeXBlLCBQcm9wZXJ0eVR5cGUsIFVwcGVyUHJvcGVydHksIExv
d2VyUHJvcGVydHksICkgXAogdm9pZCBkZXRhY2hBbmltYXRlZCMjVXBwZXJQcm9wZXJ0eSMjTGlz
dFdyYXBwZXJzKHVuc2lnbmVkIG5ld0xpc3RTaXplKSBcCiB7IFwKLSAgICBpZiAoVGVhck9mZlR5
cGUqIHdyYXBwZXIgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFVzZU93bmVy
VHlwZSwgVGVhck9mZlR5cGU+KHRoaXMsIExvd2VyUHJvcGVydHkjI1Byb3BlcnR5SW5mbygpKSkg
XAorICAgIGlmIChhdXRvIHdyYXBwZXIgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFw
cGVyPFVzZU93bmVyVHlwZSwgVGVhck9mZlR5cGU+KHRoaXMsIExvd2VyUHJvcGVydHkjI1Byb3Bl
cnR5SW5mbygpKSkgXAogICAgICAgICB3cmFwcGVyLT5kZXRhY2hMaXN0V3JhcHBlcnMobmV3TGlz
dFNpemUpOyBcCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5
VGVhck9mZi5oCShyZXZpc2lvbiAxOTYyNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTggKzI4LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmIDogcHVibGljIFNWR0FuaW1hdGVk
TGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1MaXN0PiB7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybUxpc3Q+KiBiYXNlVmFsKCkg
b3ZlcnJpZGUKKyAgICB2aXJ0dWFsIFJlZlB0cjxMaXN0UHJvcGVydHk+IGJhc2VWYWwoKSBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgaWYgKCFtX2Jhc2VWYWwpCi0gICAgICAgICAgICBtX2Jhc2VW
YWwgPSBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQmFzZVZh
bFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtTGlzdD4qPihtX2Jhc2VWYWwuZ2V0
KCkpOworICAgICAgICBpZiAobV9iYXNlVmFsKQorICAgICAgICAgICAgcmV0dXJuIG1fYmFzZVZh
bDsKKworICAgICAgICBhdXRvIHByb3BlcnR5ID0gU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVh
ck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xlLCBtX3ZhbHVlcywgbV93cmFwcGVycyk7Cisg
ICAgICAgIG1fYmFzZVZhbCA9IHByb3BlcnR5LnB0cigpOworICAgICAgICByZXR1cm4gV1RGTW92
ZShwcm9wZXJ0eSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBTVkdMaXN0UHJvcGVydHlUZWFyT2Zm
PFNWR1RyYW5zZm9ybUxpc3Q+KiBhbmltVmFsKCkgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIFJlZlB0
cjxMaXN0UHJvcGVydHk+IGFuaW1WYWwoKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKCFt
X2FuaW1WYWwpCi0gICAgICAgICAgICBtX2FuaW1WYWwgPSBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVy
dHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJz
KTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZH
VHJhbnNmb3JtTGlzdD4qPihtX2FuaW1WYWwuZ2V0KCkpOworICAgICAgICBpZiAobV9hbmltVmFs
KQorICAgICAgICAgICAgcmV0dXJuIG1fYW5pbVZhbDsKKworICAgICAgICBhdXRvIHByb3BlcnR5
ID0gU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEFuaW1WYWxS
b2xlLCBtX3ZhbHVlcywgbV93cmFwcGVycyk7CisgICAgICAgIG1fYW5pbVZhbCA9IHByb3BlcnR5
LnB0cigpOworICAgICAgICByZXR1cm4gV1RGTW92ZShwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAg
c3RhdGljIFJlZjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY+IGNyZWF0
ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIFNWR1Ry
YW5zZm9ybUxpc3QmIHZhbHVlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE5NjI1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eVRlYXJPZmYu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgewog
ICAgIH0KIAorICAgIHZpcnR1YWwgflNWR0xpc3RQcm9wZXJ0eVRlYXJPZmYoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0eSkKKyAgICAgICAgICAgIG1fYW5pbWF0ZWRQcm9w
ZXJ0eS0+cHJvcGVydHlXaWxsQmVEZWxldGVkKCp0aGlzKTsKKyAgICB9CisKICAgICB2aXJ0dWFs
IGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAobV9y
b2xlID09IEFuaW1WYWxSb2xlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAko
cmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0
aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3
IEBAIFNWR1BhdGhFbGVtZW50KiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGUKIGJvb2wgU1ZHUGF0
aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OnByb2Nlc3NJbmNvbWluZ0xpc3RJdGVtVmFsdWUoY29u
c3QgTGlzdEl0ZW1UeXBlJiBuZXdJdGVtLCB1bnNpZ25lZCogaW5kZXhUb01vZGlmeSkKIHsKICAg
ICBTVkdQYXRoU2VnV2l0aENvbnRleHQqIG5ld0l0ZW1XaXRoQ29udGV4dCA9IHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdXaXRoQ29udGV4dCo+KG5ld0l0ZW0uZ2V0KCkpOwotICAgIFNWR0FuaW1hdGVk
UHJvcGVydHkqIGFuaW1hdGVkUHJvcGVydHlPZkl0ZW0gPSBuZXdJdGVtV2l0aENvbnRleHQtPmFu
aW1hdGVkUHJvcGVydHkoKTsKKyAgICBSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gYW5pbWF0
ZWRQcm9wZXJ0eU9mSXRlbSA9IG5ld0l0ZW1XaXRoQ29udGV4dC0+YW5pbWF0ZWRQcm9wZXJ0eSgp
OwogCiAgICAgLy8gQWx0ZXIgdGhlIHJvbGUsIGFmdGVyIGNhbGxpbmcgYW5pbWF0ZWRQcm9wZXJ0
eSgpLCBhcyB0aGF0IG1heSBpbmZsdWVuY2UgdGhlIHJldHVybmVkIGFuaW1hdGVkIHByb3BlcnR5
LgogICAgIG5ld0l0ZW1XaXRoQ29udGV4dC0+c2V0Q29udGV4dEFuZFJvbGUoY29udGV4dEVsZW1l
bnQoKSwgbV9wYXRoU2VnUm9sZSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgYm9vbCBTVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZjo6cHJvYwogICAgIC8vIFNwZWM6IElmIG5ld0l0ZW0gaXMgYWxy
ZWFkeSBpbiBhIGxpc3QsIGl0IGlzIHJlbW92ZWQgZnJvbSBpdHMgcHJldmlvdXMgbGlzdCBiZWZv
cmUgaXQgaXMgaW5zZXJ0ZWQgaW50byB0aGlzIGxpc3QuCiAgICAgLy8gJ25ld0l0ZW0nIGlzIGFs
cmVhZHkgbGl2aW5nIGluIGFub3RoZXIgbGlzdC4gSWYgaXQncyBub3Qgb3VyIGxpc3QsIHN5bmNo
cm9uaXplIHRoZSBvdGhlciBsaXN0cyB3cmFwcGVycyBhZnRlciB0aGUgcmVtb3ZhbC4KICAgICBi
b29sIGxpdmVzSW5PdGhlckxpc3QgPSBhbmltYXRlZFByb3BlcnR5T2ZJdGVtICE9IG1fYW5pbWF0
ZWRQcm9wZXJ0eTsKLSAgICBTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKiBw
cm9wZXJ0eVRlYXJPZmYgPSBzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmKj4oYW5pbWF0ZWRQcm9wZXJ0eU9mSXRlbSk7CisgICAgUmVmUHRyPFNWR0FuaW1h
dGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IHByb3BlcnR5VGVhck9mZiA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4oYW5pbWF0
ZWRQcm9wZXJ0eU9mSXRlbSk7CiAgICAgaW50IGluZGV4VG9SZW1vdmUgPSBwcm9wZXJ0eVRlYXJP
ZmYtPmZpbmRJdGVtKG5ld0l0ZW0uZ2V0KCkpOwogICAgIEFTU0VSVChpbmRleFRvUmVtb3ZlICE9
IC0xKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2MjU0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDItMDggIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9O
KHIxODEzNDUpOiBTVkcgcG9seWxpbmUgYW5kIHBvbHlnb24gbGVhayBwYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NTkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6
IFJlbW92ZSBmbGFreSB0ZXN0cyBmcm9tIHRlc3QgZXhwZWN0YXRpb24uCisgICAgICAgIAorICAg
ICAgICAqIHN2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1saXN0LXByb3BlcnR5LWluc3RhbmNlcy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1s
aXN0LXByb3BlcnR5LWluc3RhbmNlcy5zdmc6IEFkZGVkLgorICAgICAgICBFbnN1cmUgaWYgU1ZH
UG9seWxpbmVFbGVtZW50LnBvaW50cyBpcyByZXF1ZXN0ZWQgZnJvbSBKUywgdGhlIGRvY3VtZW50
IHdpbGwKKyAgICAgICAgbm90IGxlYWsuCisKIDIwMTYtMDItMDggIEFkcmllbiBQbGF6YXMgIDxh
cGxhemFzQGlnYWxpYS5jb20+CiAKICAgICAgICAgVGltZW91dHMgaW4gdGVzdHMgYmVjYXVzZSBv
ZiBub24gaW1wbGVtZW50ZWQgVUlTY3JpcHRDb250cm9sbGVyOjpzaW5nbGVUYXBBdFBvaW50KCkK
SW5kZXg6IExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMTk2MjU0KQorKysgTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNjM3LDEyICs2MzcsNiBAQCB3ZWJr
aXQub3JnL2IvMTQxNjk1IFsgRGVidWcgXSBmYXN0L3NlbGVjCiAjIENvbnRlbnQgZXh0ZW5zaW9u
cyBhcmUgTWFjLVdLMi1vbmx5IGZvciBub3cKIGh0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMg
WyBTa2lwIF0KIAotIyBUaGVzZSB0ZXN0cyB3ZXJlIGZsYWt5IG9uIE1hYyBvbmx5IGJ1dCB0aGV5
IGJlY2FtZSBmbGFreSBvbiBhbGwgcG9ydHMgYWZ0ZXIgcjE4MTM0NQotd2Via2l0Lm9yZy9iLzEx
NDI4MCBzdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstZHluYW1pY2FsbHktYWRkZWQtZWxlbWVudC1p
bnN0YW5jZXMuc3ZnIFsgUGFzcyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMTQyODAgc3ZnL2Fu
aW1hdGlvbnMvc21pbC1sZWFrLWVsZW1lbnQtaW5zdGFuY2VzLW5vQmFzZVZhbFJlZi5zdmcgWyBQ
YXNzIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzExNDI4MCBzdmcvYW5pbWF0aW9ucy9zbWlsLWxl
YWstZWxlbWVudC1pbnN0YW5jZXMuc3ZnIFsgUGFzcyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8x
MTQyODAgc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWVsZW1lbnRzLnN2ZyBbIFBhc3MgRmFpbHVy
ZSBdCi0KIHdlYmtpdC5vcmcvYi8xNDkwNzIgc3ZnL2FuaW1hdGlvbnMvc3ZnYm9vbGVhbi1hbmlt
YXRpb24tMS5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzE0MzA4NSBtZWRp
YS90cmFjay90cmFjay1tb2RlLmh0bWwgWyBQYXNzIFRpbWVvdXQgXQpJbmRleDogTGF5b3V0VGVz
dHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3QtcHJvcGVydHktaW5zdGFuY2VzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWlsLWxl
YWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5jZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3QtcHJvcGVydHktaW5zdGFu
Y2VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACitQQVNTCkluZGV4
OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0
YW5jZXMuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwt
bGVhay1saXN0LXByb3BlcnR5LWluc3RhbmNlcy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5jZXMuc3Zn
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKzxzdmcgaWQ9InN2ZyIgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94bGluayIgb25sb2FkPSJsb2FkKCkiPgorPGRlZnM+CisgICAgPHBvbHlsaW5lIGlkPSJw
b2x5bGluZSIgcG9pbnRzPSIyMCwyMCA4MCwyMCA4MCw4MCAyMCw4MCIgLz4KKzwvZGVmcz4KKzxn
IGlkPSJnIi8+Cis8dGV4dCB4PSI1MCIgeT0iNTAiIGlkPSJsb2ciLz4KKzxzY3JpcHQgaWQ9InNj
cmlwdCI+Cis8IVtDREFUQVsKKwordmFyIGcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZyIp
OworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIHZhciBsb2dEaXYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbG9nJyk7CisgICAgbG9nRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKK30KKworZnVuY3Rpb24gY3JlYXRlQW5pbWF0ZWRQb2x5
bGluZUluc3RhbmNlKCkgeworICAgIHZhciB1c2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMo
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInVzZSIpOworICAgIHVzZS5zZXRBdHRyaWJ1
dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsICJocmVmIiwgIiNwb2x5bGluZSIp
OworCisgICAgdmFyIGFuaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiwgImFuaW1hdGUiKTsKKyAgICBhbmltLnNldEF0dHJpYnV0ZSgiYXR0
cmlidXRlVHlwZSIsICJYTUwiKTsKKyAgICBhbmltLnNldEF0dHJpYnV0ZSgiYXR0cmlidXRlTmFt
ZSIsICJwb2ludHMiKTsKKyAgICBhbmltLnNldEF0dHJpYnV0ZSgiZnJvbSIsICIyMCwyMCA4MCwy
MCA4MCw4MCAyMCw4MCIpOworICAgIGFuaW0uc2V0QXR0cmlidXRlKCJ0byIsICIxMCwxMCA5MCwx
MCA5MCw5MCAxMCw5MCIpOworICAgIGFuaW0uc2V0QXR0cmlidXRlKCJiZWdpbiIsICIwcyIpOwor
ICAgIGFuaW0uc2V0QXR0cmlidXRlKCJkdXIiLCAiMTAuMHMiKTsKKyAgICBhbmltLnNldEF0dHJp
YnV0ZSgicmVwZWF0Q291bnQiLCAxKTsKKworICAgIHVzZS5hcHBlbmRDaGlsZChhbmltKTsKKwor
ICAgIHJldHVybiB1c2U7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0VGVzdCgpIHsKKyAgICAvLyBDb2xs
ZWN0IGdhcmJhZ2UgYmVmb3JlIHJlY29yZGluZyBzdGFydGluZyBsaXZlIG5vZGUgY291bnQsIGlu
IGNhc2UgdGhlcmUgYXJlIGxpdmUgZWxlbWVudHMgZnJvbSBwcmV2aW91cyB0ZXN0cy4KKyAgICBH
Q0NvbnRyb2xsZXIuY29sbGVjdCgpOworICAgIG9yaWdpbmFsTGl2ZUVsZW1lbnRzID0gd2luZG93
LmludGVybmFscy5udW1iZXJPZkxpdmVOb2RlcygpOworCisgICAgLy8gSG9sZCByZWZlcmVuY2Vz
IHRvIHBvaW50cyBhbmQgYW5pbWF0ZWRQb2ludHMgb24gdGhlIHJvb3QgaW5zdGFuY2UuCisgICAg
cG9pbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvbHlsaW5lIikucG9pbnRzOworICAg
IGFuaW1hdGVkUG9pbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvbHlsaW5lIikuYW5p
bWF0ZWRQb2ludHM7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgICAg
ICBnLmFwcGVuZENoaWxkKGNyZWF0ZUFuaW1hdGVkUG9seWxpbmVJbnN0YW5jZSgpKTsKKworICAg
IHNldFRpbWVvdXQoY29udGludWVUZXN0LCAwKTsKK30KKworZnVuY3Rpb24gY29udGludWVUZXN0
KCkgeworICAgIHdoaWxlIChnLmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgZy5yZW1vdmVDaGls
ZChnLmxhc3RDaGlsZCk7CisKKyAgICBzZXRUaW1lb3V0KGZpbmlzaFRlc3QsIDApOworfQorCit2
YXIgYXR0ZW1wdHNUb0ZpbmlzaCA9IDU7CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAg
R0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKworICAgIHZhciBsaXZlRGVsdGEgPSB3aW5kb3cuaW50
ZXJuYWxzLm51bWJlck9mTGl2ZU5vZGVzKCkgLSBvcmlnaW5hbExpdmVFbGVtZW50czsKKyAgICBp
ZiAobGl2ZURlbHRhID09IDApCisgICAgICAgIGxvZygiUEFTUyIpOworICAgIGVsc2UgaWYgKC0t
YXR0ZW1wdHNUb0ZpbmlzaCkgeworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaFRlc3QsIDEwMCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UKKyAgICAgICAgbG9nKCJGQUlMOiAiICsgbGl2
ZURlbHRhICsgIiBleHRyYSBsaXZlIG5vZGUocykiKTsKKworICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiBsb2FkKCkgeworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
ciAmJiB3aW5kb3cuR0NDb250cm9sbGVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAg
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvZygiVGhpcyB0ZXN0IG9ubHkgd29ya3Mgd2hl
biBydW4gd2l0aCB0aGUgdGVzdFJ1bm5lciwgR0NDb250cm9sbGVyLCBhbmQgaW50ZXJuYWxzIGF2
YWlsYWJsZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNldFRpbWVvdXQoc3Rh
cnRUZXN0LCAwKTsKK30KK11dPgorPC9zY3JpcHQ+Cis8L3N2Zz4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270868</attachid>
            <date>2016-02-08 11:25:30 -0800</date>
            <delta_ts>2016-02-08 12:54:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152759-20160208112507.patch</filename>
            <type>text/plain</type>
            <size>43811</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjI1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxNi0wMi0wOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJ
T04ocjE4MTM0NSk6IFNWRyBwb2x5bGluZSBhbmQgcG9seWdvbiBsZWFrIHBhZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OQorCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFRoZSBsZWFrIGhhcHBlbnMgYmVj
YXVzZSBvZiBjeWNsaWMgcmVmZXJlbmNlIGJldHdlZW4gU1ZHTGlzdFByb3BlcnR5VGVhck9mZiAK
KyAgICAgICAgYW5kIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiB3aGljaCBpcyBkZXJp
dmVkIGZyb20gU1ZHQW5pbWF0ZWRQcm9wZXJ0eS4KKyAgICAgICAgVGhlcmUgaXMgYWxzbyBjeWNs
aWMgcmVmZXJlbmNlIGJldHdlZW4gU1ZHQW5pbWF0ZWRQcm9wZXJ0eSBhbmQgU1ZHRWxlbWVudAor
ICAgICAgICBhbmQgdGhpcyBjYXVzZXMgdGhlIHdob2xlIGRvY3VtZW50IHRvIGJlIGxlYWtlZC4g
U28gaWYgdGhlIEpTIHJlcXVlc3RzLCBmb3IKKyAgICAgICAgZXhhbXBsZSwgYW4gaW5zdGFuY2Ug
b2YgU1ZHUG9seWxpbmVFbGVtZW50LnBvaW50cywgdGhlIHdob2xlIGRvY3VtZW50IHdpbGwgYmUK
KyAgICAgICAgbGVha2VkLgorCisgICAgICAgIFRoZSBmaXggZGVwZW5kcyBvbiBoYXZpbmcgdGhl
IGN5Y2xpYyByZWZlcmVuY2UgYXMgaXMgc2luY2UgdGhlIG93bmluZyBhbmQgdGhlCisgICAgICAg
IG93bmVkIGNsYXNzZXMgaGF2ZSB0byBsaXZlIHRvZ2V0aGVyIGlmIGFueSBvZiB0aGVtIGlzIHJl
ZmVyZW5jZWQuIEJ1dCB0aGUgb3duaW5nCisgICAgICAgIGNsYXNzIGNhY2hlcyBhIHJhdyAncmVm
LWNvdW50ZWQnIHBvaW50ZXIgb2YgdGhlIG93bmVkIGNsYXNzLiBJZiBpdCBpcyByZXF1ZXN0ZWQK
KyAgICAgICAgZm9yIGFuIGluc3RhbmNlIG9mIHRoZSBvd25lZCBjbGFzcyBpdCByZXR1cm5lZCBh
IFJlZlB0cjw+IG9mIGl0LiBPbmNlIHRoZSBvd25lZAorICAgICAgICBjbGFzcyBpcyBub3QgdXNl
ZCwgaXQgY2FuIGRlbGV0ZSBpdHNlbGYuIFRoZSBvbmx5IHRoaW5nIG5lZWRlZCBoZXJlIGlzIHRv
IG5vdGlmeQorICAgICAgICB0aGUgb3duZXIgY2xhc3Mgb2YgdGhlIGRlbGV0aW9uIHNvIGl0IGNs
ZWFucyBpdHMgY2FjaGVzIGFuZCBiZSBhYmxlIHRvIGNyZWF0ZSBhCisgICAgICAgIG5ldyBwb2lu
dGVyIGlmIGl0IGlzIHJlcXVlc3RlZCBmb3IgYW4gaW5zdGFuY2Ugb2YgdGhlIG93bmVkIGNsYXNz
IGxhdGVyLgorCisgICAgICAgIFJldmVydCB0aGUgY2hhbmdlIG9mIHIxODEzNDUgaW4gU1ZHQW5p
bWF0ZWRQcm9wZXJ0eTo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKCkKKyAgICAgICAgdG8gYnJlYWsg
dGhlIGN5Y2xpYyByZWZlcmVuY2UgYmV0d2VlbiBTVkdFbGVtZW50IGFuZCBTVkdBbmltYXRlZFBy
b3BlcnR5LgorICAgICAgICAKKyAgICAgICAgQWxzbyBhcHBseSB0aGUgc2FtZSBhcHByb2FjaCBp
biBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OmJhc2VWYWwoKSBhbmQKKyAgICAgICAg
YW5pbVZhbCgpIHRvIGJyZWFrIGN5Y2xpYyByZWZlcmVuY2UgYmV0d2VlbiBTVkdMaXN0UHJvcGVy
dHlUZWFyT2ZmIGFuZAorICAgICAgICBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuCisK
KyAgICAgICAgVGVzdDogc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3QtcHJvcGVydHktaW5z
dGFuY2VzLnN2ZworCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOiBUaGUgU1ZHIG5vbi1zdHJpbmcgbGlzdCB0
ZWFyLW9mZiBwcm9wZXJ0aWVzIGJlY2FtZSBvZgorICAgICAgICB0eXBlIFJlZlB0cjw+LiBTbyB3
ZSBuZWVkIHRvIHVzZSBnZXQoKSB3aXRoIHRoZSBjYXN0aW5nIGV4cHJlc3Npb25zLgorICAgICAg
ICAKKyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXJrZXJFbGVtZW50OjpvcmllbnRUeXBlKToKKyAgICAgICAgVXNlICdhdXRvJyB0eXBl
IGZvciB0aGUgcmV0dXJuIG9mIFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXIoKS4K
KworICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoRWxlbWVudDo6cGF0aEJ5dGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlRFdyYXBwZXIpOgorICAgICAgICBTaW5jZSBTVkdBbmlt
YXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGUoKSByZXR1cm5zIGEgUmVmUHRyPD4gd2UgbmVlZCB0
byAKKyAgICAgICAgdXNlIGdldCgpIGZvciB0aGUgY2FzdGluZyBleHByZXNzaW9ucy4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6Om5vcm1hbGl6ZWRQYXRoU2VnTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWRQYXRoU2VnTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWROb3JtYWxpemVkUGF0aFNl
Z0xpc3QpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAgICAgICBDaGFuZ2Ug
dGhlIHJldHVybiB2YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRvIFJlZlB0cjw+LgorCisgICAgICAg
ICogc3ZnL1NWR1BhdGhTZWdXaXRoQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ1dpdGhDb250ZXh0OjphbmltYXRlZFByb3BlcnR5KToKKyAgICAgICAgQ2hhbmdlIHRoZSBy
ZXR1cm4gdHlwZSB0byBiZSBSZWZQdHI8PiB0byBwcmVzZXJ2ZSB0aGUgdmFsdWUgZnJvbSBiZWlu
ZyBkZWxldGVkLgorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAg
ICAgU2luY2UgU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcigpIHJldHVybnMgYSBS
ZWZQdHI8PiB3ZSBuZWVkIHRvIAorICAgICAgICB1c2UgZ2V0KCkgZm9yIHRoZSBjYXN0aW5nIGV4
cHJlc3Npb25zLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50Ojpw
b2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OmFuaW1hdGVkUG9pbnRz
KToKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuaDoKKyAgICAgICAgQ2hhbmdlIHRoZSBy
ZXR1cm4gdmFsdWUgZnJvbSByYXcgcG9pbnRlciB0byBSZWZQdHI8Pi4KKyAgICAgICAgCisgICAg
ICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVj
OjpzZXRUcmFuc2Zvcm1TdHJpbmcpOgorICAgICAgICBTaW5jZSBTVkdBbmltYXRlZFByb3BlcnR5
Ojpsb29rdXBXcmFwcGVyKCkgcmV0dXJucyBhIFJlZlB0cjw+IHdlIG5lZWQgdG8gCisgICAgICAg
IHVzZSBnZXQoKSBmb3IgdGhlIGNhc3RpbmcgZXhwcmVzc2lvbnMuCisKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1ZpZXdTcGVjOjp0cmFuc2Zvcm0pOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5o
OgorICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRvIFJl
ZlB0cjw+LgorICAgICAgICAKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExp
c3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFBy
b3BlcnR5VGVhck9mZjo6YmFzZVZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExp
c3RQcm9wZXJ0eVRlYXJPZmY6OmFuaW1WYWwpOgorICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB2
YWx1ZSBmcm9tIHJhdyBwb2ludGVyIHRvIFJlZlB0cjw+IGFuZCBjaGFuZ2UgdGhlIGNhY2hlZAor
ICAgICAgICB2YWx1ZSBmcm9tIFJlZlB0cjw+IHRvIHJhdyBwb2ludGVyLiBJZiB0aGUgcHJvcGVy
dHkgaXMgbnVsbCwgaXQgd2lsbCBiZQorICAgICAgICBjcmVhdGVkLCBpdHMgcmF3IHBvaW50ZXIg
d2lsbCBiZSBjYWNoZWQgYW5kIHRoZSBvbmx5IHJlZi1jb3VudGVkIFJlZlB0cjw+CisgICAgICAg
IHdpbGwgYmUgcmV0dXJuZWQuIFRoaXMgd2lsbCBndWFyYW50ZWUsIHRoZSBSZWZQdHI8PiB3aWxs
IGJlIGRlbGV0ZWQgb25jZQorICAgICAgICBpdCBpcyBub3QgdXNlZCBhbnltb3JlLiAKKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OnBy
b3BlcnR5V2lsbEJlRGVsZXRlZCk6CisgICAgICAgIENsZWFuIHRoZSByYXcgcG9pbnRlciBjYWNo
ZXMgbV9iYXNlVmFsIGFuZCBtX2FuaW1WYWwgdXBvbiBkZWxldGluZyB0aGUKKyAgICAgICAgYWN0
dWFsIHBvaW50ZXIuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgZGVzdHJ1
Y3RvciBvZgorICAgICAgICBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmLgorICAgICAgICAKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6ZmluZEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZW1vdmVJ
dGVtRnJvbUxpc3QpOgorICAgICAgICBXZSBoYXZlIHRvIGVuc3VyZSB0aGUgYmFzZVZhbCgpIGlz
IGNyZWF0ZWQgYmVmb3JlIHVzaW5nIGl0LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6ZGV0YWNoTGlzdFdyYXBwZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6Y3VycmVudEFuaW1h
dGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFy
T2ZmOjphbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlz
dFByb3BlcnR5VGVhck9mZjo6YW5pbWF0aW9uRW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjpzeW5jaHJvbml6ZVdyYXBwZXJzSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjphbmlt
VmFsV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZExpc3RQcm9wZXJ0
eVRlYXJPZmY6OmFuaW1WYWxEaWRDaGFuZ2UpOgorICAgICAgICBGb3IgYW5pbWF0aW9uLCBhIHNl
cGFyYXRlIFJlZlB0cjw+ICdtX2FuaW1hdGluZ0FuaW1WYWwnIHdpbGwgYmUgYXNzaWduZWQKKyAg
ICAgICAgdG8gdGhlIGFuaW1WYWwoKS4gVGhpcyB3aWxsIHByZXZlbnQgZGVsZXRpbmcgbV9hbmlt
VmFsIHdoaWxlIGFuaW1hdGlvbi4KKyAgICAgICAgCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6YmFzZVZhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjphbmlt
VmFsKToKKyAgICAgICAgU2FtZSBhcyB3aGF0IGlzIGRvbmUgaW4gU1ZHQW5pbWF0ZWRMaXN0UHJv
cGVydHlUZWFyT2ZmLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUGF0
aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmZpbmRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OnJlbW92ZUl0ZW1Gcm9tTGlzdCk6
CisgICAgICAgIFNhbWUgYXMgd2hhdCBpcyBkb25lIGluIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5
VGVhck9mZi4KKyAgICAgICAgCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3Vw
T3JDcmVhdGVXcmFwcGVyKToKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBy
YXcgcmVmZXJlbmNlIHRvIFJlZjw+IGFuZCBjaGFuZ2UgdGhlCisgICAgICAgIGNhY2hlZCB2YWx1
ZSBmcm9tIFJlZjw+IHRvIHJhdyBwb2ludGVyLiBUaGlzIHJldmVydHMgdGhlIGNoYW5nZSBvZgor
ICAgICAgICByMTgxMzQ1IGluIHRoaXMgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcik6CisgICAgICAgIENoYW5n
ZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcmF3IHBvaW50ZXIgdG8gUmVmUHRyPD4uCisgICAgICAg
IAorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3MuaDoK
KyAgICAgICAgVXNlICdhdXRvJyB0eXBlIGZvciB0aGUgcmV0dXJuIG9mIFNWR0FuaW1hdGVkUHJv
cGVydHk6Omxvb2t1cFdyYXBwZXIoKS4KKyAgICAgICAgCisgICAgICAgICogc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY6OmJhc2VWYWwp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFy
T2ZmOjphbmltVmFsKToKKyAgICAgICAgU2FtZSBhcyB3aGF0IGlzIGRvbmUgaW4gU1ZHQW5pbWF0
ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLgorCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHTGlz
dFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5VGVh
ck9mZjo6flNWR0xpc3RQcm9wZXJ0eVRlYXJPZmYpOgorICAgICAgICBDYWxsIHRoZSBTVkdBbmlt
YXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY6OnByb3BlcnR5V2lsbEJlRGVsZXRlZCgpIHRvIGNsZWFu
CisgICAgICAgIGl0cyByYXcgcG9pbnRlcnMgd2hlbiB0aGUgUmVmUHRyPD4gZGVsZXRlcyBpdHNl
bGYuCisKIDIwMTYtMDItMDggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTYyNTMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
cmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTQyNTIsNyArNDI1MiwxMSBAQCBzdWIg
TmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIHJldHVybiAidG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
JGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOwogICAgIH0KIAotICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZU5hbWUpIG9yICRpbnRl
cmZhY2VOYW1lIGVxICJTVkdWaWV3U3BlYyIpIHsKKyAgICAjICR0eXBlIGhhcyB0byBiZSB1c2Vk
IGhlcmUgYmVjYXVzZSBTVkdWaWV3U3BlYy50cmFuc2Zvcm0gaXMgb2YgdHlwZSBTVkdUcmFuc2Zv
cm1MaXN0LgorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYo
JHR5cGUpIGFuZCAkdHlwZSA9fiAvKD88IVN0cmluZylMaXN0JC8pIHsKKyAgICAgICAgIyBDb252
ZXJ0IGZyb20gYWJzdHJhY3QgUmVmUHRyPExpc3RQcm9wZXJ0eT4gdG8gcmVhbCB0eXBlLCBzbyB0
aGUgcmlnaHQgdG9KUygpIG1ldGhvZCBjYW4gYmUgaW52b2tlZC4KKyAgICAgICAgJHZhbHVlID0g
InN0YXRpY19jYXN0PCIgLiBHZXROYXRpdmVUeXBlKCR0eXBlKSAuICI+KCR2YWx1ZSIgLiAiLmdl
dCgpKSI7CisgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRp
bnRlcmZhY2VOYW1lKSBvciAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHVmlld1NwZWMiKSB7CiAgICAg
ICAgICMgQ29udmVydCBmcm9tIGFic3RyYWN0IFNWR1Byb3BlcnR5IHRvIHJlYWwgdHlwZSwgc28g
dGhlIHJpZ2h0IHRvSlMoKSBtZXRob2QgY2FuIGJlIGludm9rZWQuCiAgICAgICAgICR2YWx1ZSA9
ICJzdGF0aWNfY2FzdDwiIC4gR2V0TmF0aXZlVHlwZSgkdHlwZSkgLiAiPigkdmFsdWUpIjsKICAg
ICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUp
IGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykgewpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyAr
MjUxLDcgQEAgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR01hcmtlckVsZW1lbgogCiBTVkdN
YXJrZXJPcmllbnRUeXBlJiBTVkdNYXJrZXJFbGVtZW50OjpvcmllbnRUeXBlKCkgY29uc3QKIHsK
LSAgICBpZiAoU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJv
cGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJUeXBlLCBTVkdBbmltYXRlZEVudW1lcmF0aW9u
Pih0aGlzLCBvcmllbnRUeXBlUHJvcGVydHlJbmZvKCkpKSB7CisgICAgaWYgKGF1dG8gd3JhcHBl
ciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJUeXBlLCBTVkdB
bmltYXRlZEVudW1lcmF0aW9uPih0aGlzLCBvcmllbnRUeXBlUHJvcGVydHlJbmZvKCkpKSB7CiAg
ICAgICAgIGlmICh3cmFwcGVyLT5pc0FuaW1hdGluZygpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
d3JhcHBlci0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKSA8IFNWR01hcmtlck9yaWVudE1heCk7CiAg
ICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTVkdNYXJrZXJPcmllbnRUeXBlJj4o
d3JhcHBlci0+Y3VycmVudEFuaW1hdGVkVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwxMSArMjk0LDExIEBA
IHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4KIAogY29uc3QgU1ZHUGF0
aEJ5dGVTdHJlYW0mIFNWR1BhdGhFbGVtZW50OjpwYXRoQnl0ZVN0cmVhbSgpIGNvbnN0CiB7Ci0g
ICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSogcHJvcGVydHkgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojps
b29rdXBXcmFwcGVyPFNWR1BhdGhFbGVtZW50LCBTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmPih0aGlzLCBkUHJvcGVydHlJbmZvKCkpOworICAgIGF1dG8gcHJvcGVydHkgPSBT
VkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BhdGhFbGVtZW50LCBTVkdBbmlt
YXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPih0aGlzLCBkUHJvcGVydHlJbmZvKCkpOwog
ICAgIGlmICghcHJvcGVydHkgfHwgIXByb3BlcnR5LT5pc0FuaW1hdGluZygpKQogICAgICAgICBy
ZXR1cm4gbV9wYXRoQnl0ZVN0cmVhbTsKICAgICAKLSAgICBTVkdQYXRoQnl0ZVN0cmVhbSogYW5p
bWF0ZWRQYXRoQnl0ZVN0cmVhbSA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmYqPihwcm9wZXJ0eSktPmFuaW1hdGVkUGF0aEJ5dGVTdHJlYW0oKTsKKyAg
ICBTVkdQYXRoQnl0ZVN0cmVhbSogYW5pbWF0ZWRQYXRoQnl0ZVN0cmVhbSA9IHN0YXRpY19jYXN0
PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqPihwcm9wZXJ0eS5nZXQoKSkt
PmFuaW1hdGVkUGF0aEJ5dGVTdHJlYW0oKTsKICAgICBpZiAoIWFuaW1hdGVkUGF0aEJ5dGVTdHJl
YW0pCiAgICAgICAgIHJldHVybiBtX3BhdGhCeXRlU3RyZWFtOwogCkBAIC0zMTAsNyArMzEwLDcg
QEAgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhFbGVtZW50OgogICAgIEFTU0VSVChj
b250ZXh0RWxlbWVudCk7CiAgICAgU1ZHUGF0aEVsZW1lbnQmIG93bmVyVHlwZSA9IGRvd25jYXN0
PFNWR1BhdGhFbGVtZW50PigqY29udGV4dEVsZW1lbnQpOwogCi0gICAgaWYgKFNWR0FuaW1hdGVk
UHJvcGVydHkqIHByb3BlcnR5ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxT
VkdQYXRoRWxlbWVudCwgU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4oJm93
bmVyVHlwZSwgZFByb3BlcnR5SW5mbygpKSkKKyAgICBpZiAoYXV0byBwcm9wZXJ0eSA9IFNWR0Fu
aW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8U1ZHUGF0aEVsZW1lbnQsIFNWR0FuaW1hdGVk
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KCZvd25lclR5cGUsIGRQcm9wZXJ0eUluZm8oKSkp
CiAgICAgICAgIHJldHVybiAqcHJvcGVydHk7CiAKICAgICAvLyBCdWlsZCBpbml0aWFsIFNWR1Bh
dGhTZWdMaXN0LgpAQCAtMzI5LDI5ICszMjksMjkgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3lu
Y2hyb25pemVEKFNWR0VsZQogICAgIG93bmVyVHlwZS5tX3BhdGhTZWdMaXN0LnN5bmNocm9uaXpl
KCZvd25lclR5cGUsIGRQcm9wZXJ0eUluZm8oKS0+YXR0cmlidXRlTmFtZSwgb3duZXJUeXBlLm1f
cGF0aFNlZ0xpc3QudmFsdWUudmFsdWVBc1N0cmluZygpKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdCgpCitSZWZQdHI8U1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdCgp
CiB7CiAgICAgbV9wYXRoU2VnTGlzdC5zaG91bGRTeW5jaHJvbml6ZSA9IHRydWU7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxvb2t1
cE9yQ3JlYXRlRFdyYXBwZXIodGhpcykpLT5iYXNlVmFsKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNyZWF0ZURX
cmFwcGVyKHRoaXMpKS0+YmFzZVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQcm9w
ZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50Ojpub3JtYWxpemVkUGF0aFNlZ0xpc3QoKQorUmVm
UHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBTVkdQYXRoRWxlbWVudDo6bm9ybWFs
aXplZFBhdGhTZWdMaXN0KCkKIHsKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDEyIC0gSW1wbGVtZW50IG5vcm1hbGl6ZWQgcGF0aCBzZWdt
ZW50IGxpc3RzIQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1TVkdQ
YXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiogU1ZHUGF0aEVsZW1lbnQ6OmFuaW1hdGVkUGF0aFNl
Z0xpc3QoKQorUmVmUHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBTVkdQYXRoRWxl
bWVudDo6YW5pbWF0ZWRQYXRoU2VnTGlzdCgpCiB7CiAgICAgbV9wYXRoU2VnTGlzdC5zaG91bGRT
eW5jaHJvbml6ZSA9IHRydWU7CiAgICAgbV9pc0FuaW1WYWxPYnNlcnZlZCA9IHRydWU7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxv
b2t1cE9yQ3JlYXRlRFdyYXBwZXIodGhpcykpLT5hbmltVmFsKCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNyZWF0
ZURXcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2Vn
TGlzdCgpCitSZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IFNWR1BhdGhFbGVt
ZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpCiB7CiAgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQxMiAtIEltcGxlbWVudCBu
b3JtYWxpemVkIHBhdGggc2VnbWVudCBsaXN0cyEKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogdm9pZCBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3RDaGFuZ2VkKFNW
R1BhdGhTZWdSb2xlIHJvbGUsIExpc3RNb2RpZmljYXRpb24gbGlzdE1vZGlmaWNhdGlvbikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxOTYyNTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
MTAgKzgyLDEwIEBAIHB1YmxpYzoKICAgICBSZWY8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWw+IGNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKGZsb2F0
IHgsIGZsb2F0IHksIFNWR1BhdGhTZWdSb2xlID0gUGF0aFNlZ1VuZGVmaW5lZFJvbGUpOwogCiAg
ICAgLy8gVXNlZCBpbiB0aGUgYmluZGluZ3Mgb25seS4KLSAgICBTVkdQYXRoU2VnTGlzdFByb3Bl
cnR5VGVhck9mZiogcGF0aFNlZ0xpc3QoKTsKLSAgICBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVh
ck9mZiogYW5pbWF0ZWRQYXRoU2VnTGlzdCgpOwotICAgIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlU
ZWFyT2ZmKiBub3JtYWxpemVkUGF0aFNlZ0xpc3QoKTsKLSAgICBTVkdQYXRoU2VnTGlzdFByb3Bl
cnR5VGVhck9mZiogYW5pbWF0ZWROb3JtYWxpemVkUGF0aFNlZ0xpc3QoKTsKKyAgICBSZWZQdHI8
U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IHBhdGhTZWdMaXN0KCk7CisgICAgUmVmUHRy
PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBhbmltYXRlZFBhdGhTZWdMaXN0KCk7Cisg
ICAgUmVmUHRyPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPiBub3JtYWxpemVkUGF0aFNl
Z0xpc3QoKTsKKyAgICBSZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IGFuaW1h
dGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCk7CiAKICAgICBjb25zdCBTVkdQYXRoQnl0ZVN0cmVh
bSYgcGF0aEJ5dGVTdHJlYW0oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTZWdXaXRoQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU2VnV2l0aENvbnRleHQuaAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhTZWdXaXRoQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSog
YW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0CisgICAgUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+
IGFuaW1hdGVkUHJvcGVydHkoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2VsZW1lbnQp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bv
bHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvbHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOCBAQCB2b2lkIFNW
R1BvbHlFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zCiAgICAgICAgIGlmICghcG9pbnRzTGlz
dEZyb21TVkdEYXRhKG5ld0xpc3QsIHZhbHVlKSkKICAgICAgICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgcG9pbnRzPVwi
IiArIHZhbHVlICsgIlwiIik7CiAKLSAgICAgICAgaWYgKFNWR0FuaW1hdGVkUHJvcGVydHkqIHdy
YXBwZXIgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFNWR1BvbHlFbGVtZW50
LCBTVkdBbmltYXRlZFBvaW50TGlzdD4odGhpcywgcG9pbnRzUHJvcGVydHlJbmZvKCkpKQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludExpc3QqPih3cmFwcGVyKS0+ZGV0
YWNoTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKKyAgICAgICAgaWYgKGF1dG8gd3JhcHBl
ciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8U1ZHUG9seUVsZW1lbnQsIFNW
R0FuaW1hdGVkUG9pbnRMaXN0Pih0aGlzLCBwb2ludHNQcm9wZXJ0eUluZm8oKSkpCisgICAgICAg
ICAgICBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pih3cmFwcGVyKS0+
ZGV0YWNoTGlzdFdyYXBwZXJzKG5ld0xpc3Quc2l6ZSgpKTsKIAogICAgICAgICBtX3BvaW50cy52
YWx1ZSA9IG5ld0xpc3Q7CiAgICAgICAgIHJldHVybjsKQEAgLTExOCwxNiArMTE4LDE2IEBAIFJl
ZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdQb2x5RWxlbWVudDoKICAgICAgICAgKCZvd25lclR5
cGUsIHBvaW50c1Byb3BlcnR5SW5mbygpLCBvd25lclR5cGUubV9wb2ludHMudmFsdWUpOwogfQog
Ci1TVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4qIFNWR1BvbHlFbGVtZW50Ojpw
b2ludHMoKQorUmVmUHRyPFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pj4gU1ZH
UG9seUVsZW1lbnQ6OnBvaW50cygpCiB7CiAgICAgbV9wb2ludHMuc2hvdWxkU3luY2hyb25pemUg
PSB0cnVlOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNW
R1BvaW50TGlzdD4qPihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludExpc3Q+
KGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcih0aGlzKSktPmJhc2VWYWwoKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pio+KHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBvaW50TGlzdD4obG9va3VwT3JDcmVhdGVQ
b2ludHNXcmFwcGVyKHRoaXMpKS0+YmFzZVZhbCgpLmdldCgpKTsKIH0KIAotU1ZHTGlzdFByb3Bl
cnR5VGVhck9mZjxTVkdQb2ludExpc3Q+KiBTVkdQb2x5RWxlbWVudDo6YW5pbWF0ZWRQb2ludHMo
KQorUmVmUHRyPFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pj4gU1ZHUG9seUVs
ZW1lbnQ6OmFuaW1hdGVkUG9pbnRzKCkKIHsKICAgICBtX3BvaW50cy5zaG91bGRTeW5jaHJvbml6
ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8
U1ZHUG9pbnRMaXN0Pio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBvaW50TGlz
dD4obG9va3VwT3JDcmVhdGVQb2ludHNXcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQb2ludExpc3Q+Kj4o
c3RhdGljX3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pihsb29rdXBPckNyZWF0
ZVBvaW50c1dyYXBwZXIodGhpcykpLT5hbmltVmFsKCkuZ2V0KCkpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMx
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdQb2x5RWxlbWVudCA6IHB1Ymxp
YyBTVkdHcmFwaGljc0VsZW1lbnQsIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
IHsKIHB1YmxpYzoKLSAgICBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4qIHBv
aW50cygpOwotICAgIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0PiogYW5pbWF0
ZWRQb2ludHMoKTsKKyAgICBSZWZQdHI8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQb2ludExp
c3Q+PiBwb2ludHMoKTsKKyAgICBSZWZQdHI8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQb2lu
dExpc3Q+PiBhbmltYXRlZFBvaW50cygpOwogCiAgICAgU1ZHUG9pbnRMaXN0JiBwb2ludExpc3Qo
KSBjb25zdCB7IHJldHVybiBtX3BvaW50cy52YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsOCBAQCB2b2lkIFNW
R1ZpZXdTcGVjOjpzZXRUcmFuc2Zvcm1TdHJpbmcoY29uCiAgICAgU1ZHVHJhbnNmb3JtTGlzdCBu
ZXdMaXN0OwogICAgIG5ld0xpc3QucGFyc2UodHJhbnNmb3JtKTsKIAotICAgIGlmIChTVkdBbmlt
YXRlZFByb3BlcnR5KiB3cmFwcGVyID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBl
cjxTVkdFbGVtZW50LCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KG1fY29udGV4dEVsZW1lbnQs
IHRyYW5zZm9ybVByb3BlcnR5SW5mbygpKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0Kj4od3JhcHBlciktPmRldGFjaExpc3RXcmFwcGVycyhuZXdMaXN0LnNp
emUoKSk7CisgICAgaWYgKGF1dG8gd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1
cFdyYXBwZXI8U1ZHRWxlbWVudCwgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX2NvbnRleHRF
bGVtZW50LCB0cmFuc2Zvcm1Qcm9wZXJ0eUluZm8oKSkpCisgICAgICAgIHN0YXRpY19wb2ludGVy
X2Nhc3Q8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0Pih3cmFwcGVyKS0+ZGV0YWNoTGlzdFdyYXBw
ZXJzKG5ld0xpc3Quc2l6ZSgpKTsKIAogICAgIG1fdHJhbnNmb3JtID0gbmV3TGlzdDsKIH0KQEAg
LTE0NSwxMiArMTQ1LDEyIEBAIFNWR0VsZW1lbnQqIFNWR1ZpZXdTcGVjOjp2aWV3VGFyZ2V0KCkg
Y28KICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCk7CiB9CiAKLVNWR1Ry
YW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYqIFNWR1ZpZXdTcGVjOjp0cmFuc2Zvcm0oKQorUmVm
UHRyPFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY+IFNWR1ZpZXdTcGVjOjp0cmFuc2Zv
cm0oKQogewogICAgIGlmICghbV9jb250ZXh0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgLy8gUmV0dXJuIHRoZSBhbmltVmFsIGhlcmUsIGFzIGl0cyByZWFkb25seSBieSBk
ZWZhdWx0IC0gd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgaGVyZS4KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KGxvb2t1cE9yQ3JlYXRlVHJhbnNm
b3JtV3JhcHBlcih0aGlzKSktPmFuaW1WYWwoKSk7CisgICAgcmV0dXJuIHN0YXRpY19wb2ludGVy
X2Nhc3Q8U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZj4oc3RhdGljX3JlZmVyZW5jZV9j
YXN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4obG9va3VwT3JDcmVhdGVUcmFuc2Zvcm1XcmFw
cGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsKIH0KIAogUmVmUHRyPFNWR0FuaW1hdGVkUmVjdD4gU1ZH
Vmlld1NwZWM6OnZpZXdCb3hBbmltYXRlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Vmlld1NwZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMu
aAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRD
b250ZXh0RWxlbWVudCgpIHsgbV9jb250ZXh0RWxlbWVudCA9IG51bGxwdHI7IH0KIAogICAgIC8v
IEN1c3RvbSBub24tYW5pbWF0ZWQgJ3RyYW5zZm9ybScgcHJvcGVydHkuCi0gICAgU1ZHVHJhbnNm
b3JtTGlzdFByb3BlcnR5VGVhck9mZiogdHJhbnNmb3JtKCk7CisgICAgUmVmUHRyPFNWR1RyYW5z
Zm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY+IHRyYW5zZm9ybSgpOwogICAgIFNWR1RyYW5zZm9ybUxp
c3QgdHJhbnNmb3JtQmFzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAog
ICAgIC8vIEN1c3RvbSBhbmltYXRlZCAndmlld0JveCcgcHJvcGVydHkuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExp
c3RQcm9wZXJ0eVRlYXJPZmYuaAkocmV2aXNpb24gMTk2MjU0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDM1ICszOSw0OSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTVkdMaXN0UHJv
cGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4gTGlzdFByb3BlcnR5VGVhck9mZjsKICAgICB0eXBl
ZGVmIFByb3BlcnR5VHlwZSBDb250ZW50VHlwZTsKIAotICAgIHZpcnR1YWwgTGlzdFByb3BlcnR5
KiBiYXNlVmFsKCkKKyAgICB2aXJ0dWFsIFJlZlB0cjxMaXN0UHJvcGVydHk+IGJhc2VWYWwoKQog
ICAgIHsKLSAgICAgICAgaWYgKCFtX2Jhc2VWYWwpCi0gICAgICAgICAgICBtX2Jhc2VWYWwgPSBM
aXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQmFzZVZhbFJvbGUsIG1fdmFsdWVzLCBt
X3dyYXBwZXJzKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExpc3RQcm9wZXJ0eSo+KG1f
YmFzZVZhbC5nZXQoKSk7CisgICAgICAgIGlmIChtX2Jhc2VWYWwpCisgICAgICAgICAgICByZXR1
cm4gbV9iYXNlVmFsOworCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBMaXN0UHJvcGVydHlUZWFy
T2ZmOjpjcmVhdGUodGhpcywgQmFzZVZhbFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKKyAg
ICAgICAgbV9iYXNlVmFsID0gcHJvcGVydHkucHRyKCk7CisgICAgICAgIHJldHVybiBXVEZNb3Zl
KHByb3BlcnR5KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxMaXN0UHJvcGVydHk+IGFu
aW1WYWwoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYW5pbVZhbCkKKyAgICAgICAgICAgIHJldHVy
biBtX2FuaW1WYWw7CisKKyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IExpc3RQcm9wZXJ0eVRlYXJP
ZmY6OmNyZWF0ZSh0aGlzLCBBbmltVmFsUm9sZSwgbV92YWx1ZXMsIG1fd3JhcHBlcnMpOworICAg
ICAgICBtX2FuaW1WYWwgPSBwcm9wZXJ0eS5wdHIoKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
cHJvcGVydHkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgTGlzdFByb3BlcnR5KiBhbmltVmFsKCkK
KyAgICB2b2lkIHByb3BlcnR5V2lsbEJlRGVsZXRlZChjb25zdCBMaXN0UHJvcGVydHkmIHByb3Bl
cnR5KQogICAgIHsKLSAgICAgICAgaWYgKCFtX2FuaW1WYWwpCi0gICAgICAgICAgICBtX2FuaW1W
YWwgPSBMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJvbGUsIG1fdmFs
dWVzLCBtX3dyYXBwZXJzKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExpc3RQcm9wZXJ0
eSo+KG1fYW5pbVZhbC5nZXQoKSk7CisgICAgICAgIGlmICgmcHJvcGVydHkgPT0gbV9iYXNlVmFs
KQorICAgICAgICAgICAgbV9iYXNlVmFsID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSBpZiAoJnBy
b3BlcnR5ID09IG1fYW5pbVZhbCkKKyAgICAgICAgICAgIG1fYW5pbVZhbCA9IG51bGxwdHI7CiAg
ICAgfQogCiAgICAgdmlydHVhbCBib29sIGlzQW5pbWF0ZWRMaXN0VGVhck9mZigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGludCBmaW5kSXRlbShTVkdQcm9wZXJ0eSog
cHJvcGVydHkpIGNvbnN0CisgICAgaW50IGZpbmRJdGVtKFNWR1Byb3BlcnR5KiBwcm9wZXJ0eSkK
ICAgICB7CiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGV2ZXIgYmUgY2FsbGVkIGZvciBvdXIgYmFz
ZVZhbCwgYXMgYW5pbVZhbCBjYW4ndCBtb2RpZnkgdGhlIGxpc3QuCiAgICAgICAgIC8vIEl0J3Mg
c2FmZSB0byBjYXN0IHRvIExpc3RQcm9wZXJ0eVRlYXJPZmYgaGVyZSBhcyBhbGwgY2xhc3NlcyBp
bmhlcml0aW5nIGZyb20gdXMgc3VwcGx5IHRoZWlyIG93biByZW1vdmVJdGVtRnJvbUxpc3QoKSBt
ZXRob2QuCiAgICAgICAgIHR5cGVkZWYgU1ZHUHJvcGVydHlUZWFyT2ZmPHR5cGVuYW1lIFNWR1By
b3BlcnR5VHJhaXRzPFByb3BlcnR5VHlwZT46Okxpc3RJdGVtVHlwZT4gTGlzdEl0ZW1UZWFyT2Zm
OwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TGlzdFByb3BlcnR5VGVhck9mZio+KG1fYmFz
ZVZhbC5nZXQoKSktPmZpbmRJdGVtKHN0YXRpY19jYXN0PExpc3RJdGVtVGVhck9mZio+KHByb3Bl
cnR5KSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PExpc3RQcm9wZXJ0eVRl
YXJPZmY+KGJhc2VWYWwoKSktPmZpbmRJdGVtKHN0YXRpY19jYXN0PExpc3RJdGVtVGVhck9mZio+
KHByb3BlcnR5KSk7CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmVJdGVtRnJvbUxpc3Qoc2l6ZV90
IGl0ZW1JbmRleCwgYm9vbCBzaG91bGRTeW5jaHJvbml6ZVdyYXBwZXJzKQogICAgIHsKICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgZXZlciBiZSBjYWxsZWQgZm9yIG91ciBiYXNlVmFsLCBhcyBhbmlt
VmFsIGNhbid0IG1vZGlmeSB0aGUgbGlzdC4KICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNhc3Qg
dG8gTGlzdFByb3BlcnR5VGVhck9mZiBoZXJlIGFzIGFsbCBjbGFzc2VzIGluaGVyaXRpbmcgZnJv
bSB1cyBzdXBwbHkgdGhlaXIgb3duIHJlbW92ZUl0ZW1Gcm9tTGlzdCgpIG1ldGhvZC4KLSAgICAg
ICAgc3RhdGljX2Nhc3Q8TGlzdFByb3BlcnR5VGVhck9mZio+KG1fYmFzZVZhbC5nZXQoKSktPnJl
bW92ZUl0ZW1Gcm9tTGlzdChpdGVtSW5kZXgsIHNob3VsZFN5bmNocm9uaXplV3JhcHBlcnMpOwor
ICAgICAgICBzdGF0aWNfcG9pbnRlcl9jYXN0PExpc3RQcm9wZXJ0eVRlYXJPZmY+KGJhc2VWYWwo
KSktPnJlbW92ZUl0ZW1Gcm9tTGlzdChpdGVtSW5kZXgsIHNob3VsZFN5bmNocm9uaXplV3JhcHBl
cnMpOwogICAgIH0KIAogICAgIHZvaWQgZGV0YWNoTGlzdFdyYXBwZXJzKHVuc2lnbmVkIG5ld0xp
c3RTaXplKQpAQCAtNzgsOCArOTIsOCBAQCBwdWJsaWM6CiAgICAgUHJvcGVydHlUeXBlJiBjdXJy
ZW50QW5pbWF0ZWRWYWx1ZSgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9pc0FuaW1hdGluZyk7
Ci0gICAgICAgIEFTU0VSVChtX2FuaW1WYWwpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TGlzdFByb3BlcnR5Kj4obV9hbmltVmFsLmdldCgpKS0+dmFsdWVzKCk7CisgICAgICAgIEFTU0VS
VChtX2FuaW1hdGluZ0FuaW1WYWwpOworICAgICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2Fz
dDxMaXN0UHJvcGVydHk+KG1fYW5pbWF0aW5nQW5pbVZhbCktPnZhbHVlcygpOwogICAgIH0KIAog
ICAgIGNvbnN0IFByb3BlcnR5VHlwZSYgY3VycmVudEJhc2VWYWx1ZSgpIGNvbnN0CkBAIC05MCw2
ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVkKFByb3BlcnR5VHlw
ZSogbmV3QW5pbVZhbCwgYm9vbCBzaG91bGRPd25WYWx1ZXMgPSBmYWxzZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVCghbV9pc0FuaW1hdGluZyk7CisgICAgICAgIEFTU0VSVCghbV9hbmltYXRpbmdB
bmltVmFsKTsKICAgICAgICAgQVNTRVJUKG5ld0FuaW1WYWwpOwogICAgICAgICBBU1NFUlQobV92
YWx1ZXMuc2l6ZSgpID09IG1fd3JhcHBlcnMuc2l6ZSgpKTsKICAgICAgICAgQVNTRVJUKG1fYW5p
bWF0ZWRXcmFwcGVycy5pc0VtcHR5KCkpOwpAQCAtOTgsNTcgKzExMyw1NSBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmICghbmV3QW5pbVZhbC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgbV9hbmltYXRl
ZFdyYXBwZXJzLmZpbGwoMCwgbmV3QW5pbVZhbC0+c2l6ZSgpKTsKIAotICAgICAgICBMaXN0UHJv
cGVydHkqIGFuaW1WYWwgPSBzdGF0aWNfY2FzdDxMaXN0UHJvcGVydHkqPih0aGlzLT5hbmltVmFs
KCkpOwotICAgICAgICBhbmltVmFsLT5zZXRWYWx1ZXNBbmRXcmFwcGVycyhuZXdBbmltVmFsLCAm
bV9hbmltYXRlZFdyYXBwZXJzLCBzaG91bGRPd25WYWx1ZXMpOwotICAgICAgICBBU1NFUlQoYW5p
bVZhbC0+dmFsdWVzKCkuc2l6ZSgpID09IGFuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpKTsKLSAg
ICAgICAgQVNTRVJUKGFuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpID09IG1fYW5pbWF0ZWRXcmFw
cGVycy5zaXplKCkpOworICAgICAgICBtX2FuaW1hdGluZ0FuaW1WYWwgPSBhbmltVmFsKCk7Cisg
ICAgICAgIG1fYW5pbWF0aW5nQW5pbVZhbC0+c2V0VmFsdWVzQW5kV3JhcHBlcnMobmV3QW5pbVZh
bCwgJm1fYW5pbWF0ZWRXcmFwcGVycywgc2hvdWxkT3duVmFsdWVzKTsKKyAgICAgICAgQVNTRVJU
KG1fYW5pbWF0aW5nQW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpID09IG1fYW5pbWF0aW5nQW5pbVZh
bC0+d3JhcHBlcnMoKS5zaXplKCkpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFs
LT53cmFwcGVycygpLnNpemUoKSA9PSBtX2FuaW1hdGVkV3JhcHBlcnMuc2l6ZSgpKTsKICAgICAg
ICAgbV9pc0FuaW1hdGluZyA9IHRydWU7CiAgICAgfQogCiAgICAgdm9pZCBhbmltYXRpb25FbmRl
ZCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9pc0FuaW1hdGluZyk7Ci0gICAgICAgIEFTU0VS
VChtX2FuaW1WYWwpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFsKTsKICAgICAg
ICAgQVNTRVJUKG1fdmFsdWVzLnNpemUoKSA9PSBtX3dyYXBwZXJzLnNpemUoKSk7CiAKLSAgICAg
ICAgTGlzdFByb3BlcnR5KiBhbmltVmFsID0gc3RhdGljX2Nhc3Q8TGlzdFByb3BlcnR5Kj4obV9h
bmltVmFsLmdldCgpKTsKLSAgICAgICAgQVNTRVJUKGFuaW1WYWwtPnZhbHVlcygpLnNpemUoKSA9
PSBhbmltVmFsLT53cmFwcGVycygpLnNpemUoKSk7Ci0gICAgICAgIEFTU0VSVChhbmltVmFsLT53
cmFwcGVycygpLnNpemUoKSA9PSBtX2FuaW1hdGVkV3JhcHBlcnMuc2l6ZSgpKTsKLQotICAgICAg
ICBhbmltVmFsLT5zZXRWYWx1ZXNBbmRXcmFwcGVycygmbV92YWx1ZXMsICZtX3dyYXBwZXJzLCBm
YWxzZSk7Ci0gICAgICAgIEFTU0VSVChhbmltVmFsLT52YWx1ZXMoKS5zaXplKCkgPT0gYW5pbVZh
bC0+d3JhcHBlcnMoKS5zaXplKCkpOwotICAgICAgICBBU1NFUlQoYW5pbVZhbC0+d3JhcHBlcnMo
KS5zaXplKCkgPT0gbV93cmFwcGVycy5zaXplKCkpOworICAgICAgICBBU1NFUlQobV9hbmltYXRp
bmdBbmltVmFsLT52YWx1ZXMoKS5zaXplKCkgPT0gbV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVy
cygpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVChtX2FuaW1hdGluZ0FuaW1WYWwtPndyYXBwZXJz
KCkuc2l6ZSgpID09IG1fYW5pbWF0ZWRXcmFwcGVycy5zaXplKCkpOworCisgICAgICAgIG1fYW5p
bWF0aW5nQW5pbVZhbC0+c2V0VmFsdWVzQW5kV3JhcHBlcnMoJm1fdmFsdWVzLCAmbV93cmFwcGVy
cywgZmFsc2UpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFsLT52YWx1ZXMoKS5z
aXplKCkgPT0gbV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVycygpLnNpemUoKSk7CisgICAgICAg
IEFTU0VSVChtX2FuaW1hdGluZ0FuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpID09IG1fd3JhcHBl
cnMuc2l6ZSgpKTsKIAogICAgICAgICBtX2FuaW1hdGVkV3JhcHBlcnMuY2xlYXIoKTsKKyAgICAg
ICAgbV9hbmltYXRpbmdBbmltVmFsID0gbnVsbHB0cjsKICAgICAgICAgbV9pc0FuaW1hdGluZyA9
IGZhbHNlOwogICAgIH0KIAogICAgIHZvaWQgc3luY2hyb25pemVXcmFwcGVyc0lmTmVlZGVkKCkK
ICAgICB7CisgICAgICAgIEFTU0VSVChtX2lzQW5pbWF0aW5nKTsKKyAgICAgICAgQVNTRVJUKG1f
YW5pbWF0aW5nQW5pbVZhbCk7CisKICAgICAgICAgLy8gRXZlbnR1YWxseSB0aGUgd3JhcHBlciBs
aXN0IG5lZWRzIHN5bmNocm9uaXphdGlvbiBiZWNhdXNlIGFueSBTVkdBbmltYXRlTGVuZ3RoTGlz
dDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSgpIGNhbGwgbWF5CiAgICAgICAgIC8vIG11dGF0ZSB0
aGUgbGVuZ3RoIG9mIG91ciB2YWx1ZXMoKSBsaXN0LCBhbmQgdGh1cyB0aGUgd3JhcHBlcigpIGNh
Y2hlIG5lZWRzIHN5bmNocm9uaXphdGlvbiwgdG8gaGF2ZSB0aGUgc2FtZSBzaXplLgogICAgICAg
ICAvLyBBbHNvIGV4aXN0aW5nIHdyYXBwZXJzIHdoaWNoIHBvaW50IGRpcmVjdGx5IGF0IGVsZW1l
bnRzIGluIHRoZSBleGlzdGluZyBTVkdMZW5ndGhMaXN0IGhhdmUgdG8gYmUgZGV0YWNoZWQgKHNv
IGEgY29weQogICAgICAgICAvLyBvZiB0aGVtIGlzIGNyZWF0ZWQsIHNvIGV4aXN0aW5nIGFuaW1W
YWwgdmFyaWFibGVzIGluIEpTIGFyZSBrZXB0LWFsaXZlKS4gSWYgd2UnZCBkZXRhY2ggdGhlbSBs
YXRlciB0aGUgdW5kZXJseWluZwogICAgICAgICAvLyBTVkdMZW5ndGhMaXN0IHdhcyBhbHJlYWR5
IG11dGF0ZWQsIGFuZCBvdXIgbGlzdCBpdGVtIHdyYXBwZXIgdGVhciBvZmZzIHdvdWxkIHBvaW50
IG5vd2hlcmUuIEFzc2VydGlvbnMgd291bGQgZmlyZS4KLSAgICAgICAgTGlzdFByb3BlcnR5KiBh
bmltVmFsID0gc3RhdGljX2Nhc3Q8TGlzdFByb3BlcnR5Kj4obV9hbmltVmFsLmdldCgpKTsKLSAg
ICAgICAgYW5pbVZhbC0+ZGV0YWNoTGlzdFdyYXBwZXJzKGFuaW1WYWwtPnZhbHVlcygpLnNpemUo
KSk7CisgICAgICAgIG1fYW5pbWF0aW5nQW5pbVZhbC0+ZGV0YWNoTGlzdFdyYXBwZXJzKG1fYW5p
bWF0aW5nQW5pbVZhbC0+dmFsdWVzKCkuc2l6ZSgpKTsKIAotICAgICAgICBBU1NFUlQoYW5pbVZh
bC0+dmFsdWVzKCkuc2l6ZSgpID09IGFuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpKTsKLSAgICAg
ICAgQVNTRVJUKGFuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpID09IG1fYW5pbWF0ZWRXcmFwcGVy
cy5zaXplKCkpOworICAgICAgICBBU1NFUlQobV9hbmltYXRpbmdBbmltVmFsLT52YWx1ZXMoKS5z
aXplKCkgPT0gbV9hbmltYXRpbmdBbmltVmFsLT53cmFwcGVycygpLnNpemUoKSk7CisgICAgICAg
IEFTU0VSVChtX2FuaW1hdGluZ0FuaW1WYWwtPndyYXBwZXJzKCkuc2l6ZSgpID09IG1fYW5pbWF0
ZWRXcmFwcGVycy5zaXplKCkpOwogICAgIH0KIAogICAgIHZvaWQgYW5pbVZhbFdpbGxDaGFuZ2Uo
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1faXNBbmltYXRpbmcpOwotICAgICAgICBBU1NFUlQo
bV9hbmltVmFsKTsKICAgICAgICAgQVNTRVJUKG1fdmFsdWVzLnNpemUoKSA9PSBtX3dyYXBwZXJz
LnNpemUoKSk7CiAgICAgICAgIHN5bmNocm9uaXplV3JhcHBlcnNJZk5lZWRlZCgpOwogICAgIH0K
IAogICAgIHZvaWQgYW5pbVZhbERpZENoYW5nZSgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9p
c0FuaW1hdGluZyk7Ci0gICAgICAgIEFTU0VSVChtX2FuaW1WYWwpOwogICAgICAgICBBU1NFUlQo
bV92YWx1ZXMuc2l6ZSgpID09IG1fd3JhcHBlcnMuc2l6ZSgpKTsKICAgICAgICAgc3luY2hyb25p
emVXcmFwcGVyc0lmTmVlZGVkKCk7CiAgICAgfQpAQCAtMTczLDggKzE4NiwxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgTGlzdFdyYXBwZXJDYWNoZSBtX3dyYXBwZXJzOwogICAgIExpc3RXcmFwcGVyQ2Fj
aGUgbV9hbmltYXRlZFdyYXBwZXJzOwogCi0gICAgUmVmUHRyPFNWR1Byb3BlcnR5PiBtX2Jhc2VW
YWw7Ci0gICAgUmVmUHRyPFNWR1Byb3BlcnR5PiBtX2FuaW1WYWw7CisgICAgLy8gQ2FjaGUgdGhl
IHJhdyBwb2ludGVyIGJ1dCByZXR1cm4gYSBSZWZQdHI8Pi4gVGhpcyB3aWxsIGJyZWFrIHRoZSBj
eWNsaWMgcmVmZXJlbmNlCisgICAgLy8gYmV0d2VlbiBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmIGFu
ZCBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYgb25jZSB0aGUgcHJvcGVydHkKKyAgICAv
LyBwb2ludGVyIGlzIG5vdCBuZWVkZWQuCisgICAgTGlzdFByb3BlcnR5KiBtX2Jhc2VWYWwgeyBu
dWxscHRyIH07CisgICAgTGlzdFByb3BlcnR5KiBtX2FuaW1WYWwgeyBudWxscHRyIH07CisKKyAg
ICBSZWZQdHI8TGlzdFByb3BlcnR5PiBtX2FuaW1hdGluZ0FuaW1WYWw7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJv
cGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lvbiAxOTYy
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBhdGhTZWdM
aXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMyICszMSwzNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmYgOiBwdWJsaWMgU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BhdGhT
ZWdMaXN0PiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBTVkdMaXN0UHJvcGVydHk8U1ZHUGF0aFNl
Z0xpc3Q+KiBiYXNlVmFsKCkgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIFJlZlB0cjxMaXN0UHJvcGVy
dHk+IGJhc2VWYWwoKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKCFtX2Jhc2VWYWwpCi0g
ICAgICAgICAgICBtX2Jhc2VWYWwgPSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6Y3Jl
YXRlKHRoaXMsIEJhc2VWYWxSb2xlLCBQYXRoU2VnVW5hbHRlcmVkUm9sZSwgbV92YWx1ZXMsIG1f
d3JhcHBlcnMpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5PFNW
R1BhdGhTZWdMaXN0Pio+KG1fYmFzZVZhbC5nZXQoKSk7CisgICAgICAgIGlmIChtX2Jhc2VWYWwp
CisgICAgICAgICAgICByZXR1cm4gbV9iYXNlVmFsOworCisgICAgICAgIGF1dG8gcHJvcGVydHkg
PSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKHRoaXMsIEJhc2VWYWxSb2xl
LCBQYXRoU2VnVW5hbHRlcmVkUm9sZSwgbV92YWx1ZXMsIG1fd3JhcHBlcnMpOworICAgICAgICBt
X2Jhc2VWYWwgPSBwcm9wZXJ0eS5wdHIoKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocHJvcGVy
dHkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgU1ZHTGlzdFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0
PiogYW5pbVZhbCgpIG92ZXJyaWRlCisgICAgdmlydHVhbCBSZWZQdHI8TGlzdFByb3BlcnR5PiBh
bmltVmFsKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmICghbV9hbmltVmFsKQotICAgICAg
ICAgICAgbV9hbmltVmFsID0gU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSh0
aGlzLCBBbmltVmFsUm9sZSwgUGF0aFNlZ1VuYWx0ZXJlZFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBw
ZXJzKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eTxTVkdQYXRo
U2VnTGlzdD4qPihtX2FuaW1WYWwuZ2V0KCkpOworICAgICAgICBpZiAobV9hbmltVmFsKQorICAg
ICAgICAgICAgcmV0dXJuIG1fYW5pbVZhbDsKKworICAgICAgICBhdXRvIHByb3BlcnR5ID0gU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSh0aGlzLCBBbmltVmFsUm9sZSwgUGF0
aFNlZ1VuYWx0ZXJlZFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKKyAgICAgICAgbV9hbmlt
VmFsID0gcHJvcGVydHkucHRyKCk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKHByb3BlcnR5KTsK
ICAgICB9CiAKLSAgICBpbnQgZmluZEl0ZW0oY29uc3QgUmVmUHRyPFNWR1BhdGhTZWc+JiBzZWdt
ZW50KSBjb25zdAorICAgIGludCBmaW5kSXRlbShjb25zdCBSZWZQdHI8U1ZHUGF0aFNlZz4mIHNl
Z21lbnQpCiAgICAgewogICAgICAgICAvLyBUaGlzIHNob3VsZCBldmVyIGJlIGNhbGxlZCBmb3Ig
b3VyIGJhc2VWYWwsIGFzIGFuaW1WYWwgY2FuJ3QgbW9kaWZ5IHRoZSBsaXN0LgotICAgICAgICBB
U1NFUlQobV9iYXNlVmFsKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdM
aXN0UHJvcGVydHlUZWFyT2ZmKj4obV9iYXNlVmFsLmdldCgpKS0+ZmluZEl0ZW0oc2VnbWVudCk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9m
Zio+KGJhc2VWYWwoKS5nZXQoKSktPmZpbmRJdGVtKHNlZ21lbnQpOwogICAgIH0KIAogICAgIHZv
aWQgcmVtb3ZlSXRlbUZyb21MaXN0KHNpemVfdCBpdGVtSW5kZXgsIGJvb2wgc2hvdWxkU3luY2hy
b25pemVXcmFwcGVycykKICAgICB7CiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGV2ZXIgYmUgY2Fs
bGVkIGZvciBvdXIgYmFzZVZhbCwgYXMgYW5pbVZhbCBjYW4ndCBtb2RpZnkgdGhlIGxpc3QuCi0g
ICAgICAgIEFTU0VSVChtX2Jhc2VWYWwpOwotICAgICAgICBzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZio+KG1fYmFzZVZhbC5nZXQoKSktPnJlbW92ZUl0ZW1Gcm9tTGlz
dChpdGVtSW5kZXgsIHNob3VsZFN5bmNocm9uaXplV3JhcHBlcnMpOworICAgICAgICBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KGJhc2VWYWwoKS5nZXQoKSktPnJl
bW92ZUl0ZW1Gcm9tTGlzdChpdGVtSW5kZXgsIHNob3VsZFN5bmNocm9uaXplV3JhcHBlcnMpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVh
ck9mZj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5
VHlwZSwgU1ZHUGF0aFNlZ0xpc3QmIHZhbHVlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgJKHJldmlzaW9uIDE5NjI1
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHku
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjIgKzQ4LDI3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5TVkdBbmltYXRlZFByb3BlcnR5KCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5
cGUsIHR5cGVuYW1lIFRlYXJPZmZUeXBlLCB0eXBlbmFtZSBQcm9wZXJ0eVR5cGU+Ci0gICAgc3Rh
dGljIFRlYXJPZmZUeXBlJiBsb29rdXBPckNyZWF0ZVdyYXBwZXIoT3duZXJUeXBlKiBlbGVtZW50
LCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8sIFByb3BlcnR5VHlwZSYgcHJvcGVydHkpCisg
ICAgc3RhdGljIFJlZjxUZWFyT2ZmVHlwZT4gbG9va3VwT3JDcmVhdGVXcmFwcGVyKE93bmVyVHlw
ZSogZWxlbWVudCwgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZvLCBQcm9wZXJ0eVR5cGUmIHBy
b3BlcnR5KQogICAgIHsKICAgICAgICAgQVNTRVJUKGluZm8pOwogICAgICAgICBTVkdBbmltYXRl
ZFByb3BlcnR5RGVzY3JpcHRpb24ga2V5KGVsZW1lbnQsIGluZm8tPnByb3BlcnR5SWRlbnRpZmll
cik7Ci0gICAgICAgIGF1dG8mIHNsb3QgPSBhbmltYXRlZFByb3BlcnR5Q2FjaGUoKS0+YWRkKGtl
eSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAoIXNsb3QpIHsKLSAgICAg
ICAgICAgIFJlZjxTVkdBbmltYXRlZFByb3BlcnR5PiB3cmFwcGVyID0gVGVhck9mZlR5cGU6OmNy
ZWF0ZShlbGVtZW50LCBpbmZvLT5hdHRyaWJ1dGVOYW1lLCBpbmZvLT5hbmltYXRlZFByb3BlcnR5
VHlwZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgaWYgKGluZm8tPmFuaW1hdGVkUHJvcGVydHlT
dGF0ZSA9PSBQcm9wZXJ0eUlzUmVhZE9ubHkpCi0gICAgICAgICAgICAgICAgd3JhcHBlci0+c2V0
SXNSZWFkT25seSgpOwotICAgICAgICAgICAgc2xvdCA9ICZ3cmFwcGVyLmxlYWtSZWYoKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVhck9mZlR5cGUmPigqc2xvdCk7
CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBhbmltYXRlZFByb3BlcnR5Q2FjaGUoKS0+YWRkKGtl
eSwgbnVsbHB0cik7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVhck9mZlR5cGUmPigqcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSk7CisKKyAgICAgICAgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IHdyYXBwZXIgPSBUZWFyT2Zm
VHlwZTo6Y3JlYXRlKGVsZW1lbnQsIGluZm8tPmF0dHJpYnV0ZU5hbWUsIGluZm8tPmFuaW1hdGVk
UHJvcGVydHlUeXBlLCBwcm9wZXJ0eSk7CisgICAgICAgIGlmIChpbmZvLT5hbmltYXRlZFByb3Bl
cnR5U3RhdGUgPT0gUHJvcGVydHlJc1JlYWRPbmx5KQorICAgICAgICAgICAgd3JhcHBlci0+c2V0
SXNSZWFkT25seSgpOworCisgICAgICAgIC8vIENhY2hlIHRoZSByYXcgcG9pbnRlciBidXQgcmV0
dXJuIGEgUmVmPD4uIFRoaXMgd2lsbCBicmVhayB0aGUgY3ljbGljIHJlZmVyZW5jZQorICAgICAg
ICAvLyBiZXR3ZWVuIFNWR0FuaW1hdGVkUHJvcGVydHkgYW5kIFNWR0VsZW1lbnQgb25jZSB0aGUg
cHJvcGVydHkgcG9pbnRlciBpcyBub3QgbmVlZGVkLgorICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gd3JhcHBlci5wdHIoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxUZWFyT2ZmVHlwZT4od3JhcHBlcik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3duZXJUeXBlLCB0eXBlbmFtZSBUZWFyT2ZmVHlwZT4KLSAgICBzdGF0aWMgVGVhck9mZlR5
cGUqIGxvb2t1cFdyYXBwZXIoT3duZXJUeXBlKiBlbGVtZW50LCBjb25zdCBTVkdQcm9wZXJ0eUlu
Zm8qIGluZm8pCisgICAgc3RhdGljIFJlZlB0cjxUZWFyT2ZmVHlwZT4gbG9va3VwV3JhcHBlcihP
d25lclR5cGUqIGVsZW1lbnQsIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyogaW5mbykKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpbmZvKTsKICAgICAgICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eURlc2NyaXB0
aW9uIGtleShlbGVtZW50LCBpbmZvLT5wcm9wZXJ0eUlkZW50aWZpZXIpOwpAQCAtNzEsNyArNzYs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0
eXBlbmFtZSBUZWFyT2ZmVHlwZT4KLSAgICBzdGF0aWMgVGVhck9mZlR5cGUqIGxvb2t1cFdyYXBw
ZXIoY29uc3QgT3duZXJUeXBlKiBlbGVtZW50LCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8p
CisgICAgc3RhdGljIFJlZlB0cjxUZWFyT2ZmVHlwZT4gbG9va3VwV3JhcHBlcihjb25zdCBPd25l
clR5cGUqIGVsZW1lbnQsIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyogaW5mbykKICAgICB7CiAgICAg
ICAgIHJldHVybiBsb29rdXBXcmFwcGVyPE93bmVyVHlwZSwgVGVhck9mZlR5cGU+KGNvbnN0X2Nh
c3Q8T3duZXJUeXBlKj4oZWxlbWVudCksIGluZm8pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5TWFj
cm9zLmgJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEy
Myw3IEBAIHB1YmxpYzogXAogICAgIHN0YXRpYyBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIExvd2Vy
UHJvcGVydHkjI1Byb3BlcnR5SW5mbygpOyBcCiAgICAgUHJvcGVydHlUeXBlJiBMb3dlclByb3Bl
cnR5KCkgY29uc3QgXAogICAgIHsgXAotICAgICAgICBpZiAoVGVhck9mZlR5cGUqIHdyYXBwZXIg
PSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFVzZU93bmVyVHlwZSwgVGVhck9m
ZlR5cGU+KHRoaXMsIExvd2VyUHJvcGVydHkjI1Byb3BlcnR5SW5mbygpKSkgeyBcCisgICAgICAg
IGlmIChhdXRvIHdyYXBwZXIgPSBTVkdBbmltYXRlZFByb3BlcnR5Ojpsb29rdXBXcmFwcGVyPFVz
ZU93bmVyVHlwZSwgVGVhck9mZlR5cGU+KHRoaXMsIExvd2VyUHJvcGVydHkjI1Byb3BlcnR5SW5m
bygpKSkgeyBcCiAgICAgICAgICAgICBpZiAod3JhcHBlci0+aXNBbmltYXRpbmcoKSkgXAogICAg
ICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyLT5jdXJyZW50QW5pbWF0ZWRWYWx1ZSgpOyBcCiAg
ICAgICAgIH0gXApAQCAtMTg0LDcgKzE4NCw3IEBAIHByaXZhdGU6IFwKIERFQ0xBUkVfQU5JTUFU
RURfUFJPUEVSVFkoVGVhck9mZlR5cGUsIFByb3BlcnR5VHlwZSwgVXBwZXJQcm9wZXJ0eSwgTG93
ZXJQcm9wZXJ0eSwgKSBcCiB2b2lkIGRldGFjaEFuaW1hdGVkIyNVcHBlclByb3BlcnR5IyNMaXN0
V3JhcHBlcnModW5zaWduZWQgbmV3TGlzdFNpemUpIFwKIHsgXAotICAgIGlmIChUZWFyT2ZmVHlw
ZSogd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBwZXI8VXNlT3duZXJU
eXBlLCBUZWFyT2ZmVHlwZT4odGhpcywgTG93ZXJQcm9wZXJ0eSMjUHJvcGVydHlJbmZvKCkpKSBc
CisgICAgaWYgKGF1dG8gd3JhcHBlciA9IFNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1cFdyYXBw
ZXI8VXNlT3duZXJUeXBlLCBUZWFyT2ZmVHlwZT4odGhpcywgTG93ZXJQcm9wZXJ0eSMjUHJvcGVy
dHlJbmZvKCkpKSBcCiAgICAgICAgIHdyYXBwZXItPmRldGFjaExpc3RXcmFwcGVycyhuZXdMaXN0
U2l6ZSk7IFwKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlU
ZWFyT2ZmLmgJKHJldmlzaW9uIDE5NjI1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxOCArMjgsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdB
bmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYgOiBwdWJsaWMgU1ZHQW5pbWF0ZWRM
aXN0UHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybUxpc3Q+IHsKIHB1YmxpYzoKLSAgICB2aXJ0
dWFsIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtTGlzdD4qIGJhc2VWYWwoKSBv
dmVycmlkZQorICAgIHZpcnR1YWwgUmVmUHRyPExpc3RQcm9wZXJ0eT4gYmFzZVZhbCgpIG92ZXJy
aWRlCiAgICAgewotICAgICAgICBpZiAoIW1fYmFzZVZhbCkKLSAgICAgICAgICAgIG1fYmFzZVZh
bCA9IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSh0aGlzLCBCYXNlVmFs
Um9sZSwgbV92YWx1ZXMsIG1fd3JhcHBlcnMpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1MaXN0Pio+KG1fYmFzZVZhbC5nZXQo
KSk7CisgICAgICAgIGlmIChtX2Jhc2VWYWwpCisgICAgICAgICAgICByZXR1cm4gbV9iYXNlVmFs
OworCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFy
T2ZmOjpjcmVhdGUodGhpcywgQmFzZVZhbFJvbGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKKyAg
ICAgICAgbV9iYXNlVmFsID0gcHJvcGVydHkucHRyKCk7CisgICAgICAgIHJldHVybiBXVEZNb3Zl
KHByb3BlcnR5KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8
U1ZHVHJhbnNmb3JtTGlzdD4qIGFuaW1WYWwoKSBvdmVycmlkZQorICAgIHZpcnR1YWwgUmVmUHRy
PExpc3RQcm9wZXJ0eT4gYW5pbVZhbCgpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIW1f
YW5pbVZhbCkKLSAgICAgICAgICAgIG1fYW5pbVZhbCA9IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmY6OmNyZWF0ZSh0aGlzLCBBbmltVmFsUm9sZSwgbV92YWx1ZXMsIG1fd3JhcHBlcnMp
OwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdU
cmFuc2Zvcm1MaXN0Pio+KG1fYW5pbVZhbC5nZXQoKSk7CisgICAgICAgIGlmIChtX2FuaW1WYWwp
CisgICAgICAgICAgICByZXR1cm4gbV9hbmltVmFsOworCisgICAgICAgIGF1dG8gcHJvcGVydHkg
PSBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUodGhpcywgQW5pbVZhbFJv
bGUsIG1fdmFsdWVzLCBtX3dyYXBwZXJzKTsKKyAgICAgICAgbV9hbmltVmFsID0gcHJvcGVydHku
cHRyKCk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKHByb3BlcnR5KTsKICAgICB9CiAKICAgICBz
dGF0aWMgUmVmPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZj4gY3JlYXRl
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgU1ZHVHJh
bnNmb3JtTGlzdCYgdmFsdWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHTGlzdFByb3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAkocmV2aXNpb24gMTk2MjU0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5VGVhck9mZi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEyIEBAIHByb3RlY3RlZDoKICAgICB7CiAg
ICAgfQogCisgICAgdmlydHVhbCB+U1ZHTGlzdFByb3BlcnR5VGVhck9mZigpCisgICAgeworICAg
ICAgICBpZiAobV9hbmltYXRlZFByb3BlcnR5KQorICAgICAgICAgICAgbV9hbmltYXRlZFByb3Bl
cnR5LT5wcm9wZXJ0eVdpbGxCZURlbGV0ZWQoKnRoaXMpOworICAgIH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlYWRPbmx5KCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChtX3Jv
bGUgPT0gQW5pbVZhbFJvbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwCShy
ZXZpc2lvbiAxOTYyNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRo
U2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcg
QEAgU1ZHUGF0aEVsZW1lbnQqIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZQogYm9vbCBTVkdQYXRo
U2VnTGlzdFByb3BlcnR5VGVhck9mZjo6cHJvY2Vzc0luY29taW5nTGlzdEl0ZW1WYWx1ZShjb25z
dCBMaXN0SXRlbVR5cGUmIG5ld0l0ZW0sIHVuc2lnbmVkKiBpbmRleFRvTW9kaWZ5KQogewogICAg
IFNWR1BhdGhTZWdXaXRoQ29udGV4dCogbmV3SXRlbVdpdGhDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4obmV3SXRlbS5nZXQoKSk7Ci0gICAgU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eSogYW5pbWF0ZWRQcm9wZXJ0eU9mSXRlbSA9IG5ld0l0ZW1XaXRoQ29udGV4dC0+YW5p
bWF0ZWRQcm9wZXJ0eSgpOworICAgIFJlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiBhbmltYXRl
ZFByb3BlcnR5T2ZJdGVtID0gbmV3SXRlbVdpdGhDb250ZXh0LT5hbmltYXRlZFByb3BlcnR5KCk7
CiAKICAgICAvLyBBbHRlciB0aGUgcm9sZSwgYWZ0ZXIgY2FsbGluZyBhbmltYXRlZFByb3BlcnR5
KCksIGFzIHRoYXQgbWF5IGluZmx1ZW5jZSB0aGUgcmV0dXJuZWQgYW5pbWF0ZWQgcHJvcGVydHku
CiAgICAgbmV3SXRlbVdpdGhDb250ZXh0LT5zZXRDb250ZXh0QW5kUm9sZShjb250ZXh0RWxlbWVu
dCgpLCBtX3BhdGhTZWdSb2xlKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIFNWR1BhdGhTZWdM
aXN0UHJvcGVydHlUZWFyT2ZmOjpwcm9jCiAgICAgLy8gU3BlYzogSWYgbmV3SXRlbSBpcyBhbHJl
YWR5IGluIGEgbGlzdCwgaXQgaXMgcmVtb3ZlZCBmcm9tIGl0cyBwcmV2aW91cyBsaXN0IGJlZm9y
ZSBpdCBpcyBpbnNlcnRlZCBpbnRvIHRoaXMgbGlzdC4KICAgICAvLyAnbmV3SXRlbScgaXMgYWxy
ZWFkeSBsaXZpbmcgaW4gYW5vdGhlciBsaXN0LiBJZiBpdCdzIG5vdCBvdXIgbGlzdCwgc3luY2hy
b25pemUgdGhlIG90aGVyIGxpc3RzIHdyYXBwZXJzIGFmdGVyIHRoZSByZW1vdmFsLgogICAgIGJv
b2wgbGl2ZXNJbk90aGVyTGlzdCA9IGFuaW1hdGVkUHJvcGVydHlPZkl0ZW0gIT0gbV9hbmltYXRl
ZFByb3BlcnR5OwotICAgIFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqIHBy
b3BlcnR5VGVhck9mZiA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmYqPihhbmltYXRlZFByb3BlcnR5T2ZJdGVtKTsKKyAgICBSZWZQdHI8U1ZHQW5pbWF0
ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4gcHJvcGVydHlUZWFyT2ZmID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihhbmltYXRl
ZFByb3BlcnR5T2ZJdGVtKTsKICAgICBpbnQgaW5kZXhUb1JlbW92ZSA9IHByb3BlcnR5VGVhck9m
Zi0+ZmluZEl0ZW0obmV3SXRlbS5nZXQoKSk7CiAgICAgQVNTRVJUKGluZGV4VG9SZW1vdmUgIT0g
LTEpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTYyNTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wMi0wOCAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04o
cjE4MTM0NSk6IFNWRyBwb2x5bGluZSBhbmQgcG9seWdvbiBsZWFrIHBhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc1OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczogUmVt
b3ZlIGZsYWt5IHRlc3RzIGZyb20gdGVzdCBleHBlY3RhdGlvbi4KKyAgICAgICAgCisgICAgICAg
ICogc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3QtcHJvcGVydHktaW5zdGFuY2VzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFrLWxpc3Qt
cHJvcGVydHktaW5zdGFuY2VzLnN2ZzogQWRkZWQuCisgICAgICAgIEVuc3VyZSBpZiBTVkdQb2x5
bGluZUVsZW1lbnQucG9pbnRzIGlzIHJlcXVlc3RlZCBmcm9tIEpTLCB0aGUgZG9jdW1lbnQgd2ls
bAorICAgICAgICBub3QgbGVhay4KKwogMjAxNi0wMi0wOCAgQWRyaWVuIFBsYXphcyAgPGFwbGF6
YXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBUaW1lb3V0cyBpbiB0ZXN0cyBiZWNhdXNlIG9mIG5v
biBpbXBsZW1lbnRlZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNpbmdsZVRhcEF0UG9pbnQoKQpJbmRl
eDogTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxOTYyNTQpCisrKyBMYXlvdXRUZXN0cy9UZXN0
RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC02MzcsMTIgKzYzNyw2IEBAIHdlYmtpdC5v
cmcvYi8xNDE2OTUgWyBEZWJ1ZyBdIGZhc3Qvc2VsZWMKICMgQ29udGVudCBleHRlbnNpb25zIGFy
ZSBNYWMtV0syLW9ubHkgZm9yIG5vdwogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucyBbIFNr
aXAgXQogCi0jIFRoZXNlIHRlc3RzIHdlcmUgZmxha3kgb24gTWFjIG9ubHkgYnV0IHRoZXkgYmVj
YW1lIGZsYWt5IG9uIGFsbCBwb3J0cyBhZnRlciByMTgxMzQ1Ci13ZWJraXQub3JnL2IvMTE0Mjgw
IHN2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1keW5hbWljYWxseS1hZGRlZC1lbGVtZW50LWluc3Rh
bmNlcy5zdmcgWyBQYXNzIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzExNDI4MCBzdmcvYW5pbWF0
aW9ucy9zbWlsLWxlYWstZWxlbWVudC1pbnN0YW5jZXMtbm9CYXNlVmFsUmVmLnN2ZyBbIFBhc3Mg
RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTE0MjgwIHN2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1l
bGVtZW50LWluc3RhbmNlcy5zdmcgWyBQYXNzIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzExNDI4
MCBzdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstZWxlbWVudHMuc3ZnIFsgUGFzcyBGYWlsdXJlIF0K
LQogd2Via2l0Lm9yZy9iLzE0OTA3MiBzdmcvYW5pbWF0aW9ucy9zdmdib29sZWFuLWFuaW1hdGlv
bi0xLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTQzMDg1IG1lZGlhL3Ry
YWNrL3RyYWNrLW1vZGUuaHRtbCBbIFBhc3MgVGltZW91dCBdCkluZGV4OiBMYXlvdXRUZXN0cy9z
dmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5jZXMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1s
aXN0LXByb3BlcnR5LWluc3RhbmNlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zbWlsLWxlYWstbGlzdC1wcm9wZXJ0eS1pbnN0YW5jZXMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK1BBU1MKSW5kZXg6IExh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1saXN0LXByb3BlcnR5LWluc3RhbmNl
cy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc21pbC1sZWFr
LWxpc3QtcHJvcGVydHktaW5zdGFuY2VzLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N2Zy9hbmltYXRpb25zL3NtaWwtbGVhay1saXN0LXByb3BlcnR5LWluc3RhbmNlcy5zdmcJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorPHN2ZyBpZD0ic3ZnIiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hsaW5rIiBvbmxvYWQ9ImxvYWQoKSI+Cis8ZGVmcz4KKyAgICA8cG9seWxpbmUgaWQ9InBvbHls
aW5lIiBwb2ludHM9IjIwLDIwIDgwLDIwIDgwLDgwIDIwLDgwIiAvPgorPC9kZWZzPgorPGcgaWQ9
ImciLz4KKzx0ZXh0IHg9IjUwIiB5PSI1MCIgaWQ9ImxvZyIvPgorPHNjcmlwdCBpZD0ic2NyaXB0
Ij4KKzwhW0NEQVRBWworCit2YXIgZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnIik7CisK
K2Z1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CisgICAgdmFyIGxvZ0RpdiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdsb2cnKTsKKyAgICBsb2dEaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUobWVzc2FnZSkpOworfQorCitmdW5jdGlvbiBjcmVhdGVBbmltYXRlZFBvbHlsaW5l
SW5zdGFuY2UoKSB7CisgICAgdmFyIHVzZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAidXNlIik7CisgICAgdXNlLnNldEF0dHJpYnV0ZU5T
KCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiLCAiI3BvbHlsaW5lIik7CisK
KyAgICB2YXIgYW5pbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmciLCAiYW5pbWF0ZSIpOworICAgIGFuaW0uc2V0QXR0cmlidXRlKCJhdHRyaWJ1
dGVUeXBlIiwgIlhNTCIpOworICAgIGFuaW0uc2V0QXR0cmlidXRlKCJhdHRyaWJ1dGVOYW1lIiwg
InBvaW50cyIpOworICAgIGFuaW0uc2V0QXR0cmlidXRlKCJmcm9tIiwgIjIwLDIwIDgwLDIwIDgw
LDgwIDIwLDgwIik7CisgICAgYW5pbS5zZXRBdHRyaWJ1dGUoInRvIiwgIjEwLDEwIDkwLDEwIDkw
LDkwIDEwLDkwIik7CisgICAgYW5pbS5zZXRBdHRyaWJ1dGUoImJlZ2luIiwgIjBzIik7CisgICAg
YW5pbS5zZXRBdHRyaWJ1dGUoImR1ciIsICIxMC4wcyIpOworICAgIGFuaW0uc2V0QXR0cmlidXRl
KCJyZXBlYXRDb3VudCIsIDEpOworCisgICAgdXNlLmFwcGVuZENoaWxkKGFuaW0pOworCisgICAg
cmV0dXJuIHVzZTsKK30KKworZnVuY3Rpb24gc3RhcnRUZXN0KCkgeworICAgIC8vIENvbGxlY3Qg
Z2FyYmFnZSBiZWZvcmUgcmVjb3JkaW5nIHN0YXJ0aW5nIGxpdmUgbm9kZSBjb3VudCwgaW4gY2Fz
ZSB0aGVyZSBhcmUgbGl2ZSBlbGVtZW50cyBmcm9tIHByZXZpb3VzIHRlc3RzLgorICAgIEdDQ29u
dHJvbGxlci5jb2xsZWN0KCk7CisgICAgb3JpZ2luYWxMaXZlRWxlbWVudHMgPSB3aW5kb3cuaW50
ZXJuYWxzLm51bWJlck9mTGl2ZU5vZGVzKCk7CisKKyAgICAvLyBIb2xkIHJlZmVyZW5jZXMgdG8g
cG9pbnRzIGFuZCBhbmltYXRlZFBvaW50cyBvbiB0aGUgcm9vdCBpbnN0YW5jZS4KKyAgICBwb2lu
dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9seWxpbmUiKS5wb2ludHM7CisgICAgYW5p
bWF0ZWRQb2ludHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9seWxpbmUiKS5hbmltYXRl
ZFBvaW50czsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIGcu
YXBwZW5kQ2hpbGQoY3JlYXRlQW5pbWF0ZWRQb2x5bGluZUluc3RhbmNlKCkpOworCisgICAgc2V0
VGltZW91dChjb250aW51ZVRlc3QsIDApOworfQorCitmdW5jdGlvbiBjb250aW51ZVRlc3QoKSB7
CisgICAgd2hpbGUgKGcuaGFzQ2hpbGROb2RlcygpKQorICAgICAgICBnLnJlbW92ZUNoaWxkKGcu
bGFzdENoaWxkKTsKKworICAgIHNldFRpbWVvdXQoZmluaXNoVGVzdCwgMCk7Cit9CisKK3ZhciBh
dHRlbXB0c1RvRmluaXNoID0gNTsKKworZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICBHQ0Nv
bnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgdmFyIGxpdmVEZWx0YSA9IHdpbmRvdy5pbnRlcm5h
bHMubnVtYmVyT2ZMaXZlTm9kZXMoKSAtIG9yaWdpbmFsTGl2ZUVsZW1lbnRzOworICAgIGlmIChs
aXZlRGVsdGEgPT0gMCkKKyAgICAgICAgbG9nKCJQQVNTIik7CisgICAgZWxzZSBpZiAoLS1hdHRl
bXB0c1RvRmluaXNoKSB7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoVGVzdCwgMTAwKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0gZWxzZQorICAgICAgICBsb2coIkZBSUw6ICIgKyBsaXZlRGVs
dGEgKyAiIGV4dHJhIGxpdmUgbm9kZShzKSIpOworCisgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7Cit9CisKK2Z1bmN0aW9uIGxvYWQoKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYm
IHdpbmRvdy5HQ0NvbnRyb2xsZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nKCJUaGlzIHRlc3Qgb25seSB3b3JrcyB3aGVuIHJ1
biB3aXRoIHRoZSB0ZXN0UnVubmVyLCBHQ0NvbnRyb2xsZXIsIGFuZCBpbnRlcm5hbHMgYXZhaWxh
YmxlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0VGltZW91dChzdGFydFRl
c3QsIDApOworfQorXV0+Cis8L3NjcmlwdD4KKzwvc3ZnPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>