<?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>212461</bug_id>
          
          <creation_ts>2020-05-28 05:12:56 -0700</creation_ts>
          <short_desc>AutoTrader crashed while browsing search results</short_desc>
          <delta_ts>2020-10-26 14:22:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>214660</blocked>
    
    <blocked>210153</blocked>
    
    <blocked>212271</blocked>
    
    <blocked>212647</blocked>
    
    <blocked>218177</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kbr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>noam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656809</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 05:12:56 -0700</bug_when>
    <thetext>AutoTrader crashed while browsing search results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656811</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 05:16:20 -0700</bug_when>
    <thetext>We&apos;ve noticed lots of crashes on iOS since swapping to the ANGLE backend. In every case, the stack trace points to the main thread performing some GL operations instead of the web thread. This indicates it is specific to WebKit1, and the fact that CoreAnimation is the one that calls WebGLLayer&apos;s display method on a separate thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656812</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 05:16:24 -0700</bug_when>
    <thetext>rdar://60733185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656813</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 05:17:10 -0700</bug_when>
    <thetext>The fix for this looks like it might address 212251 as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656825</commentid>
    <comment_count>4</comment_count>
      <attachid>400450</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 06:39:51 -0700</bug_when>
    <thetext>Created attachment 400450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656830</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 06:49:21 -0700</bug_when>
    <thetext>I was seeing some strange failures in WebGL tests locally (test timeouts), but only on WK2. Looking forward to the EWS results.

I wonder if there could be an issue with the timing of the prepare v display calls. If possible, I&apos;d love to know there is a guarantee that display will always be called after prepare, and we&apos;d never get two displays or prepares in a row.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656837</commentid>
    <comment_count>6</comment_count>
      <attachid>400450</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-28 07:27:13 -0700</bug_when>
    <thetext>Comment on attachment 400450
Patch

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

&gt; Source/WebCore/html/CanvasBase.cpp:55
&gt; +HashSet&lt;CanvasBase*&gt;&amp; CanvasBase::instancesRequiringPreparationForDisplay()
&gt; +{
&gt; +    static NeverDestroyed&lt;HashSet&lt;CanvasBase*&gt;&gt; instances;
&gt; +    return instances;
&gt; +}

I think doing this in CanvasBase is probably a mistake, given it is not safe to use this from multiple threads (and I think OffscreenCanvas works on a non-main thread). I realize this is not a problem currently, as needsPreparationForDisplay() is only true for HTMLCanvasElement, but I think to make this a bit more robust, I would move this set up to HTMLCanvasElement as well. One way to do this would be to replace needsPreparationForDisplay() with a virtual function like addToRequiringPreparationForDisplaySetIfNeeded() (but with a better name) that only HTMLCanvasElement would implement in a meaningful way. 

I am also generally dubious of global state like this, and if possible aim to avoid it. Can the set of HTMLCanvasElements live on the Page or something like that instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656842</commentid>
    <comment_count>7</comment_count>
      <attachid>400450</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 07:32:03 -0700</bug_when>
    <thetext>Comment on attachment 400450
Patch

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

&gt;&gt; Source/WebCore/html/CanvasBase.cpp:55
&gt;&gt; +}
&gt; 
&gt; I think doing this in CanvasBase is probably a mistake, given it is not safe to use this from multiple threads (and I think OffscreenCanvas works on a non-main thread). I realize this is not a problem currently, as needsPreparationForDisplay() is only true for HTMLCanvasElement, but I think to make this a bit more robust, I would move this set up to HTMLCanvasElement as well. One way to do this would be to replace needsPreparationForDisplay() with a virtual function like addToRequiringPreparationForDisplaySetIfNeeded() (but with a better name) that only HTMLCanvasElement would implement in a meaningful way. 
&gt; 
&gt; I am also generally dubious of global state like this, and if possible aim to avoid it. Can the set of HTMLCanvasElements live on the Page or something like that instead?

I originally started with Page calling forEachDocument which would then find the HTMLCanvasElements that the Document considered dirty. Maybe that&apos;s a better solution - keep the set there. I ended up with the current approach when I realised I could take a shortcut.

I&apos;ll fix it to have Page call into each Document, and the set of canvii that need preparation will live there. An HTMLCanvasElement always has a Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656969</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-05-28 12:53:52 -0700</bug_when>
    <thetext>Does this address both Bug 212271 and Bug 210153? May I block those two bugs on this one since it sounds like the first fix will be done here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656972</commentid>
    <comment_count>9</comment_count>
      <attachid>400450</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-05-28 13:05:03 -0700</bug_when>
    <thetext>Comment on attachment 400450
Patch

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

&gt; Source/WebCore/html/CanvasBase.h:106
&gt; +    static HashSet&lt;CanvasBase*&gt;&amp; instancesRequiringPreparationForDisplay();

In the next iteration of this patch, could you add some documentation indicating that the set of canvases is transient, and cleared out at the end of each rendered frame? That would help address concerns about the lifetime of the entries in the collection.

Also wondering whether this should hold RefPtrs to the target canvases for GC safety.

&gt; Tools/TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLPrepareDisplayOnWebThread.mm:102
&gt; +    [jsContext evaluateScript:@&quot;loadColorIntoTexture(128, 128, 255, 255)&quot;];

Is this color verified by the test harness? It would be ideal if it were.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656981</commentid>
    <comment_count>10</comment_count>
      <attachid>400450</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 13:24:46 -0700</bug_when>
    <thetext>Comment on attachment 400450
Patch

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

&gt;&gt; Source/WebCore/html/CanvasBase.h:106
&gt;&gt; +    static HashSet&lt;CanvasBase*&gt;&amp; instancesRequiringPreparationForDisplay();
&gt; 
&gt; In the next iteration of this patch, could you add some documentation indicating that the set of canvases is transient, and cleared out at the end of each rendered frame? That would help address concerns about the lifetime of the entries in the collection.
&gt; 
&gt; Also wondering whether this should hold RefPtrs to the target canvases for GC safety.

This is a good point. I think it is a mistake in the current patch that the set is cleared by Page. Instead Page should not need to know it must clear the set, and instead call into something that does the preparation and clears itself.

Also agree on RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656985</commentid>
    <comment_count>11</comment_count>
      <attachid>400450</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-28 13:27:41 -0700</bug_when>
    <thetext>Comment on attachment 400450
Patch

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

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLPrepareDisplayOnWebThread.mm:102
&gt;&gt; +    [jsContext evaluateScript:@&quot;loadColorIntoTexture(128, 128, 255, 255)&quot;];
&gt; 
&gt; Is this color verified by the test harness? It would be ideal if it were.

It isn&apos;t. The goal here was to be doing something from outside the UIWebView that would cause a conflict. However, I&apos;m pretty sure this doesn&apos;t do that any more than simply calling draw would.

I do want to get to a point where I can have an API test that manipulates the WebGL and gets back the contents of the canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657520</commentid>
    <comment_count>12</comment_count>
      <attachid>400638</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-29 17:24:28 -0700</bug_when>
    <thetext>Created attachment 400638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657523</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-29 17:27:23 -0700</bug_when>
    <thetext>*** Bug 210153 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657528</commentid>
    <comment_count>14</comment_count>
      <attachid>400638</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-29 17:33:16 -0700</bug_when>
    <thetext>Comment on attachment 400638
Patch

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

&gt; Source/WebCore/ChangeLog:41
&gt; +            need to run code before being composited. Collect
&gt; +            these objects in a static HashSet, so that the Page

You don&apos;t have a static set anymore, but a per-document one.

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:1010
&gt; +        document().canvasNeedsPreparationForDisplay(this);

Seems like the HTMLCanvasElement needs to also remove itself from the Document::canvasNeedsPreparationForDisplay set if its destroyed. It may also want to reset any of this state if it moves between documents.

&gt; Source/WebCore/html/HTMLCanvasElement.h:187
&gt; +    bool m_hasInformedNeedForDisplayPreparation { false };

This variable name is a bit awkward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657545</commentid>
    <comment_count>15</comment_count>
      <attachid>400638</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-29 18:26:57 -0700</bug_when>
    <thetext>Comment on attachment 400638
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:41
&gt;&gt; +            these objects in a static HashSet, so that the Page
&gt; 
&gt; You don&apos;t have a static set anymore, but a per-document one.

:thumbsup:

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.cpp:1010
&gt;&gt; +        document().canvasNeedsPreparationForDisplay(this);
&gt; 
&gt; Seems like the HTMLCanvasElement needs to also remove itself from the Document::canvasNeedsPreparationForDisplay set if its destroyed. It may also want to reset any of this state if it moves between documents.

Will do.

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.h:187
&gt;&gt; +    bool m_hasInformedNeedForDisplayPreparation { false };
&gt; 
&gt; This variable name is a bit awkward.

I&apos;m getting rid of it as I move to making Document a CanvasObserver. I worried about the (slight) cost of the hash lookup each time the canvas draws something (although the document will ask the canvas if it needs preparation before doing that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657551</commentid>
    <comment_count>16</comment_count>
      <attachid>400638</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-05-29 18:50:52 -0700</bug_when>
    <thetext>Comment on attachment 400638
Patch

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

Looks good overall; a couple of questions.

&gt; Source/WebCore/ChangeLog:27
&gt; +        which had been difficult to diagnose.

This block should be removed now that it&apos;s been determined that https://bugs.webkit.org/show_bug.cgi?id=212277 was the root cause.

&gt; Source/WebCore/dom/Document.h:1819
&gt; +    HashSet&lt;HTMLCanvasElement*&gt; m_canvasesNeedingDisplayPreparation;

Is RefPtr&lt;HTMLCanvasElement&gt; not an option because it will introduce a graph cycle? That might address the lifetime consideration.

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.cpp:1010
&gt;&gt; +        document().canvasNeedsPreparationForDisplay(this);
&gt; 
&gt; Seems like the HTMLCanvasElement needs to also remove itself from the Document::canvasNeedsPreparationForDisplay set if its destroyed. It may also want to reset any of this state if it moves between documents.

Is document() typically non-null in HTMLCanvasElement::~HTMLCanvasElement? If not, when would be a good time to unregister it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657554</commentid>
    <comment_count>17</comment_count>
      <attachid>400646</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-29 19:13:04 -0700</bug_when>
    <thetext>Created attachment 400646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657806</commentid>
    <comment_count>18</comment_count>
      <attachid>400638</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-31 16:13:30 -0700</bug_when>
    <thetext>Comment on attachment 400638
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:27
&gt;&gt; +        which had been difficult to diagnose.
&gt; 
&gt; This block should be removed now that it&apos;s been determined that https://bugs.webkit.org/show_bug.cgi?id=212277 was the root cause.

Removed.

&gt;&gt; Source/WebCore/dom/Document.h:1819
&gt;&gt; +    HashSet&lt;HTMLCanvasElement*&gt; m_canvasesNeedingDisplayPreparation;
&gt; 
&gt; Is RefPtr&lt;HTMLCanvasElement&gt; not an option because it will introduce a graph cycle? That might address the lifetime consideration.

It probably would be fine to use a RefPtr but other sets/lists on document don&apos;t. As long as the lifetime is guaranteed via CanvasObserver I think we&apos;re ok.

&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLCanvasElement.cpp:1010
&gt;&gt;&gt;&gt; +        document().canvasNeedsPreparationForDisplay(this);
&gt;&gt;&gt; 
&gt;&gt;&gt; Seems like the HTMLCanvasElement needs to also remove itself from the Document::canvasNeedsPreparationForDisplay set if its destroyed. It may also want to reset any of this state if it moves between documents.
&gt;&gt; 
&gt;&gt; Will do.
&gt; 
&gt; Is document() typically non-null in HTMLCanvasElement::~HTMLCanvasElement? If not, when would be a good time to unregister it?

document() is always a Ref&lt;&gt;, never null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657809</commentid>
    <comment_count>19</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-31 16:21:35 -0700</bug_when>
    <thetext>Committed r262366: &lt;https://trac.webkit.org/changeset/262366&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658166</commentid>
    <comment_count>20</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2020-06-01 21:40:54 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #19)
&gt; Committed r262366: &lt;https://trac.webkit.org/changeset/262366&gt;
As win-ews detected, this change broke the Windows build:
C:\cygwin\worker\win10-release\build\Source\WebCore\html/HTMLCanvasElement.cpp(1028,61): error C2027: use of undefined type &apos;WebCore::WebGLRenderingContextBase&apos; (compiling source file C:\cygwin\worker\win10-release\build\WebKitBuild\Release\DerivedSources\WebCore\unified-sources\UnifiedSource-950a39b6-5.cpp) [C:\cygwin\worker\win10-release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]

https://build.webkit.org/builders/Apple%20Win%2010%20Release%20%28Build%29/builds/13995/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658405</commentid>
    <comment_count>21</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2020-06-02 11:51:34 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #20)
&gt; (In reply to Dean Jackson from comment #19)
&gt; &gt; Committed r262366: &lt;https://trac.webkit.org/changeset/262366&gt;
&gt; As win-ews detected, this change broke the Windows build:
&gt; C:\cygwin\worker\win10-release\build\Source\WebCore\html/HTMLCanvasElement.
&gt; cpp(1028,61): error C2027: use of undefined type
&gt; &apos;WebCore::WebGLRenderingContextBase&apos; (compiling source file
&gt; C:\cygwin\worker\win10-
&gt; release\build\WebKitBuild\Release\DerivedSources\WebCore\unified-
&gt; sources\UnifiedSource-950a39b6-5.cpp)
&gt; [C:\cygwin\worker\win10-
&gt; release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; 
&gt; https://build.webkit.org/builders/Apple%20Win%2010%20Release%20%28Build%29/
&gt; builds/13995/steps/compile-webkit/logs/stdio
This was fixed with https://trac.webkit.org/changeset/262418/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658952</commentid>
    <comment_count>22</comment_count>
      <attachid>400646</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-06-03 19:47:11 -0700</bug_when>
    <thetext>Comment on attachment 400646
Patch

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

&gt; Source/WebCore/dom/Document.cpp:8590
&gt; +        auto refCountedCanvas = makeRefPtr(canvas);

Normally we call this protectedFoo,

&gt; Source/WebCore/dom/Document.cpp:8601
&gt; +        auto* canvas = downcast&lt;HTMLCanvasElement&gt;(&amp;canvasBase);
&gt; +        if (canvas-&gt;needsPreparationForDisplay())
&gt; +            m_canvasesNeedingDisplayPreparation.add(canvas);

Would be nicer if canvas were a reference.

&gt; Source/WebCore/dom/Document.h:1823
&gt; +    HashSet&lt;HTMLCanvasElement*&gt; m_canvasesNeedingDisplayPreparation;

Should this have been a weak hash set?

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:65
&gt; +    BOOL _prepared;

preparedForWhat?

&gt; Tools/TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLPrepareDisplayOnWebThread.mm:39
&gt; +@interface WebGLPrepareDisplayOnWebThreadDelegate : NSObject &lt;UIWebViewDelegate&gt; {
&gt; +}

Are the {} necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659448</commentid>
    <comment_count>23</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-06-04 18:56:19 -0700</bug_when>
    <thetext>Addressed comments in https://bugs.webkit.org/show_bug.cgi?id=212647</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400450</attachid>
            <date>2020-05-28 06:39:51 -0700</date>
            <delta_ts>2020-05-29 17:24:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212461-20200528233950.patch</filename>
            <type>text/plain</type>
            <size>29564</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc4MzFhOTg0NzI1NTI3
NGYwOWZmOTFkYTJhYjNlMjFjZmEwMzVlZi4uMzU5NjYzZDA1ZDRlN2Q0NGMyN2JkZjZkZGM5MzZk
OWJlMDQwMDUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDIwLTA1LTI4ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdXRvVHJhZGVyIGNyYXNoZWQg
d2hpbGUgYnJvd3Npbmcgc2VhcmNoIHJlc3VsdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ2MQorICAgICAgICByZGFyOi8vNjA3MzMxODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbiBpT1MsIHdo
ZW4gdXNpbmcgV2ViS2l0MSAoVUlXZWJWaWV3KSwgQ29yZUFuaW1hdGlvbiB3b3VsZAorICAgICAg
ICBjYWxsIFdlYkdMTGF5ZXIncyBkaXNwbGF5IG1ldGhvZCBmcm9tIGEgdGhyZWFkIHRoYXQgaXMg
bm90CisgICAgICAgIHRoZSBXZWIgVGhyZWFkLiBUaGF0IG1ldGhvZCB3YXMgcGVyZm9ybWluZyBz
b21lIEdMIHdvcmsgdXNpbmcKKyAgICAgICAgQU5HTEUsIGNhdXNpbmcgYSBjcmFzaC4KKworICAg
ICAgICBTaW5jZSBhbGwgdGhlIFdlYkdMTGF5ZXIncyBkaXNwbGF5IG1ldGhvZCByZWFsbHkgbmVl
ZHMgdG8gZG8KKyAgICAgICAgaXMgc3dhcCBidWZmZXJzIGZvciBjb21wb3NpdGluZywgdGhlIGZp
eCBpcyB0byBzZXBhcmF0ZSBhbGwKKyAgICAgICAgdGhlIEdMIG9wZXJhdGlvbnMgaW50byBhIG1l
dGhvZCB0aGF0IGNhbiBiZSBjYWxsZWQgYWZ0ZXIKKyAgICAgICAgcGFpbnRpbmcgYnV0IGJlZm9y
ZSBjb21wb3NpdGluZy4gVGhpcyBzaG91bGQgYWxzbyBoYXZlIHRoZSBhZGRlZAorICAgICAgICBi
ZW5lZml0IHRoYXQgYnkgdGhlIHRpbWUgQ29yZUFuaW1hdGlvbiBjb21lcyB0byBjYWxsIGRpc3Bs
YXkKKyAgICAgICAgb24gYWxsIHRoZSBkaXJ0eSBsYXllcnMsIHdlIHdpbGwgaGF2ZSBhbHJlYWR5
IGV4ZWN1dGVkIG91cgorICAgICAgICBleHBlbnNpdmUgR1BVIHdvcmsuIFRoZSB0b3RhbCBhbW91
bnQgb2Ygd29yayBkb25lIG9uIHRoZSBHUFUKKyAgICAgICAgaXMgdGhlIHNhbWUsIGJ1dCBob3Bl
ZnVsbHkgaXQgaXMgbm93IGFsbCBkb25lIGluIFdlYktpdCdzCisgICAgICAgIHBhaW50IGN5Y2xl
LCByYXRoZXIgdGhhbiB3aGVuIHRoZSBXaW5kb3cgU2VydmVyIGlzIHRyeWluZworICAgICAgICB0
byBnZXQgQ0EgdG8gY29tcG9zaXRlIHRoaW5ncy4KKworICAgICAgICBBIHZlcnkgaGFwcHkgc2lk
ZS1lZmZlY3QgaXMgdGhhdCB0aGlzIGFsc28gZml4ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjI1MQorICAgICAgICB3aGljaCBoYWQgYmVlbiBk
aWZmaWN1bHQgdG8gZGlhZ25vc2UuCisKKyAgICAgICAgQ292ZXJlZCBieSBhIG5ldyBBUEkgdGVz
dDogV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkCisKKyAgICAgICAgKiBodG1sL0NhbnZh
c0Jhc2UuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzQmFzZTo6bm90aWZ5T2JzZXJ2ZXJzQ2FudmFzQ2hhbmdlZCk6CisgICAgICAgICAg
ICBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2Uga25vdyB0aGF0IHRoZSBjYW52YXMKKyAgICAg
ICAgICAgIGhhcyBwZXJmb3JtZWQgb3BlcmF0aW9ucyB0aGF0IG1vZGlmaWVkIHBpeGVscy4gQWRk
CisgICAgICAgICAgICBpdCB0byB0aGUgc2V0IHRoYXQgaXMgZGVzY3JpYmVkIGJlbG93LgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAg
ICAgICAgQWxsb3cgY2FudmFzIG9iamVjdCB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgd2lsbAorICAg
ICAgICAgICAgbmVlZCB0byBydW4gY29kZSBiZWZvcmUgYmVpbmcgY29tcG9zaXRlZC4gQ29sbGVj
dAorICAgICAgICAgICAgdGhlc2Ugb2JqZWN0cyBpbiBhIHN0YXRpYyBIYXNoU2V0LCBzbyB0aGF0
IHRoZSBQYWdlCisgICAgICAgICAgICBjYW4gbG9vcCBvdmVyIHRoZW0gd2hlbiBsYXlvdXQgaGFz
IGZpbmlzaGVkLgorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAgICAgICAgICBT
aW5jZSBhbiBPZmZzY3JlZW5DYW52YXMgZG9lc24ndCBhY3R1YWxseSBjb21wb3NpdGUKKyAgICAg
ICAgICAgIGRpcmVjdGx5LCBvbmx5IGFuIEhUTUxDYW52YXNFbGVtZW50IG5lZWRzIHRvIGltcGxl
bWVudAorICAgICAgICAgICAgdGhlIHZpcnR1YWwgbWV0aG9kcy4KKworICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAgICAgICAgIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbXVzdCBmb3J3YXJkIHRoZSBjYWxsCisgICAgICAgICAg
ICB0byBwcmVwYXJlIGRvd24gdG8gdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAgICAgICAgIEFuZCB0aGUgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wgZm9yd2FyZHMgdGhlIGNhbGwKKyAgICAgICAgICAgIGludG8gdGhlIFdl
YkdMTGF5ZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbToKKyAg
ICAgICAgKC1bV2ViR0xMYXllciBwcmVwYXJlRm9yRGlzcGxheV0pOgorICAgICAgICAoLVtXZWJH
TExheWVyIGRpc3BsYXldKToKKyAgICAgICAgICAgIFNwbGl0IHRoZSBwYXJ0cyBvZiB0aGUgYGRp
c3BsYXlgIG1ldGhvZCB0aGF0IGRlYWwKKyAgICAgICAgICAgIHdpdGggZmx1c2hpbmcgdGhlIEdM
IGNvbW1hbmRzLCBwcmVwYXJpbmcgdGhlIGZyYW1lYnVmZmVyIHRleHR1cmUsCisgICAgICAgICAg
ICBhbmQgc3dhcHBpbmcgdGhlIElPU3VyZmFjZXMgaW50byBhIG5ldyBgcHJlcGFyZUZvckRpc3Bs
YXlgLiBUaGlzCisgICAgICAgICAgICBtZXRob2QgaXMgaW52b2tlZCBhdCB0aGUgZW5kIG9mIHRo
ZSByZW5kZXJpbmcvbGF5b3V0IHRhc2tzLCBsZWF2aW5nCisgICAgICAgICAgICB0aGUgYGRpc3Bs
YXlgIG1ldGhvZCB0byBvbmx5IHRlbGwgQ29yZUFuaW1hdGlvbiBhYm91dCBhIG5ldyBidWZmZXIK
KyAgICAgICAgICAgIHRvIGNvbXBvc2l0ZS4KKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpkb0FmdGVyVXBkYXRlUmVuZGVyaW5nKToKKyAgICAgICAg
ICAgIEFkZCBhIG5ldyB0YXNrIHRoYXQgZ2V0cyB0aGUgY29sbGVjdGlvbiBvZiBkaXJ0eSBjYW52
YXMgb2JqZWN0cworICAgICAgICAgICAgdGhhdCBuZWVkIHByZXBhcmF0aW9uIGJlZm9yZSB0aGV5
IGNhbiBiZSBjb21wb3NpdGVkLiBMZXQgdGhlbQorICAgICAgICAgICAgcHJlcGFyZSwgYW5kIHRo
ZW4gZW1wdHkgdGhlIHNldC4KKwogMjAyMC0wNS0yOCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2E6Ok9u
RnJhbWUgc2hvdWxkIHVzZSB2aWRlbyBmcmFtZSB0aW1lc3RhbXAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZh
c0Jhc2UuY3BwCmluZGV4IDE2MmIyOTQyZjY2NmE5MzI0NjBiMDZlNzZkMDgzNmU0M2MwMTcxNzAu
LmEzY2Q0MzdlMzYxMTJhMmRlMzJlMTliOThmNzI5ZmRhYTViOTRhNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9DYW52YXNCYXNlLmNwcApAQCAtNDgsNiArNDgsMTIgQEAgY29uc3QgSW50ZXJwb2xhdGlvblF1
YWxpdHkgZGVmYXVsdEludGVycG9sYXRpb25RdWFsaXR5ID0gSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkwKIGNvbnN0IEludGVycG9sYXRpb25RdWFsaXR5IGRlZmF1bHRJbnRlcnBvbGF0aW9uUXVhbGl0
eSA9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OwogI2VuZGlmCiAKK0hhc2hTZXQ8Q2Fu
dmFzQmFzZSo+JiBDYW52YXNCYXNlOjppbnN0YW5jZXNSZXF1aXJpbmdQcmVwYXJhdGlvbkZvckRp
c3BsYXkoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PENhbnZhc0Jhc2Uq
Pj4gaW5zdGFuY2VzOworICAgIHJldHVybiBpbnN0YW5jZXM7Cit9CisKIENhbnZhc0Jhc2U6OkNh
bnZhc0Jhc2UoSW50U2l6ZSBzaXplKQogICAgIDogbV9zaXplKHNpemUpCiB7CkBAIC0xMzgsNiAr
MTQ0LDExIEBAIHZvaWQgQ2FudmFzQmFzZTo6bm90aWZ5T2JzZXJ2ZXJzQ2FudmFzQ2hhbmdlZChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlU
b1ZlY3RvcihtX29ic2VydmVycykpCiAgICAgICAgIG9ic2VydmVyLT5jYW52YXNDaGFuZ2VkKCp0
aGlzLCByZWN0KTsKKworICAgIC8vIFNvbWUgY2FudmFzIGNvbnRleHRzIG5lZWQgdG8gZG8gd29y
ayBhZnRlciByZW5kZXJpbmcgaGFzCisgICAgLy8gZmluaXNoZWQsIGJ1dCBiZWZvcmUgY29tcG9z
aXRpbmcuCisgICAgaWYgKG5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkpCisgICAgICAgIGlu
c3RhbmNlc1JlcXVpcmluZ1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpLmFkZCh0aGlzKTsKIH0KIAog
dm9pZCBDYW52YXNCYXNlOjpub3RpZnlPYnNlcnZlcnNDYW52YXNSZXNpemVkKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9DYW52YXNCYXNlLmgKaW5kZXggMGRhNmU4YjYyZWQ4MGI5NTM4NDc3Mjc1MGZhNDQ5MWZiM2Fj
MGFkNi4uMjIwMzQyOGVmZTA5Njc0NjM1ZDczMzBlYWFjN2JkMWYwOGM0N2QwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9DYW52YXNCYXNlLmgKQEAgLTEwMyw2ICsxMDMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3QgPSAwOwogICAgIGJvb2wgY2FsbFRyYWNpbmdB
Y3RpdmUoKSBjb25zdDsKIAorICAgIHN0YXRpYyBIYXNoU2V0PENhbnZhc0Jhc2UqPiYgaW5zdGFu
Y2VzUmVxdWlyaW5nUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CisgICAgdmlydHVhbCBib29sIG5l
ZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0
IENhbnZhc0Jhc2UoSW50U2l6ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKaW5kZXggMGFkMjBiMWMxNWRkNzgyYjU5ZTcxYmY0MmY2YThiYjIwMmMwN2YzNy4u
ZGYzOGNlYjk3NmZjMmY0NWYyY2UwYmEwNzkwNjExYjliMjYxNGYzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTk5Nyw0ICs5OTcsMTYgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6ZXZlbnRMaXN0ZW5lcnNEaWRDaGFuZ2UoKQogI2VuZGlmCiB9CiAK
K2Jvb2wgSFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkKK3sK
KyAgICByZXR1cm4gaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgp
KTsKK30KKwordm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cHJlcGFyZUZvckRpc3BsYXkoKQorewor
ICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpKQor
ICAgICAgICBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0
KCkpLT5wcmVwYXJlRm9yRGlzcGxheSgpOworfQorCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaAppbmRleCA1MGU3YzJjZGVlMTA1ODJiNmE5N2NjZDJhNzc1Njc0OTA4
ZGZmMzhjLi4wOWI4MjY2MmEzMDY0ZjY5Y2UyZGYxNDIzNzJjZTc5ZmZiYjdjYjAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjUsNiArMTY1LDkgQEAgcHJp
dmF0ZToKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNhbnZhc0Jhc2VTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gSFRNTEVsZW1lbnQ6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsgfQogCisgICAgYm9vbCBuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxh
eSgpIGZpbmFsOworICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSBmaW5hbDsKKwogICAgIEZs
b2F0UmVjdCBtX2RpcnR5UmVjdDsKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCmluZGV4IGNhMjc0ZGViMWU2ZDhiMWU4Nzc2ZmQ3MzQ4NDgzYzRhYjAw
NDAwOTIuLmVhZWJhYjRhMWFlM2Y0NjA2ZDE0ZDQzY2RhNTcyZjU4N2RhNDI5NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCkBAIC03NTI2LDYgKzc1MjYsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKICAgICBxdWV1ZVRh
c2tUb0Rpc3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2ViR0wsIFdlYkdMQ29udGV4
dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNoYW5nZWRFdmVudCwgRXZl
bnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgZW1wdHlTdHJpbmco
KSkpOwogfQogCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByZXBhcmVGb3JEaXNw
bGF5KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
b250ZXh0LT5wcmVwYXJlRm9yRGlzcGxheSgpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaAppbmRleCA5MWNmMGI5ZmI4NDAzMjVjMWJiYWM2YzMzYTc2MzU1ZWZjMGMz
NjQ0Li4xYzhiN2ViYTMwMTcxMjgyNDlkYzYwMDQ2YmM0NWEzNjhhMGY2MTcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oCkBAIC0zODIsNiArMzgyLDggQEAgcHVibGljOgogICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcg
b25seSwgZnJvbSBJbnRlcm5hbHMuCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGYWlsTmV4
dEdQVVN0YXR1c0NoZWNrKCk7CiAKKyAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCk7CisKICAg
ICAvLyBHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50CiAgICAgdm9pZCBkaWRDb21wb3NpdGUoKSBv
dmVycmlkZTsKICAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCmluZGV4IGZhNmM0MGIzYjdjMTZkNzlmYmYzYTMwNjM3NDkwM2RjMWFlM2VmYzIuLjI3
ZTI0ZGQ3MzViM2Q2MGNhNzRjZjlmMzA2ZDZkNDQ3NWZkODkxMTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cApAQCAtMTQ2MCw2ICsxNDYwLDEyIEBAIHZvaWQgUGFnZTo6ZG9BZnRlclVwZGF0ZVJlbmRlcmlu
ZygpCiAgICAgaWYgKFVOTElLRUxZKGlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpKQogICAgICAg
ICB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKS0+Y2hlY2tTaG91bGRGaXJlQ2FsbGJhY2tzKCk7CiAK
KyAgICAvLyBTb21lIGNhbnZhcyBjb250ZXh0cyBuZWVkIHRvIGRvIHdvcmsgd2hlbiByZW5kZXJp
bmcgaGFzIGZpbmlzaGVkIGJ1dAorICAgIC8vIGJlZm9yZSB0aGVpciBjb250ZW50IGlzIGNvbXBv
c2l0ZWQuCisgICAgZm9yIChhdXRvKiBjYW52YXMgOiBDYW52YXNCYXNlOjppbnN0YW5jZXNSZXF1
aXJpbmdQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSkKKyAgICAgICAgY2FudmFzLT5wcmVwYXJlRm9y
RGlzcGxheSgpOworICAgIENhbnZhc0Jhc2U6Omluc3RhbmNlc1JlcXVpcmluZ1ByZXBhcmF0aW9u
Rm9yRGlzcGxheSgpLmNsZWFyKCk7CisKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGZvciAoRnJh
bWUqIGNoaWxkID0gbWFpbkZyYW1lKCkudHJlZSgpLmZpcnN0UmVuZGVyZWRDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLnRyYXZlcnNlTmV4dFJlbmRlcmVkKCkpIHsKICAgICAg
ICAgYXV0byogZnJhbWVWaWV3ID0gY2hpbGQtPnZpZXcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvY29hLm1tCmluZGV4IDY0MTQwNmQ4NGUyNDZmYjJkOGZjODk2MzI0Yzg1
ZjE3NjZiYWQ0MmYuLjZiZTAxMjYwZDA2ZjEzOGQ2YjVmZDY0NjUwMDg5NjQ3OTFiNjdjZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQpAQCAtODY3LDYgKzg2
NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY3JlZW5EaWRDaGFuZ2UoUGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogfQogI2VuZGlmIC8vICFQTEFURk9STShNQUMpCiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKKyAg
ICBbbV93ZWJHTExheWVyIHByZXBhcmVGb3JEaXNwbGF5XTsKK30KKwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKaW5kZXggNjUyZWY1NDI0ZjA0NjljNjMx
MWYxYTEyZDMxODBiNGIwMmVlNmMwNS4uNTUwMTU2NjdmNmI1YTcwY2Y1ZDU2NWY0N2U4OTNjYTY0
OGQ0MzEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViR0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1dlYkdMTGF5ZXIuaApAQCAtNjIsNiArNjIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19CRUdJTgogICAgIHZvaWQqIF9zcGFyZVBidWZmZXI7CiAgICAgdm9pZCogX2xhdGNo
ZWRQYnVmZmVyOwogI2VuZGlmCisgICAgQk9PTCBfcHJlcGFyZWQ7CiB9CiAKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljKSBOYWtlZFB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gY29u
dGV4dDsKQEAgLTcwLDYgKzcxLDggQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KIAogLSAoQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0Nv
bG9yU3BhY2VSZWYpY29sb3JTcGFjZTsKIAorLSAodm9pZClwcmVwYXJlRm9yRGlzcGxheTsKKwog
I2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKIC0gKHZvaWQpYWxsb2NhdGVJT1N1cmZhY2VC
YWNraW5nU3RvcmVXaXRoU2l6ZTooV2ViQ29yZTo6SW50U2l6ZSlzaXplIHVzaW5nQWxwaGE6KEJP
T0wpdXNpbmdBbHBoYTsKIC0gKHZvaWQpYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3Vy
ZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJHTExheWVyLm1tCmluZGV4IDhmMDI0NWZhM2FlMTI0NDcxZDkxN2JkNjA0ZTZmYzM1YTliYzkx
N2IuLjI4Njg1MTc2NmNhNGYzZWNiZDc3NTczMzYwN2U4Njk3MzRmZDc1YTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQpA
QCAtMTYzLDIxICsxNjMsMjEgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2
b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICNlbmRpZgogfQogCi0tICh2b2lkKWRpc3Bs
YXkKKy0gKHZvaWQpcHJlcGFyZUZvckRpc3BsYXkKIHsKICAgICBpZiAoIV9jb250ZXh0KQogICAg
ICAgICByZXR1cm47CiAKKyAgICAvLyBUbyBhdm9pZCBydW5uaW5nIGFueSBPcGVuR0wgY29kZSBp
biBgZGlzcGxheWAsIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQKKyAgICAvLyBhdCB0aGUg
ZW5kIG9mIHRoZSByZW5kZXJpbmcgdGFzay4gV2Ugd2lsbCBmbHVzaCBhbGwgcGFpbnRpbmcgY29t
bWFuZHMKKyAgICAvLyBsZWF2aW5nIHRoZSBidWZmZXJzIHJlYWR5IHRvIGNvbXBvc2l0ZS4KKwog
I2lmIFVTRShPUEVOR0wpCiAgICAgX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CiAgICAgaWYg
KF9kcmF3aW5nQnVmZmVyKSB7CiAgICAgICAgIHN0ZDo6c3dhcChfY29udGVudHNCdWZmZXIsIF9k
cmF3aW5nQnVmZmVyKTsKLSAgICAgICAgc2VsZi5jb250ZW50cyA9IF9jb250ZW50c0J1ZmZlci0+
YXNMYXllckNvbnRlbnRzKCk7Ci0gICAgICAgIFtzZWxmIHJlbG9hZFZhbHVlRm9yS2V5UGF0aDpA
ImNvbnRlbnRzIl07CiAgICAgICAgIFtzZWxmIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJs
ZVN1cmZhY2VdOwogICAgIH0KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0gICAgX2NvbnRleHQtPnBy
ZXNlbnRSZW5kZXJidWZmZXIoKTsKICNlbGlmIFVTRShBTkdMRSkKICAgICBpZiAoIV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgewogICAgICAgICAvLyBDb250ZXh0IGlzIGxpa2VseSBi
ZWluZyB0b3JuIGRvd24uCkBAIC0xOTgsMTggKzE5OCw0MCBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0
YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgX2xhdGNoZWRQYnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgfQor
CiAgICAgICAgIHN0ZDo6c3dhcChfY29udGVudHNCdWZmZXIsIF9kcmF3aW5nQnVmZmVyKTsKICAg
ICAgICAgc3RkOjpzd2FwKF9jb250ZW50c1BidWZmZXIsIF9kcmF3aW5nUGJ1ZmZlcik7CisgICAg
ICAgIFtzZWxmIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdOworICAgIH0K
KyNlbmRpZgorCisgICAgX3ByZXBhcmVkID0gWUVTOworfQorCistICh2b2lkKWRpc3BsYXkKK3sK
KyAgICBpZiAoIV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBdCB0aGlzIHBv
aW50IHdlJ3ZlIHBhaW50ZWQgaW50byB0aGUgX2RyYXdpbmdCdWZmZXIgYW5kIHN3YXBwZWQgaXQg
d2l0aCB0aGUgb2xkIF9jb250ZW50c0J1ZmZlciwKKyAgICAvLyBzbyBhbGwgd2UgbmVlZCB0byBk
byBoZXJlIGlzIHRpY2tsZSB0aGUgQ0FMYXllciB0byBsZXQgaXQga25vdyBpdCBoYXMgbmV3IGNv
bnRlbnRzLgorICAgIC8vIFRoaXMgYXZvaWRzIHJ1bm5pbmcgYW55IE9wZW5HTCBjb2RlIGluIHRo
aXMgbWV0aG9kLgorCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQorICAgIGlmIChfY29u
dGVudHNCdWZmZXIgJiYgX3ByZXBhcmVkKSB7CiAgICAgICAgIHNlbGYuY29udGVudHMgPSBfY29u
dGVudHNCdWZmZXItPmFzTGF5ZXJDb250ZW50cygpOwogICAgICAgICBbc2VsZiByZWxvYWRWYWx1
ZUZvcktleVBhdGg6QCJjb250ZW50cyJdOwotICAgICAgICBbc2VsZiBiaW5kRnJhbWVidWZmZXJU
b05leHRBdmFpbGFibGVTdXJmYWNlXTsKICAgICB9CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorICAg
IF9jb250ZXh0LT5wcmVzZW50UmVuZGVyYnVmZmVyKCk7CiAjZW5kaWYKIAogICAgIF9jb250ZXh0
LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgYXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYp
OwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAgICAgICAgbGF5ZXItPm93bmVy
KCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShsYXllci5nZXQoKSk7CisKKyAgICBf
cHJlcGFyZWQgPSBOTzsKIH0KIAogI2lmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCmluZGV4IDhiOWU5ZTUzNmI5ZDM4YTA2OTkyYTM3NWYxY2NlYWYyYTk1
NWIzNzEuLjMzZGI5OGJhNTdmNzM3OGJmYmEzYmYyZjEyYTkwZTQ0YTgzNDVlMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcApAQCAtNzgyLDYgKzc4MiwxMCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpCiB7CiB9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sK
K30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oCmluZGV4IGJiNTJlYjMwZDkxOWE0YmQyNDgwMDk1Y2M0Yzk5MWU3ODMyYWFm
NDYuLjQ5ZTEwNjlmNmZlZGE0YzNiOGJjMmJmMDgzYjJmODdiMzA2MzIzNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC02NjEsNiArNjYxLDggQEAgcHVibGljOgogICAg
IHZvaWQgc2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEKTsKICNlbmRpZgogCisgICAg
dm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpOworCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIERlc3Rp
bmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU4MDEyZTA3ZmNmMzQwNzYwYTYyZjExMzg2ZjhiMWQ4
OWNhZmQ1MzcuLjFkYzI5NDNkNjBjNDJkZDI0YTk4ZDY1NDJhNDdjNjE4YzkyYmUwNTEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAyMC0wNS0yOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQXV0b1RyYWRlciBjcmFzaGVkIHdoaWxlIGJyb3dzaW5nIHNlYXJjaCByZXN1bHRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0NjEKKyAgICAg
ICAgcmRhcjovLzYwNzMzMTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9p
b3MvV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tOiBBZGRlZC4KKyAgICAgICAgKC1b
V2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkRGVsZWdhdGUgd2ViVmlld0RpZEZpbmlzaExv
YWQ6XSk6CisgICAgICAgICgtW1dlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRl
IHdlYlZpZXc6c2hvdWxkU3RhcnRMb2FkV2l0aFJlcXVlc3Q6bmF2aWdhdGlvblR5cGU6XSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdExlZ2FjeS9pb3Mvd2ViZ2wuaHRtbDogQWRkZWQuCisKIDIwMjAtMDUtMjcgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgcmV2ZXJ0IGxvZ2dpbmcg
Zm9yIGRldGVjdGluZyBmYWlsdXJlcyBpbiBydW4tanNjLXN0cmVzcy10ZXN0cwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA1MTE3MDZjNjNmODMyZmY3YWJmZGY4YWQwMDYyMGRkM2NhOGYzMWI1
Li5iN2Q2N2IyOTBhMjY0ZjY1OTdkODA5N2YzMTJmM2Y4Yzg1Yjc0MGY4IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTkyLDYgKzE5Miw4IEBACiAJCTMxNTExODEwMURCMUFFNDAwMDE3NjMw
NCAvKiBFeHRlbmRlZENvbG9yVGVzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE1MTE4MEYxREIxQURENTAwMTc2MzA0IC8qIEV4dGVuZGVkQ29s
b3JUZXN0cy5jcHAgKi87IH07CiAJCTMxQjc2RTQzMjMyOThFMkMwMDdGRUQyQyAvKiBTeXN0ZW1Q
cmV2aWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFCNzZFNDIyMzI5OEUyQjAwN0ZFRDJDIC8qIFN5c3RlbVByZXZpZXcubW0gKi87IH07CiAJCTMx
Qjc2RTQ1MjMyOTlCREMwMDdGRUQyQyAvKiBzeXN0ZW0tcHJldmlldy10cmlnZ2VyLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCNzZF
NDQyMzI5OUJBMzAwN0ZFRDJDIC8qIHN5c3RlbS1wcmV2aWV3LXRyaWdnZXIuaHRtbCAqLzsgfTsK
KwkJMzFFOUJEQTEyNDdGNEM2MjAwMkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRo
cmVhZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
RTlCREEwMjQ3RjRDNjIwMDJFNTFBMiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQu
bW0gKi87IH07CisJCTMxRTlCREEzMjQ3RjU3MjkwMDJFNTFBMiAvKiB3ZWJnbC5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRTlCREEy
MjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICovOyB9OwogCQkzM0JFNUFGOTEzN0I1QUFF
MDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNCRTVBRjgxMzdCNUFBRTAwNzA1ODEz
IC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNEQzg5MTIxNDE5
NTVGRTAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0RDODkwRTE0MTk1MzkzMDA3NDdFRjcg
Lyogc2ltcGxlLWlmcmFtZS5odG1sICovOyB9OwogCQkzM0RDODkxNDE0MTk1NzlGMDA3NDdFRjcg
LyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrX0J1bmRsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0RDODkxMzE0MTk1NzlG
MDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrX0J1bmRsZS5j
cHAgKi87IH07CkBAIC0xNTkxLDYgKzE1OTMsNyBAQAogCQkJCTU3RURGQzVDMjQ1QTFBM0YwMDk1
OTUyMSAvKiB3ZWItYXV0aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWxhLW5vLW1vY2suaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NzQyMTc4RTI0MDBEMkRGMDAyQjMwM0QgLyog
d2ViLWF1dGhlbnRpY2F0aW9uLW1ha2UtY3JlZGVudGlhbC1sYS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovLAogCQkJCTFDMkI4MTg2MUM4OTI1OUQwMEE1NTI5RiAvKiB3ZWJmb250Lmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCisJCQkJMzFFOUJEQTMyNDdGNTcyOTAwMkU1MUEyIC8qIHdlYmds
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTE3MTRFQjQxQ0Y4Qzc4QzAwNDcyM0M0
IC8qIFdlYlByb2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8s
CiAJCQkJNTE3MTRFQjUxQ0Y4Qzc4QzAwNDcyM0M0IC8qIFdlYlByb2Nlc3NLaWxsSURCQ2xlYW51
cC0yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQy
NUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCkBAIC0xODEyLDYgKzE4MTUsOCBAQAogCQkzMTUxMTgwRjFEQjFBREQ1MDAxNzYzMDQgLyog
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV4dGVuZGVkQ29sb3JUZXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxQjc2RTQyMjMyOThFMkIwMDdGRUQyQyAvKiBTeXN0ZW1QcmV2aWV3Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtUHJldmlldy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFCNzZFNDQyMzI5OUJBMzAwN0ZFRDJDIC8qIHN5c3RlbS1w
cmV2aWV3LXRyaWdnZXIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJzeXN0ZW0tcHJldmlldy10cmlnZ2VyLmh0
bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMUU5QkRBMDI0N0Y0QzYyMDAyRTUx
QTIgLyogV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMUU5QkRBMjI0N0Y0REQwMDAyRTUxQTIgLyogd2ViZ2wuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9IHdlYmdsLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzM0I5Q0Ux
MTI3N0YyMzEwMEZFRkNFMyAvKiBQcmV2ZW50RW1wdHlVc2VyQWdlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJldmVudEVtcHR5VXNlckFnZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMzQkU1QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNy
YXNoX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDExLDYgKzQ0
MTYsNyBAQAogCQkJCUNEQzA5MzJBMjFDODcyQzEwMDMwQzRCMCAvKiBTY3JvbGxpbmdEb2VzTm90
UGF1c2VNZWRpYS5tbSAqLywKIAkJCQlGNDM0Q0ExOTIyRTY1QkNBMDA1RERCMjYgLyogU2Nyb2xs
VG9SZXZlYWxTZWxlY3Rpb24ubW0gKi8sCiAJCQkJMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8q
IFNuYXBzaG90VmlhUmVuZGVySW5Db250ZXh0Lm1tICovLAorCQkJCTMxRTlCREEwMjQ3RjRDNjIw
MDJFNTFBMiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gKi8sCiAJCQkpOwog
CQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NDI4LDYgKzQ0
MzQsNyBAQAogCQkJCUNENzU4QTZFMjA1NzJENTQwMDcxODM0QSAvKiB2aWRlby13aXRoLXBhdXNl
ZC1hdWRpby1hbmQtcGxheWluZy1tdXRlZC5odG1sICovLAogCQkJCUNEQzhFNDhCMUJDNUM5NjIw
MDU5NEZFQyAvKiB2aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgKi8sCiAJCQkJQ0RDOEU0OEMxQkM1
Qzk2MjAwNTk0RkVDIC8qIHZpZGVvLXdpdGhvdXQtYXVkaW8ubXA0ICovLAorCQkJCTMxRTlCREEy
MjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICovLAogCQkJKTsKIAkJCW5hbWUgPSBSZXNv
dXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTI0Nyw2ICs1MjU0LDcgQEAK
IAkJCQk1N0E3OTg1NzIyNEFCMzRFMDBBN0Y2RjEgLyogV2ViQ3J5cHRvTWFzdGVyS2V5Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzFGRjlFREIyNDQ2NDRGMDAwODM5QUU0IC8qIFdlYkZpbHRlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDOTczRjVDMUY1OEVGOEIwMDM1OUMyNyAvKiBXZWJHTFBv
bGljeS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxRTlCREExMjQ3RjRDNjIwMDJFNTFBMiAvKiBX
ZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VBQjFBNDExQTI0MDA0NDdDNEMgLyogV2ViS2l0QWdub3N0aWNUZXN0Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE3MTRFQjgxQ0Y4Q0ExNzAwNDcyM0M0IC8qIFdlYlByb2Nlc3NLaWxsSURCQ2xl
YW51cC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBX
ZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRMZWdhY3kvaW9zL1dlYkdMUHJlcGFyZURp
c3BsYXlPbldlYlRocmVhZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVn
YWN5L2lvcy9XZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM0
ZGFlNjZjNmRkNTIxODYwMGE3ZjQ5Y2M4YTQ2MzFiODM5ODNkNQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVnYWN5L2lvcy9XZWJHTFByZXBhcmVE
aXNwbGF5T25XZWJUaHJlYWQubW0KQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorCisjaWYgSEFWRShVSVdFQlZJRVcpCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRp
bGl0aWVzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZpcnR1YWxNYWNoaW5lLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaD4KKyNpbXBv
cnQgPFVJS2l0L1VJS2l0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWQuaD4KKyNp
bXBvcnQgPHN0ZGxpYi5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW50ZXJmYWNl
IFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlIDogTlNPYmplY3QgPFVJV2Vi
Vmlld0RlbGVnYXRlPiB7Cit9CitAZW5kCisKK3N0YXRpYyBib29sIGRpZEZpbmlzaExvYWQgPSBm
YWxzZTsKK3N0YXRpYyBib29sIGRpZEZpbmlzaFBhaW50aW5nID0gZmFsc2U7CitzdGF0aWMgYm9v
bCBpc1JlYWR5ID0gZmFsc2U7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJHTFByZXBhcmVEaXNwbGF5
T25XZWJUaHJlYWREZWxlZ2F0ZQorCitJR05PUkVfV0FSTklOR1NfQkVHSU4oImRlcHJlY2F0ZWQt
aW1wbGVtZW50YXRpb25zIikKKy0gKHZvaWQpd2ViVmlld0RpZEZpbmlzaExvYWQ6KFVJV2ViVmll
dyAqKXdlYlZpZXcKK3sKKyAgICBkaWRGaW5pc2hMb2FkID0gdHJ1ZTsKK30KKworLSAoQk9PTCl3
ZWJWaWV3OihVSVdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZFN0YXJ0TG9hZFdpdGhSZXF1ZXN0OihO
U1VSTFJlcXVlc3QgKilyZXF1ZXN0IG5hdmlnYXRpb25UeXBlOihVSVdlYlZpZXdOYXZpZ2F0aW9u
VHlwZSluYXZpZ2F0aW9uVHlwZQoreworICAgIGlmIChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1
YWxUb1N0cmluZzpAImNhbGxiYWNrIl0gJiYgW3JlcXVlc3QuVVJMLnJlc291cmNlU3BlY2lmaWVy
IGlzRXF1YWxUb1N0cmluZzpAImRpZEZpbmlzaFBhaW50aW5nIl0pIHsKKyAgICAgICAgZGlkRmlu
aXNoUGFpbnRpbmcgPSB0cnVlOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgaWYg
KFtyZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiY2FsbGJhY2siXSAmJiBbcmVx
dWVzdC5VUkwucmVzb3VyY2VTcGVjaWZpZXIgaXNFcXVhbFRvU3RyaW5nOkAiaXNSZWFkeSJdKSB7
CisgICAgICAgIGlzUmVhZHkgPSB0cnVlOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisg
ICAgcmV0dXJuIFlFUzsKK30KK0lHTk9SRV9XQVJOSU5HU19FTkQKKworQGVuZAorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV2ViS2l0TGVnYWN5LCBXZWJHTFByZXBhcmVEaXNw
bGF5T25XZWJUaHJlYWQpCit7CisgICAgUmV0YWluUHRyPFVJV2luZG93PiB1aVdpbmRvdyA9IGFk
b3B0TlMoW1tVSVdpbmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKV0pOworICAgIFJldGFpblB0cjxVSVdlYlZpZXc+IHVpV2ViVmlldyA9IGFkb3B0TlMo
W1tVSVdlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCldKTsKKyAgICBbdWlXaW5kb3cgYWRkU3Vidmlldzp1aVdlYlZpZXcuZ2V0KCldOworCisgICAg
UmV0YWluUHRyPFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlPiB1aURlbGVn
YXRlID0gYWRvcHROUyhbW1dlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CisgICAgdWlXZWJWaWV3LmdldCgpLmRlbGVnYXRlID0gdWlEZWxlZ2F0ZS5n
ZXQoKTsKKworICAgIE5TVVJMICp1cmwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOkAid2ViZ2wiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIE5TTG9nKEAiTG9hZGluZyAlQCIsIHVybCk7Cisg
ICAgW3VpV2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnVy
bF1dOworCisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hMb2FkKTsKKyAgICBVdGlsOjpydW4oJmlz
UmVhZHkpOworCisgICAgUmV0YWluUHRyPEpTQ29udGV4dD4ganNDb250ZXh0ID0gW3VpV2ViVmll
dyB2YWx1ZUZvcktleVBhdGg6QCJkb2N1bWVudFZpZXcud2ViVmlldy5tYWluRnJhbWUuamF2YVNj
cmlwdENvbnRleHQiXTsKKworICAgIEVYUEVDVF9UUlVFKCEhanNDb250ZXh0LmdldCgpKTsKKwor
ICAgIFJldGFpblB0cjxKU1ZpcnR1YWxNYWNoaW5lPiBqc1ZNID0gW2pzQ29udGV4dCB2aXJ0dWFs
TWFjaGluZV07CisgICAgRVhQRUNUX1RSVUUoW2pzVk0gaXNXZWJUaHJlYWRBd2FyZV0pOworCisg
ICAgLy8gUmVsZWFzZSBXZWJUaHJlYWQgbG9jay4KKyAgICBVdGlsOjpzcGluUnVuTG9vcCgxKTsK
KworICAgIEVYUEVDVF9GQUxTRShXZWJUaHJlYWRJc0xvY2tlZCgpKTsKKworICAgIFtqc0NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJsb2FkQ29sb3JJbnRvVGV4dHVyZSgxMjgsIDEyOCwgMjU1LCAy
NTUpIl07CisgICAgW2pzQ29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImRyYXcoKSJdOworICAgIFV0
aWw6OnJ1bigmZGlkRmluaXNoUGFpbnRpbmcpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9pb3Mvd2ViZ2wuaHRt
bCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVnYWN5L2lvcy93ZWJnbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM2YTQwZjQzMGNmMTdjNzY0YTg4YTAxYTIxN2ExYmE5ODhhZmJiZWQKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9p
b3Mvd2ViZ2wuaHRtbApAQCAtMCwwICsxLDE0MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aGVhZD4K
Kzx0aXRsZT5XZWJHTCBkcmF3aW5nPC90aXRsZT4KKzxzdHlsZT4KK2NhbnZhcyB7CisgICAgd2lk
dGg6IDEwMHB4OworICAgIGhlaWdodDogMTAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPHNj
cmlwdCBpZD0idmVydGV4U2hhZGVyU291cmNlIiB0eXBlPSJ0ZXh0L2dsc2wiPgorYXR0cmlidXRl
IHZlYzQgYV9wb3NpdGlvbjsKK3ZhcnlpbmcgdmVjMiB2X3RleHR1cmVQb3NpdGlvbjsKKwordm9p
ZCBtYWluKCkgeworICAgIHZfdGV4dHVyZVBvc2l0aW9uID0gdmVjMigoYV9wb3NpdGlvbi54ICsg
MS4wKSAvIDIuMCwgKGFfcG9zaXRpb24ueSArIDEuMCkgLyAyLjApOworICAgIGdsX1Bvc2l0aW9u
ID0gYV9wb3NpdGlvbjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXJT
b3VyY2UiIHR5cGU9InRleHQvZ2xzbCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKwordmFy
eWluZyB2ZWMyIHZfdGV4dHVyZVBvc2l0aW9uOworCit1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJl
OworCit2b2lkIG1haW4oKSB7CisgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2
X3RleHR1cmVQb3NpdGlvbik7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CitsZXQgdGV4dHVyZTsK
K2xldCBnbDsKK2xldCB0ZXh0dXJlVW5pZm9ybTsKK2xldCBOVU1CRVJfT0ZfUEFJTlRTX1JFTUFJ
TklORyA9IDYwOworCitmdW5jdGlvbiBzaWduYWxSZWFkeSgpIHsKKyAgICB3aW5kb3cubG9jYXRp
b24gPSAiY2FsbGJhY2s6aXNSZWFkeSI7Cit9CisKK2Z1bmN0aW9uIHNpZ25hbEZpbmlzaGVkKCkg
eworICAgIHdpbmRvdy5sb2NhdGlvbiA9ICJjYWxsYmFjazpkaWRGaW5pc2hQYWludGluZyI7Cit9
CisKK2Z1bmN0aW9uIGxvYWRDb2xvckludG9UZXh0dXJlKHIsIGcsIGIsIGEpIHsKKyAgICBnbC5i
aW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhJbWFnZTJEKGds
LlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZ
VEUsIG5ldyBVaW50OEFycmF5KFtyLCBnLCBiLCBhXSkpOworfQorCitmdW5jdGlvbiBkcmF3KCkg
eworICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworCisgICAgZ2wuYWN0aXZlVGV4
dHVyZShnbC5URVhUVVJFMCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4
dHVyZSk7CisKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisKKyAgICBp
ZiAoTlVNQkVSX09GX1BBSU5UU19SRU1BSU5JTkctLSkgeworICAgICAgICB3aW5kb3cucmVxdWVz
dEFuaW1hdGlvbkZyYW1lKGRyYXcpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNpZ25hbEZpbmlz
aGVkKCk7CisgICAgfQorfTsKKworZnVuY3Rpb24gcnVuKCkgeworCisgICAgbGV0IGNhbnZhcyA9
IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImNhbnZhcyIpOworICAgIGNhbnZhcy53aWR0aCA9IDEw
MDsKKyAgICBjYW52YXMuaGVpZ2h0ID0gMTAwOworCisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4
dCgid2ViZ2wiKTsKKworICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CisKKyAgICBsZXQg
dmVydGV4U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworCisgICAg
Z2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZl
cnRleFNoYWRlclNvdXJjZSIpLnRleHRDb250ZW50KTsKKworICAgIGdsLmNvbXBpbGVTaGFkZXIo
dmVydGV4U2hhZGVyKTsKKyAgICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFk
ZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkgeworICAgICAgICAvLyBXZSBmYWlsZWQgdG8gY29tcGls
ZS4gT3V0cHV0IHRvIHRoZSBjb25zb2xlIGFuZCBxdWl0LgorICAgICAgICBjb25zb2xlLmVycm9y
KCJWZXJ0ZXggU2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIpOworICAgICAgICBjb25zb2xlLmxv
ZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHZlcnRleFNoYWRlcikpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbGV0IGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLkZSQUdN
RU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZnJhZ21lbnRTaGFkZXJTb3VyY2UiKS50ZXh0Q29udGVudCk7Cisg
ICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgaWYgKCFnbC5nZXRTaGFk
ZXJQYXJhbWV0ZXIoZnJhZ21lbnRTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkgeworICAgICAg
ICBjb25zb2xlLmVycm9yKCJGcmFnbWVudCBTaGFkZXIgZmFpbGVkIHRvIGNvbXBpbGUuIik7Cisg
ICAgICAgIGNvbnNvbGUubG9nKGdsLmdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxldCBwcm9ncmFtID0gZ2wuY3JlYXRlUHJv
Z3JhbSgpOworICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAg
IGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wubGlua1By
b2dyYW0ocHJvZ3JhbSk7CisKKyAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3Jh
bSwgZ2wuTElOS19TVEFUVVMpKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byBs
aW5rIHNoYWRlcnMgaW50byBwcm9ncmFtLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIGxldCB0ZXh0dXJlVW5pZm9ybSA9IGds
LmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidGV4dHVyZSIpOworCisgICAgbGV0IHBvc2l0
aW9uQXR0cmlidXRlID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgImFfcG9zaXRpb24i
KTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlvbkF0dHJpYnV0ZSk7CisK
KyAgICBsZXQgdmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAtMSwgLTEsCisg
ICAgICAgMSwgLTEsCisgICAgICAgMSwgMSwKKyAgICAgICAxLCAxLAorICAgICAgIC0xLCAxLAor
ICAgICAgIC0xLCAtMQorICAgIF0pOworCisgICAgbGV0IHF1YWRCdWZmZXIgPSBnbC5jcmVhdGVC
dWZmZXIoKTsKKworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBxdWFkQnVmZmVy
KTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdmVydGljZXMsIGdsLlNUQVRJ
Q19EUkFXKTsKKworICAgIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgbG9hZENv
bG9ySW50b1RleHR1cmUoMCwgMTI4LCAyNTUsIDI1NSk7CisKKyAgICBnbC5iaW5kQnVmZmVyKGds
LkFSUkFZX0JVRkZFUiwgcXVhZEJ1ZmZlcik7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihw
b3NpdGlvbkF0dHJpYnV0ZSwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAgIGdsLnVu
aWZvcm0xaSh0ZXh0dXJlVW5pZm9ybSwgMCk7CisKKyAgICBzaWduYWxSZWFkeSgpOworfQorCit3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHJ1biwgZmFsc2UpOworPC9zY3JpcHQ+Cis8
Ym9keT4KKyAgICA8Y2FudmFzPjwvY2FudmFzPgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400638</attachid>
            <date>2020-05-29 17:24:28 -0700</date>
            <delta_ts>2020-05-29 19:13:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212461-20200530102427.patch</filename>
            <type>text/plain</type>
            <size>31439</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA2ZDY4Y2I4NmE4OWYy
N2I0NmI4MDc2ZTQwYzZhNzMwN2JjYjVkYi4uM2FiZDBlNWJkN2EzNmI2ZjdhZDUyYzE0MzBmYzIw
MDhjMDVlYjNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDIwLTA1LTI5ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdXRvVHJhZGVyIGNyYXNoZWQg
d2hpbGUgYnJvd3Npbmcgc2VhcmNoIHJlc3VsdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ2MQorICAgICAgICByZGFyOi8vNjA3MzMxODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbiBpT1MsIHdo
ZW4gdXNpbmcgV2ViS2l0MSAoVUlXZWJWaWV3KSwgQ29yZUFuaW1hdGlvbiB3b3VsZAorICAgICAg
ICBjYWxsIFdlYkdMTGF5ZXIncyBkaXNwbGF5IG1ldGhvZCBmcm9tIGEgdGhyZWFkIHRoYXQgaXMg
bm90CisgICAgICAgIHRoZSBXZWIgVGhyZWFkLiBUaGF0IG1ldGhvZCB3YXMgcGVyZm9ybWluZyBz
b21lIEdMIHdvcmsgdXNpbmcKKyAgICAgICAgQU5HTEUsIGNhdXNpbmcgYSBjcmFzaC4KKworICAg
ICAgICBTaW5jZSBhbGwgdGhlIFdlYkdMTGF5ZXIncyBkaXNwbGF5IG1ldGhvZCByZWFsbHkgbmVl
ZHMgdG8gZG8KKyAgICAgICAgaXMgc3dhcCBidWZmZXJzIGZvciBjb21wb3NpdGluZywgdGhlIGZp
eCBpcyB0byBzZXBhcmF0ZSBhbGwKKyAgICAgICAgdGhlIEdMIG9wZXJhdGlvbnMgaW50byBhIG1l
dGhvZCB0aGF0IGNhbiBiZSBjYWxsZWQgYWZ0ZXIKKyAgICAgICAgcGFpbnRpbmcgYnV0IGJlZm9y
ZSBjb21wb3NpdGluZy4gVGhpcyBzaG91bGQgYWxzbyBoYXZlIHRoZSBhZGRlZAorICAgICAgICBi
ZW5lZml0IHRoYXQgYnkgdGhlIHRpbWUgQ29yZUFuaW1hdGlvbiBjb21lcyB0byBjYWxsIGRpc3Bs
YXkKKyAgICAgICAgb24gYWxsIHRoZSBkaXJ0eSBsYXllcnMsIHdlIHdpbGwgaGF2ZSBhbHJlYWR5
IGV4ZWN1dGVkIG91cgorICAgICAgICBleHBlbnNpdmUgR1BVIHdvcmsuIFRoZSB0b3RhbCBhbW91
bnQgb2Ygd29yayBkb25lIG9uIHRoZSBHUFUKKyAgICAgICAgaXMgdGhlIHNhbWUsIGJ1dCBob3Bl
ZnVsbHkgaXQgaXMgbm93IGFsbCBkb25lIGluIFdlYktpdCdzCisgICAgICAgIHBhaW50IGN5Y2xl
LCByYXRoZXIgdGhhbiB3aGVuIHRoZSBXaW5kb3cgU2VydmVyIGlzIHRyeWluZworICAgICAgICB0
byBnZXQgQ0EgdG8gY29tcG9zaXRlIHRoaW5ncy4KKworICAgICAgICBBIHZlcnkgaGFwcHkgc2lk
ZS1lZmZlY3QgaXMgdGhhdCB0aGlzIGFsc28gZml4ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjI1MQorICAgICAgICB3aGljaCBoYWQgYmVlbiBk
aWZmaWN1bHQgdG8gZGlhZ25vc2UuCisKKyAgICAgICAgQ292ZXJlZCBieSBhIG5ldyBBUEkgdGVz
dDogV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkCisKKyAgICAgICAgKiBodG1sL0hUTUxD
YW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6bm90aWZ5T2JzZXJ2ZXJzQ2FudmFz
Q2hhbmdlZCk6CisgICAgICAgICAgICBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2Uga25vdyB0
aGF0IHRoZSBjYW52YXMKKyAgICAgICAgICAgIGhhcyBwZXJmb3JtZWQgb3BlcmF0aW9ucyB0aGF0
IG1vZGlmaWVkIHBpeGVscy4gQWRkCisgICAgICAgICAgICBpdCB0byB0aGUgc2V0IHRoYXQgaXMg
ZGVzY3JpYmVkIGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5l
ZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAgICAgICAgICBBbGxvdyBjYW52YXMgb2Jq
ZWN0IHRvIGluZGljYXRlIHRoYXQgdGhleSB3aWxsCisgICAgICAgICAgICBuZWVkIHRvIHJ1biBj
b2RlIGJlZm9yZSBiZWluZyBjb21wb3NpdGVkLiBDb2xsZWN0CisgICAgICAgICAgICB0aGVzZSBv
YmplY3RzIGluIGEgc3RhdGljIEhhc2hTZXQsIHNvIHRoYXQgdGhlIFBhZ2UKKyAgICAgICAgICAg
IGNhbiBsb29wIG92ZXIgdGhlbSB3aGVuIGxheW91dCBoYXMgZmluaXNoZWQuCisKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAgICAg
ICAgICBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG11c3QgZm9yd2FyZCB0aGUgY2FsbAorICAg
ICAgICAgICAgdG8gcHJlcGFyZSBkb3duIHRvIHRoZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAgICAgICAgICBBbmQgdGhlIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMIGZvcndhcmRzIHRoZSBjYWxsCisgICAgICAgICAgICBpbnRv
IHRoZSBXZWJHTExheWVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
R0xMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIu
bW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgcHJlcGFyZUZvckRpc3BsYXldKToKKyAgICAgICAg
KC1bV2ViR0xMYXllciBkaXNwbGF5XSk6CisgICAgICAgICAgICBTcGxpdCB0aGUgcGFydHMgb2Yg
dGhlIGBkaXNwbGF5YCBtZXRob2QgdGhhdCBkZWFsCisgICAgICAgICAgICB3aXRoIGZsdXNoaW5n
IHRoZSBHTCBjb21tYW5kcywgcHJlcGFyaW5nIHRoZSBmcmFtZWJ1ZmZlciB0ZXh0dXJlLAorICAg
ICAgICAgICAgYW5kIHN3YXBwaW5nIHRoZSBJT1N1cmZhY2VzIGludG8gYSBuZXcgYHByZXBhcmVG
b3JEaXNwbGF5YC4gVGhpcworICAgICAgICAgICAgbWV0aG9kIGlzIGludm9rZWQgYXQgdGhlIGVu
ZCBvZiB0aGUgcmVuZGVyaW5nL2xheW91dCB0YXNrcywgbGVhdmluZworICAgICAgICAgICAgdGhl
IGBkaXNwbGF5YCBtZXRob2QgdG8gb25seSB0ZWxsIENvcmVBbmltYXRpb24gYWJvdXQgYSBuZXcg
YnVmZmVyCisgICAgICAgICAgICB0byBjb21wb3NpdGUuCisKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnByZXBhcmVDYW52YXNlc0ZvckRpc3BsYXlJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Y2FudmFzTmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkpOgorICAgICAg
ICAgICAgS2VlcCBhIHNldCBvZiBIVE1MQ2FudmFzRWxlbWVudHMgdGhhdCBuZWVkIHRvCisgICAg
ICAgICAgICBiZSBwcmVwYXJlZCwgYW5kIHRlbGwgdGhlbSB3aGVuIG5lY2Vzc2FyeS4KKworICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpkb0FmdGVyVXBk
YXRlUmVuZGVyaW5nKToKKyAgICAgICAgICAgIEFkZCBhIG5ldyB0YXNrIHRoYXQgYXNrcyB0aGUg
RG9jdW1lbnQgdG8gbm90aWZ5CisgICAgICAgICAgICBhbGwgcmVsZXZhbnQgY2FudmFzIG9iamVj
dHMgdGhhdCB0aGV5IHNob3VsZCBwcmVwYXJlCisgICAgICAgICAgICBmb3IgZGlzcGxheS4KKwog
MjAyMC0wNS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHRoaW5ncyBmcm9tIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIHRoYXQgYXJlIGNvdmVyZWQg
YnkgUGxhdGZvcm1FbmFibGVDb2NvYS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjZjZj
YWU0Y2NlMGNjNGRkMTQ5Mzk0NTg5YTU1OTk3ZDljOWU0MmVmLi5iYzJiNjU0NTdkYjdjN2NjYzEy
ZjMxNGZkZDYzZmM2OWE2NmU1ZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg1ODIs
NiArODU4MiwyMiBAQCBMYXp5TG9hZEltYWdlT2JzZXJ2ZXImIERvY3VtZW50OjpsYXp5TG9hZElt
YWdlT2JzZXJ2ZXIoKQogICAgIHJldHVybiAqbV9sYXp5TG9hZEltYWdlT2JzZXJ2ZXI7CiB9CiAK
K3ZvaWQgRG9jdW1lbnQ6OnByZXBhcmVDYW52YXNlc0ZvckRpc3BsYXlJZk5lZWRlZCgpCit7Cisg
ICAgLy8gU29tZSBjYW52YXMgY29udGV4dHMgbmVlZCB0byBkbyB3b3JrIHdoZW4gcmVuZGVyaW5n
IGhhcyBmaW5pc2hlZCBidXQKKyAgICAvLyBiZWZvcmUgdGhlaXIgY29udGVudCBpcyBjb21wb3Np
dGVkLgorICAgIGZvciAoYXV0byogY2FudmFzIDogbV9jYW52YXNlc05lZWRpbmdEaXNwbGF5UHJl
cGFyYXRpb24pIHsKKyAgICAgICAgYXV0byByZWZDb3VudGVkQ2FudmFzID0gbWFrZVJlZlB0cihj
YW52YXMpOworICAgICAgICByZWZDb3VudGVkQ2FudmFzLT5wcmVwYXJlRm9yRGlzcGxheSgpOwor
ICAgIH0KKyAgICBtX2NhbnZhc2VzTmVlZGluZ0Rpc3BsYXlQcmVwYXJhdGlvbi5jbGVhcigpOwor
fQorCit2b2lkIERvY3VtZW50OjpjYW52YXNOZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheShIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzKQoreworICAgIG1fY2FudmFzZXNOZWVkaW5nRGlzcGxheVBy
ZXBhcmF0aW9uLmFkZChjYW52YXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICN1
bmRlZiBSRUxFQVNFX0xPR19JRl9BTExPV0VECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDk0OGFl
NDYxZTc2MTMyZDkxNTg4ODFlNTk5MTNiZDYyYWQ4M2EwM2EuLmFlM2ExY2JhNTg2ZDg0NDc0NGU3
NjMyZjVkNjJjNmFkZmVhMTlkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xNTkyLDYgKzE1
OTIsOSBAQCBwdWJsaWM6CiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJu
IG1fc2VsZWN0aW9uOyB9CiAgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CiAKKyAgICB2b2lkIHByZXBhcmVDYW52YXNlc0Zv
ckRpc3BsYXlJZk5lZWRlZCgpOworICAgIHZvaWQgY2FudmFzTmVlZHNQcmVwYXJhdGlvbkZvckRp
c3BsYXkoSFRNTENhbnZhc0VsZW1lbnQqKTsKKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3Ry
dWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAx
IDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVm
YXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0x
ODEwLDYgKzE4MTMsMTEgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRG9jdW1l
bnRFeHRlbnNpb25zPiBtX3N2Z0V4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxTVkdVc2VFbGVtZW50
Kj4gbV9zdmdVc2VFbGVtZW50czsKIAorICAgIC8vIENvbGxlY3Rpb24gb2YgY2FudmFzIG9iamVj
dHMgdGhhdCBuZWVkIHRvIGRvIHdvcmsgYWZ0ZXIgdGhleSd2ZQorICAgIC8vIHJlbmRlcmVkIGJ1
dCBiZWZvcmUgY29tcG9zaXRpbmcsIGZvciB0aGUgbmV4dCBmcmFtZS4gVGhlIHNldCBpcworICAg
IC8vIGNsZWFyZWQgYWZ0ZXIgdGhleSd2ZSBiZWVuIGNhbGxlZC4KKyAgICBIYXNoU2V0PEhUTUxD
YW52YXNFbGVtZW50Kj4gbV9jYW52YXNlc05lZWRpbmdEaXNwbGF5UHJlcGFyYXRpb247CisKICNp
ZiBFTkFCTEUoREFSS19NT0RFX0NTUykKICAgICBPcHRpb25TZXQ8Q29sb3JTY2hlbWU+IG1fY29s
b3JTY2hlbWU7CiAgICAgYm9vbCBtX2FsbG93c0NvbG9yU2NoZW1lVHJhbnNmb3JtYXRpb25zIHsg
dHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAppbmRleCAwZGE2ZThiNjJlZDgwYjk1Mzg0
NzcyNzUwZmE0NDkxZmIzYWMwYWQ2Li5hYjEzZTE0MTJjZDc2ZTNiOGJiOTA5NWRjOTMxOWM0NzA0
NjhlMTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaApAQCAtODksNyArODksNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGFkZE9ic2VydmVyKENhbnZhc09ic2VydmVyJik7CiAgICAgdm9pZCBy
ZW1vdmVPYnNlcnZlcihDYW52YXNPYnNlcnZlciYpOwotICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJz
Q2FudmFzQ2hhbmdlZChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
T2JzZXJ2ZXJzQ2FudmFzQ2hhbmdlZChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIG5vdGlm
eU9ic2VydmVyc0NhbnZhc1Jlc2l6ZWQoKTsKICAgICB2b2lkIG5vdGlmeU9ic2VydmVyc0NhbnZh
c0Rlc3Ryb3llZCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBpbiBkZXN0cnVjdGlvbiBiZWZvcmUgY2xl
YXJpbmcgbV9jb250ZXh0LgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCmluZGV4IDBhZDIwYjFjMTVkZDc4MmI1OWU3MWJmNDJmNmE4YmIyMDJjMDdmMzcuLmVhZWU2
ZTMxNWNhZjQ2MDg4NjViNTFhOTE1NTcyMjczYjYwNDYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC05OTcsNCArOTk3LDM4IEBAIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OmV2ZW50TGlzdGVuZXJzRGlkQ2hhbmdlKCkKICNlbmRpZgogfQogCit2b2lk
IEhUTUxDYW52YXNFbGVtZW50Ojpub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDYW52YXNCYXNlOjpub3RpZnlPYnNlcnZlcnNDYW52YXND
aGFuZ2VkKHJlY3QpOworCisgICAgaWYgKG1faGFzSW5mb3JtZWROZWVkRm9yRGlzcGxheVByZXBh
cmF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTb21lIGNhbnZhcyBjb250ZXh0cyBu
ZWVkIHRvIGRvIHdvcmsgYWZ0ZXIgcmVuZGVyaW5nIGhhcworICAgIC8vIGZpbmlzaGVkLCBidXQg
YmVmb3JlIGNvbXBvc2l0aW5nLgorICAgIGlmIChuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgp
KSB7CisgICAgICAgIGRvY3VtZW50KCkuY2FudmFzTmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXko
dGhpcyk7CisgICAgICAgIG1faGFzSW5mb3JtZWROZWVkRm9yRGlzcGxheVByZXBhcmF0aW9uID0g
dHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgSFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRp
b25Gb3JEaXNwbGF5KCkKK3sKKyAgICByZXR1cm4gaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZT4obV9jb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cHJlcGFy
ZUZvckRpc3BsYXkoKQoreworICAgIEFTU0VSVChuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgp
KTsKKworICAgIGlmICghbV9oYXNJbmZvcm1lZE5lZWRGb3JEaXNwbGF5UHJlcGFyYXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpKSB7CisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U+KG1fY29udGV4dC5nZXQoKSktPnByZXBhcmVGb3JEaXNwbGF5KCk7CisgICAgICAgIG1f
aGFzSW5mb3JtZWROZWVkRm9yRGlzcGxheVByZXBhcmF0aW9uID0gZmFsc2U7CisgICAgfQorfQor
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCA1MGU3YzJj
ZGVlMTA1ODJiNmE5N2NjZDJhNzc1Njc0OTA4ZGZmMzhjLi5iZTE1NTNjMGM0M2EzOGZlNmNjNzg0
NTg1MjRiYjBhMWQ0MWY2YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5oCkBAIC0xMjksNiArMTI5LDEwIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldE1heFBpeGVsTWVtb3J5Rm9yVGVzdGluZyhzaXplX3QpOwogCisgICAgdm9p
ZCBub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIGJvb2wgbmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKKyAgICB2b2lkIHByZXBhcmVG
b3JEaXNwbGF5KCk7CisKIHByaXZhdGU6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKQEAgLTE4MCw2ICsxODQsNyBAQCBwcml2YXRlOgog
I2lmIEVOQUJMRShXRUJHTCkKICAgICBib29sIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVu
ZXIgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgYm9vbCBtX2hhc0luZm9ybWVkTmVlZEZvckRpc3Bs
YXlQcmVwYXJhdGlvbiB7IGZhbHNlIH07CiAKICAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9w
cmVzZW50ZWRJbWFnZTsKICAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9jb3BpZWRJbWFnZTsg
Ly8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRvIGNv
cHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3IgQ1NTQ2FudmFzVmFsdWUpLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcAppbmRleCBjYTI3NGRlYjFlNmQ4YjFlODc3NmZkNzM0ODQ4M2M0YWIwMDQw
MDkyLi5lYWViYWI0YTFhZTNmNDYwNmQxNGQ0M2NkYTU3MmY1ODdkYTQyOTUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcApAQCAtNzUyNiw2ICs3NTI2LDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiAgICAgcXVldWVUYXNr
VG9EaXNwYXRjaEV2ZW50KCpjYW52YXMsIFRhc2tTb3VyY2U6OldlYkdMLCBXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjaGFuZ2VkRXZlbnQsIEV2ZW50
OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpZZXMsIGVtcHR5U3RyaW5nKCkp
KTsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmVwYXJlRm9yRGlzcGxh
eSgpCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29u
dGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgKaW5kZXggOTFjZjBiOWZiODQwMzI1YzFiYmFjNmMzM2E3NjM1NWVmYzBjMzY0
NC4uMWM4YjdlYmEzMDE3MTI4MjQ5ZGM2MDA0NmJjNDVhMzY4YTBmNjE3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aApAQCAtMzgyLDYgKzM4Miw4IEBAIHB1YmxpYzoKICAgICAvLyBVc2VkIGZvciB0ZXN0aW5nIG9u
bHksIGZyb20gSW50ZXJuYWxzLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmFpbE5leHRH
UFVTdGF0dXNDaGVjaygpOwogCisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpOworCiAgICAg
Ly8gR3JhcGhpY3NDb250ZXh0R0w6OkNsaWVudAogICAgIHZvaWQgZGlkQ29tcG9zaXRlKCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCBkZjhlMzBlOTU1NzY2Y2NlYjY0ZDc5ZjJmYTI0NmNmYzBiMDRhNjgxLi4yZjBm
NTQ5ZGZmMDA3Yjc1ZTk0YWVmMmNhZGUzMTVkMzYxYTc0NzliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
QEAgLTE0NjMsNiArMTQ2MywxMCBAQCB2b2lkIFBhZ2U6OmRvQWZ0ZXJVcGRhdGVSZW5kZXJpbmco
KQogICAgIGlmIChVTkxJS0VMWShpc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKSkKICAgICAgICAg
d2hlZWxFdmVudFRlc3RNb25pdG9yKCktPmNoZWNrU2hvdWxkRmlyZUNhbGxiYWNrcygpOwogCisg
ICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9j
dW1lbnQucHJlcGFyZUNhbnZhc2VzRm9yRGlzcGxheUlmTmVlZGVkKCk7CisgICAgfSk7CisKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbWFpbkZyYW1lKCkudHJl
ZSgpLmZpcnN0UmVuZGVyZWRDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLnRy
YXZlcnNlTmV4dFJlbmRlcmVkKCkpIHsKICAgICAgICAgYXV0byogZnJhbWVWaWV3ID0gY2hpbGQt
PnZpZXcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCmluZGV4
IDY0MTQwNmQ4NGUyNDZmYjJkOGZjODk2MzI0Yzg1ZjE3NjZiYWQ0MmYuLjZiZTAxMjYwZDA2ZjEz
OGQ2YjVmZDY0NjUwMDg5NjQ3OTFiNjdjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb2NvYS5tbQpAQCAtODY3LDYgKzg2NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQog
fQogI2VuZGlmIC8vICFQTEFURk9STShNQUMpCiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKKyAgICBbbV93ZWJHTExheWVyIHByZXBhcmVGb3JE
aXNwbGF5XTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJH
TExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExh
eWVyLmgKaW5kZXggNjUyZWY1NDI0ZjA0NjljNjMxMWYxYTEyZDMxODBiNGIwMmVlNmMwNS4uNTUw
MTU2NjdmNmI1YTcwY2Y1ZDU2NWY0N2U4OTNjYTY0OGQ0MzEwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaApAQCAtNjIsNiAr
NjIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgIHZvaWQqIF9z
cGFyZVBidWZmZXI7CiAgICAgdm9pZCogX2xhdGNoZWRQYnVmZmVyOwogI2VuZGlmCisgICAgQk9P
TCBfcHJlcGFyZWQ7CiB9CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBOYWtlZFB0cjxXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gY29udGV4dDsKQEAgLTcwLDYgKzcxLDggQEAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIAogLSAoQ0dJbWFnZVJlZiljb3B5SW1h
Z2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZTsKIAor
LSAodm9pZClwcmVwYXJlRm9yRGlzcGxheTsKKwogI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdM
RSkKIC0gKHZvaWQpYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTooV2ViQ29y
ZTo6SW50U2l6ZSlzaXplIHVzaW5nQWxwaGE6KEJPT0wpdXNpbmdBbHBoYTsKIC0gKHZvaWQpYmlu
ZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IDhmMDI0NWZh
M2FlMTI0NDcxZDkxN2JkNjA0ZTZmYzM1YTliYzkxN2IuLjI4Njg1MTc2NmNhNGYzZWNiZDc3NTcz
MzYwN2U4Njk3MzRmZDc1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQpAQCAtMTYzLDIxICsxNjMsMjEgQEAgc3RhdGlj
IHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAq
LykKICNlbmRpZgogfQogCi0tICh2b2lkKWRpc3BsYXkKKy0gKHZvaWQpcHJlcGFyZUZvckRpc3Bs
YXkKIHsKICAgICBpZiAoIV9jb250ZXh0KQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBUbyBh
dm9pZCBydW5uaW5nIGFueSBPcGVuR0wgY29kZSBpbiBgZGlzcGxheWAsIHRoaXMgbWV0aG9kIHNo
b3VsZCBiZSBjYWxsZWQKKyAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJpbmcgdGFzay4g
V2Ugd2lsbCBmbHVzaCBhbGwgcGFpbnRpbmcgY29tbWFuZHMKKyAgICAvLyBsZWF2aW5nIHRoZSBi
dWZmZXJzIHJlYWR5IHRvIGNvbXBvc2l0ZS4KKwogI2lmIFVTRShPUEVOR0wpCiAgICAgX2NvbnRl
eHQtPnByZXBhcmVUZXh0dXJlKCk7CiAgICAgaWYgKF9kcmF3aW5nQnVmZmVyKSB7CiAgICAgICAg
IHN0ZDo6c3dhcChfY29udGVudHNCdWZmZXIsIF9kcmF3aW5nQnVmZmVyKTsKLSAgICAgICAgc2Vs
Zi5jb250ZW50cyA9IF9jb250ZW50c0J1ZmZlci0+YXNMYXllckNvbnRlbnRzKCk7Ci0gICAgICAg
IFtzZWxmIHJlbG9hZFZhbHVlRm9yS2V5UGF0aDpAImNvbnRlbnRzIl07CiAgICAgICAgIFtzZWxm
IGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdOwogICAgIH0KLSNlbGlmIFVT
RShPUEVOR0xfRVMpCi0gICAgX2NvbnRleHQtPnByZXNlbnRSZW5kZXJidWZmZXIoKTsKICNlbGlm
IFVTRShBTkdMRSkKICAgICBpZiAoIV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgewog
ICAgICAgICAvLyBDb250ZXh0IGlzIGxpa2VseSBiZWluZyB0b3JuIGRvd24uCkBAIC0xOTgsMTgg
KzE5OCw0MCBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEs
IHNpemVfdCAvKiBzaXplICovKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgX2xhdGNoZWRQ
YnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgfQorCiAgICAgICAgIHN0ZDo6c3dhcChfY29udGVu
dHNCdWZmZXIsIF9kcmF3aW5nQnVmZmVyKTsKICAgICAgICAgc3RkOjpzd2FwKF9jb250ZW50c1Bi
dWZmZXIsIF9kcmF3aW5nUGJ1ZmZlcik7CisgICAgICAgIFtzZWxmIGJpbmRGcmFtZWJ1ZmZlclRv
TmV4dEF2YWlsYWJsZVN1cmZhY2VdOworICAgIH0KKyNlbmRpZgorCisgICAgX3ByZXBhcmVkID0g
WUVTOworfQorCistICh2b2lkKWRpc3BsYXkKK3sKKyAgICBpZiAoIV9jb250ZXh0KQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3ZlIHBhaW50ZWQgaW50byB0aGUg
X2RyYXdpbmdCdWZmZXIgYW5kIHN3YXBwZWQgaXQgd2l0aCB0aGUgb2xkIF9jb250ZW50c0J1ZmZl
ciwKKyAgICAvLyBzbyBhbGwgd2UgbmVlZCB0byBkbyBoZXJlIGlzIHRpY2tsZSB0aGUgQ0FMYXll
ciB0byBsZXQgaXQga25vdyBpdCBoYXMgbmV3IGNvbnRlbnRzLgorICAgIC8vIFRoaXMgYXZvaWRz
IHJ1bm5pbmcgYW55IE9wZW5HTCBjb2RlIGluIHRoaXMgbWV0aG9kLgorCisjaWYgVVNFKE9QRU5H
TCkgfHwgVVNFKEFOR0xFKQorICAgIGlmIChfY29udGVudHNCdWZmZXIgJiYgX3ByZXBhcmVkKSB7
CiAgICAgICAgIHNlbGYuY29udGVudHMgPSBfY29udGVudHNCdWZmZXItPmFzTGF5ZXJDb250ZW50
cygpOwogICAgICAgICBbc2VsZiByZWxvYWRWYWx1ZUZvcktleVBhdGg6QCJjb250ZW50cyJdOwot
ICAgICAgICBbc2VsZiBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNlXTsKICAg
ICB9CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorICAgIF9jb250ZXh0LT5wcmVzZW50UmVuZGVyYnVm
ZmVyKCk7CiAjZW5kaWYKIAogICAgIF9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAg
ICAgYXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVy
Rm9yTGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+
b3duZXIoKSkKICAgICAgICAgbGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlk
RGlzcGxheShsYXllci5nZXQoKSk7CisKKyAgICBfcHJlcGFyZWQgPSBOTzsKIH0KIAogI2lmIFVT
RShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmluZGV4IDhiOWU5
ZTUzNmI5ZDM4YTA2OTkyYTM3NWYxY2NlYWYyYTk1NWIzNzEuLjMzZGI5OGJhNTdmNzM3OGJmYmEz
YmYyZjEyYTkwZTQ0YTgzNDVlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmNwcApAQCAtNzgyLDYgKzc4MiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
ZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpCiB7CiB9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKK30KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IGJiNTJlYjMw
ZDkxOWE0YmQyNDgwMDk1Y2M0Yzk5MWU3ODMyYWFmNDYuLjQ5ZTEwNjlmNmZlZGE0YzNiOGJjMmJm
MDgzYjJmODdiMzA2MzIzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBA
IC02NjEsNiArNjYxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2NyZWVuRGlkQ2hhbmdlKFBsYXRm
b3JtRGlzcGxheUlEKTsKICNlbmRpZgogCisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpOwor
CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNj
cmVlbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU2
OWZkNDY5NTliZmIxYWEyMWEwYjcwYWJkNjkyY2E0OTVlMDg3ZDQuLjM0MmM5YmEyN2ViYjQxNGUx
MjdjZjRhNzJmZmY5ODAwY2Q0YjE2YTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wNS0yOSAgRGVhbiBKYWNr
c29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgQXV0b1RyYWRlciBjcmFzaGVkIHdoaWxl
IGJyb3dzaW5nIHNlYXJjaCByZXN1bHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTI0NjEKKyAgICAgICAgcmRhcjovLzYwNzMzMTg1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9pb3MvV2ViR0xQcmVwYXJlRGlzcGxheU9uV2Vi
VGhyZWFkLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhy
ZWFkRGVsZWdhdGUgd2ViVmlld0RpZEZpbmlzaExvYWQ6XSk6CisgICAgICAgICgtW1dlYkdMUHJl
cGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlIHdlYlZpZXc6c2hvdWxkU3RhcnRMb2FkV2l0
aFJlcXVlc3Q6bmF2aWdhdGlvblR5cGU6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9pb3Mvd2ViZ2wu
aHRtbDogQWRkZWQuCisKIDIwMjAtMDUtMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSB0aGluZ3MgZnJvbSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyB0
aGF0IGFyZSBjb3ZlcmVkIGJ5IFBsYXRmb3JtRW5hYmxlQ29jb2EuaApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1MTE3MDZjNjNmODMyZmY3YWJmZGY4YWQwMDYyMGRkM2NhOGYzMWI1Li5iN2Q2
N2IyOTBhMjY0ZjY1OTdkODA5N2YzMTJmM2Y4Yzg1Yjc0MGY4IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTkyLDYgKzE5Miw4IEBACiAJCTMxNTExODEwMURCMUFFNDAwMDE3NjMwNCAvKiBF
eHRlbmRlZENvbG9yVGVzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE1MTE4MEYxREIxQURENTAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0
cy5jcHAgKi87IH07CiAJCTMxQjc2RTQzMjMyOThFMkMwMDdGRUQyQyAvKiBTeXN0ZW1QcmV2aWV3
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCNzZF
NDIyMzI5OEUyQjAwN0ZFRDJDIC8qIFN5c3RlbVByZXZpZXcubW0gKi87IH07CiAJCTMxQjc2RTQ1
MjMyOTlCREMwMDdGRUQyQyAvKiBzeXN0ZW0tcHJldmlldy10cmlnZ2VyLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCNzZFNDQyMzI5
OUJBMzAwN0ZFRDJDIC8qIHN5c3RlbS1wcmV2aWV3LXRyaWdnZXIuaHRtbCAqLzsgfTsKKwkJMzFF
OUJEQTEyNDdGNEM2MjAwMkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRTlCREEw
MjQ3RjRDNjIwMDJFNTFBMiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gKi87
IH07CisJCTMxRTlCREEzMjQ3RjU3MjkwMDJFNTFBMiAvKiB3ZWJnbC5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRTlCREEyMjQ3RjRE
RDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICovOyB9OwogCQkzM0JFNUFGOTEzN0I1QUFFMDA3MDU4
MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNCRTVBRjgxMzdCNUFBRTAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNEQzg5MTIxNDE5NTVGRTAw
NzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0RDODkwRTE0MTk1MzkzMDA3NDdFRjcgLyogc2lt
cGxlLWlmcmFtZS5odG1sICovOyB9OwogCQkzM0RDODkxNDE0MTk1NzlGMDA3NDdFRjcgLyogTG9h
ZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrX0J1bmRsZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0RDODkxMzE0MTk1NzlGMDA3NDdF
RjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrX0J1bmRsZS5jcHAgKi87
IH07CkBAIC0xNTkxLDYgKzE1OTMsNyBAQAogCQkJCTU3RURGQzVDMjQ1QTFBM0YwMDk1OTUyMSAv
KiB3ZWItYXV0aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWxhLW5vLW1vY2suaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLywKIAkJCQk1NzQyMTc4RTI0MDBEMkRGMDAyQjMwM0QgLyogd2ViLWF1
dGhlbnRpY2F0aW9uLW1ha2UtY3JlZGVudGlhbC1sYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
LAogCQkJCTFDMkI4MTg2MUM4OTI1OUQwMEE1NTI5RiAvKiB3ZWJmb250Lmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCisJCQkJMzFFOUJEQTMyNDdGNTcyOTAwMkU1MUEyIC8qIHdlYmdsLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTE3MTRFQjQxQ0Y4Qzc4QzAwNDcyM0M0IC8qIFdl
YlByb2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
NTE3MTRFQjUxQ0Y4Qzc4QzAwNDcyM0M0IC8qIFdlYlByb2Nlc3NLaWxsSURCQ2xlYW51cC0yLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8q
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBA
IC0xODEyLDYgKzE4MTUsOCBAQAogCQkzMTUxMTgwRjFEQjFBREQ1MDAxNzYzMDQgLyogRXh0ZW5k
ZWRDb2xvclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
dGVuZGVkQ29sb3JUZXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQjc2
RTQyMjMyOThFMkIwMDdGRUQyQyAvKiBTeXN0ZW1QcmV2aWV3Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtUHJldmlldy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzFCNzZFNDQyMzI5OUJBMzAwN0ZFRDJDIC8qIHN5c3RlbS1wcmV2aWV3
LXRyaWdnZXIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJzeXN0ZW0tcHJldmlldy10cmlnZ2VyLmh0bWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMUU5QkRBMDI0N0Y0QzYyMDAyRTUxQTIgLyog
V2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMUU5QkRBMjI0N0Y0REQwMDAyRTUxQTIgLyogd2ViZ2wuaHRtbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
IHdlYmdsLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzM0I5Q0UxMTI3N0Yy
MzEwMEZFRkNFMyAvKiBQcmV2ZW50RW1wdHlVc2VyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHJldmVudEVtcHR5VXNlckFnZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1vdXNlTW92
ZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW91
c2VNb3ZlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzQkU1
QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNyYXNoX0J1
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDExLDYgKzQ0MTYsNyBA
QAogCQkJCUNEQzA5MzJBMjFDODcyQzEwMDMwQzRCMCAvKiBTY3JvbGxpbmdEb2VzTm90UGF1c2VN
ZWRpYS5tbSAqLywKIAkJCQlGNDM0Q0ExOTIyRTY1QkNBMDA1RERCMjYgLyogU2Nyb2xsVG9SZXZl
YWxTZWxlY3Rpb24ubW0gKi8sCiAJCQkJMEY0RkZBOUQxRUQzQUE4NTAwRjcxMTFGIC8qIFNuYXBz
aG90VmlhUmVuZGVySW5Db250ZXh0Lm1tICovLAorCQkJCTMxRTlCREEwMjQ3RjRDNjIwMDJFNTFB
MiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00NDI4LDYgKzQ0MzQsNyBA
QAogCQkJCUNENzU4QTZFMjA1NzJENTQwMDcxODM0QSAvKiB2aWRlby13aXRoLXBhdXNlZC1hdWRp
by1hbmQtcGxheWluZy1tdXRlZC5odG1sICovLAogCQkJCUNEQzhFNDhCMUJDNUM5NjIwMDU5NEZF
QyAvKiB2aWRlby13aXRob3V0LWF1ZGlvLmh0bWwgKi8sCiAJCQkJQ0RDOEU0OEMxQkM1Qzk2MjAw
NTk0RkVDIC8qIHZpZGVvLXdpdGhvdXQtYXVkaW8ubXA0ICovLAorCQkJCTMxRTlCREEyMjQ3RjRE
RDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICovLAogCQkJKTsKIAkJCW5hbWUgPSBSZXNvdXJjZXM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTI0Nyw2ICs1MjU0LDcgQEAKIAkJCQk1
N0E3OTg1NzIyNEFCMzRFMDBBN0Y2RjEgLyogV2ViQ3J5cHRvTWFzdGVyS2V5Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzFGRjlFREIyNDQ2NDRGMDAwODM5QUU0IC8qIFdlYkZpbHRlci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTVDOTczRjVDMUY1OEVGOEIwMDM1OUMyNyAvKiBXZWJHTFBvbGljeS5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTMxRTlCREExMjQ3RjRDNjIwMDJFNTFBMiAvKiBXZWJHTFBy
ZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VBQjFB
NDExQTI0MDA0NDdDNEMgLyogV2ViS2l0QWdub3N0aWNUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE3MTRFQjgxQ0Y4Q0ExNzAwNDcyM0M0IC8qIFdlYlByb2Nlc3NLaWxsSURCQ2xlYW51cC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3Jp
cHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRMZWdhY3kvaW9zL1dlYkdMUHJlcGFyZURpc3BsYXlP
bldlYlRocmVhZC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVnYWN5L2lv
cy9XZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM0ZGFlNjZj
NmRkNTIxODYwMGE3ZjQ5Y2M4YTQ2MzFiODM5ODNkNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVnYWN5L2lvcy9XZWJHTFByZXBhcmVEaXNwbGF5
T25XZWJUaHJlYWQubW0KQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorCisjaWYgSEFWRShVSVdFQlZJRVcpCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZpcnR1YWxNYWNoaW5lLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaD4KKyNpbXBvcnQgPFVJ
S2l0L1VJS2l0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWQuaD4KKyNpbXBvcnQg
PHN0ZGxpYi5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW50ZXJmYWNlIFdlYkdM
UHJlcGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlIDogTlNPYmplY3QgPFVJV2ViVmlld0Rl
bGVnYXRlPiB7Cit9CitAZW5kCisKK3N0YXRpYyBib29sIGRpZEZpbmlzaExvYWQgPSBmYWxzZTsK
K3N0YXRpYyBib29sIGRpZEZpbmlzaFBhaW50aW5nID0gZmFsc2U7CitzdGF0aWMgYm9vbCBpc1Jl
YWR5ID0gZmFsc2U7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJU
aHJlYWREZWxlZ2F0ZQorCitJR05PUkVfV0FSTklOR1NfQkVHSU4oImRlcHJlY2F0ZWQtaW1wbGVt
ZW50YXRpb25zIikKKy0gKHZvaWQpd2ViVmlld0RpZEZpbmlzaExvYWQ6KFVJV2ViVmlldyAqKXdl
YlZpZXcKK3sKKyAgICBkaWRGaW5pc2hMb2FkID0gdHJ1ZTsKK30KKworLSAoQk9PTCl3ZWJWaWV3
OihVSVdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZFN0YXJ0TG9hZFdpdGhSZXF1ZXN0OihOU1VSTFJl
cXVlc3QgKilyZXF1ZXN0IG5hdmlnYXRpb25UeXBlOihVSVdlYlZpZXdOYXZpZ2F0aW9uVHlwZSlu
YXZpZ2F0aW9uVHlwZQoreworICAgIGlmIChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0
cmluZzpAImNhbGxiYWNrIl0gJiYgW3JlcXVlc3QuVVJMLnJlc291cmNlU3BlY2lmaWVyIGlzRXF1
YWxUb1N0cmluZzpAImRpZEZpbmlzaFBhaW50aW5nIl0pIHsKKyAgICAgICAgZGlkRmluaXNoUGFp
bnRpbmcgPSB0cnVlOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgaWYgKFtyZXF1
ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiY2FsbGJhY2siXSAmJiBbcmVxdWVzdC5V
UkwucmVzb3VyY2VTcGVjaWZpZXIgaXNFcXVhbFRvU3RyaW5nOkAiaXNSZWFkeSJdKSB7CisgICAg
ICAgIGlzUmVhZHkgPSB0cnVlOworICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgcmV0
dXJuIFlFUzsKK30KK0lHTk9SRV9XQVJOSU5HU19FTkQKKworQGVuZAorCituYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7CisKK1RFU1QoV2ViS2l0TGVnYWN5LCBXZWJHTFByZXBhcmVEaXNwbGF5T25X
ZWJUaHJlYWQpCit7CisgICAgUmV0YWluUHRyPFVJV2luZG93PiB1aVdpbmRvdyA9IGFkb3B0TlMo
W1tVSVdpbmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KV0pOworICAgIFJldGFpblB0cjxVSVdlYlZpZXc+IHVpV2ViVmlldyA9IGFkb3B0TlMoW1tVSVdl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsK
KyAgICBbdWlXaW5kb3cgYWRkU3Vidmlldzp1aVdlYlZpZXcuZ2V0KCldOworCisgICAgUmV0YWlu
UHRyPFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlPiB1aURlbGVnYXRlID0g
YWRvcHROUyhbW1dlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgdWlXZWJWaWV3LmdldCgpLmRlbGVnYXRlID0gdWlEZWxlZ2F0ZS5nZXQoKTsK
KworICAgIE5TVVJMICp1cmwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAid2ViZ2wiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOworICAgIE5TTG9nKEAiTG9hZGluZyAlQCIsIHVybCk7CisgICAgW3Vp
V2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnVybF1dOwor
CisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hMb2FkKTsKKyAgICBVdGlsOjpydW4oJmlzUmVhZHkp
OworCisgICAgUmV0YWluUHRyPEpTQ29udGV4dD4ganNDb250ZXh0ID0gW3VpV2ViVmlldyB2YWx1
ZUZvcktleVBhdGg6QCJkb2N1bWVudFZpZXcud2ViVmlldy5tYWluRnJhbWUuamF2YVNjcmlwdENv
bnRleHQiXTsKKworICAgIEVYUEVDVF9UUlVFKCEhanNDb250ZXh0LmdldCgpKTsKKworICAgIFJl
dGFpblB0cjxKU1ZpcnR1YWxNYWNoaW5lPiBqc1ZNID0gW2pzQ29udGV4dCB2aXJ0dWFsTWFjaGlu
ZV07CisgICAgRVhQRUNUX1RSVUUoW2pzVk0gaXNXZWJUaHJlYWRBd2FyZV0pOworCisgICAgLy8g
UmVsZWFzZSBXZWJUaHJlYWQgbG9jay4KKyAgICBVdGlsOjpzcGluUnVuTG9vcCgxKTsKKworICAg
IEVYUEVDVF9GQUxTRShXZWJUaHJlYWRJc0xvY2tlZCgpKTsKKworICAgIFtqc0NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJsb2FkQ29sb3JJbnRvVGV4dHVyZSgxMjgsIDEyOCwgMjU1LCAyNTUpIl07
CisgICAgW2pzQ29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImRyYXcoKSJdOworICAgIFV0aWw6OnJ1
bigmZGlkRmluaXNoUGFpbnRpbmcpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9pb3Mvd2ViZ2wuaHRtbCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVnYWN5L2lvcy93ZWJnbC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM2YTQwZjQzMGNmMTdjNzY0YTg4YTAxYTIxN2ExYmE5ODhhZmJiZWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9pb3Mvd2Vi
Z2wuaHRtbApAQCAtMCwwICsxLDE0MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aGVhZD4KKzx0aXRs
ZT5XZWJHTCBkcmF3aW5nPC90aXRsZT4KKzxzdHlsZT4KK2NhbnZhcyB7CisgICAgd2lkdGg6IDEw
MHB4OworICAgIGhlaWdodDogMTAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPHNjcmlwdCBp
ZD0idmVydGV4U2hhZGVyU291cmNlIiB0eXBlPSJ0ZXh0L2dsc2wiPgorYXR0cmlidXRlIHZlYzQg
YV9wb3NpdGlvbjsKK3ZhcnlpbmcgdmVjMiB2X3RleHR1cmVQb3NpdGlvbjsKKwordm9pZCBtYWlu
KCkgeworICAgIHZfdGV4dHVyZVBvc2l0aW9uID0gdmVjMigoYV9wb3NpdGlvbi54ICsgMS4wKSAv
IDIuMCwgKGFfcG9zaXRpb24ueSArIDEuMCkgLyAyLjApOworICAgIGdsX1Bvc2l0aW9uID0gYV9w
b3NpdGlvbjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXJTb3VyY2Ui
IHR5cGU9InRleHQvZ2xzbCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKwordmFyeWluZyB2
ZWMyIHZfdGV4dHVyZVBvc2l0aW9uOworCit1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOworCit2
b2lkIG1haW4oKSB7CisgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X3RleHR1
cmVQb3NpdGlvbik7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CitsZXQgdGV4dHVyZTsKK2xldCBn
bDsKK2xldCB0ZXh0dXJlVW5pZm9ybTsKK2xldCBOVU1CRVJfT0ZfUEFJTlRTX1JFTUFJTklORyA9
IDYwOworCitmdW5jdGlvbiBzaWduYWxSZWFkeSgpIHsKKyAgICB3aW5kb3cubG9jYXRpb24gPSAi
Y2FsbGJhY2s6aXNSZWFkeSI7Cit9CisKK2Z1bmN0aW9uIHNpZ25hbEZpbmlzaGVkKCkgeworICAg
IHdpbmRvdy5sb2NhdGlvbiA9ICJjYWxsYmFjazpkaWRGaW5pc2hQYWludGluZyI7Cit9CisKK2Z1
bmN0aW9uIGxvYWRDb2xvckludG9UZXh0dXJlKHIsIGcsIGIsIGEpIHsKKyAgICBnbC5iaW5kVGV4
dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRV
UkVfMkQsIDAsIGdsLlJHQkEsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG5l
dyBVaW50OEFycmF5KFtyLCBnLCBiLCBhXSkpOworfQorCitmdW5jdGlvbiBkcmF3KCkgeworICAg
IGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworCisgICAgZ2wuYWN0aXZlVGV4dHVyZShn
bC5URVhUVVJFMCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7
CisKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisKKyAgICBpZiAoTlVN
QkVSX09GX1BBSU5UU19SRU1BSU5JTkctLSkgeworICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1h
dGlvbkZyYW1lKGRyYXcpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNpZ25hbEZpbmlzaGVkKCk7
CisgICAgfQorfTsKKworZnVuY3Rpb24gcnVuKCkgeworCisgICAgbGV0IGNhbnZhcyA9IGRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3IoImNhbnZhcyIpOworICAgIGNhbnZhcy53aWR0aCA9IDEwMDsKKyAg
ICBjYW52YXMuaGVpZ2h0ID0gMTAwOworCisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgid2Vi
Z2wiKTsKKworICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CisKKyAgICBsZXQgdmVydGV4
U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpOworCisgICAgZ2wuc2hh
ZGVyU291cmNlKHZlcnRleFNoYWRlciwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZlcnRleFNo
YWRlclNvdXJjZSIpLnRleHRDb250ZW50KTsKKworICAgIGdsLmNvbXBpbGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKKyAgICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGds
LkNPTVBJTEVfU1RBVFVTKSkgeworICAgICAgICAvLyBXZSBmYWlsZWQgdG8gY29tcGlsZS4gT3V0
cHV0IHRvIHRoZSBjb25zb2xlIGFuZCBxdWl0LgorICAgICAgICBjb25zb2xlLmVycm9yKCJWZXJ0
ZXggU2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIpOworICAgICAgICBjb25zb2xlLmxvZyhnbC5n
ZXRTaGFkZXJJbmZvTG9nKHZlcnRleFNoYWRlcikpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbGV0IGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NI
QURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZnJhZ21lbnRTaGFkZXJTb3VyY2UiKS50ZXh0Q29udGVudCk7CisgICAgZ2wu
Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJh
bWV0ZXIoZnJhZ21lbnRTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkgeworICAgICAgICBjb25z
b2xlLmVycm9yKCJGcmFnbWVudCBTaGFkZXIgZmFpbGVkIHRvIGNvbXBpbGUuIik7CisgICAgICAg
IGNvbnNvbGUubG9nKGdsLmdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGxldCBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgp
OworICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0
dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2wubGlua1Byb2dyYW0o
cHJvZ3JhbSk7CisKKyAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wu
TElOS19TVEFUVVMpKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byBsaW5rIHNo
YWRlcnMgaW50byBwcm9ncmFtLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ2wu
dXNlUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIGxldCB0ZXh0dXJlVW5pZm9ybSA9IGdsLmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidGV4dHVyZSIpOworCisgICAgbGV0IHBvc2l0aW9uQXR0
cmlidXRlID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAg
ICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlvbkF0dHJpYnV0ZSk7CisKKyAgICBs
ZXQgdmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAtMSwgLTEsCisgICAgICAg
MSwgLTEsCisgICAgICAgMSwgMSwKKyAgICAgICAxLCAxLAorICAgICAgIC0xLCAxLAorICAgICAg
IC0xLCAtMQorICAgIF0pOworCisgICAgbGV0IHF1YWRCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIo
KTsKKworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBxdWFkQnVmZmVyKTsKKyAg
ICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdmVydGljZXMsIGdsLlNUQVRJQ19EUkFX
KTsKKworICAgIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgbG9hZENvbG9ySW50
b1RleHR1cmUoMCwgMTI4LCAyNTUsIDI1NSk7CisKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZ
X0JVRkZFUiwgcXVhZEJ1ZmZlcik7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlv
bkF0dHJpYnV0ZSwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAgIGdsLnVuaWZvcm0x
aSh0ZXh0dXJlVW5pZm9ybSwgMCk7CisKKyAgICBzaWduYWxSZWFkeSgpOworfQorCit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHJ1biwgZmFsc2UpOworPC9zY3JpcHQ+Cis8Ym9keT4K
KyAgICA8Y2FudmFzPjwvY2FudmFzPgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400646</attachid>
            <date>2020-05-29 19:13:04 -0700</date>
            <delta_ts>2020-05-30 09:12:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212461-20200530121303.patch</filename>
            <type>text/plain</type>
            <size>32710</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA2ZDY4Y2I4NmE4OWYy
N2I0NmI4MDc2ZTQwYzZhNzMwN2JjYjVkYi4uOTU0OTViMzIwNTFkY2FlNmY2OGEzZGMxNTRhOGEx
OWJlMTlhODcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDIwLTA1LTI5ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdXRvVHJhZGVyIGNyYXNoZWQg
d2hpbGUgYnJvd3Npbmcgc2VhcmNoIHJlc3VsdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ2MQorICAgICAgICByZGFyOi8vNjA3MzMxODUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbiBpT1MsIHdo
ZW4gdXNpbmcgV2ViS2l0MSAoVUlXZWJWaWV3KSwgQ29yZUFuaW1hdGlvbiB3b3VsZAorICAgICAg
ICBjYWxsIFdlYkdMTGF5ZXIncyBkaXNwbGF5IG1ldGhvZCBmcm9tIGEgdGhyZWFkIHRoYXQgaXMg
bm90CisgICAgICAgIHRoZSBXZWIgVGhyZWFkLiBUaGF0IG1ldGhvZCB3YXMgcGVyZm9ybWluZyBz
b21lIEdMIHdvcmsgdXNpbmcKKyAgICAgICAgQU5HTEUsIGNhdXNpbmcgYSBjcmFzaC4KKworICAg
ICAgICBTaW5jZSBhbGwgdGhlIFdlYkdMTGF5ZXIncyBkaXNwbGF5IG1ldGhvZCByZWFsbHkgbmVl
ZHMgdG8gZG8KKyAgICAgICAgaXMgc3dhcCBidWZmZXJzIGZvciBjb21wb3NpdGluZywgdGhlIGZp
eCBpcyB0byBzZXBhcmF0ZSBhbGwKKyAgICAgICAgdGhlIEdMIG9wZXJhdGlvbnMgaW50byBhIG1l
dGhvZCB0aGF0IGNhbiBiZSBjYWxsZWQgYWZ0ZXIKKyAgICAgICAgcGFpbnRpbmcgYnV0IGJlZm9y
ZSBjb21wb3NpdGluZy4gVGhpcyBzaG91bGQgYWxzbyBoYXZlIHRoZSBhZGRlZAorICAgICAgICBi
ZW5lZml0IHRoYXQgYnkgdGhlIHRpbWUgQ29yZUFuaW1hdGlvbiBjb21lcyB0byBjYWxsIGRpc3Bs
YXkKKyAgICAgICAgb24gYWxsIHRoZSBkaXJ0eSBsYXllcnMsIHdlIHdpbGwgaGF2ZSBhbHJlYWR5
IGV4ZWN1dGVkIG91cgorICAgICAgICBleHBlbnNpdmUgR1BVIHdvcmsuIFRoZSB0b3RhbCBhbW91
bnQgb2Ygd29yayBkb25lIG9uIHRoZSBHUFUKKyAgICAgICAgaXMgdGhlIHNhbWUsIGJ1dCBob3Bl
ZnVsbHkgaXQgaXMgbm93IGFsbCBkb25lIGluIFdlYktpdCdzCisgICAgICAgIHBhaW50IGN5Y2xl
LCByYXRoZXIgdGhhbiB3aGVuIHRoZSBXaW5kb3cgU2VydmVyIGlzIHRyeWluZworICAgICAgICB0
byBnZXQgQ0EgdG8gY29tcG9zaXRlIHRoaW5ncy4KKworICAgICAgICBBIHZlcnkgaGFwcHkgc2lk
ZS1lZmZlY3QgaXMgdGhhdCB0aGlzIGFsc28gZml4ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjI1MQorICAgICAgICB3aGljaCBoYWQgYmVlbiBk
aWZmaWN1bHQgdG8gZGlhZ25vc2UuCisKKyAgICAgICAgQ292ZXJlZCBieSBhIG5ldyBBUEkgdGVz
dDogV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkCisKKyAgICAgICAgKiBodG1sL0hUTUxD
YW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6SFRNTENhbnZhc0VsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2FudmFzRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlbW92ZWRGcm9tQW5j
ZXN0b3IpOgorICAgICAgICAgICAgQWRkIG9yIHJlbW92ZSB0aGUgZG9jdW1lbnQgYXMgYSBDYW52
YXNPYnNlcnZlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpuZWVkc1By
ZXBhcmF0aW9uRm9yRGlzcGxheSk6CisgICAgICAgICAgICBTaWduYWxzIHdoZXRoZXIgdGhpcyBl
bGVtZW50IGlzIHRoZSB0eXBlIHRoYXQgbmVlZHMgcHJlcGFyYXRpb24uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAgICAg
VGVsbCB0aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGl0IG11c3QgcHJlcGFyZS4KKworICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAg
ICAgICAgIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbXVzdCBmb3J3YXJkIHRoZSBjYWxsCisg
ICAgICAgICAgICB0byBwcmVwYXJlIGRvd24gdG8gdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAgICAgICAgIEFuZCB0aGUg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgZm9yd2FyZHMgdGhlIGNhbGwKKyAgICAgICAgICAgIGlu
dG8gdGhlIFdlYkdMTGF5ZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXll
ci5tbToKKyAgICAgICAgKC1bV2ViR0xMYXllciBwcmVwYXJlRm9yRGlzcGxheV0pOgorICAgICAg
ICAoLVtXZWJHTExheWVyIGRpc3BsYXldKToKKyAgICAgICAgICAgIFNwbGl0IHRoZSBwYXJ0cyBv
ZiB0aGUgYGRpc3BsYXlgIG1ldGhvZCB0aGF0IGRlYWwKKyAgICAgICAgICAgIHdpdGggZmx1c2hp
bmcgdGhlIEdMIGNvbW1hbmRzLCBwcmVwYXJpbmcgdGhlIGZyYW1lYnVmZmVyIHRleHR1cmUsCisg
ICAgICAgICAgICBhbmQgc3dhcHBpbmcgdGhlIElPU3VyZmFjZXMgaW50byBhIG5ldyBgcHJlcGFy
ZUZvckRpc3BsYXlgLiBUaGlzCisgICAgICAgICAgICBtZXRob2QgaXMgaW52b2tlZCBhdCB0aGUg
ZW5kIG9mIHRoZSByZW5kZXJpbmcvbGF5b3V0IHRhc2tzLCBsZWF2aW5nCisgICAgICAgICAgICB0
aGUgYGRpc3BsYXlgIG1ldGhvZCB0byBvbmx5IHRlbGwgQ29yZUFuaW1hdGlvbiBhYm91dCBhIG5l
dyBidWZmZXIKKyAgICAgICAgICAgIHRvIGNvbXBvc2l0ZS4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudC5jcHA6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cHJlcGFyZUNhbnZhc2VzRm9yRGlzcGxheUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAgICAgS2VlcCBhIHNldCBvZiBIVE1MQ2Fu
dmFzRWxlbWVudHMgdGhhdCBuZWVkIHRvCisgICAgICAgICAgICBiZSBwcmVwYXJlZCBzbyB3ZSBj
YW4gdGVsbCB0aGVtIHdoZW4gdGhleSBuZWVkIHRvIHByZXBhcmUuCisgICAgICAgICAgICBEbyB0
aGlzIGJ5IGJlY29taW5nIGEgQ2FudmFzT2JzZXJ2ZXIsIHRodXMgZ2V0dGluZworICAgICAgICAg
ICAgbm90aWZpZWQgd2hlbiBhIGNhbnZhcyBoYXMgZG9uZSBzb21ldGhpbmcgdGhhdAorICAgICAg
ICAgICAgd291bGQgY2F1c2UgcGFpbnRpbmcuCisKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZG9BZnRlclVwZGF0ZVJlbmRlcmluZyk6CisgICAgICAg
ICAgICBBZGQgYSBuZXcgdGFzayB0aGF0IGFza3MgdGhlIERvY3VtZW50IHRvIG5vdGlmeQorICAg
ICAgICAgICAgYWxsIHJlbGV2YW50IGNhbnZhcyBvYmplY3RzIHRoYXQgdGhleSBzaG91bGQgcHJl
cGFyZQorICAgICAgICAgICAgZm9yIGRpc3BsYXkuCisKIDIwMjAtMDUtMjcgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGluZ3MgZnJvbSBGZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZyB0aGF0IGFyZSBjb3ZlcmVkIGJ5IFBsYXRmb3JtRW5hYmxlQ29jb2Eu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggY2Y2Y2FlNGNjZTBjYzRkZDE0OTM5NDU4OWE1
NTk5N2Q5YzllNDJlZi4uZTMxMTkxNWVkMjIyNzk0NjJjMzJlMzE1YTIxZmUwNmQ5MmY3ZGU1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04NTgyLDYgKzg1ODIsMzQgQEAgTGF6eUxvYWRJ
bWFnZU9ic2VydmVyJiBEb2N1bWVudDo6bGF6eUxvYWRJbWFnZU9ic2VydmVyKCkKICAgICByZXR1
cm4gKm1fbGF6eUxvYWRJbWFnZU9ic2VydmVyOwogfQogCit2b2lkIERvY3VtZW50OjpwcmVwYXJl
Q2FudmFzZXNGb3JEaXNwbGF5SWZOZWVkZWQoKQoreworICAgIC8vIFNvbWUgY2FudmFzIGNvbnRl
eHRzIG5lZWQgdG8gZG8gd29yayB3aGVuIHJlbmRlcmluZyBoYXMgZmluaXNoZWQgYnV0CisgICAg
Ly8gYmVmb3JlIHRoZWlyIGNvbnRlbnQgaXMgY29tcG9zaXRlZC4KKyAgICBmb3IgKGF1dG8qIGNh
bnZhcyA6IG1fY2FudmFzZXNOZWVkaW5nRGlzcGxheVByZXBhcmF0aW9uKSB7CisgICAgICAgIGF1
dG8gcmVmQ291bnRlZENhbnZhcyA9IG1ha2VSZWZQdHIoY2FudmFzKTsKKyAgICAgICAgcmVmQ291
bnRlZENhbnZhcy0+cHJlcGFyZUZvckRpc3BsYXkoKTsKKyAgICB9CisgICAgbV9jYW52YXNlc05l
ZWRpbmdEaXNwbGF5UHJlcGFyYXRpb24uY2xlYXIoKTsKK30KKwordm9pZCBEb2N1bWVudDo6Y2Fu
dmFzQ2hhbmdlZChDYW52YXNCYXNlJiBjYW52YXNCYXNlLCBjb25zdCBGbG9hdFJlY3QmKQorewor
ICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpIHsKKyAgICAgICAgYXV0
byogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCZjYW52YXNCYXNlKTsKKyAg
ICAgICAgaWYgKGNhbnZhcy0+bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSkKKyAgICAgICAg
ICAgIG1fY2FudmFzZXNOZWVkaW5nRGlzcGxheVByZXBhcmF0aW9uLmFkZChjYW52YXMpOworICAg
IH0KK30KKwordm9pZCBEb2N1bWVudDo6Y2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZh
c0Jhc2UpCit7CisgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSkgewor
ICAgICAgICBhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oJmNhbnZh
c0Jhc2UpOworICAgICAgICBtX2NhbnZhc2VzTmVlZGluZ0Rpc3BsYXlQcmVwYXJhdGlvbi5yZW1v
dmUoY2FudmFzKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI3VuZGVm
IFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggOTQ4YWU0NjFl
NzYxMzJkOTE1ODg4MWU1OTkxM2JkNjJhZDgzYTAzYS4uOGEyOTdkOWY5MzA1ZGY1ZjRjODFmNjgz
YzkyNzUwNmJmOTU0M2IzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Lmgi
CisjaW5jbHVkZSAiQ2FudmFzQmFzZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAi
Q29udGFpbmVyTm9kZS5oIgogI2luY2x1ZGUgIkRpc2FibGVkQWRhcHRhdGlvbnMuaCIKQEAgLTM1
Nyw3ICszNTgsOCBAQCBjbGFzcyBEb2N1bWVudAogICAgICwgcHVibGljIEZvbnRTZWxlY3RvckNs
aWVudAogICAgICwgcHVibGljIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcgogICAgICwgcHVibGlj
IFN1cHBsZW1lbnRhYmxlPERvY3VtZW50PgotICAgICwgcHVibGljIExvZ2dlcjo6T2JzZXJ2ZXIg
eworICAgICwgcHVibGljIExvZ2dlcjo6T2JzZXJ2ZXIKKyAgICAsIHB1YmxpYyBDYW52YXNPYnNl
cnZlciB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChEb2N1bWVudCk7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxEb2N1bWVudD4gY3JlYXRlKGNvbnN0IFVSTCYpOwpAQCAtMTU5Miw2ICsx
NTk0LDExIEBAIHB1YmxpYzoKICAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1
cm4gbV9zZWxlY3Rpb247IH0KICAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KIAorICAgIHZvaWQgcHJlcGFyZUNhbnZhc2Vz
Rm9yRGlzcGxheUlmTmVlZGVkKCk7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2Um
LCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFz
QmFzZSYpIGZpbmFsIHsgfTsKKyAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJikg
ZmluYWw7CisKIHByb3RlY3RlZDoKICAgICBlbnVtIENvbnN0cnVjdGlvbkZsYWdzIHsgU3ludGhl
c2l6ZWQgPSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVyID0gMSA8PCAxIH07CiAgICAgRG9jdW1l
bnQoRnJhbWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9IERlZmF1bHREb2N1bWVudENsYXNzLCB1
bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpAQCAtMTgxMCw2ICsxODE3LDExIEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9ucz4gbV9zdmdF
eHRlbnNpb25zOwogICAgIEhhc2hTZXQ8U1ZHVXNlRWxlbWVudCo+IG1fc3ZnVXNlRWxlbWVudHM7
CiAKKyAgICAvLyBDb2xsZWN0aW9uIG9mIGNhbnZhcyBvYmplY3RzIHRoYXQgbmVlZCB0byBkbyB3
b3JrIGFmdGVyIHRoZXkndmUKKyAgICAvLyByZW5kZXJlZCBidXQgYmVmb3JlIGNvbXBvc2l0aW5n
LCBmb3IgdGhlIG5leHQgZnJhbWUuIFRoZSBzZXQgaXMKKyAgICAvLyBjbGVhcmVkIGFmdGVyIHRo
ZXkndmUgYmVlbiBjYWxsZWQuCisgICAgSGFzaFNldDxIVE1MQ2FudmFzRWxlbWVudCo+IG1fY2Fu
dmFzZXNOZWVkaW5nRGlzcGxheVByZXBhcmF0aW9uOworCiAjaWYgRU5BQkxFKERBUktfTU9ERV9D
U1MpCiAgICAgT3B0aW9uU2V0PENvbG9yU2NoZW1lPiBtX2NvbG9yU2NoZW1lOwogICAgIGJvb2wg
bV9hbGxvd3NDb2xvclNjaGVtZVRyYW5zZm9ybWF0aW9ucyB7IHRydWUgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMGFkMjBiMWMxNWRkNzgyYjU5ZTcx
YmY0MmY2YThiYjIwMmMwN2YzNy4uNDczZmE5NTI0ZWRmY2E5OGYwMWVhYTQ4MDNlNzJiNTA1NWM1
NTgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTEy
NCw2ICsxMjQsNyBAQCBIVE1MQ2FudmFzRWxlbWVudDo6SFRNTENhbnZhc0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvYwogICAgICwgQWN0aXZlRE9NT2Jq
ZWN0KGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGNhbnZhc1RhZykpOworICAg
IGFkZE9ic2VydmVyKGRvY3VtZW50KTsKIH0KIAogUmVmPEhUTUxDYW52YXNFbGVtZW50PiBIVE1M
Q2FudmFzRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTE0NSw2ICsxNDYs
NyBAQCBIVE1MQ2FudmFzRWxlbWVudDo6fkhUTUxDYW52YXNFbGVtZW50KCkKICAgICAvLyBGSVhN
RTogVGhpcyBoYXMgdG8gYmUgY2FsbGVkIGhlcmUgYmVjYXVzZSBDU1NDYW52YXNWYWx1ZTo6Q2Fu
dmFzT2JzZXJ2ZXJQcm94eTo6Y2FudmFzRGVzdHJveWVkKCkKICAgICAvLyBkb3duY2FzdHMgdGhl
IENhbnZhc0Jhc2Ugb2JqZWN0IHRvIEhUTUxDYW52YXNFbGVtZW50LiBUaGF0IGludm9rZXMgdmly
dHVhbCBtZXRob2RzLCB3aGljaCBzaG91bGQgYmUKICAgICAvLyBhdm9pZGVkIGluIGRlc3RydWN0
b3JzLCBidXQgd29ya3MgYXMgbG9uZyBhcyBpdCdzIGRvbmUgYmVmb3JlIEhUTUxDYW52YXNFbGVt
ZW50IGRlc3RydWN0cyBjb21wbGV0ZWx5LgorICAgIC8vIFRoaXMgd2lsbCBhbHNvIGNhdXNlIHRo
ZSBkb2N1bWVudCB0byByZW1vdmUgaXRzZWxmIGFzIGFuIG9ic2VydmVyLgogICAgIG5vdGlmeU9i
c2VydmVyc0NhbnZhc0Rlc3Ryb3llZCgpOwogCiAgICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8g
RW5zdXJlIHRoaXMgZ29lcyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCkBAIC05OTcsNCAr
OTk5LDMzIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmV2ZW50TGlzdGVuZXJzRGlkQ2hhbmdl
KCkKICNlbmRpZgogfQogCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1
bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKK3sKKyAg
ICByZW1vdmVPYnNlcnZlcihvbGREb2N1bWVudCk7CisgICAgYWRkT2JzZXJ2ZXIobmV3RG9jdW1l
bnQpOworCisgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50
LCBuZXdEb2N1bWVudCk7Cit9CisKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlbW92ZWRGcm9t
QW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcmVu
dE9mUmVtb3ZlZFRyZWUpCit7CisgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21E
b2N1bWVudCkKKyAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIob2xkUGFyZW50T2ZSZW1vdmVkVHJlZS5k
b2N1bWVudCgpKTsKKworICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKHJlbW92
YWxUeXBlLCBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKTsKK30KKworYm9vbCBIVE1MQ2FudmFzRWxl
bWVudDo6bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKQoreworICAgIHJldHVybiBpczxXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlzcGxheSgpCit7CisgICAgQVNTRVJUKG5lZWRzUHJl
cGFyYXRpb25Gb3JEaXNwbGF5KCkpOworCisgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U+KG1fY29udGV4dC5nZXQoKSkpCisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQoKSktPnByZXBhcmVGb3JEaXNwbGF5KCk7Cit9CisK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCA1MGU3YzJjZGVl
MTA1ODJiNmE5N2NjZDJhNzc1Njc0OTA4ZGZmMzhjLi4yMTA1Y2U2NDQ3MWQwNGVlOGE1MDkyMjEz
OWQxOWQwM2VhM2UxMWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CkBAIC0xMjksNiArMTI5LDkgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgc2V0TWF4UGl4ZWxNZW1vcnlGb3JUZXN0aW5nKHNpemVfdCk7CiAKKyAgICBib29sIG5l
ZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgp
OworCiBwcml2YXRlOgogICAgIEhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCkBAIC0xNjUsNiArMTY4LDkgQEAgcHJpdmF0ZToKIAogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gSFRNTEVsZW1lbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsg
fQogCisgICAgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQs
IERvY3VtZW50JiBuZXdEb2N1bWVudCkgZmluYWw7CisgICAgdm9pZCByZW1vdmVkRnJvbUFuY2Vz
dG9yKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKSBm
aW5hbDsKKwogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKIAogICAgIGJvb2wgbV9pZ25vcmVS
ZXNldCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IGNhMjc0ZGViMWU2ZDhiMWU4Nzc2
ZmQ3MzQ4NDgzYzRhYjAwNDAwOTIuLmVhZWJhYjRhMWFlM2Y0NjA2ZDE0ZDQzY2RhNTcyZjU4N2Rh
NDI5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC03NTI2LDYgKzc1MjYsMTMgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9u
KCkKICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKmNhbnZhcywgVGFza1NvdXJjZTo6V2Vi
R0wsIFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNo
YW5nZWRFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Olll
cywgZW1wdHlTdHJpbmcoKSkpOwogfQogCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnByZXBhcmVGb3JEaXNwbGF5KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jb250ZXh0LT5wcmVwYXJlRm9yRGlzcGxheSgpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAppbmRleCA5MWNmMGI5ZmI4NDAzMjVjMWJiYWM2
YzMzYTc2MzU1ZWZjMGMzNjQ0Li4xYzhiN2ViYTMwMTcxMjgyNDlkYzYwMDQ2YmM0NWEzNjhhMGY2
MTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCkBAIC0zODIsNiArMzgyLDggQEAgcHVibGljOgogICAgIC8vIFVz
ZWQgZm9yIHRlc3Rpbmcgb25seSwgZnJvbSBJbnRlcm5hbHMuCiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCk7CiAKKyAgICB2b2lkIHByZXBhcmVGb3JE
aXNwbGF5KCk7CisKICAgICAvLyBHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50CiAgICAgdm9pZCBk
aWRDb21wb3NpdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGRmOGUzMGU5NTU3NjZjY2ViNjRkNzlmMmZhMjQ2
Y2ZjMGIwNGE2ODEuLjJmMGY1NDlkZmYwMDdiNzVlOTRhZWYyY2FkZTMxNWQzNjFhNzQ3OWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtMTQ2Myw2ICsxNDYzLDEwIEBAIHZvaWQgUGFnZTo6ZG9BZnRl
clVwZGF0ZVJlbmRlcmluZygpCiAgICAgaWYgKFVOTElLRUxZKGlzTW9uaXRvcmluZ1doZWVsRXZl
bnRzKCkpKQogICAgICAgICB3aGVlbEV2ZW50VGVzdE1vbml0b3IoKS0+Y2hlY2tTaG91bGRGaXJl
Q2FsbGJhY2tzKCk7CiAKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVu
dCkgeworICAgICAgICBkb2N1bWVudC5wcmVwYXJlQ2FudmFzZXNGb3JEaXNwbGF5SWZOZWVkZWQo
KTsKKyAgICB9KTsKKwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgZm9yIChGcmFtZSogY2hpbGQg
PSBtYWluRnJhbWUoKS50cmVlKCkuZmlyc3RSZW5kZXJlZENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT50cmVlKCkudHJhdmVyc2VOZXh0UmVuZGVyZWQoKSkgewogICAgICAgICBhdXRvKiBm
cmFtZVZpZXcgPSBjaGlsZC0+dmlldygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW0KaW5kZXggNjQxNDA2ZDg0ZTI0NmZiMmQ4ZmM4OTYzMjRjODVmMTc2NmJhZDQy
Zi4uNmJlMDEyNjBkMDZmMTM4ZDZiNWZkNjQ2NTAwODk2NDc5MWI2N2NkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC04NjcsNiArODY3LDExIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQpCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykKIAordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQoreworICAgIFttX3dlYkdM
TGF5ZXIgcHJlcGFyZUZvckRpc3BsYXldOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYkdMTGF5ZXIuaAppbmRleCA2NTJlZjU0MjRmMDQ2OWM2MzExZjFhMTJkMzE4
MGI0YjAyZWU2YzA1Li41NTAxNTY2N2Y2YjVhNzBjZjVkNTY1ZjQ3ZTg5M2NhNjQ4ZDQzMTBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExh
eWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xM
YXllci5oCkBAIC02Miw2ICs2Miw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCiAgICAgdm9pZCogX3NwYXJlUGJ1ZmZlcjsKICAgICB2b2lkKiBfbGF0Y2hlZFBidWZmZXI7
CiAjZW5kaWYKKyAgICBCT09MIF9wcmVwYXJlZDsKIH0KIAogQHByb3BlcnR5IChub25hdG9taWMp
IE5ha2VkUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjb250ZXh0OwpAQCAt
NzAsNiArNzEsOCBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogCiAtIChD
R0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFjZVJl
Ziljb2xvclNwYWNlOwogCistICh2b2lkKXByZXBhcmVGb3JEaXNwbGF5OworCiAjaWYgVVNFKE9Q
RU5HTCkgfHwgVVNFKEFOR0xFKQogLSAodm9pZClhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9y
ZVdpdGhTaXplOihXZWJDb3JlOjpJbnRTaXplKXNpemUgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0Fs
cGhhOwogLSAodm9pZCliaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXll
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIu
bW0KaW5kZXggOGYwMjQ1ZmEzYWUxMjQ0NzFkOTE3YmQ2MDRlNmZjMzVhOWJjOTE3Yi4uMjg2ODUx
NzY2Y2E0ZjNlY2JkNzc1NzMzNjA3ZTg2OTczNGZkNzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCkBAIC0xNjMsMjEg
KzE2MywyMSBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEs
IHNpemVfdCAvKiBzaXplICovKQogI2VuZGlmCiB9CiAKLS0gKHZvaWQpZGlzcGxheQorLSAodm9p
ZClwcmVwYXJlRm9yRGlzcGxheQogewogICAgIGlmICghX2NvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIC8vIFRvIGF2b2lkIHJ1bm5pbmcgYW55IE9wZW5HTCBjb2RlIGluIGBkaXNwbGF5
YCwgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZAorICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhl
IHJlbmRlcmluZyB0YXNrLiBXZSB3aWxsIGZsdXNoIGFsbCBwYWludGluZyBjb21tYW5kcworICAg
IC8vIGxlYXZpbmcgdGhlIGJ1ZmZlcnMgcmVhZHkgdG8gY29tcG9zaXRlLgorCiAjaWYgVVNFKE9Q
RU5HTCkKICAgICBfY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKICAgICBpZiAoX2RyYXdpbmdC
dWZmZXIpIHsKICAgICAgICAgc3RkOjpzd2FwKF9jb250ZW50c0J1ZmZlciwgX2RyYXdpbmdCdWZm
ZXIpOwotICAgICAgICBzZWxmLmNvbnRlbnRzID0gX2NvbnRlbnRzQnVmZmVyLT5hc0xheWVyQ29u
dGVudHMoKTsKLSAgICAgICAgW3NlbGYgcmVsb2FkVmFsdWVGb3JLZXlQYXRoOkAiY29udGVudHMi
XTsKICAgICAgICAgW3NlbGYgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07
CiAgICAgfQotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICBfY29udGV4dC0+cHJlc2VudFJlbmRl
cmJ1ZmZlcigpOwogI2VsaWYgVVNFKEFOR0xFKQogICAgIGlmICghX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKSB7CiAgICAgICAgIC8vIENvbnRleHQgaXMgbGlrZWx5IGJlaW5nIHRvcm4g
ZG93bi4KQEAgLTE5OCwxOCArMTk4LDQwIEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwg
Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBfbGF0Y2hlZFBidWZmZXIgPSBudWxscHRyOwogICAgICAgICB9CisKICAgICAgICAg
c3RkOjpzd2FwKF9jb250ZW50c0J1ZmZlciwgX2RyYXdpbmdCdWZmZXIpOwogICAgICAgICBzdGQ6
OnN3YXAoX2NvbnRlbnRzUGJ1ZmZlciwgX2RyYXdpbmdQYnVmZmVyKTsKKyAgICAgICAgW3NlbGYg
YmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07CisgICAgfQorI2VuZGlmCisK
KyAgICBfcHJlcGFyZWQgPSBZRVM7Cit9CisKKy0gKHZvaWQpZGlzcGxheQoreworICAgIGlmICgh
X2NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UndmUg
cGFpbnRlZCBpbnRvIHRoZSBfZHJhd2luZ0J1ZmZlciBhbmQgc3dhcHBlZCBpdCB3aXRoIHRoZSBv
bGQgX2NvbnRlbnRzQnVmZmVyLAorICAgIC8vIHNvIGFsbCB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMg
dGlja2xlIHRoZSBDQUxheWVyIHRvIGxldCBpdCBrbm93IGl0IGhhcyBuZXcgY29udGVudHMuCisg
ICAgLy8gVGhpcyBhdm9pZHMgcnVubmluZyBhbnkgT3BlbkdMIGNvZGUgaW4gdGhpcyBtZXRob2Qu
CisKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCisgICAgaWYgKF9jb250ZW50c0J1ZmZl
ciAmJiBfcHJlcGFyZWQpIHsKICAgICAgICAgc2VsZi5jb250ZW50cyA9IF9jb250ZW50c0J1ZmZl
ci0+YXNMYXllckNvbnRlbnRzKCk7CiAgICAgICAgIFtzZWxmIHJlbG9hZFZhbHVlRm9yS2V5UGF0
aDpAImNvbnRlbnRzIl07Ci0gICAgICAgIFtzZWxmIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWls
YWJsZVN1cmZhY2VdOwogICAgIH0KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisgICAgX2NvbnRleHQt
PnByZXNlbnRSZW5kZXJidWZmZXIoKTsKICNlbmRpZgogCiAgICAgX2NvbnRleHQtPm1hcmtMYXll
ckNvbXBvc2l0ZWQoKTsKICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpwbGF0Zm9ybUNBTGF5ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAgaWYg
KGxheWVyICYmIGxheWVyLT5vd25lcigpKQogICAgICAgICBsYXllci0+b3duZXIoKS0+cGxhdGZv
cm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KGxheWVyLmdldCgpKTsKKworICAgIF9wcmVwYXJlZCA9
IE5POwogfQogCiAjaWYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5jcHAKaW5kZXggOGI5ZTllNTM2YjlkMzhhMDY5OTJhMzc1ZjFjY2VhZjJhOTU1YjM3MS4uMzNk
Yjk4YmE1N2Y3Mzc4YmZiYTNiZjJmMTJhOTBlNDRhODM0NWUxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwCkBAIC03ODIsNiArNzgyLDEwIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKIHsKIH0KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQoreworfQogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgKaW5kZXggYmI1MmViMzBkOTE5YTRiZDI0ODAwOTVjYzRjOTkxZTc4MzJhYWY0Ni4uNDllMTA2
OWY2ZmVkYTRjM2I4YmMyYmYwODNiMmY4N2IzMDYzMjM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgKQEAgLTY2MSw2ICs2NjEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3Jl
ZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQpOwogI2VuZGlmCiAKKyAgICB2b2lkIHByZXBh
cmVGb3JEaXNwbGF5KCk7CisKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wo
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBE
ZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29u
dGV4dCA9IG51bGxwdHIpOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNTY5ZmQ0Njk1OWJmYjFhYTIxYTBiNzBhYmQ2OTJjYTQ5NWUwODdkNC4u
MzQyYzliYTI3ZWJiNDE0ZTEyN2NmNGE3MmZmZjk4MDBjZDRiMTZhMiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIw
LTA1LTI5ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdXRvVHJh
ZGVyIGNyYXNoZWQgd2hpbGUgYnJvd3Npbmcgc2VhcmNoIHJlc3VsdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ2MQorICAgICAgICByZGFyOi8v
NjA3MzMxODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVnYWN5L2lvcy9XZWJHTFBy
ZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW06IEFkZGVkLgorICAgICAgICAoLVtXZWJHTFByZXBh
cmVEaXNwbGF5T25XZWJUaHJlYWREZWxlZ2F0ZSB3ZWJWaWV3RGlkRmluaXNoTG9hZDpdKToKKyAg
ICAgICAgKC1bV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkRGVsZWdhdGUgd2ViVmlldzpz
aG91bGRTdGFydExvYWRXaXRoUmVxdWVzdDpuYXZpZ2F0aW9uVHlwZTpdKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
TGVnYWN5L2lvcy93ZWJnbC5odG1sOiBBZGRlZC4KKwogMjAyMC0wNS0yNyAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHRoaW5ncyBmcm9tIEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnIHRoYXQgYXJlIGNvdmVyZWQgYnkgUGxhdGZvcm1FbmFibGVDb2NvYS5o
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUxMTcwNmM2M2Y4MzJmZjdhYmZkZjhhZDAwNjIw
ZGQzY2E4ZjMxYjUuLmI3ZDY3YjI5MGEyNjRmNjU5N2Q4MDk3ZjMxMmYzZjhjODViNzQwZjggMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTIsNiArMTkyLDggQEAKIAkJMzE1MTE4MTAxREIx
QUU0MDAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTUxMTgwRjFEQjFBREQ1MDAxNzYzMDQgLyog
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcCAqLzsgfTsKIAkJMzFCNzZFNDMyMzI5OEUyQzAwN0ZFRDJD
IC8qIFN5c3RlbVByZXZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMUI3NkU0MjIzMjk4RTJCMDA3RkVEMkMgLyogU3lzdGVtUHJldmlldy5tbSAq
LzsgfTsKIAkJMzFCNzZFNDUyMzI5OUJEQzAwN0ZFRDJDIC8qIHN5c3RlbS1wcmV2aWV3LXRyaWdn
ZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMUI3NkU0NDIzMjk5QkEzMDA3RkVEMkMgLyogc3lzdGVtLXByZXZpZXctdHJpZ2dlci5o
dG1sICovOyB9OworCQkzMUU5QkRBMTI0N0Y0QzYyMDAyRTUxQTIgLyogV2ViR0xQcmVwYXJlRGlz
cGxheU9uV2ViVGhyZWFkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzFFOUJEQTAyNDdGNEM2MjAwMkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlP
bldlYlRocmVhZC5tbSAqLzsgfTsKKwkJMzFFOUJEQTMyNDdGNTcyOTAwMkU1MUEyIC8qIHdlYmds
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzFFOUJEQTIyNDdGNEREMDAwMkU1MUEyIC8qIHdlYmdsLmh0bWwgKi87IH07CiAJCTMzQkU1
QUY5MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0JFNUFGODEzN0I1
QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwICovOyB9OwogCQkz
M0RDODkxMjE0MTk1NUZFMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFtZS5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzREM4OTBFMTQxOTUz
OTMwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi87IH07CiAJCTMzREM4OTE0MTQxOTU3
OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzREM4
OTEzMTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJh
Y2tfQnVuZGxlLmNwcCAqLzsgfTsKQEAgLTE1OTEsNiArMTU5Myw3IEBACiAJCQkJNTdFREZDNUMy
NDVBMUEzRjAwOTU5NTIxIC8qIHdlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNyZWRlbnRpYWwtbGEt
bm8tbW9jay5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTU3NDIxNzhFMjQwMEQyREYw
MDJCMzAzRCAvKiB3ZWItYXV0aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWxhLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUMyQjgxODYxQzg5MjU5RDAwQTU1MjlGIC8qIHdlYmZv
bnQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJCQkzMUU5QkRBMzI0N0Y1NzI5MDAyRTUx
QTIgLyogd2ViZ2wuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTcxNEVCNDFDRjhD
NzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLywKIAkJCQk1MTcxNEVCNTFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tp
bGxJREJDbGVhbnVwLTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MzY3NzAzNjFD
QzgxQjYxMDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLywKQEAgLTE4MTIsNiArMTgxNSw4IEBACiAJCTMxNTExODBGMURCMUFERDUw
MDE3NjMwNCAvKiBFeHRlbmRlZENvbG9yVGVzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFCNzZFNDIyMzI5OEUyQjAwN0ZFRDJDIC8qIFN5c3RlbVByZXZpZXcubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTeXN0ZW1QcmV2aWV3Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUI3NkU0NDIzMjk5QkEzMDA3RkVEMkMg
Lyogc3lzdGVtLXByZXZpZXctdHJpZ2dlci5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gInN5c3RlbS1wcmV2aWV3
LXRyaWdnZXIuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxRTlCREEwMjQ3
RjRDNjIwMDJFNTFBMiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJHTFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJn
bC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gd2ViZ2wuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzMzQjlDRTExMjc3RjIzMTAwRkVGQ0UzIC8qIFByZXZlbnRFbXB0eVVzZXJBZ2VudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmV2ZW50RW1wdHlVc2VyQWdl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0JFNUFGNDEzN0I1QTZDMDA3
MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNyYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzNCRTVBRjgxMzdCNUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jh
c2hfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdXNl
TW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ0MTEsNiArNDQxNiw3IEBACiAJCQkJQ0RDMDkzMkEyMUM4NzJDMTAwMzBDNEIwIC8qIFNjcm9s
bGluZ0RvZXNOb3RQYXVzZU1lZGlhLm1tICovLAogCQkJCUY0MzRDQTE5MjJFNjVCQ0EwMDVEREIy
NiAvKiBTY3JvbGxUb1JldmVhbFNlbGVjdGlvbi5tbSAqLywKIAkJCQkwRjRGRkE5RDFFRDNBQTg1
MDBGNzExMUYgLyogU25hcHNob3RWaWFSZW5kZXJJbkNvbnRleHQubW0gKi8sCisJCQkJMzFFOUJE
QTAyNDdGNEM2MjAwMkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbSAq
LywKIAkJCSk7CiAJCQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTQ0MjgsNiArNDQzNCw3IEBACiAJCQkJQ0Q3NThBNkUyMDU3MkQ1NDAwNzE4MzRBIC8qIHZpZGVv
LXdpdGgtcGF1c2VkLWF1ZGlvLWFuZC1wbGF5aW5nLW11dGVkLmh0bWwgKi8sCiAJCQkJQ0RDOEU0
OEIxQkM1Qzk2MjAwNTk0RkVDIC8qIHZpZGVvLXdpdGhvdXQtYXVkaW8uaHRtbCAqLywKIAkJCQlD
REM4RTQ4QzFCQzVDOTYyMDA1OTRGRUMgLyogdmlkZW8td2l0aG91dC1hdWRpby5tcDQgKi8sCisJ
CQkJMzFFOUJEQTIyNDdGNEREMDAwMkU1MUEyIC8qIHdlYmdsLmh0bWwgKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IFJlc291cmNlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01MjQ3LDYg
KzUyNTQsNyBAQAogCQkJCTU3QTc5ODU3MjI0QUIzNEUwMEE3RjZGMSAvKiBXZWJDcnlwdG9NYXN0
ZXJLZXkubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMUZGOUVEQjI0NDY0NEYwMDA4MzlBRTQgLyog
V2ViRmlsdGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM5NzNGNUMxRjU4RUY4QjAwMzU5QzI3
IC8qIFdlYkdMUG9saWN5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzFFOUJEQTEyNDdGNEM2MjAw
MkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdDQ0U3RUFCMUE0MTFBMjQwMDQ0N0M0QyAvKiBXZWJLaXRBZ25vc3RpY1Rlc3QubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MTcxNEVCODFDRjhDQTE3MDA0NzIzQzQgLyogV2ViUHJvY2Vz
c0tpbGxJREJDbGVhbnVwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2NzcwMzQxQ0M4MDIyODAw
RDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdExlZ2FjeS9pb3MvV2Vi
R0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRMZWdhY3kvaW9zL1dlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYzRkYWU2NmM2ZGQ1MjE4NjAwYTdmNDljYzhhNDYzMWI4Mzk4M2Q1Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRMZWdhY3kvaW9zL1dl
YkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBIQVZFKFVJV0VCVklFVykKKworI2ltcG9ydCAi
UGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmlydHVhbE1h
Y2hpbmUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oPgorI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRo
cmVhZC5oPgorI2ltcG9ydCA8c3RkbGliLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisK
K0BpbnRlcmZhY2UgV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkRGVsZWdhdGUgOiBOU09i
amVjdCA8VUlXZWJWaWV3RGVsZWdhdGU+IHsKK30KK0BlbmQKKworc3RhdGljIGJvb2wgZGlkRmlu
aXNoTG9hZCA9IGZhbHNlOworc3RhdGljIGJvb2wgZGlkRmluaXNoUGFpbnRpbmcgPSBmYWxzZTsK
K3N0YXRpYyBib29sIGlzUmVhZHkgPSBmYWxzZTsKKworQGltcGxlbWVudGF0aW9uIFdlYkdMUHJl
cGFyZURpc3BsYXlPbldlYlRocmVhZERlbGVnYXRlCisKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigi
ZGVwcmVjYXRlZC1pbXBsZW1lbnRhdGlvbnMiKQorLSAodm9pZCl3ZWJWaWV3RGlkRmluaXNoTG9h
ZDooVUlXZWJWaWV3ICopd2ViVmlldworeworICAgIGRpZEZpbmlzaExvYWQgPSB0cnVlOworfQor
CistIChCT09MKXdlYlZpZXc6KFVJV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkU3RhcnRMb2FkV2l0
aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgbmF2aWdhdGlvblR5cGU6KFVJV2ViVmll
d05hdmlnYXRpb25UeXBlKW5hdmlnYXRpb25UeXBlCit7CisgICAgaWYgKFtyZXF1ZXN0LlVSTC5z
Y2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiY2FsbGJhY2siXSAmJiBbcmVxdWVzdC5VUkwucmVzb3Vy
Y2VTcGVjaWZpZXIgaXNFcXVhbFRvU3RyaW5nOkAiZGlkRmluaXNoUGFpbnRpbmciXSkgeworICAg
ICAgICBkaWRGaW5pc2hQYWludGluZyA9IHRydWU7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9
CisKKyAgICBpZiAoW3JlcXVlc3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJjYWxsYmFj
ayJdICYmIFtyZXF1ZXN0LlVSTC5yZXNvdXJjZVNwZWNpZmllciBpc0VxdWFsVG9TdHJpbmc6QCJp
c1JlYWR5Il0pIHsKKyAgICAgICAgaXNSZWFkeSA9IHRydWU7CisgICAgICAgIHJldHVybiBOTzsK
KyAgICB9CisKKyAgICByZXR1cm4gWUVTOworfQorSUdOT1JFX1dBUk5JTkdTX0VORAorCitAZW5k
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChXZWJLaXRMZWdhY3ksIFdlYkdM
UHJlcGFyZURpc3BsYXlPbldlYlRocmVhZCkKK3sKKyAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IHVp
V2luZG93ID0gYWRvcHROUyhbW1VJV2luZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgUmV0YWluUHRyPFVJV2ViVmlldz4gdWlXZWJWaWV3
ID0gYWRvcHROUyhbW1VJV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKV0pOworICAgIFt1aVdpbmRvdyBhZGRTdWJ2aWV3OnVpV2ViVmlldy5nZXQo
KV07CisKKyAgICBSZXRhaW5QdHI8V2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkRGVsZWdh
dGU+IHVpRGVsZWdhdGUgPSBhZG9wdE5TKFtbV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFk
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICB1aVdlYlZpZXcuZ2V0KCkuZGVsZWdhdGUgPSB1
aURlbGVnYXRlLmdldCgpOworCisgICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJ3ZWJnbCIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgTlNMb2coQCJMb2FkaW5nICVA
IiwgdXJsKTsKKyAgICBbdWlXZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6dXJsXV07CisKKyAgICBVdGlsOjpydW4oJmRpZEZpbmlzaExvYWQpOworICAgIFV0
aWw6OnJ1bigmaXNSZWFkeSk7CisKKyAgICBSZXRhaW5QdHI8SlNDb250ZXh0PiBqc0NvbnRleHQg
PSBbdWlXZWJWaWV3IHZhbHVlRm9yS2V5UGF0aDpAImRvY3VtZW50Vmlldy53ZWJWaWV3Lm1haW5G
cmFtZS5qYXZhU2NyaXB0Q29udGV4dCJdOworCisgICAgRVhQRUNUX1RSVUUoISFqc0NvbnRleHQu
Z2V0KCkpOworCisgICAgUmV0YWluUHRyPEpTVmlydHVhbE1hY2hpbmU+IGpzVk0gPSBbanNDb250
ZXh0IHZpcnR1YWxNYWNoaW5lXTsKKyAgICBFWFBFQ1RfVFJVRShbanNWTSBpc1dlYlRocmVhZEF3
YXJlXSk7CisKKyAgICAvLyBSZWxlYXNlIFdlYlRocmVhZCBsb2NrLgorICAgIFV0aWw6OnNwaW5S
dW5Mb29wKDEpOworCisgICAgRVhQRUNUX0ZBTFNFKFdlYlRocmVhZElzTG9ja2VkKCkpOworCisg
ICAgW2pzQ29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImxvYWRDb2xvckludG9UZXh0dXJlKDEyOCwg
MTI4LCAyNTUsIDI1NSkiXTsKKyAgICBbanNDb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiZHJhdygp
Il07CisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hQYWludGluZyk7CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0TGVnYWN5L2lv
cy93ZWJnbC5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRMZWdhY3kvaW9z
L3dlYmdsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZhNDBmNDMwY2YxN2M3NjRhODhhMDFhMjE3YTFiYTk4
OGFmYmJlZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0TGVnYWN5L2lvcy93ZWJnbC5odG1sCkBAIC0wLDAgKzEsMTQyIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxoZWFkPgorPHRpdGxlPldlYkdMIGRyYXdpbmc8L3RpdGxlPgorPHN0eWxlPgorY2FudmFz
IHsKKyAgICB3aWR0aDogMTAwcHg7CisgICAgaGVpZ2h0OiAxMDBweDsKK30KKzwvc3R5bGU+Cis8
L2hlYWQ+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXJTb3VyY2UiIHR5cGU9InRleHQvZ2xzbCI+
CithdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOwordmFyeWluZyB2ZWMyIHZfdGV4dHVyZVBvc2l0
aW9uOworCit2b2lkIG1haW4oKSB7CisgICAgdl90ZXh0dXJlUG9zaXRpb24gPSB2ZWMyKChhX3Bv
c2l0aW9uLnggKyAxLjApIC8gMi4wLCAoYV9wb3NpdGlvbi55ICsgMS4wKSAvIDIuMCk7CisgICAg
Z2xfUG9zaXRpb24gPSBhX3Bvc2l0aW9uOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFn
bWVudFNoYWRlclNvdXJjZSIgdHlwZT0idGV4dC9nbHNsIj4KK3ByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OworCit2YXJ5aW5nIHZlYzIgdl90ZXh0dXJlUG9zaXRpb247CisKK3VuaWZvcm0gc2FtcGxl
cjJEIHRleHR1cmU7CisKK3ZvaWQgbWFpbigpIHsKKyAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJE
KHRleHR1cmUsIHZfdGV4dHVyZVBvc2l0aW9uKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2xl
dCB0ZXh0dXJlOworbGV0IGdsOworbGV0IHRleHR1cmVVbmlmb3JtOworbGV0IE5VTUJFUl9PRl9Q
QUlOVFNfUkVNQUlOSU5HID0gNjA7CisKK2Z1bmN0aW9uIHNpZ25hbFJlYWR5KCkgeworICAgIHdp
bmRvdy5sb2NhdGlvbiA9ICJjYWxsYmFjazppc1JlYWR5IjsKK30KKworZnVuY3Rpb24gc2lnbmFs
RmluaXNoZWQoKSB7CisgICAgd2luZG93LmxvY2F0aW9uID0gImNhbGxiYWNrOmRpZEZpbmlzaFBh
aW50aW5nIjsKK30KKworZnVuY3Rpb24gbG9hZENvbG9ySW50b1RleHR1cmUociwgZywgYiwgYSkg
eworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsLnRl
eEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wu
VU5TSUdORURfQllURSwgbmV3IFVpbnQ4QXJyYXkoW3IsIGcsIGIsIGFdKSk7Cit9CisKK2Z1bmN0
aW9uIGRyYXcoKSB7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7CisKKyAgICBn
bC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhU
VVJFXzJELCB0ZXh0dXJlKTsKKworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2
KTsKKworICAgIGlmIChOVU1CRVJfT0ZfUEFJTlRTX1JFTUFJTklORy0tKSB7CisgICAgICAgIHdp
bmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZHJhdyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2lnbmFsRmluaXNoZWQoKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBydW4oKSB7CisKKyAgICBs
ZXQgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiY2FudmFzIik7CisgICAgY2FudmFz
LndpZHRoID0gMTAwOworICAgIGNhbnZhcy5oZWlnaHQgPSAxMDA7CisKKyAgICBnbCA9IGNhbnZh
cy5nZXRDb250ZXh0KCJ3ZWJnbCIpOworCisgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAxLCAxKTsK
KworICAgIGxldCB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURF
Uik7CisKKyAgICBnbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgidmVydGV4U2hhZGVyU291cmNlIikudGV4dENvbnRlbnQpOworCisgICAgZ2wuY29t
cGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVy
KHZlcnRleFNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKSB7CisgICAgICAgIC8vIFdlIGZhaWxl
ZCB0byBjb21waWxlLiBPdXRwdXQgdG8gdGhlIGNvbnNvbGUgYW5kIHF1aXQuCisgICAgICAgIGNv
bnNvbGUuZXJyb3IoIlZlcnRleCBTaGFkZXIgZmFpbGVkIHRvIGNvbXBpbGUuIik7CisgICAgICAg
IGNvbnNvbGUubG9nKGdsLmdldFNoYWRlckluZm9Mb2codmVydGV4U2hhZGVyKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBsZXQgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFk
ZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFnbWVudFNoYWRlclNvdXJjZSIpLnRleHRD
b250ZW50KTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICBpZiAo
IWdsLmdldFNoYWRlclBhcmFtZXRlcihmcmFnbWVudFNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMp
KSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZyYWdtZW50IFNoYWRlciBmYWlsZWQgdG8gY29t
cGlsZS4iKTsKKyAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhmcmFnbWVu
dFNoYWRlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGV0IHByb2dyYW0gPSBn
bC5jcmVhdGVQcm9ncmFtKCk7CisgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNo
YWRlcik7CisgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAg
ICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcigi
VW5hYmxlIHRvIGxpbmsgc2hhZGVycyBpbnRvIHByb2dyYW0uIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOworCisgICAgbGV0IHRleHR1cmVV
bmlmb3JtID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXh0dXJlIik7CisKKyAg
ICBsZXQgcG9zaXRpb25BdHRyaWJ1dGUgPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAi
YV9wb3NpdGlvbiIpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uQXR0
cmlidXRlKTsKKworICAgIGxldCB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAg
IC0xLCAtMSwKKyAgICAgICAxLCAtMSwKKyAgICAgICAxLCAxLAorICAgICAgIDEsIDEsCisgICAg
ICAgLTEsIDEsCisgICAgICAgLTEsIC0xCisgICAgXSk7CisKKyAgICBsZXQgcXVhZEJ1ZmZlciA9
IGdsLmNyZWF0ZUJ1ZmZlcigpOworCisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIs
IHF1YWRCdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0aWNl
cywgZ2wuU1RBVElDX0RSQVcpOworCisgICAgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsK
KyAgICBsb2FkQ29sb3JJbnRvVGV4dHVyZSgwLCAxMjgsIDI1NSwgMjU1KTsKKworICAgIGdsLmJp
bmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBxdWFkQnVmZmVyKTsKKyAgICBnbC52ZXJ0ZXhBdHRy
aWJQb2ludGVyKHBvc2l0aW9uQXR0cmlidXRlLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOwor
CisgICAgZ2wudW5pZm9ybTFpKHRleHR1cmVVbmlmb3JtLCAwKTsKKworICAgIHNpZ25hbFJlYWR5
KCk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgcnVuLCBmYWxzZSk7Cis8
L3NjcmlwdD4KKzxib2R5PgorICAgIDxjYW52YXM+PC9jYW52YXM+Cis8L2JvZHk+Cg==
</data>
<flag name="review"
          id="416047"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>