<?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>95946</bug_id>
          
          <creation_ts>2012-09-06 01:02:15 -0700</creation_ts>
          <short_desc>&lt;dialog&gt; centering breaks when there is a relatively positioned ancestor container</short_desc>
          <delta_ts>2021-06-30 09:35:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>84635</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Falkenhagen">falken</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cigitia</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eoconnor</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ian</cc>
    
    <cc>jamesr</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ntim</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tabatkins</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>712997</commentid>
    <comment_count>0</comment_count>
      <attachid>162443</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-09-06 01:02:15 -0700</bug_when>
    <thetext>Created attachment 162443
testcase

Non-anchored dialogs are vertically centered by default (bug 90670), but this seems broken when the dialog is nested in positioned containers including a relatively positioned one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765405</commentid>
    <comment_count>1</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-11-13 02:08:47 -0800</bug_when>
    <thetext>CC&apos;ing some people from bug 90670.

It looks like in RenderDialog::layout, absoluteToLocal() returns incorrect results since the containing elements haven&apos;t yet completed layout.  In the attached test case of:

    &lt;div style=&quot;position: absolute; top: 1000px&quot;&gt;
        &lt;div style=&quot;position: relative; top: 0px&quot;&gt;
            &lt;dialog&gt;...

The absolutely positioned div still has a m_frameRect with a y() = 0 instead of 1000. It becomes 1000 only after layout is completed. Since absoluteToLocal depends on m_frameRect (via RenderBoxModelObject::mapAbsoluteToLocalPoint -&gt; RenderBox::offsetFromContainer -&gt; RenderBox::topLeftLocationOffset), the result is wrong.

I&apos;ll have to investigate this more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765700</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-13 09:42:38 -0800</bug_when>
    <thetext>I&apos;m less familiar with when we&apos;re allowed to call absoluteToLocal, but you definitely can&apos;t depend on ancestors having been layed out in the Dialog&apos;s layout method.

Simon or James might have good thoughts on the right way to go about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765782</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-13 10:37:43 -0800</bug_when>
    <thetext>Use CSS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766555</commentid>
    <comment_count>4</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-11-14 00:23:50 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Use CSS?

I don&apos;t see how to solve the problem with CSS. The spec demands the dialog has position:absolute and is initially centered in the viewport. For example, position:fixed can&apos;t be used since the dialog must scroll along with the document.

I could set &apos;top&apos; manually but the problem is the same as before; we don&apos;t know the desired value in RenderDialog::layout since the ancestors are not layed out yet.

I wonder if it can be solved by adding a dialog repositioning step after the whole render tree has completed layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767936</commentid>
    <comment_count>5</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-11-15 04:16:16 -0800</bug_when>
    <thetext>I have a question. The spec demands that the special centering happens only on a dialog.show() or dialog.showModal() DOM call. Once the dialog is centered, it is never recentered until show/showModal() is called again. show/showModal triggers a layout because the dialog gets a renderer attached then. Does this mean during layout we know there is at most one dialog that must be centered?

If so, an extra positioning step at the end of layout may be feasible, by just keeping track of that one dialog (perhaps by keeping a pointer in RenderView or Document).

Otherwise, I think we basically need a second layout pass. Just keeping track of the list of dialogs to center doesn&apos;t work in case of nested dialogs.

Relatedly, if my reading of the spec is correct, there is another bug in the current implementation because the dialog is recentered if a relayout occurs (e.g., by zooming in/out). It should only be centered once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768084</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-15 08:11:06 -0800</bug_when>
    <thetext>Having the dialog not be re-centered on relayout is crazy; that&apos;s a recipe for unstable layout. If the user resizes the window, the dialog needs to remain centered I would think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768111</commentid>
    <comment_count>7</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-11-15 08:31:18 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Having the dialog not be re-centered on relayout is crazy; that&apos;s a recipe for unstable layout. If the user resizes the window, the dialog needs to remain centered I would think.

I think it may be strange to scroll the dialog out of view and then have it center again on zoom in/out or window resize. I can try to ask the motivation for the rule in the spec (the wording is &quot;This top static position must remain the element&apos;s top static position until it is next changed by the above algorithm or the next one.&quot;)

When else can a relayout occur? I&apos;m trying to understand how this would be unstable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768332</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-15 11:18:19 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Having the dialog not be re-centered on relayout is crazy; that&apos;s a recipe for unstable layout. If the user resizes the window, the dialog needs to remain centered I would think.
&gt; 
&gt; I think it may be strange to scroll the dialog out of view and then have it center again on zoom in/out or window resize. I can try to ask the motivation for the rule in the spec (the wording is &quot;This top static position must remain the element&apos;s top static position until it is next changed by the above algorithm or the next one.&quot;)
&gt; 
&gt; When else can a relayout occur? I&apos;m trying to understand how this would be unstable.

Any time any content on the page changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770420</commentid>
    <comment_count>9</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-11-19 00:21:52 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; Having the dialog not be re-centered on relayout is crazy; that&apos;s a recipe for unstable layout. If the user resizes the window, the dialog needs to remain centered I would think.
&gt; &gt; 
&gt; &gt; I think it may be strange to scroll the dialog out of view and then have it center again on zoom in/out or window resize. I can try to ask the motivation for the rule in the spec (the wording is &quot;This top static position must remain the element&apos;s top static position until it is next changed by the above algorithm or the next one.&quot;)
&gt; &gt; 
&gt; &gt; When else can a relayout occur? I&apos;m trying to understand how this would be unstable.
&gt; 
&gt; Any time any content on the page changes.

I&apos;m also not sure we want the dialog to re-center in this case. It may be surprising to scroll a dialog away and have it reappear at seemingly random times when unrelated content changes.

I think if we want to re-center, we should change the spec. I have a feeling for what you mean by crazy and unstable layout, but I don&apos;t think I understand enough to justify the position to WHATWG. Can you give concrete concerns we can bring up with WHATWG?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787801</commentid>
    <comment_count>10</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2012-12-10 15:56:22 -0800</bug_when>
    <thetext>Recentering vertically when you increase the width kinda makes sense, but recentering vertically when you change the height doesn&apos;t (consider a long page where the dialog came up on the screen, then the user scrolled down, and then the user increased the height of the window to see more — moving the dialog then is weird).

Should we also update the position of anchored dialogs if the thing they are anchored to moves?

I&apos;ve updated the spec regarding width changes (which includes zoom changes) updating the vertical position. I haven&apos;t made anchoring update in realtime. If you think that&apos;s wrong, please do mail the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787831</commentid>
    <comment_count>11</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-12-10 16:20:24 -0800</bug_when>
    <thetext>I think the confusion is that we are currently centering during *layout* and only the first layout, which is a relatively random point. Instead Dialog.show should force a synchronous layout, and then do the centering. It&apos;s a bit gross to add a sync layout, but I don&apos;t see an alternative.

As far as recentering when the width changes, it&apos;s not clear to me what the best behavior is. I can see it argued either way.

(In reply to comment #10)
&gt; Should we also update the position of anchored dialogs if the thing they are anchored to moves?
&gt; 
&gt; I&apos;ve updated the spec regarding width changes (which includes zoom changes) updating the vertical position. I haven&apos;t made anchoring update in realtime. If you think that&apos;s wrong, please do mail the list.

If we&apos;re going to have anchoring at all, then the dialog should move if the anchor moves. I don&apos;t see any other sane behavior, although that does complicate implementation considerably. Forgetting complicated things like animations for the moment, if you have the dialog anchored to an element and the page is scrolled, the dialog should clearly move with the anchor, no?

Am I missing something? Matt, mind sending an email to whatwg to this effect (assuming you agree)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787882</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-10 17:31:34 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; If we&apos;re going to have anchoring at all, then the dialog should move if the anchor moves. I don&apos;t see any other sane behavior, although that does complicate implementation considerably. Forgetting complicated things like animations for the moment, if you have the dialog anchored to an element and the page is scrolled, the dialog should clearly move with the anchor, no?
&gt; 
&gt; Am I missing something? Matt, mind sending an email to whatwg to this effect (assuming you agree)?

I agree! Layout has to be &quot;stable&quot;. You can&apos;t have one behavior when the dialog is first displayed, and them some magic behavior on later layouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787932</commentid>
    <comment_count>13</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-12-10 18:30:43 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I agree! Layout has to be &quot;stable&quot;. You can&apos;t have one behavior when the dialog is first displayed, and them some magic behavior on later layouts.

I agree with Ojan that we should do the centering in dialog.show() (after forcing a sync layout), instead of during layout. This follows the spec, except for the new width changed rule Ian made. And I think it can be considered stable layout.

If we attempt to center during layout and follow the spec, we&apos;d have to do magic behavior on later layouts to not recenter except for the width changed case.

I also agree with dialog following its anchor when it moves. Actually I had thought the current spec already implies this (with the language &quot;*While* an element A is magically aligned to an element B...&quot;). I&apos;ll write to whatwg.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794016</commentid>
    <comment_count>14</comment_count>
      <attachid>180017</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-12-18 13:58:18 -0800</bug_when>
    <thetext>Created attachment 180017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794092</commentid>
    <comment_count>15</comment_count>
      <attachid>180017</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 15:04:55 -0800</bug_when>
    <thetext>Comment on attachment 180017
Patch

Attachment 180017 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15410315

New failing tests:
fast/dom/HTMLDialogElement/top-layer-display-none.html
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html
fast/dom/HTMLDialogElement/top-layer-stacking-dynamic.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794193</commentid>
    <comment_count>16</comment_count>
      <attachid>180017</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-12-18 17:04:07 -0800</bug_when>
    <thetext>Comment on attachment 180017
Patch

It seems this unmasks or causes a bug with the reparenting of top layer elements to be children of RenderView. I&apos;ll clear r? for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796019</commentid>
    <comment_count>17</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2012-12-20 18:16:40 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 180017 [details])
&gt; It seems this unmasks or causes a bug with the reparenting of top layer elements to be children of RenderView. I&apos;ll clear r? for now.

top-layer-stacking-dynamic.html is failing due to bug 105489. I&apos;m not sure yet why top-layer-display-none.html is failing. It seems like an error with moving the renderers around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809150</commentid>
    <comment_count>18</comment_count>
      <attachid>183135</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-17 00:38:39 -0800</bug_when>
    <thetext>Created attachment 183135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809158</commentid>
    <comment_count>19</comment_count>
      <attachid>183135</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-17 00:49:30 -0800</bug_when>
    <thetext>Comment on attachment 183135
Patch

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

Now that some bugs in top layer have been fixed (bug 103477, bug 105489), this patch is working now.

&gt; Source/WebCore/html/HTMLDialogElement.cpp:122
&gt; +    return new (arena) RenderBlock(this);

Is it okay to use RenderBlock although &lt;dialog&gt; is an inline, not block, element? I think for centering it needs to be a RenderBlock for access to RenderBlock::height(). Also, it still works as an inline element despite this, with a test like: &lt;dialog style=&quot;position: static&quot;&gt;Hi&lt;/dialog&gt; &lt;dialog style=&quot;position: static&quot;&gt;there&lt;/dialog&gt; (bug 106538 has such a test).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810083</commentid>
    <comment_count>20</comment_count>
      <attachid>183135</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-01-17 18:44:48 -0800</bug_when>
    <thetext>Comment on attachment 183135
Patch

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

&gt;&gt; Source/WebCore/html/HTMLDialogElement.cpp:122
&gt;&gt; +    return new (arena) RenderBlock(this);
&gt; 
&gt; Is it okay to use RenderBlock although &lt;dialog&gt; is an inline, not block, element? I think for centering it needs to be a RenderBlock for access to RenderBlock::height(). Also, it still works as an inline element despite this, with a test like: &lt;dialog style=&quot;position: static&quot;&gt;Hi&lt;/dialog&gt; &lt;dialog style=&quot;position: static&quot;&gt;there&lt;/dialog&gt; (bug 106538 has such a test).

position:absolute should force the display to being block. See StyleResolver::adjustRenderStyle. So, I think you maybe want to look at the RenderStyle passed in to return either a RenderBlock or a RenderInline. Not 100% sure.

Also you might still want a RenderDialog. I think you might want the cssTopIsOverridden member variable there so you can clear it appropriately on styleDidChange. Specifically, I&quot;m thinking of code like the following:
dialog.open();
dialog.style.top = &quot;10px&quot;;

We&apos;ll want to clear the cssTopIsOverriden bit.

Not sure if there&apos;s a better way to do it. Antti or Kling might have good ideas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810085</commentid>
    <comment_count>21</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-17 18:46:39 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; ...
&gt; 
&gt; position:absolute should force the display to being block. See StyleResolver::adjustRenderStyle. So, I think you maybe want to look at the RenderStyle passed in to return either a RenderBlock or a RenderInline. Not 100% sure.
&gt; 
&gt; Also you might still want a RenderDialog. I think you might want the cssTopIsOverridden member variable there so you can clear it appropriately on styleDidChange. Specifically, I&quot;m thinking of code like the following:
&gt; dialog.open();
&gt; dialog.style.top = &quot;10px&quot;;
&gt; 

The thing we have to watch out for is dialog { display: table; } which means we can&apos;t just return a RenderBlock or a RenderDialog, unless we plan to put the actual &lt;dialog&gt; renderer inside that thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810095</commentid>
    <comment_count>22</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-01-17 18:56:12 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; ...
&gt; &gt; 
&gt; &gt; position:absolute should force the display to being block. See StyleResolver::adjustRenderStyle. So, I think you maybe want to look at the RenderStyle passed in to return either a RenderBlock or a RenderInline. Not 100% sure.
&gt; &gt; 
&gt; &gt; Also you might still want a RenderDialog. I think you might want the cssTopIsOverridden member variable there so you can clear it appropriately on styleDidChange. Specifically, I&quot;m thinking of code like the following:
&gt; &gt; dialog.open();
&gt; &gt; dialog.style.top = &quot;10px&quot;;
&gt; &gt; 
&gt; 
&gt; The thing we have to watch out for is dialog { display: table; } which means we can&apos;t just return a RenderBlock or a RenderDialog, unless we plan to put the actual &lt;dialog&gt; renderer inside that thing.

It&apos;s a good point. Are there any use cases for inline dialogs? Maybe we should force all dialogs to their equivalentBlockDisplay in StyleResolver::adjustRenderStyle. That will mean that we can&apos;t just return a RenderBlock here. Actually, we should just remove the createRenderer override and I think it&apos;ll all work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810296</commentid>
    <comment_count>23</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-17 23:59:23 -0800</bug_when>
    <thetext>Thanks for all the comments! I have a new patch that doesn&apos;t override createRenderer. Also I changed the tests against &lt;div&gt; positioning to be against &lt;span&gt; since &lt;dialog&gt; is an inline element.

(In reply to comment #20)
&gt; Also you might still want a RenderDialog. I think you might want the cssTopIsOverridden member variable there so you can clear it appropriately on styleDidChange. Specifically, I&quot;m thinking of code like the following:
&gt; dialog.open();
&gt; dialog.style.top = &quot;10px&quot;;
 
Oh, good point. I wanted cssTopIsOverridden on the DOM side because it has to survive the renderer being deleted (which I think would happen if display: none is set, or for some reason a detach/reattach occurs). But we must handle this case, too.

(In reply to comment #22)
&gt; Actually, we should just remove the createRenderer override and I think it&apos;ll all work fine.

Yes, looks like I was mistaken. It works without the createRenderer override.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810298</commentid>
    <comment_count>24</comment_count>
      <attachid>183389</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-18 00:05:14 -0800</bug_when>
    <thetext>Created attachment 183389
review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810377</commentid>
    <comment_count>25</comment_count>
      <attachid>183389</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-18 01:54:49 -0800</bug_when>
    <thetext>Comment on attachment 183389
review comments

Attachment 183389 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15945401

New failing tests:
fast/dom/HTMLDialogElement/top-layer-stacking-dynamic.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810421</commentid>
    <comment_count>26</comment_count>
      <attachid>183389</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-18 02:58:25 -0800</bug_when>
    <thetext>Comment on attachment 183389
review comments

Attachment 183389 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15944470

New failing tests:
fast/dom/HTMLDialogElement/top-layer-stacking-dynamic.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818649</commentid>
    <comment_count>27</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-29 00:18:11 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Specifically, I&quot;m thinking of code like the following:
&gt; dialog.open();
&gt; dialog.style.top = &quot;10px&quot;;
&gt; 
&gt; We&apos;ll want to clear the cssTopIsOverriden bit.

What should happen with:

  dialog.show();
  dialog.style.top = dialog.style.top;

It&apos;s strange if it&apos;s not a no-op, but it&apos;s also strange if it doesn&apos;t clear the bit as dialog.style.top = &quot;10px&quot; would. But I don&apos;t think we can detect this change in styleDidChange.

Another problem is the method is not called for each individual change. Specifically, for:

  dialog.show();  // &apos;top&apos; is set to something like 281px
  dialog.style.top = &quot;10px&quot;;

styleDidChange is called only after the &quot;10px&quot;. On the other hand, for:

  dialog.show();  // &apos;top&apos; is set to something like 281px
  dialog.offsetHeight; // force layout
  dialog.style.top = &quot;10px&quot;;

styleDidChange is called for &quot;281px&quot; and &quot;10px&quot;. So it can&apos;t determine when top is set by the user vs. the show() call.

I wonder if we should rethink this to not be setting &quot;top&quot;. Can we easily make a new property like -webkit-centered-dialog-top and use that during layout when it&apos;s set and top is auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819062</commentid>
    <comment_count>28</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-29 10:16:58 -0800</bug_when>
    <thetext>This is all so gross. Why can&apos;t the spec just describe the layout of &lt;dialog&gt; using existing CSS positioning techniques?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819543</commentid>
    <comment_count>29</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-29 17:13:27 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; This is all so gross. Why can&apos;t the spec just describe the layout of &lt;dialog&gt; using existing CSS positioning techniques?

I guess there is no reliable way to vertically center in the viewport using CSS. Or is there? If so it&apos;s looking like it would make sense to use that.

When talking to Ojan and Tab a while back, there was an idea to do something like:

     top: scrollTop px
     bottom: calc(scrollTop px + 100vh)

But it turned out we still require a sync layout in dialog.show()   (I don&apos;t quite remember the details...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819600</commentid>
    <comment_count>30</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-29 17:54:04 -0800</bug_when>
    <thetext>For more background, the spec describes the layout of &lt;dialog&gt; in terms of setting up the default static position when dialog.show() is called. I think our pain in implementing the spec is when layout happens and when dialog.show() are called are different.

We can&apos;t compute the proper position in show() until layout has happened. Once we know the proper position, we can&apos;t just move the renderer because that will just get reset on subsequent relayouts. There is no way, I think, to keep the default static position on a DOM object (hmm... maybe add it to HTMLDialogElement, set needs layout, and have RenderBlock have a special case for dialog nodes?)

That&apos;s where we got the idea to set &apos;top&apos; directly.

Do you have a suggestion for how we can change the spec? My impression is that it&apos;s really open for feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819628</commentid>
    <comment_count>31</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-29 18:18:26 -0800</bug_when>
    <thetext>I guess what i&apos;m saying is that dialog layout needs to be possible using existing (or possibly) new CSS concepts, and not some magic positioning. Ideally we should be able to implement &lt;dialog&gt; with just some style in the UA stylesheet. If not, something is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819701</commentid>
    <comment_count>32</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2013-01-29 19:19:45 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; I guess what i&apos;m saying is that dialog layout needs to be possible using existing (or possibly) new CSS concepts, and not some magic positioning. Ideally we should be able to implement &lt;dialog&gt; with just some style in the UA stylesheet. If not, something is wrong.

Agreed.  This is the purpose of my &quot;top-layer positioning&quot; thread on www-style - to get the ball rolling on speccing the necessary concepts to make this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820971</commentid>
    <comment_count>33</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-01-30 19:05:16 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; I guess what i&apos;m saying is that dialog layout needs to be possible using existing (or possibly) new CSS concepts, and not some magic positioning. Ideally we should be able to implement &lt;dialog&gt; with just some style in the UA stylesheet. If not, something is wrong.
&gt; 
&gt; Agreed.  This is the purpose of my &quot;top-layer positioning&quot; thread on www-style - to get the ball rolling on speccing the necessary concepts to make this work.

I don&apos;t see how this helps this case. The issue here is the vertical centering that only happens when you call show, but then allows you to scroll up and down (moving the dialog) so you can get to possibly overflowing content.

(In reply to comment #31)
&gt; I guess what i&apos;m saying is that dialog layout needs to be possible using existing (or possibly) new CSS concepts, and not some magic positioning. Ideally we should be able to implement &lt;dialog&gt; with just some style in the UA stylesheet. If not, something is wrong.

I see what you&apos;re saying here, but I don&apos;t see how CSS would define this sort of thing. As I say above, we want it to center initialy, but still scroll.

I guess another way we could define this, and maybe this is what Tab is getting at, is that there is a (overflow:auto?) top-layer in which the dialog is centered and if the dialog is larger than the viewport, you can scroll within the top-layer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821007</commentid>
    <comment_count>34</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-30 20:03:07 -0800</bug_when>
    <thetext>(In reply to comment #33)

&gt; I see what you&apos;re saying here, but I don&apos;t see how CSS would define this sort of thing. As I say above, we want it to center initialy, but still scroll.

Can you be more precise? Center vertically (in the page? viewport?) but scroll (scroll the page, or the &lt;dialog&gt; contents)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821018</commentid>
    <comment_count>35</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-01-30 20:17:46 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; 
&gt; &gt; I see what you&apos;re saying here, but I don&apos;t see how CSS would define this sort of thing. As I say above, we want it to center initialy, but still scroll.
&gt; 
&gt; Can you be more precise? Center vertically (in the page? viewport?) but scroll (scroll the page, or the &lt;dialog&gt; contents)?

It&apos;s center vertically in the viewport when the dialog is first shown, but still be able to scroll the page so the dialog moves up and down. So, not position: fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821026</commentid>
    <comment_count>36</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-30 20:26:16 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; &gt; (In reply to comment #33)
&gt; &gt; 
&gt; &gt; &gt; I see what you&apos;re saying here, but I don&apos;t see how CSS would define this sort of thing. As I say above, we want it to center initialy, but still scroll.
&gt; &gt; 
&gt; &gt; Can you be more precise? Center vertically (in the page? viewport?) but scroll (scroll the page, or the &lt;dialog&gt; contents)?
&gt; 
&gt; It&apos;s center vertically in the viewport when the dialog is first shown, but still be able to scroll the page so the dialog moves up and down. So, not position: fixed.

I don&apos;t think the spec should prescribe behavior like this that can&apos;t be described in CSS terms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821711</commentid>
    <comment_count>37</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2013-01-31 11:08:30 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; (In reply to comment #34)
&gt; &gt; &gt; (In reply to comment #33)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I see what you&apos;re saying here, but I don&apos;t see how CSS would define this sort of thing. As I say above, we want it to center initialy, but still scroll.
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you be more precise? Center vertically (in the page? viewport?) but scroll (scroll the page, or the &lt;dialog&gt; contents)?
&gt; &gt; 
&gt; &gt; It&apos;s center vertically in the viewport when the dialog is first shown, but still be able to scroll the page so the dialog moves up and down. So, not position: fixed.
&gt; 
&gt; I don&apos;t think the spec should prescribe behavior like this that can&apos;t be described in CSS terms.

That&apos;s why I&apos;m trying to fix that on the CSS side.  The spec&apos;s behavior is the better behavior - using fixpos is *not* very good.  We should just expose this better variety of behavior more directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836250</commentid>
    <comment_count>38</comment_count>
      <attachid>189061</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-02-19 04:50:01 -0800</bug_when>
    <thetext>Created attachment 189061
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836252</commentid>
    <comment_count>39</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-02-19 04:50:51 -0800</bug_when>
    <thetext>I&apos;ve uploaded a new patch. I know spec work is in progress on adding CSS support for this positioning, but I hope this patch can be accepted in the meantime. This patch should accurately implement the current HTML spec, whereas the current implementation fails to implement the spec and doesn&apos;t even correctly do what it&apos;s trying to do (hence this bug).

This patch stores the &apos;default static top&apos; position in a new CSS property so it avoids the problem of detecting if top is overridden, discussed earlier.  I don&apos;t want to expose this CSS property to the web; it should be used purely for internal implementation. Is there a way to hide the property, or alternatively, hang something off RenderStyle that&apos;s not a CSS property?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871423</commentid>
    <comment_count>40</comment_count>
      <attachid>189061</attachid>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-04-08 21:33:08 -0700</bug_when>
    <thetext>Comment on attachment 189061
WIP patch

Clearing r? I don&apos;t have a plan to continue this for WebKit. Thank you for all the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773782</commentid>
    <comment_count>41</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2021-06-30 09:35:32 -0700</bug_when>
    <thetext>Not relevant with current &lt;dialog&gt; positioning model.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>162443</attachid>
            <date>2012-09-06 01:02:15 -0700</date>
            <delta_ts>2012-09-06 01:02:15 -0700</delta_ts>
            <desc>testcase</desc>
            <filename>dialog-relative.html</filename>
            <type>text/html</type>
            <size>402</size>
            <attacher name="Matt Falkenhagen">falken</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHNjcmlwdD4KZnVuY3Rpb24gaW5pdCgpIHsK
ICAgIGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpYWxvZycpOwogICAgZGlh
bG9nLnNob3coKTsKfQp3aW5kb3cub25sb2FkID0gaW5pdDsKPC9zY3JpcHQ+CjwvaGVhZD4KPGJv
ZHk+CiAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTAwMHB4OyB3aWR0
aDogOTAlIj4KICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHRvcDogMHB4
OyB3aWR0aDogOTAlIj4KICAgICAgICAgICAgPGRpYWxvZyBpZD0ibXlkaWFsb2ciPkl0IGlzIG15
IGRpYWxvZy48L2RpYWxvZz4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2JvZHk+CjwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180017</attachid>
            <date>2012-12-18 13:58:18 -0800</date>
            <delta_ts>2013-01-17 00:38:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95946-20121219065534.patch</filename>
            <type>text/plain</type>
            <size>32717</size>
            <attacher name="Matt Falkenhagen">falken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI2YTEwMDBjMWNkYmVh
ZmJkY2M5Yzg4ZWQyNGRjNmE4MjdiMzI3OS4uNDQwMzlmOWJlMjAzYjdhYWUwNWIxNDNmMjdiNGY1
ODZjZGY1ODBiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEyLTE4ICBNYXR0
IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICA8ZGlhbG9nPiBj
ZW50ZXJpbmcgYnJlYWtzIHdoZW4gdGhlcmUgaXMgYSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYW5j
ZXN0b3IgY29udGFpbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NTk0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBkaWFsb2cncyBjZW50ZXJpbmctaW4tdmlld3BvcnQg
dG8gb2NjdXIgZHVyaW5nCisgICAgICAgIGRpYWxvZy5zaG93KCkgaW5zdGVhZCBvZiBkdXJpbmcg
bGF5b3V0LiAgZGlhbG9nLnNob3coKSBmb3JjZXMgYSBzeW5jCisgICAgICAgIGxheW91dCBhbmQg
dGhlbiBzZXRzIGRpYWxvZydzICd0b3AnIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQgaW4gdGhlCisg
ICAgICAgIHZpZXdwb3J0LiBUaGlzIHNhdGlzZmllcyB0aGUgc3BlYyB0aGF0IGRpYWxvZyBpcyBj
ZW50ZXJlZCBvbmx5IG9uCisgICAgICAgIGRpYWxvZy5zaG93KCkgYW5kIG5vdCByZS1jZW50ZXJl
ZCBvbiBzdWJzZXF1ZW50IHJlbGF5b3V0cy4KKworICAgICAgICBUaGUgcHJldmlvdXMgaW1wbGVt
ZW50YXRpb24gd2FzIGluY29ycmVjdCBiZWNhdXNlIGl0IHJlbGllZCBvbgorICAgICAgICBkaWFs
b2cncyBhbmNlc3RvcnMgaGF2aW5nIGJlZW4gbGF5ZWQgb3V0IGFscmVhZHkgZHVyaW5nIGRpYWxv
ZydzCisgICAgICAgIGxheW91dCwgd2hpY2ggaXMgbm90IHRydWUuIEZ1cnRoZXJtb3JlLCBpdCBy
ZWNlbnRlcmVkIGRpYWxvZyBvbiBhCisgICAgICAgIHJlbGF5b3V0LgorCisgICAgICAgIE5ldyB0
ZXN0cyBhZGRlZCB0byBub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLmh0bWwKKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OiBSZW1vdmUgUmVuZGVyRGlhbG9nIGZpbGVzLCB3aGljaCBh
cmUgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0
by4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0
dG8uCisgICAgICAgICogaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6SFRNTERpYWxvZ0VsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERpYWxvZ0VsZW1lbnQ6OmNsb3NlKTogUmVzZXQgJ3RvcCcgc28gdGhlIGRpYWxv
ZyBpcyByZWNlbnRlcmVkIGlmIG9wZW5lZCBhZ2Fpbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTERpYWxvZ0VsZW1lbnQ6OnNldHVwRGVmYXVsdFVuYW5jaG9yZWRQ
b3NpdGlvbik6IFNhZmUgY2VudGVyIGluIHZpZXdwb3J0LiBXZSBtdXN0IGZpcnN0IGRvIGEgc3lu
YyBsYXlvdXQKKyAgICAgICAgc28gZGlhbG9nJ3MgYW5jZXN0b3JzJyBwb3NpdGlvbnMgYW5kIGRp
YWxvZydzIGRpbWVuc2lvbnMgYXJlIGtub3duLgorICAgICAgICAoV2ViQ29yZTo6SFRNTERpYWxv
Z0VsZW1lbnQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERpYWxvZ0VsZW1lbnQ6OnNo
b3dNb2RhbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIpOiBVc2UgUmVuZGVyQmxvY2sgYXMgUmVuZGVyRGlhbG9nIGlzIG5vIGxvbmdlciBuZWVk
ZWQuCisgICAgICAgICogaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5oOgorICAgICAgICAoSFRNTERp
YWxvZ0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOiBSZXZlcnQg
dGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gKHIxMjc2ODEp
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjptYXBBYnNvbHV0ZVRvTG9jYWxQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaDogUmVtb3ZlIFJlbmRlckRpYWxvZyByZWZlcmVuY2VzLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHA6IERpdHRvLgorCiAyMDEy
LTEyLTE4ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBIYXZl
IGtGaXhlZFBvaW50RGVub21pbmF0b3IgYmUgY29uc3RhbnQgYWNyb3NzIHBvcnRzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDIxOTJkNTYxNjU0MWIyODhmOWRiZGEyZjM0ODViOWM3ZmM3ZDQyMDIu
LjM0N2Y2YTVhNTc2MDY2MGFjZmFhMzVjMzM2ODUxNTY4YTE4YTRkNjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0yMTA5LDcgKzIxMDksNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRG
bGV4aWJsZUJveC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKLSAg
ICByZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCiAgICAgcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggYjdhNmEyYzg0MzRmMjdmYmI1YTIxNGMyNDE0MTg4M2Q1NWNmYWE2OS4uNjM1NThh
ZGUwN2ExYjA5NjNmMGQwZjVmZDI3MDc4YzUzNWEwYTM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC00Mjk4LDcgKzQyOTgsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmllbGRzZXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGE2OGFkODRmNDM1OWZkMTdmNjc1OTE3NDJm
NDU4ZDc4MWMwM2YyODguLmE3YjllZTMzYTg4M2IzYTE4NjBmNjlkMDlkNzNjNGVmOTQ5YWMyZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQpAQCAtMTE1MSw3ICsxMTUxLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3Bw
IFwKLSAgICByZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcCBc
CiAgICAgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggYTBmZGJkNjBlYmUxYWQyMWExY2FhOThjNjE0ZTg0YTY3YmZlOGJiMC4uMjQzYzhh
ZGIyZDcxYTZjYjdmMTZhNGRkOThkYTgzMDgyNzVlMDUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MjI4NSw3ICsyMjg1LDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFy
a2VyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaCcs
Ci0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAnLAogICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJG
aWVsZHNldC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAyMWRkMTgwNTNhMmZkNzNlZDFiMDRmMWIzZDc1YWIzNWMyMzRkODk5
Li43YWE5MDdjM2Y2OWUwMzNmZWUzODMzYWI5MTI4ODQ4YWMzYThkMzA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTU3LDgg
KzE5NTcsNiBAQAogCQk3NkNERDJGNTExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1l
bnVMaXN0UG9wdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc2Q0REMkVGMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1
cC5oICovOyB9OwogCQk3NkNERDJGNjExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1l
bnVMaXN0T3B0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc2Q0REMkYwMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RP
cHRpb24uY3BwICovOyB9OwogCQk3NkNERDJGNzExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJp
bGl0eU1lbnVMaXN0T3B0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NkNERDJGMTExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVM
aXN0T3B0aW9uLmggKi87IH07Ci0JCTc2RjJFMkVCMTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJE
aWFsb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzZGMkUyRTkxNUY3NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5jcHAgKi87IH07Ci0JCTc2
RjJFMkVDMTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RjJFMkVBMTVGNzRDRUYwMDVGRjY2NCAv
KiBSZW5kZXJEaWFsb2cuaCAqLzsgfTsKIAkJNzZGQzJCMEIxMjM3MERBMDAwNkE5OTFBIC8qIERP
TVRva2VuTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NkZDMkIwODEyMzcwREEwMDA2QTk5MUEgLyogRE9NVG9rZW5MaXN0LmNwcCAqLzsgfTsK
IAkJNzZGQzJCMEMxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzZGQzJCMDkxMjM3MERBMDAwNkE5
OTFBIC8qIERPTVRva2VuTGlzdC5oICovOyB9OwogCQk3NkZGMTdFMzExMjM1NjczMDAxRDYxQjUg
LyogUGx1Z2luVmlld05vbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzZGRjE3RTIxMTIzNTY3MzAwMUQ2MUI1IC8qIFBsdWdpblZpZXdOb25lLmNw
cCAqLzsgfTsKQEAgLTkyNzIsOCArOTI3MCw2IEBACiAJCTc2Q0REMkVGMTEwM0RBNjYwMDY4MDUy
MSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NkNERDJGMDExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1l
bnVMaXN0T3B0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFj
Y2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc2Q0REMkYxMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1lbnVM
aXN0T3B0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc2RjJFMkU5MTVGNzRD
RUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyRGlhbG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNzZGMkUyRUExNUY3NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJEaWFsb2cuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzZGQzJCMDgxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01Ub2tlbkxpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZDMkIwOTEyMzcwREEwMDA2QTk5MUEgLyog
RE9NVG9rZW5MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRva2Vu
TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZDMkIwQTEyMzcwREEwMDA2
QTk5MUEgLyogRE9NVG9rZW5MaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01Ub2tl
bkxpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE3MTUsOCArMjE3MTEs
NiBAQAogCQkJCUJDRUE0ODJGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJEZXByZWNhdGVkRmxl
eGlibGVCb3guaCAqLywKIAkJCQlEMzAyNzU0NTEyQTVGRTg0MDA0QkQ4MjggLyogUmVuZGVyRGV0
YWlsc01hcmtlci5jcHAgKi8sCiAJCQkJRDMwMjc1NDYxMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRl
ckRldGFpbHNNYXJrZXIuaCAqLywKLQkJCQk3NkYyRTJFOTE1Rjc0Q0VGMDA1RkY2NjQgLyogUmVu
ZGVyRGlhbG9nLmNwcCAqLywKLQkJCQk3NkYyRTJFQTE1Rjc0Q0VGMDA1RkY2NjQgLyogUmVuZGVy
RGlhbG9nLmggKi8sCiAJCQkJMEY1QjdBNTIxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcCAqLywKIAkJCQkwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVy
RW1iZWRkZWRPYmplY3QuaCAqLywKIAkJCQlBOEVBNzNBRjBBMTkwMEUzMDBBOEVGNUYgLyogUmVu
ZGVyRmllbGRzZXQuY3BwICovLApAQCAtMjUwMzIsNyArMjUwMjYsNiBAQAogCQkJCTkzOTJGMTQy
MEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VBNDg2RTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlEMzAyNzU0QTEyQTVGRTg0MDA0QkQ4MjggLyogUmVuZGVyRGV0
YWlsc01hcmtlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzZGMkUyRUMxNUY3NENFRjAwNUZGNjY0
IC8qIFJlbmRlckRpYWxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RTVGN0YxMzVFMERDRjAw
QTY5ODM3IC8qIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTlC
MzJDREE5MTNERjdGQTkwMEYzNEQxMyAvKiBSZW5kZXJlZFBvc2l0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjVCN0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aCBpbiBIZWFkZXJzICovLApAQCAtMjgzMDMsNyArMjgyOTYsNiBAQAogCQkJCTkzOTJGMTQ0MEFE
MTg1RkUwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
RUE0ODZEMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRDMwMjc1NDkxMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRl
dGFpbHNNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzZGMkUyRUIxNUY3NENFRjAwNUZG
NjY0IC8qIFJlbmRlckRpYWxvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjMyQ0RBQTEzREY3
RkE5MDBGMzREMTMgLyogUmVuZGVyZWRQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjVCN0E1NDEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThFQTczQzMwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlckZpZWxkc2V0
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RGlhbG9nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50
LmNwcAppbmRleCBiNzk5MTRlMGVhZTg4OWE3NDBmZTJhYTczNzg1YjdlODc3ZGVhOWUzLi5lMWM1
OGRiYzk1OWI0MjZiNTJhZWRhMGIyZGQxMmZjN2RhYmVkMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEaWFsb2dFbGVtZW50LmNwcApAQCAtMjksNyArMjksOCBAQAogI2lmIEVOQUJMRShE
SUFMT0dfRUxFTUVOVCkKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJEaWFsb2cuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsNiArMzgsNyBAQCB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MRGlhbG9nRWxlbWVudDo6SFRNTERpYWxvZ0VsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
IDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX2Nzc1RvcElzT3ZlcnJp
ZGVuKGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGRpYWxvZ1RhZykpOwogfQpAQCAt
NTQsNiArNTYsMzYgQEAgdm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6Y2xvc2UoRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgfQogICAgIHNldEJvb2xlYW5BdHRyaWJ1dGUob3BlbkF0dHIsIGZhbHNlKTsK
ICAgICBkb2N1bWVudCgpLT5yZW1vdmVGcm9tVG9wTGF5ZXIodGhpcyk7CisgICAgaWYgKG1fY3Nz
VG9wSXNPdmVycmlkZW4pIHsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRvcCwgImF1dG8iLCBmYWxzZSk7CisgICAgICAgIG1fY3NzVG9wSXNPdmVycmlkZW4gPSBm
YWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTERpYWxvZ0VsZW1lbnQ6OnNldHVwRGVmYXVsdFVu
YW5jaG9yZWRQb3NpdGlvbigpCit7CisgICAgLy8gTGF5b3V0IGJlY2F1c2Ugd2UgbmVlZCB0byBr
bm93IG91ciBhbmNlc3RvcnMnIHBvc2l0aW9ucyBhbmQgb3VyIG93biBoZWlnaHQuCisgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisKKyAgICBp
ZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5kZXJCbG9jayogYmxvY2sg
PSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKCkpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNl
ID0gYmxvY2stPnN0eWxlKCk7CisgICAgaWYgKHN0eWxlVG9Vc2UtPnBvc2l0aW9uKCkgIT0gQWJz
b2x1dGVQb3NpdGlvbiB8fCAhc3R5bGVUb1VzZS0+dG9wKCkuaXNBdXRvKCkgfHwgIXN0eWxlVG9V
c2UtPmJvdHRvbSgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTZXQgdXAg
ZGlhbG9nJ3MgcG9zaXRpb24gdG8gYmUgY2VudGVyZWQgaW4gb3IgYXQgdGhlIHRvcCBvZiB0aGUg
dmlld3BvcnQuCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBpbiB2ZXJ0aWNh
bCB3cml0aW5nIG1vZGUuCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1bWVudCgpLT52
aWV3KCk7CisgICAgaW50IHNjcm9sbFRvcCA9IGZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0KCkuaGVp
Z2h0KCk7CisgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50KDAsIHNjcm9sbFRvcCk7CisgICAg
aW50IHZpc2libGVIZWlnaHQgPSBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKS5o
ZWlnaHQoKTsKKyAgICBpZiAoYmxvY2stPmhlaWdodCgpIDwgdmlzaWJsZUhlaWdodCkKKyAgICAg
ICAgYWJzb2x1dGVQb2ludC5tb3ZlKDAsICh2aXNpYmxlSGVpZ2h0IC0gYmxvY2stPmhlaWdodCgp
KSAvIDIpOworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGJsb2NrLT5jb250YWluaW5nQmxv
Y2soKS0+YWJzb2x1dGVUb0xvY2FsKGFic29sdXRlUG9pbnQpOworICAgIExheW91dFVuaXQgbG9j
YWxUb3AgPSBMYXlvdXRTaXplKGxvY2FsUG9pbnQueCgpLCBsb2NhbFBvaW50LnkoKSkuaGVpZ2h0
KCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgU3RyaW5nOjpu
dW1iZXIobG9jYWxUb3AudG9JbnQoKSkgKyAicHgiLCBmYWxzZSk7CisgICAgbV9jc3NUb3BJc092
ZXJyaWRlbiA9IHRydWU7CiB9CiAKIHZvaWQgSFRNTERpYWxvZ0VsZW1lbnQ6OnNob3coKQpAQCAt
NjEsNiArOTMsNyBAQCB2b2lkIEhUTUxEaWFsb2dFbGVtZW50OjpzaG93KCkKICAgICBpZiAoZmFz
dEhhc0F0dHJpYnV0ZShvcGVuQXR0cikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRCb29sZWFu
QXR0cmlidXRlKG9wZW5BdHRyLCB0cnVlKTsKKyAgICBzZXR1cERlZmF1bHRVbmFuY2hvcmVkUG9z
aXRpb24oKTsKIH0KIAogdm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6c2hvd01vZGFsKEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtNzEsNiArMTA0LDcgQEAgdm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6c2hv
d01vZGFsKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KICAgICBzZXRCb29sZWFuQXR0cmlidXRl
KG9wZW5BdHRyLCB0cnVlKTsKICAgICBkb2N1bWVudCgpLT5hZGRUb1RvcExheWVyKHRoaXMpOwor
ICAgIHNldHVwRGVmYXVsdFVuYW5jaG9yZWRQb3NpdGlvbigpOwogfQogCiBib29sIEhUTUxEaWFs
b2dFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lKSBjb25zdApAQCAtODUsNyArMTE5LDcgQEAgYm9vbCBIVE1MRGlhbG9nRWxlbWVudDo6aXNQ
cmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIAog
UmVuZGVyT2JqZWN0KiBIVE1MRGlhbG9nRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRl
ckRpYWxvZyh0aGlzKTsKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyQmxvY2sodGhpcyk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERpYWxvZ0VsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERpYWxvZ0VsZW1lbnQuaAppbmRleCBlMDEw
NDViY2U5YWQyNjA5MmZkOTk1M2IyODU2ODgxMDk2ZGE5MDc1Li5iY2ZjODYzNzY0YzEyNjA5NGJk
MjEyOWNkM2RjMzU2YjYzYWVmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEaWFsb2dFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGlhbG9nRWxl
bWVudC5oCkBAIC00OCw2ICs0OCw5IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJikgY29uc3QgT1ZFUlJJREU7CisgICAgdm9pZCBzZXR1cERlZmF1bHRVbmFuY2hvcmVk
UG9zaXRpb24oKTsKKworICAgIGJvb2wgbV9jc3NUb3BJc092ZXJyaWRlbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5k
ZXggNGI5NmVjZDY0ZDY3MWJhNzgwOTU0ZjAxZjY4ODIxZDFlNGI3NWE0OS4uYTI2MmQxYWYwMTky
OGM3NDZiZDEwNTY5YWE5MzVkMTEwMGYxZjNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKQEAgLTE1NTQsNiArMTU1NCw5IEBAIGNvbnN0IFJlbmRlck9iamVjdCogUmVu
ZGVyQm94OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
CiAKIHZvaWQgUmVuZGVyQm94OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChNYXBDb29yZGluYXRl
c0ZsYWdzIG1vZGUsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKIHsKKyAg
ICAvLyBXZSBkb24ndCBleHBlY3QgYWJzb2x1dGVUb0xvY2FsKCkgdG8gYmUgY2FsbGVkIGR1cmlu
ZyBsYXlvdXQgKHlldCkKKyAgICBBU1NFUlQoIXZpZXcoKSB8fCAhdmlldygpLT5sYXlvdXRTdGF0
ZUVuYWJsZWQoKSk7CisKICAgICBib29sIGlzRml4ZWRQb3MgPSBzdHlsZSgpLT5wb3NpdGlvbigp
ID09IEZpeGVkUG9zaXRpb247CiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0gPSBoYXNMYXllcigpICYm
IGxheWVyKCktPnRyYW5zZm9ybSgpOwogICAgIGlmIChoYXNUcmFuc2Zvcm0gJiYgIWlzRml4ZWRQ
b3MpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCmluZGV4IDBiN2Q3NzE5MTMyYmFlMGMwMWZjMTZiMWJmNzY0NjM5OWZkNzljNmUuLjc5
NWVhZTRjYjNjYzkxMjMyNzg0N2YzYTY0ZTQ0ZGNmYjc1YjQ4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjc3Nyw2ICsy
Nzc3LDkgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2hvdWxkQW50aWFsaWFzTGluZXMo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpt
YXBBYnNvbHV0ZVRvTG9jYWxQb2ludChNYXBDb29yZGluYXRlc0ZsYWdzIG1vZGUsIFRyYW5zZm9y
bVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKIHsKKyAgICAvLyBXZSBkb24ndCBleHBlY3Qg
YWJzb2x1dGVUb0xvY2FsKCkgdG8gYmUgY2FsbGVkIGR1cmluZyBsYXlvdXQgKHlldCkKKyAgICBB
U1NFUlQoIXZpZXcoKSB8fCAhdmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSk7CisKICAgICBS
ZW5kZXJPYmplY3QqIG8gPSBjb250YWluZXIoKTsKICAgICBpZiAoIW8pCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEaWFsb2cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIyNDk4YWU0YzVlNWYwMzE5MDQyNzkyMWJiYzc5YTBkNDc5NDJi
NDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlckRp
YWxvZy5oIgotCi0jaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZv
aWQgUmVuZGVyRGlhbG9nOjpsYXlvdXQoKQotewotICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNr
UG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0
aGlzLCB0cnVlKTsKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygp
LCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9u
KCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7Ci0KLSAgICBSZW5k
ZXJCbG9jazo6bGF5b3V0KCk7Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxl
KCk7Ci0gICAgaWYgKHN0eWxlVG9Vc2UtPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbiB8
fCAhc3R5bGVUb1VzZS0+dG9wKCkuaXNBdXRvKCkgfHwgIXN0eWxlVG9Vc2UtPmJvdHRvbSgpLmlz
QXV0bygpKSB7Ci0gICAgICAgIHN0YXRlUHVzaGVyLnBvcCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQWRqdXN0IHRoZSBkaWFsb2cncyBwb3NpdGlvbiB0byBiZSBjZW50ZXJl
ZCBpbiBvciBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydC4KLSAgICAvLyBGSVhNRTogRmlndXJl
IG91dCB3aGF0IHRvIGRvIGluIHZlcnRpY2FsIHdyaXRpbmcgbW9kZS4KLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IGRvY3VtZW50KCktPnZpZXcoKTsKLSAgICBpbnQgc2Nyb2xsVG9wID0gZnJh
bWVWaWV3LT5zY3JvbGxPZmZzZXQoKS5oZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50IGFic29sdXRl
UG9pbnQoMCwgc2Nyb2xsVG9wKTsKLSAgICBpbnQgdmlzaWJsZUhlaWdodCA9IGZyYW1lVmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpLmhlaWdodCgpOwotICAgIGlmIChoZWlnaHQoKSA8IHZp
c2libGVIZWlnaHQpCi0gICAgICAgIGFic29sdXRlUG9pbnQubW92ZSgwLCAodmlzaWJsZUhlaWdo
dCAtIGhlaWdodCgpKSAvIDIpOwotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGNvbnRhaW5p
bmdCbG9jaygpLT5hYnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVQb2ludCk7Ci0gICAgTGF5b3V0VW5p
dCBsb2NhbFRvcCA9IExheW91dFNpemUobG9jYWxQb2ludC54KCksIGxvY2FsUG9pbnQueSgpKS5o
ZWlnaHQoKTsKLSAgICBzZXRZKGxvY2FsVG9wKTsKLQotICAgIHN0YXRlUHVzaGVyLnBvcCgpOwot
ICAgIC8vIEZJWE1FOiBTaW5jZSB0aGVyZSBpcyBhbHdheXMgYSBsYXllciBoZXJlLCByZXBhaW50
ZXIgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4gQnV0IHdpdGhvdXQgaXQsIHRoZSBkaWFsb2cgaXMg
c29tZXRpbWVzIG5vdCBwYWludGVkIChzZWUgYnVnIDkwNjcwKS4KLSAgICByZXBhaW50ZXIucmVw
YWludEFmdGVyTGF5b3V0KCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGlhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNjY5NDY5
ZTJkM2Q4MmM2YzFlODYyZTQ3NTY5ZDkzZjYyMWZhZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRp
YWxvZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmVu
ZGVyRGlhbG9nX2gKLSNkZWZpbmUgUmVuZGVyRGlhbG9nX2gKLQotI2lmIEVOQUJMRShESUFMT0df
RUxFTUVOVCkKLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdl
dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEhUTUxEaWFsb2dFbGVtZW50Owot
Ci1jbGFzcyBSZW5kZXJEaWFsb2cgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewotcHVibGljOgotICAg
IGV4cGxpY2l0IFJlbmRlckRpYWxvZyhOb2RlKiBub2RlKQotICAgICAgICA6IFJlbmRlckJsb2Nr
KG5vZGUpCi0gICAgeyB9Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJEaWFsb2coKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckRpYWxvZyI7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNEaWFsb2coKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8g
UmVuZGVyRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRl
eCBkMzgwOTMwYjdjZjBiNmQzZjViZWFhMjdiMjlhM2M2NGVkNWVlNjk3Li4xMWQ0MDI5N2FjYTRl
NGQ5M2FmNjU0NGYwNGVjNjU2MWQxZjBmZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCkBAIC0zMzIsOSArMzMyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0Jsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzQm94TW9kZWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc0NvdW50ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotI2lmIEVOQUJMRShESUFM
T0dfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIGJvb2wgaXNEaWFsb2coKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotI2VuZGlmCiAgICAgdmlydHVhbCBib29sIGlzUXVvdGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCiAjaWYgRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCmluZGV4IDA5NmQ3NjFkYjBhNTQz
NWQyNDRhYTk0YTlkNGEzM2E0NTc1MThkNWIuLmIwODc5NWE3NTQ0ZjFkYjk4YTgyZTZmOTk1N2Zl
ODIyZDJiMjIwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJp
bmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0Fs
bEluT25lLmNwcApAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgIlJlbmRlckNvdW50ZXIuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAiCiAjaW5jbHVkZSAi
UmVuZGVyRGV0YWlsc01hcmtlci5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyRGlhbG9nLmNwcCIKICNp
bmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyRmllbGRz
ZXQuY3BwIgogI2luY2x1ZGUgIlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCIKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBj
NWJhZTQ2Mzk3OGM0YzlkMTc1NWM3N2NmZTIxMWQwZDg2OTUyYjE5Li5iOTFjYmU0ODEyMGRkYzBj
OGVhOWRiZTBhMGQyMWQ2Zjk2MTcwODg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTIt
MTggIE1hdHQgRmFsa2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIDxk
aWFsb2c+IGNlbnRlcmluZyBicmVha3Mgd2hlbiB0aGVyZSBpcyBhIHJlbGF0aXZlbHkgcG9zaXRp
b25lZCBhbmNlc3RvciBjb250YWluZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk1OTQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIG1vcmUgdGVzdCBjYXNlcyB0byBub24tYW5jaG9yZWQtZGlhbG9n
LXBvc2l0aW9uaW5nLmh0bWwgZm9yIGRpYWxvZyBwb3NpdGlvbmluZyB3aGVuIGluc2lkZSByZWxh
dGl2ZWx5CisgICAgICAgIHBvc2l0aW9uZWQgY29udGFpbmVycy4gQWxzbywgYWRkIHRlc3QgY2Fz
ZXMgdG8gZW5zdXJlIGRpYWxvZyBpcyBub3QgcmUtY2VudGVyZWQgb24gcmVsYXlvdXQsIGFuZCB0
ZXN0CisgICAgICAgIG1vZGFsIGRpYWxvZ3MgYXMgd2VsbC4KKworICAgICAgICAqIGZhc3QvZG9t
L0hUTUxEaWFsb2dFbGVtZW50L25vbi1hbmNob3JlZC1kaWFsb2ctcG9zaXRpb25pbmctZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL0hUTUxEaWFsb2dFbGVtZW50L25vbi1hbmNob3Jl
ZC1kaWFsb2ctcG9zaXRpb25pbmcuaHRtbDoKKwogMjAxMi0xMi0xOCAgRW1pbCBBIEVrbHVuZCAg
PGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSGF2ZSBrRml4ZWRQb2ludERlbm9taW5hdG9y
IGJlIGNvbnN0YW50IGFjcm9zcyBwb3J0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5j
aG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dAppbmRleCBmMDk1NWMxNzBjNGFl
MzRjMmFhZTY5ZWU0NGVlOWUzNTM1ZmVkMDFjLi4zN2Q1MzlhMWVkMjA3MjQ4YWRjNDNlM2JjZmZm
MmY1OGI3NjlmYjI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9n
RWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlh
bG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dApAQCAtMywxNSArMyw1MiBAQCBUZXN0cyBkZWZh
dWx0IHBvc2l0aW9uaW5nIG9mIG5vbi1hbmNob3JlZCBkaWFsb2dzLgogT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgogCiAKK0RpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0
LgogUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9w
CiBQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AK
KworRGlhbG9nIHNob3VsZCBiZSByZWNlbnRlcmVkIGlmIHNob3coKSBpcyBjYWxsZWQgYWZ0ZXIg
Y2xvc2UoKS4KK1BBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyBleHBl
Y3RlZFRvcAorCitEaWFsb2cgc2hvdWxkIG5vdCBiZSByZWNlbnRlcmVkIG9uIGEgcmVsYXlvdXQu
CitQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AK
KworQSB0YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2
aWV3cG9ydC4KK1BBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCiBQ
QVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMAorCitUaGUgZGlhbG9n
IHNob3VsZCBiZSBjZW50ZXJlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZiBhIGhvcml6
b250YWwgc2Nyb2xsYmFyLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9w
IGlzIGV4cGVjdGVkVG9wCitQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ag
aXMgZXhwZWN0ZWRUb3AKKworVGVzdCB0aGF0IGNlbnRlcmluZyB3b3JrcyB3aGVuIGRpYWxvZyBp
cyBpbnNpZGUgcG9zaXRpb25lZCBjb250YWluZXJzLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCitQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKIFBBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLnRvcCBpcyBleHBlY3RlZFRvcAorCitEaWFsb2cncyBwb3NpdGlvbiBzaG91bGQg
c3Vydml2ZSBhZnRlciBiZWNvbWluZyBkaXNwbGF5Om5vbmUgdGVtcG9yYXJpbHkuCiBQQVNTIGRp
YWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKworRGlhbG9n
J3MgcG9zaXRpb24gc2hvdWxkIHN1cnZpdmUgYWZ0ZXIgYmVpbmcgcmUtYWRkZWQgdG8gZG9jdW1l
bnQgd2l0aG91dCBhbm90aGVyIGNhbGwgdG8gc2hvdygpLgogUEFTUyBkaWFsb2cuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCisKK1Rlc3QgdGhhdCBzZXR0aW5nICd0
b3AnIG9uIGRpYWxvZyByZXN1bHRzIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIGZvciBhIHBsYWlu
IGRpdi4KIFBBU1MgZGlhbG9nLm9mZnNldFRvcCBpcyBwbGFpbkRpdi5vZmZzZXRUb3AKK1BBU1Mg
ZGlhbG9nLm9mZnNldFRvcCBpcyBwbGFpbkRpdi5vZmZzZXRUb3AKKworVGVzdCB0aGF0IHNldHRp
bmcgJ2JvdHRvbScgb24gZGlhbG9nIHJlc3VsdHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgZm9y
IGEgcGxhaW4gZGl2LgorUEFTUyBkaWFsb2cub2Zmc2V0Qm90dG9tIGlzIHBsYWluRGl2Lm9mZnNl
dEJvdHRvbQogUEFTUyBkaWFsb2cub2Zmc2V0Qm90dG9tIGlzIHBsYWluRGl2Lm9mZnNldEJvdHRv
bQorCitUZXN0IHRoYXQgZml4ZWQgcG9zaXRpb25pbmcgZm9yIGRpYWxvZyBoYXMgdGhlIHVzdWFs
IGJlaGF2aW9yLgorUEFTUyBkaWFsb2cub2Zmc2V0VG9wIGlzIHBsYWluRGl2Lm9mZnNldFRvcAog
UEFTUyBkaWFsb2cub2Zmc2V0VG9wIGlzIHBsYWluRGl2Lm9mZnNldFRvcAorCitUZXN0IHRoYXQg
c3RhdGljIHBvc2l0aW9uIGZvciBkaWFsb2cgaGFzIHRoZSB1c3VhbCBiZWhhdmlvci4KK1BBU1Mg
ZGlhbG9nLm9mZnNldFRvcCBpcyBleHBlY3RlZFRvcAorUEFTUyBkaWFsb2cub2Zmc2V0VG9wIGlz
IGV4cGVjdGVkVG9wCisKK1Rlc3QgdGhhdCByZWxhdGl2ZSBwb3NpdGlvbiBmb3IgZGlhbG9nIGhh
cyB0aGUgdXN1YWwgYmVoYXZpb3IuCiBQQVNTIGRpYWxvZy5vZmZzZXRUb3AgaXMgZXhwZWN0ZWRU
b3AKIFBBU1MgZGlhbG9nLm9mZnNldFRvcCBpcyBleHBlY3RlZFRvcAogUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTERp
YWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3Np
dGlvbmluZy5odG1sCmluZGV4IDkwMzE2NDFjNTVhM2Y5MDBlODIyY2ZjNzk4ZjY1ZWI5MjdiNzM0
NDkuLjI5ODdlOGFlMDk0Y2Y3N2Q2MTI3Njc2ZjVkNDliZDAwNzgyMDg5NTcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxEaWFsb2dFbGVtZW50L25vbi1hbmNob3JlZC1kaWFs
b2ctcG9zaXRpb25pbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9n
RWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLmh0bWwKQEAgLTE5LDYgKzE5
LDE3IEBAIGZ1bmN0aW9uIGNoZWNrQ2VudGVyZWQoZGlhbG9nKSB7CiAgICAgZXhwZWN0ZWRUb3Ag
PSAod2luZG93LmlubmVySGVpZ2h0IC0gZGlhbG9nLm9mZnNldEhlaWdodCkgLyAyOwogICAgIHNo
b3VsZEJlKCdkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wJywgJ2V4cGVjdGVkVG9w
Jyk7CiB9CisKKy8vIEhlbHBlciB0byB0ZXN0IGJvdGggYSBub24tbW9kYWwgYW5kIG1vZGFsIGRp
YWxvZy4KK2Z1bmN0aW9uIHNob3dBbmRUZXN0RGlhbG9nKGRpYWxvZywgY2hlY2tlcikgeworICAg
IGRpYWxvZy5zaG93KCk7CisgICAgY2hlY2tlcigpOworICAgIGRpYWxvZy5jbG9zZSgpOworCisg
ICAgZGlhbG9nLnNob3dNb2RhbCgpOworICAgIGNoZWNrZXIoKTsKKyAgICBkaWFsb2cuY2xvc2Uo
KTsKK30KIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CkBAIC0zMCwxMDAgKzQxLDExMSBAQCBk
ZXNjcmlwdGlvbigiVGVzdHMgZGVmYXVsdCBwb3NpdGlvbmluZyBvZiBub24tYW5jaG9yZWQgZGlh
bG9ncy4iKTsKIAogZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGlhbG9nJyk7
CiAKLS8vIERpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0LgotZGlhbG9n
LnNob3coKTsKLWNoZWNrQ2VudGVyZWQoZGlhbG9nKTsKLWRpYWxvZy5jbG9zZSgpOworZGVidWco
J0RpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0LicpOworc2hvd0FuZFRl
c3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgY2hlY2tDZW50ZXJlZChkaWFsb2cpIH0pOwog
Ci0vLyBEaWFsb2cgc2hvdWxkIHN0aWxsIGJlIGNlbnRlcmVkIGlmIHNob3duIGFmdGVyIHdpbmRv
dyBpcyBzY3JvbGxlZC4KK2RlYnVnKCc8YnI+RGlhbG9nIHNob3VsZCBiZSByZWNlbnRlcmVkIGlm
IHNob3coKSBpcyBjYWxsZWQgYWZ0ZXIgY2xvc2UoKS4nKTsKIHdpbmRvdy5zY3JvbGwoMCwgNTAw
KTsKIGRpYWxvZy5zaG93KCk7CiBjaGVja0NlbnRlcmVkKGRpYWxvZyk7CisKK2RlYnVnKCc8YnI+
RGlhbG9nIHNob3VsZCBub3QgYmUgcmVjZW50ZXJlZCBvbiBhIHJlbGF5b3V0LicpOwordmFyIGV4
cGVjdGVkVG9wID0gZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKK3dpbmRvdy5z
Y3JvbGwoMCwgMTAwMCk7Cit2YXIgZm9yY2VSZWxheW91dERpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworZm9yY2VSZWxheW91dERpdi5zdHlsZS53aWR0aCA9ICcxMDBweCc7Citm
b3JjZVJlbGF5b3V0RGl2LnN0eWxlLmhlaWdodCA9ICcxMDBweCc7Citmb3JjZVJlbGF5b3V0RGl2
LnN0eWxlLmJvcmRlciA9ICdzb2xpZCc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcmNl
UmVsYXlvdXREaXYpOword2luZG93LnNjcm9sbCgwLCA1MDApOworc2hvdWxkQmUoJ2RpYWxvZy5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AnLCAnZXhwZWN0ZWRUb3AnKTsKK2RvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQoZm9yY2VSZWxheW91dERpdik7CiBkaWFsb2cuY2xvc2UoKTsKIAotLy8g
QSB0YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3
cG9ydC4KK2RlYnVnKCc8YnI+QSB0YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0
aGUgdG9wIG9mIHRoZSB2aWV3cG9ydC4nKTsKIHZhciBkaWFsb2dJbm5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOwogZGlhbG9nSW5uZXIuY2xhc3NOYW1lID0gJ2ZpbGxlcic7CiBk
aWFsb2cuYXBwZW5kQ2hpbGQoZGlhbG9nSW5uZXIpOwotZGlhbG9nLnNob3coKTsKLWNoZWNrVG9w
T2ZWaWV3cG9ydChkaWFsb2cpOwotZGlhbG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxvZyhk
aWFsb2csIGZ1bmN0aW9uKCkgeyBjaGVja1RvcE9mVmlld3BvcnQoZGlhbG9nKSB9KTsKIGRpYWxv
Zy5yZW1vdmVDaGlsZChkaWFsb2dJbm5lcik7CiAKLS8vIEFkZCB0aGUgaG9yaXpvbnRhbCBzY3Jv
bGxiYXIuIFRoZSBkaWFsb2cgc2hvdWxkIGJlIGNlbnRlcmVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHBy
ZXNlbmNlIG9mIHNjcm9sbGJhcnMuCitkZWJ1ZygnPGJyPlRoZSBkaWFsb2cgc2hvdWxkIGJlIGNl
bnRlcmVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXNlbmNlIG9mIGEgaG9yaXpvbnRhbCBzY3JvbGxi
YXIuJyk7CiB2YXIgZmlsbGVyRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGxlckRp
dicpOwogZmlsbGVyRGl2LnN0eWxlLndpZHRoID0gJzQwMDBweCc7Ci1kaWFsb2cuc2hvdygpOwot
Y2hlY2tDZW50ZXJlZChkaWFsb2cpOwotZGlhbG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxv
ZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBjaGVja0NlbnRlcmVkKGRpYWxvZykgfSk7CiBmaWxsZXJE
aXYuc3R5bGUud2lkdGggPSAnYXV0byc7CiAKLS8vIFRlc3QgdGhhdCBjZW50ZXJpbmcgd29ya3Mg
d2hlbiBkaWFsb2cgaXMgaW5zaWRlIHBvc2l0aW9uZWQgY29udGFpbmVycy4KK2RlYnVnKCc8YnI+
VGVzdCB0aGF0IGNlbnRlcmluZyB3b3JrcyB3aGVuIGRpYWxvZyBpcyBpbnNpZGUgcG9zaXRpb25l
ZCBjb250YWluZXJzLicpOwogdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOwogY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKIGNvbnRhaW5l
ci5zdHlsZS50b3AgPSAnODAwcHg7JwotY29udGFpbmVyLnN0eWxlLmhlaWdodD0gJzUwcHg7Jwor
Y29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICc1MHB4OycKIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9
ICc5MCUnOwogZGlhbG9nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGlhbG9nKTsKIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkaWFs
b2cpOwotZGlhbG9nLnNob3coKTsKLWNoZWNrQ2VudGVyZWQoZGlhbG9nKTsKLWRpYWxvZy5jbG9z
ZSgpOworc2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgY2hlY2tDZW50ZXJl
ZChkaWFsb2cpIH0pOwogY29udGFpbmVyLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAKIHZhciBjb250
YWluZXIyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0vLyBGSVhNRTogVGhpcyB0
ZXN0IGZhaWxzIGZvciBwb3NpdGlvbiA9ICdyZWxhdGl2ZScuCi1jb250YWluZXIyLnN0eWxlLnBv
c2l0aW9uID0gJ2Fic29sdXRlJzsKK2NvbnRhaW5lcjIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRp
dmUnOwogY29udGFpbmVyMi5zdHlsZS50b3AgPSAnMjBweCc7CiBjb250YWluZXIyLnN0eWxlLmhl
aWdodCA9ICczMHB4JzsKIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIyKTsKIGNvbnRh
aW5lcjIuYXBwZW5kQ2hpbGQoZGlhbG9nKTsKIGRpYWxvZy5zaG93KCk7CiBjaGVja0NlbnRlcmVk
KGRpYWxvZyk7CisKK2RlYnVnKCI8YnI+RGlhbG9nJ3MgcG9zaXRpb24gc2hvdWxkIHN1cnZpdmUg
YWZ0ZXIgYmVjb21pbmcgZGlzcGxheTpub25lIHRlbXBvcmFyaWx5LiIpOworZXhwZWN0ZWRUb3Ag
PSBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOword2luZG93LnNjcm9sbCgwLCAx
MDAwKTsKK2NvbnRhaW5lcjIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKK2NvbnRhaW5lcjIuc3R5
bGUuZGlzcGxheSA9ICdibG9jayc7Cit3aW5kb3cuc2Nyb2xsKDAsIDUwMCk7CitzaG91bGRCZSgn
ZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCcsICdleHBlY3RlZFRvcCcpOworCitk
ZWJ1ZygiPGJyPkRpYWxvZydzIHBvc2l0aW9uIHNob3VsZCBzdXJ2aXZlIGFmdGVyIGJlaW5nIHJl
LWFkZGVkIHRvIGRvY3VtZW50IHdpdGhvdXQgYW5vdGhlciBjYWxsIHRvIHNob3coKS4iKTsKK2V4
cGVjdGVkVG9wID0gZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKK3dpbmRvdy5z
Y3JvbGwoMCwgMTAwMCk7Citjb250YWluZXIyLnJlbW92ZUNoaWxkKGRpYWxvZyk7Citjb250YWlu
ZXIyLmFwcGVuZENoaWxkKGRpYWxvZyk7Cit3aW5kb3cuc2Nyb2xsKDAsIDUwMCk7CitzaG91bGRC
ZSgnZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCcsICdleHBlY3RlZFRvcCcpOwog
ZGlhbG9nLmNsb3NlKCk7CiAKLS8vIFRlc3QgdGhhdCBzZXR0aW5nIHRvcCBtYW51YWxseSBpcyB0
aGUgc2FtZSBhcyBmb3IgYSBwbGFpbiBkaXYuCitkZWJ1ZygiPGJyPlRlc3QgdGhhdCBzZXR0aW5n
ICd0b3AnIG9uIGRpYWxvZyByZXN1bHRzIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIGZvciBhIHBs
YWluIGRpdi4iKTsKIHZhciBwbGFpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OwogY29udGFpbmVyMi5hcHBlbmRDaGlsZChwbGFpbkRpdik7CiBwbGFpbkRpdi5zdHlsZS5wb3Np
dGlvbiA9ICdhYnNvbHV0ZSc7CiBwbGFpbkRpdi5zdHlsZS50b3AgPSAnNTBweCc7CiBkaWFsb2cu
c3R5bGUudG9wID0gJzUwcHgnOwotZGlhbG9nLnNob3coKTsKLXNob3VsZEJlKCdkaWFsb2cub2Zm
c2V0VG9wJywgJ3BsYWluRGl2Lm9mZnNldFRvcCcpOwotZGlhbG9nLmNsb3NlKCk7CitzaG93QW5k
VGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBzaG91bGRCZSgnZGlhbG9nLm9mZnNldFRv
cCcsICdwbGFpbkRpdi5vZmZzZXRUb3AnKTsgfSk7CiAKLS8vIFRlc3QgdGhhdCBzZXR0aW5nIGJv
dHRvbSBtYW51YWxseSBpcyB0aGUgc2FtZSBhcyBmb3IgYSBwbGFpbiBkaXYuCitkZWJ1ZygiPGJy
PlRlc3QgdGhhdCBzZXR0aW5nICdib3R0b20nIG9uIGRpYWxvZyByZXN1bHRzIGluIHRoZSBzYW1l
IHBvc2l0aW9uIGFzIGZvciBhIHBsYWluIGRpdi4iKTsKIGRpYWxvZy5zdHlsZS50b3AgPSAnYXV0
byc7CiBwbGFpbkRpdi5zdHlsZS50b3AgPSAnYXV0byc7CiBkaWFsb2cuc3R5bGUuYm90dG9tID0g
JzUwcHgnOwogcGxhaW5EaXYuc3R5bGUuYm90dG9tID0gJzUwcHgnOwotZGlhbG9nLnNob3coKTsK
LXNob3VsZEJlKCdkaWFsb2cub2Zmc2V0Qm90dG9tJywgJ3BsYWluRGl2Lm9mZnNldEJvdHRvbScp
OwotZGlhbG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkg
eyBzaG91bGRCZSgnZGlhbG9nLm9mZnNldEJvdHRvbScsICdwbGFpbkRpdi5vZmZzZXRCb3R0b20n
KTsgfSk7CiAKLS8vIFRlc3QgdGhhdCBmaXhlZCBwb3NpdGlvbiBoYXMgdGhlIHVzdWFsIGJlaGF2
aW9yLgorZGVidWcoJzxicj5UZXN0IHRoYXQgZml4ZWQgcG9zaXRpb25pbmcgZm9yIGRpYWxvZyBo
YXMgdGhlIHVzdWFsIGJlaGF2aW9yLicpOwogcGxhaW5EaXYuc3R5bGUucG9zaXRpb24gPSAnZml4
ZWQnOwogcGxhaW5EaXYuc3R5bGUudG9wID0gJzUwcHgnOwogZGlhbG9nLnN0eWxlLnBvc2l0aW9u
ID0gJ2ZpeGVkJzsKIGRpYWxvZy5zdHlsZS50b3AgPSAnNTBweCc7Ci1kaWFsb2cuc2hvdygpOwot
c2hvdWxkQmUoJ2RpYWxvZy5vZmZzZXRUb3AnLCAncGxhaW5EaXYub2Zmc2V0VG9wJyk7Ci1kaWFs
b2cuY2xvc2UoKTsKK3Nob3dBbmRUZXN0RGlhbG9nKGRpYWxvZywgZnVuY3Rpb24oKSB7IHNob3Vs
ZEJlKCdkaWFsb2cub2Zmc2V0VG9wJywgJ3BsYWluRGl2Lm9mZnNldFRvcCcpOyB9KTsKIAotLy8g
VGVzdCB0aGF0IHN0YXRpYyBwb3NpdGlvbiBoYXMgdGhlIHVzdWFsIGJlaGF2aW9yLgorZGVidWco
Jzxicj5UZXN0IHRoYXQgc3RhdGljIHBvc2l0aW9uIGZvciBkaWFsb2cgaGFzIHRoZSB1c3VhbCBi
ZWhhdmlvci4nKTsKIHBsYWluRGl2LnN0eWxlLnBvc2l0aW9uID0gJ3N0YXRpYyc7CiBwbGFpbkRp
di5zdHlsZS50b3AgPSAnYXV0byc7CiB2YXIgZXhwZWN0ZWRUb3AgPSBwbGFpbkRpdi5vZmZzZXRU
b3A7CiBwbGFpbkRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBsYWluRGl2KTsKIGRpYWxvZy5z
dHlsZS5wb3NpdGlvbiA9ICdzdGF0aWMnOwogZGlhbG9nLnN0eWxlLnRvcCA9ICdhdXRvJzsKLWRp
YWxvZy5zaG93KCk7Ci1zaG91bGRCZSgnZGlhbG9nLm9mZnNldFRvcCcsICdleHBlY3RlZFRvcCcp
OwotZGlhbG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkg
eyBzaG91bGRCZSgnZGlhbG9nLm9mZnNldFRvcCcsICdleHBlY3RlZFRvcCcpOyB9KTsKIGRpYWxv
Zy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAKLS8vIFRlc3QgdGhhdCByZWxhdGl2
ZSBwb3NpdGlvbiBoYXMgdGhlIHVzdWFsIGJlaGF2aW9yLgorZGVidWcoJzxicj5UZXN0IHRoYXQg
cmVsYXRpdmUgcG9zaXRpb24gZm9yIGRpYWxvZyBoYXMgdGhlIHVzdWFsIGJlaGF2aW9yLicpOwog
Y29udGFpbmVyMi5hcHBlbmRDaGlsZChwbGFpbkRpdik7CiBwbGFpbkRpdi5zdHlsZS5wb3NpdGlv
biA9ICdyZWxhdGl2ZSc7CiBwbGFpbkRpdi5zdHlsZS50b3AgPSAnNTBweCc7CkBAIC0xMzIsOSAr
MTU0LDcgQEAgcGxhaW5EaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwbGFpbkRpdik7CiBjb250
YWluZXIyLmFwcGVuZENoaWxkKGRpYWxvZyk7CiBkaWFsb2cuc3R5bGUucG9zaXRpb24gPSAncmVs
YXRpdmUnOwogZGlhbG9nLnN0eWxlLnRvcCA9ICc1MHB4JzsKLWRpYWxvZy5zaG93KCk7Ci1zaG91
bGRCZSgnZGlhbG9nLm9mZnNldFRvcCcsICdleHBlY3RlZFRvcCcpOwotZGlhbG9nLmNsb3NlKCk7
CitzaG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBzaG91bGRCZSgnZGlhbG9n
Lm9mZnNldFRvcCcsICdleHBlY3RlZFRvcCcpOyB9KTsKIDwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183135</attachid>
            <date>2013-01-17 00:38:39 -0800</date>
            <delta_ts>2013-01-18 00:05:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95946-20130117173539.patch</filename>
            <type>text/plain</type>
            <size>34041</size>
            <attacher name="Matt Falkenhagen">falken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5OTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzExNDE2ODdiMDY5ZGRl
YjgxODExOTgwM2RiNGYzYmJiZGI5YTJhMC4uZjM2Njc1NmRhNGYxZjhiYTVjOTFlM2Q4NWU2ZDY3
NWY0ODdhYzdmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEzLTAxLTE2ICBNYXR0
IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICA8ZGlhbG9nPiBj
ZW50ZXJpbmcgYnJlYWtzIHdoZW4gdGhlcmUgaXMgYSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYW5j
ZXN0b3IgY29udGFpbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NTk0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBkaWFsb2cncyBjZW50ZXJpbmctaW4tdmlld3BvcnQg
dG8gb2NjdXIgZHVyaW5nCisgICAgICAgIGRpYWxvZy5zaG93KCkgaW5zdGVhZCBvZiBkdXJpbmcg
bGF5b3V0LiBkaWFsb2cuc2hvdygpIGZvcmNlcyBhCisgICAgICAgIHN5bmNocm9ub3VzIGxheW91
dCBhbmQgdGhlbiBzZXRzIGRpYWxvZydzICd0b3AnIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQKKyAg
ICAgICAgaW4gdGhlIHZpZXdwb3J0LiBUaGlzIHNhdGlzZmllcyB0aGUgc3BlYyB0aGF0IGRpYWxv
ZyBpcyBjZW50ZXJlZCBvbmx5CisgICAgICAgIG9uIGRpYWxvZy5zaG93KCkgYW5kIG5vdCByZS1j
ZW50ZXJlZCBvbiBzdWJzZXF1ZW50IHJlbGF5b3V0cy4KKworICAgICAgICBUaGUgcHJldmlvdXMg
aW1wbGVtZW50YXRpb24gKHIxMjc2ODEpIGluY29ycmVjdGx5IHJlbGllZCBvbiBkaWFsb2cncwor
ICAgICAgICBhbmNlc3RvcnMgaGF2aW5nIGFscmVhZHkgYmVlbiBsYXllZCBvdXQgZHVyaW5nIGRp
YWxvZydzIGxheW91dC4KKyAgICAgICAgRnVydGhlcm1vcmUsIGl0IHJlY2VudGVyZWQgZGlhbG9n
IG9uIGEgcmVsYXlvdXQuCisKKyAgICAgICAgTmV3IHRlc3RzIGFkZGVkIHRvIG5vbi1hbmNob3Jl
ZC1kaWFsb2ctcG9zaXRpb25pbmcuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IFJl
bW92ZSBSZW5kZXJEaWFsb2cgZmlsZXMsIHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkLgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IERpdHRvLgorICAgICAgICAqIFRhcmdldC5wcmk6
IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxE
aWFsb2dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEaWFsb2dFbGVtZW50OjpI
VE1MRGlhbG9nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6
Y2xvc2UpOiBSZXNldCAndG9wJyBzbyB0aGUgZGlhbG9nIGlzIHJlY2VudGVyZWQgaWYgb3BlbmVk
IGFnYWluLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGlhbG9n
RWxlbWVudDo6c2V0dXBEZWZhdWx0VW5hbmNob3JlZFBvc2l0aW9uKTogU2FmZSBjZW50ZXIgaW4g
dmlld3BvcnQuIFdlIG11c3QgZmlyc3QgZG8gYSBzeW5jIGxheW91dAorICAgICAgICBzbyBkaWFs
b2cncyBhbmNlc3RvcnMnIHBvc2l0aW9ucyBhbmQgZGlhbG9nJ3MgZGltZW5zaW9ucyBhcmUga25v
d24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6c2hvd01vZGFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxEaWFsb2dFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6IFVzZSBSZW5kZXJCbG9jayBh
cyBSZW5kZXJEaWFsb2cgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxE
aWFsb2dFbGVtZW50Lmg6CisgICAgICAgIChIVE1MRGlhbG9nRWxlbWVudCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFJldmVydCB0aGUgYXNzZXJ0aW9uIHJlbW92YWxzIG5l
ZWRlZCBieSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgY2VudGVyaW5nIChyMTI3Njgx
KQorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUb0xvY2Fs
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEaWFsb2cuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEaWFsb2cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IFJlbW92ZSBSZW5kZXJEaWFsb2cgcmVmZXJlbmNlcy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwOiBEaXR0by4KKwogMjAx
My0wMS0xNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGb3JjZSBhIHJlYnVpbGQgb2YgUmVuZGVyT2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDJlZTUxYzlhZGIwMDU4NGJkMDcwNzJhY2IxYzgwMDIyNjdlNWMyOTMuLjFiNzI2NzA0MGQxNzFh
OWQ3ODBmYjY2OWM4N2VkNmRmM2E3MmJkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMTE5
LDcgKzIxMTksNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlckNv
dW50ZXIuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAK
ICAgICByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKLSAgICByZW5kZXJpbmcvUmVu
ZGVyRGlhbG9nLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKICAg
ICByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWNhYmZl
MjliOWQ0MWRiMDYxODZmMWE1YWQzYzgzYWIzNjIzZjAxZS4uYTQxYjk1MTJlNmE0OGE1YTYwMzBk
NjlkZTNiYzgxMjM0MzM4MDU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00
MzI5LDcgKzQzMjksNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGlhbG9nLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IDgwMGY0Njk2ZjliZjI0OTlmZTY1OTQxNWM2MDg2YjM4MzU4NjdmMWIu
LjQxOGQ3NGRjNjkxZWJiZWRjZTk2YzlmMWE0MGY4NzY0ZmQ5ODU3YzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpA
QCAtMTE2Myw3ICsxMTYzLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckNv
dW50ZXIuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNw
cCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwIFwKLSAgICByZW5kZXJp
bmcvUmVuZGVyRGlhbG9nLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0
LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcCBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYTFjM2Y5
OTc1Mjg4ZTJkMjc4MTlkNDM5ZmMzYmY5MGVmODkyMzM0YS4uZjU5YzA1NjA2YzBlNmQwZjE2YzNi
Y2FiZDY3NjdmZGMxODc5OTQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjI5Nyw3ICsyMjk3LDYg
QEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94Lmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaCcsCi0gICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGaWVs
ZHNldC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBjNWNlN2U3ODQzNTE3NGUyYWMxNGE5MjIwYThiZjY0NDcwYTNhMTQ5Li45NTQxMWJhZTg0Mjk0
YjU0M2NmMGIxZmJkYWRlYTRlODVhZmI2ZDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTc1LDggKzE5NzUsNiBAQAogCQk3
NkNERDJGNTExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2Q0REMkVGMTEw
M0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oICovOyB9OwogCQk3
NkNERDJGNjExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2Q0REMkYw
MTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwICovOyB9
OwogCQk3NkNERDJGNzExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkNE
RDJGMTExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmggKi87
IH07Ci0JCTc2RjJFMkVCMTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzZGMkUyRTkxNUY3NENF
RjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5jcHAgKi87IH07Ci0JCTc2RjJFMkVDMTVGNzRDRUYw
MDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc2RjJFMkVBMTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cu
aCAqLzsgfTsKIAkJNzZGQzJCMEIxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkZDMkIwODEy
MzcwREEwMDA2QTk5MUEgLyogRE9NVG9rZW5MaXN0LmNwcCAqLzsgfTsKIAkJNzZGQzJCMEMxMjM3
MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzZGQzJCMDkxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2Vu
TGlzdC5oICovOyB9OwogCQk3NkZGMTdFMzExMjM1NjczMDAxRDYxQjUgLyogUGx1Z2luVmlld05v
bmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzZG
RjE3RTIxMTIzNTY3MzAwMUQ2MUI1IC8qIFBsdWdpblZpZXdOb25lLmNwcCAqLzsgfTsKQEAgLTkz
NTAsOCArOTM0OCw2IEBACiAJCTc2Q0REMkVGMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmls
aXR5TWVudUxpc3RQb3B1cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
NkNERDJGMDExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlNZW51
TGlzdE9wdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2Q0REMkYxMTEw
M0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc2RjJFMkU5MTVGNzRDRUYwMDVGRjY2NCAvKiBS
ZW5kZXJEaWFsb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyRGlhbG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzZGMkUyRUExNUY3
NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJEaWFsb2cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZG
QzJCMDgxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01Ub2tlbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NkZDMkIwOTEyMzcwREEwMDA2QTk5MUEgLyogRE9NVG9rZW5MaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRva2VuTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZDMkIwQTEyMzcwREEwMDA2QTk5MUEgLyogRE9NVG9r
ZW5MaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01Ub2tlbkxpc3QuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE5MzksOCArMjE5MzUsNiBAQAogCQkJCUJDRUE0
ODJGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCAqLywK
IAkJCQlEMzAyNzU0NTEyQTVGRTg0MDA0QkQ4MjggLyogUmVuZGVyRGV0YWlsc01hcmtlci5jcHAg
Ki8sCiAJCQkJRDMwMjc1NDYxMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRldGFpbHNNYXJrZXIu
aCAqLywKLQkJCQk3NkYyRTJFOTE1Rjc0Q0VGMDA1RkY2NjQgLyogUmVuZGVyRGlhbG9nLmNwcCAq
LywKLQkJCQk3NkYyRTJFQTE1Rjc0Q0VGMDA1RkY2NjQgLyogUmVuZGVyRGlhbG9nLmggKi8sCiAJ
CQkJMEY1QjdBNTIxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCAq
LywKIAkJCQkwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aCAqLywKIAkJCQlBOEVBNzNBRjBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyRmllbGRzZXQuY3Bw
ICovLApAQCAtMjUzMTQsNyArMjUzMDgsNiBAQAogCQkJCTkzOTJGMTQyMEFEMTg1RjQwMDY5MUJE
NCAvKiBSZW5kZXJDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2RTA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmggaW4gSGVhZGVycyAqLywK
IAkJCQlEMzAyNzU0QTEyQTVGRTg0MDA0QkQ4MjggLyogUmVuZGVyRGV0YWlsc01hcmtlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNzZGMkUyRUMxNUY3NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxv
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RTVGN0YxMzVFMERDRjAwQTY5ODM3IC8qIFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCMzJDREE5MTNERjdGQTkw
MEYzNEQxMyAvKiBSZW5kZXJlZFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCN0E1
NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICov
LApAQCAtMjg2MjAsNyArMjg2MTMsNiBAQAogCQkJCTkzOTJGMTQ0MEFEMTg1RkUwMDY5MUJENCAv
KiBSZW5kZXJDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODZEMDk3RDkzMDIw
MDk0QzlFNCAvKiBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRDMwMjc1NDkxMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRldGFpbHNNYXJrZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNzZGMkUyRUIxNUY3NENFRjAwNUZGNjY0IC8qIFJlbmRlckRp
YWxvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjMyQ0RBQTEzREY3RkE5MDBGMzREMTMgLyog
UmVuZGVyZWRQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVCN0E1NDEwRjY1RDdB
MDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThFQTczQzMwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlckZpZWxkc2V0LmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmNwcAppbmRleCBiNzk5
MTRlMGVhZTg4OWE3NDBmZTJhYTczNzg1YjdlODc3ZGVhOWUzLi5hZWE5Nzc1OGE4NGNhMGE4YmQy
YmM3ZWY1ZWIyMDkzOGY4YjU0Y2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEaWFsb2dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dF
bGVtZW50LmNwcApAQCAtMjksNyArMjksOCBAQAogI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkK
IAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJSZW5kZXJEaWFsb2cuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsNiArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiBIVE1MRGlhbG9nRWxlbWVudDo6SFRNTERpYWxvZ0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX2Nzc1RvcElzT3ZlcnJpZGVuKGZhbHNlKQogewog
ICAgIEFTU0VSVChoYXNUYWdOYW1lKGRpYWxvZ1RhZykpOwogfQpAQCAtNTIsOCArNTQsMzggQEAg
dm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6Y2xvc2UoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0
Qm9vbGVhbkF0dHJpYnV0ZShvcGVuQXR0ciwgZmFsc2UpOwogICAgIGRvY3VtZW50KCktPnJlbW92
ZUZyb21Ub3BMYXllcih0aGlzKTsKKyAgICBzZXRCb29sZWFuQXR0cmlidXRlKG9wZW5BdHRyLCBm
YWxzZSk7CisgICAgaWYgKG1fY3NzVG9wSXNPdmVycmlkZW4pIHsKKyAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgImF1dG8iLCBmYWxzZSk7CisgICAgICAgIG1f
Y3NzVG9wSXNPdmVycmlkZW4gPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTERpYWxvZ0Vs
ZW1lbnQ6OnNldHVwRGVmYXVsdFVuYW5jaG9yZWRQb3NpdGlvbigpCit7CisgICAgLy8gTGF5b3V0
IGJlY2F1c2Ugd2UgbmVlZCB0byBrbm93IG91ciBhbmNlc3RvcnMnIHBvc2l0aW9ucyBhbmQgb3Vy
IG93biBoZWlnaHQuCisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisKKyAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKCkpOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gYmxvY2stPnN0eWxlKCk7CisgICAgaWYgKHN0eWxlVG9V
c2UtPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbiB8fCAhc3R5bGVUb1VzZS0+dG9wKCku
aXNBdXRvKCkgfHwgIXN0eWxlVG9Vc2UtPmJvdHRvbSgpLmlzQXV0bygpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBTZXQgdXAgZGlhbG9nJ3MgcG9zaXRpb24gdG8gYmUgc2FmZS1jZW50ZXJl
ZCBpbiB0aGUgdmlld3BvcnQuCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBp
biB2ZXJ0aWNhbCB3cml0aW5nIG1vZGUuCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1
bWVudCgpLT52aWV3KCk7CisgICAgaW50IHNjcm9sbFRvcCA9IGZyYW1lVmlldy0+c2Nyb2xsT2Zm
c2V0KCkuaGVpZ2h0KCk7CisgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50KDAsIHNjcm9sbFRv
cCk7CisgICAgaW50IHZpc2libGVIZWlnaHQgPSBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVj
dCh0cnVlKS5oZWlnaHQoKTsKKyAgICBpZiAoYmxvY2stPmhlaWdodCgpIDwgdmlzaWJsZUhlaWdo
dCkKKyAgICAgICAgYWJzb2x1dGVQb2ludC5tb3ZlKDAsICh2aXNpYmxlSGVpZ2h0IC0gYmxvY2st
PmhlaWdodCgpKSAvIDIpOworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGJsb2NrLT5jb250
YWluaW5nQmxvY2soKS0+YWJzb2x1dGVUb0xvY2FsKGFic29sdXRlUG9pbnQpOworICAgIExheW91
dFVuaXQgbG9jYWxUb3AgPSBMYXlvdXRTaXplKGxvY2FsUG9pbnQueCgpLCBsb2NhbFBvaW50Lnko
KSkuaGVpZ2h0KCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwg
U3RyaW5nOjpudW1iZXIobG9jYWxUb3AudG9JbnQoKSkgKyAicHgiLCBmYWxzZSk7CisgICAgbV9j
c3NUb3BJc092ZXJyaWRlbiA9IHRydWU7CiB9CiAKIHZvaWQgSFRNTERpYWxvZ0VsZW1lbnQ6OnNo
b3coKQpAQCAtNjEsNiArOTMsNyBAQCB2b2lkIEhUTUxEaWFsb2dFbGVtZW50OjpzaG93KCkKICAg
ICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShvcGVuQXR0cikpCiAgICAgICAgIHJldHVybjsKICAgICBz
ZXRCb29sZWFuQXR0cmlidXRlKG9wZW5BdHRyLCB0cnVlKTsKKyAgICBzZXR1cERlZmF1bHRVbmFu
Y2hvcmVkUG9zaXRpb24oKTsKIH0KIAogdm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6c2hvd01vZGFs
KEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNjksOCArMTAyLDkgQEAgdm9pZCBIVE1MRGlhbG9nRWxl
bWVudDo6c2hvd01vZGFsKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNldEJvb2xlYW5BdHRyaWJ1
dGUob3BlbkF0dHIsIHRydWUpOwogICAgIGRvY3VtZW50KCktPmFkZFRvVG9wTGF5ZXIodGhpcyk7
CisgICAgc2V0Qm9vbGVhbkF0dHJpYnV0ZShvcGVuQXR0ciwgdHJ1ZSk7CisgICAgc2V0dXBEZWZh
dWx0VW5hbmNob3JlZFBvc2l0aW9uKCk7CiB9CiAKIGJvb2wgSFRNTERpYWxvZ0VsZW1lbnQ6Omlz
UHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CkBA
IC04NSw3ICsxMTksNyBAQCBib29sIEhUTUxEaWFsb2dFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogCiBSZW5kZXJPYmplY3Qq
IEhUTUxEaWFsb2dFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJl
bmRlclN0eWxlKikKIHsKLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyRGlhbG9nKHRoaXMp
OworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayh0aGlzKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5oCmluZGV4IGUwMTA0NWJjZTlhZDI2MDky
ZmQ5OTUzYjI4NTY4ODEwOTZkYTkwNzUuLmJjZmM4NjM3NjRjMTI2MDk0YmQyMTI5Y2QzZGMzNTZi
NjNhZWZkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERpYWxvZ0VsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmgKQEAgLTQ4
LDYgKzQ4LDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dCBPVkVSUklERTsKKyAgICB2b2lkIHNldHVwRGVmYXVsdFVuYW5jaG9yZWRQb3NpdGlvbigpOwor
CisgICAgYm9vbCBtX2Nzc1RvcElzT3ZlcnJpZGVuOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBmZmE3Y2JhMmFj
Y2M0ZDZmMjgyYTczZDQ3OWYxMzZhMDE0YjZjZjY2Li5iNTEzNTM4YmFjZjQ0YzMwNjU4YmEzNzc2
Nzc4ZTM5MTkxNzIyOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApA
QCAtMTYyOCw2ICsxNjI4LDkgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnB1c2hN
YXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamUKIAogdm9pZCBSZW5k
ZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSwg
VHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogeworICAgIC8vIFdlIGRvbid0
IGV4cGVjdCBhYnNvbHV0ZVRvTG9jYWwoKSB0byBiZSBjYWxsZWQgZHVyaW5nIGxheW91dCAoeWV0
KQorICAgIEFTU0VSVCghdmlldygpIHx8ICF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpKTsK
KwogICAgIGJvb2wgaXNGaXhlZFBvcyA9IHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3Np
dGlvbjsKICAgICBib29sIGhhc1RyYW5zZm9ybSA9IGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dHJh
bnNmb3JtKCk7CiAgICAgaWYgKGhhc1RyYW5zZm9ybSAmJiAhaXNGaXhlZFBvcykgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXgg
MTUyMDEwYjdhNDQxMzlkNDJhOWYxODEyNGIyMjU0ZDNhYzdmZmI3MC4uNDBkYTdmYTA5YWZkZTk4
NTU0ZWU0MGI4Y2ExNjJmMTAwMGQ1OTQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0yNzg3LDYgKzI3ODcsOSBAQCBib29s
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpzaG91bGRBbnRpYWxpYXNMaW5lcyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9M
b2NhbFBvaW50KE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSwgVHJhbnNmb3JtU3RhdGUmIHRyYW5z
Zm9ybVN0YXRlKSBjb25zdAogeworICAgIC8vIFdlIGRvbid0IGV4cGVjdCBhYnNvbHV0ZVRvTG9j
YWwoKSB0byBiZSBjYWxsZWQgZHVyaW5nIGxheW91dCAoeWV0KQorICAgIEFTU0VSVCghdmlldygp
IHx8ICF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpKTsKKwogICAgIFJlbmRlck9iamVjdCog
byA9IGNvbnRhaW5lcigpOwogICAgIGlmICghbykKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjI0OThhZTRjNWU1ZjAzMTkwNDI3OTIxYmJjNzlhMGQ0Nzk0MmI0My4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGlhbG9nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyRGlhbG9nLmgiCi0KLSNp
ZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBSZW5kZXJEaWFs
b2c6OmxheW91dCgpCi17Ci0gICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRD
aGVja1BvaW50OwotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIHRydWUpOwot
ICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIGxvY2F0
aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKLQotICAgIFJlbmRlckJsb2NrOjpsYXlv
dXQoKTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAgICBpZiAo
c3R5bGVUb1VzZS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uIHx8ICFzdHlsZVRvVXNl
LT50b3AoKS5pc0F1dG8oKSB8fCAhc3R5bGVUb1VzZS0+Ym90dG9tKCkuaXNBdXRvKCkpIHsKLSAg
ICAgICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBBZGp1c3QgdGhlIGRpYWxvZydzIHBvc2l0aW9uIHRvIGJlIGNlbnRlcmVkIGluIG9yIGF0IHRo
ZSB0b3Agb2YgdGhlIHZpZXdwb3J0LgotICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgdG8g
ZG8gaW4gdmVydGljYWwgd3JpdGluZyBtb2RlLgotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
ZG9jdW1lbnQoKS0+dmlldygpOwotICAgIGludCBzY3JvbGxUb3AgPSBmcmFtZVZpZXctPnNjcm9s
bE9mZnNldCgpLmhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCgwLCBzY3Jv
bGxUb3ApOwotICAgIGludCB2aXNpYmxlSGVpZ2h0ID0gZnJhbWVWaWV3LT52aXNpYmxlQ29udGVu
dFJlY3QodHJ1ZSkuaGVpZ2h0KCk7Ci0gICAgaWYgKGhlaWdodCgpIDwgdmlzaWJsZUhlaWdodCkK
LSAgICAgICAgYWJzb2x1dGVQb2ludC5tb3ZlKDAsICh2aXNpYmxlSGVpZ2h0IC0gaGVpZ2h0KCkp
IC8gMik7Ci0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gY29udGFpbmluZ0Jsb2NrKCktPmFi
c29sdXRlVG9Mb2NhbChhYnNvbHV0ZVBvaW50KTsKLSAgICBMYXlvdXRVbml0IGxvY2FsVG9wID0g
TGF5b3V0U2l6ZShsb2NhbFBvaW50LngoKSwgbG9jYWxQb2ludC55KCkpLmhlaWdodCgpOwotICAg
IHNldFkobG9jYWxUb3ApOwotCi0gICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0gICAgLy8gRklYTUU6
IFNpbmNlIHRoZXJlIGlzIGFsd2F5cyBhIGxheWVyIGhlcmUsIHJlcGFpbnRlciBzaG91bGRuJ3Qg
YmUgbmVjZXNzYXJ5LiBCdXQgd2l0aG91dCBpdCwgdGhlIGRpYWxvZyBpcyBzb21ldGltZXMgbm90
IHBhaW50ZWQgKHNlZSBidWcgOTA2NzApLgotICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlv
dXQoKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEaWFsb2cuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEaWFs
b2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzNTdmOTc0NDFiY2M4Y2Y5ZmE0
MWE3NGUwNjJmYWJiMWQ0NjgyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJEaWFsb2dfaAot
I2RlZmluZSBSZW5kZXJEaWFsb2dfaAotCi0jaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQotI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTERpYWxvZ0VsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRl
ckRpYWxvZyA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVu
ZGVyRGlhbG9nKENvbnRhaW5lck5vZGUqIG5vZGUpCi0gICAgICAgIDogUmVuZGVyQmxvY2sobm9k
ZSkKLSAgICB7IH0KLQotICAgIHZpcnR1YWwgflJlbmRlckRpYWxvZygpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRGlhbG9nIjsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc0RpYWxvZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBSZW5k
ZXJEaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGM4
ZTExNjM3OTZmMWM4ZTIwZWJlOTliOGNjMzM3ZWExNjZlM2NlMDEuLjZhZGEyNDY3OWNlZDM3ZWY3
NDQwOGNhNjRhMzFjNjFiN2FjZDIxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKQEAgLTMxNiw5ICszMTYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
QmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNC
b3hNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jaWYgRU5BQkxFKERJQUxPR19F
TEVNRU5UKQotICAgIHZpcnR1YWwgYm9vbCBpc0RpYWxvZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0jZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKICNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKaW5kZXggYWU2NzU2ZjkzMTM2YjRlMjZi
YmJmNjM4YjEyMmY5NmFjMGE3MTY0MC4uMzcxNzM5YTQwNTMyNmU3OWJjZTZjOTUzNjJmZjVkNTU5
ZjY4MWRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0Fs
bEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5P
bmUuY3BwCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJEZXRhaWxzTWFya2VyLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJEaWFsb2cuY3BwIgogI2luY2x1
ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJGaWVsZHNldC5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRiNTU4
YmYwMjM1MmViYTgzZjVkY2Y1ZTA5OGEzNGQ2MDU5ZjQ1N2YuLmY5ZWQwZThjYWRiMDRiNGEzOTJj
OTcxOTU4ZGViOGU4MWRiN2I4OWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMS0xNiAg
TWF0dCBGYWxrZW5oYWdlbiAgPGZhbGtlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgPGRpYWxv
Zz4gY2VudGVyaW5nIGJyZWFrcyB3aGVuIHRoZXJlIGlzIGEgcmVsYXRpdmVseSBwb3NpdGlvbmVk
IGFuY2VzdG9yIGNvbnRhaW5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTU5NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgbW9yZSB0ZXN0IGNhc2VzIHRvIG5vbi1hbmNob3JlZC1kaWFsb2ctcG9z
aXRpb25pbmcuaHRtbCBmb3IgZGlhbG9nCisgICAgICAgIHBvc2l0aW9uaW5nIHdoZW4gaW5zaWRl
IHJlbGF0aXZlbHkgcG9zaXRpb25lZCBjb250YWluZXJzLiBBbHNvLCBhZGQKKyAgICAgICAgdGVz
dCBjYXNlcyB0byBlbnN1cmUgZGlhbG9nIGlzIG5vdCByZS1jZW50ZXJlZCBvbiByZWxheW91dCwg
YW5kIHRlc3QKKyAgICAgICAgbW9kYWwgZGlhbG9ncyBhcyB3ZWxsLgorCisgICAgICAgICogZmFz
dC9kb20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFu
Y2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy5odG1sOgorCiAyMDEzLTAxLTE2ICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTM5ODUzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRN
TERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQt
ZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dAppbmRleCBmMDk1NWMxNzBjNGFlMzRjMmFh
ZTY5ZWU0NGVlOWUzNTM1ZmVkMDFjLi4xMTU4ZjJlY2U1YzRkMDZjNmJkYjZlN2VhZjVhZDllOTZi
MmZiYjYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVu
dC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBv
c2l0aW9uaW5nLWV4cGVjdGVkLnR4dApAQCAtMywxNiArMyw1NCBAQCBUZXN0cyBkZWZhdWx0IHBv
c2l0aW9uaW5nIG9mIG5vbi1hbmNob3JlZCBkaWFsb2dzLgogT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgogCiAKK0RpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0LgogUEFT
UyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCiBQQVNT
IGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKworRGlh
bG9nIHNob3VsZCBiZSByZWNlbnRlcmVkIGlmIHNob3coKSBpcyBjYWxsZWQgYWZ0ZXIgY2xvc2Uo
KS4KK1BBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyBleHBlY3RlZFRv
cAorCitEaWFsb2cgc2hvdWxkIG5vdCBiZSByZWNlbnRlcmVkIG9uIGEgcmVsYXlvdXQuCitQQVNT
IGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKworQSB0
YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9y
dC4KK1BBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCiBQQVNTIGRp
YWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMAorCitUaGUgZGlhbG9nIHNob3Vs
ZCBiZSBjZW50ZXJlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZiBhIGhvcml6b250YWwg
c2Nyb2xsYmFyLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4
cGVjdGVkVG9wCitQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhw
ZWN0ZWRUb3AKKworVGVzdCB0aGF0IGNlbnRlcmluZyB3b3JrcyB3aGVuIGRpYWxvZyBpcyBpbnNp
ZGUgcG9zaXRpb25lZCBjb250YWluZXJzLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCitQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKIFBBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpLnRvcCBpcyBleHBlY3RlZFRvcAorCitEaWFsb2cncyBwb3NpdGlvbiBzaG91bGQgc3Vydml2
ZSBhZnRlciBiZWNvbWluZyBkaXNwbGF5Om5vbmUgdGVtcG9yYXJpbHkuCitQQVNTIGRpYWxvZy5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKworRGlhbG9nJ3MgcG9z
aXRpb24gc2hvdWxkIHN1cnZpdmUgYWZ0ZXIgYmVpbmcgcmUtYWRkZWQgdG8gZG9jdW1lbnQgd2l0
aG91dCBhbm90aGVyIGNhbGwgdG8gc2hvdygpLgogUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCisKK0RpYWxvZyBzaG91bGQgbm90IGJlIGNlbnRl
cmVkIGlmIHNob3coKSB3YXMgY2FsbGVkIHdoZW4gYW4gYW5jZXN0b3IgaGFkIGRpc3BsYXkgJ25v
bmUnLgogUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVk
VG9wCisKK1Rlc3QgdGhhdCBzZXR0aW5nICd0b3AnIG9uIGRpYWxvZyByZXN1bHRzIGluIHRoZSBz
YW1lIHBvc2l0aW9uIGFzIGZvciBhIHBsYWluIGRpdi4KK1BBU1MgZGlhbG9nLm9mZnNldFRvcCBp
cyBwbGFpbkRpdi5vZmZzZXRUb3AKIFBBU1MgZGlhbG9nLm9mZnNldFRvcCBpcyBwbGFpbkRpdi5v
ZmZzZXRUb3AKKworVGVzdCB0aGF0IHNldHRpbmcgJ2JvdHRvbScgb24gZGlhbG9nIHJlc3VsdHMg
aW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgZm9yIGEgcGxhaW4gZGl2LgorUEFTUyBkaWFsb2cub2Zm
c2V0Qm90dG9tIGlzIHBsYWluRGl2Lm9mZnNldEJvdHRvbQogUEFTUyBkaWFsb2cub2Zmc2V0Qm90
dG9tIGlzIHBsYWluRGl2Lm9mZnNldEJvdHRvbQorCitUZXN0IHRoYXQgZml4ZWQgcG9zaXRpb25p
bmcgZm9yIGRpYWxvZyBoYXMgc2FtZSBiZWhhdmlvciBhcyBmb3IgYSBwbGFpbiBkaXYuCiBQQVNT
IGRpYWxvZy5vZmZzZXRUb3AgaXMgcGxhaW5EaXYub2Zmc2V0VG9wCitQQVNTIGRpYWxvZy5vZmZz
ZXRUb3AgaXMgcGxhaW5EaXYub2Zmc2V0VG9wCisKK1Rlc3QgdGhhdCBzdGF0aWMgcG9zaXRpb24g
Zm9yIGEgbm9uLW1vZGFsIGRpYWxvZyBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgZm9yIGEgcGxh
aW4gZGl2LgogUEFTUyBkaWFsb2cub2Zmc2V0VG9wIGlzIGV4cGVjdGVkVG9wCisKK1Rlc3QgdGhh
dCByZWxhdGl2ZSBwb3NpdGlvbiBmb3IgYSBub24tbW9kYWwgZGlhbG9nIGhhcyB0aGUgc2FtZSBi
ZWhhdmlvciBhcyBmb3IgYSBwbGFpbiBkaXYuCiBQQVNTIGRpYWxvZy5vZmZzZXRUb3AgaXMgZXhw
ZWN0ZWRUb3AKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxv
Zy1wb3NpdGlvbmluZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTERpYWxvZ0VsZW1l
bnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy5odG1sCmluZGV4IDkwMzE2NDFjNTVh
M2Y5MDBlODIyY2ZjNzk4ZjY1ZWI5MjdiNzM0NDkuLjBlOGY5ZjU4YTRmM2U0NjE5MzliZjJjOGU5
YzVjMTA5OTM2NDRkNmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxEaWFs
b2dFbGVtZW50L25vbi1hbmNob3JlZC1kaWFsb2ctcG9zaXRpb25pbmcuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBv
c2l0aW9uaW5nLmh0bWwKQEAgLTE5LDYgKzE5LDE3IEBAIGZ1bmN0aW9uIGNoZWNrQ2VudGVyZWQo
ZGlhbG9nKSB7CiAgICAgZXhwZWN0ZWRUb3AgPSAod2luZG93LmlubmVySGVpZ2h0IC0gZGlhbG9n
Lm9mZnNldEhlaWdodCkgLyAyOwogICAgIHNob3VsZEJlKCdkaWFsb2cuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkudG9wJywgJ2V4cGVjdGVkVG9wJyk7CiB9CisKKy8vIEhlbHBlciB0byB0ZXN0IGJv
dGggYSBub24tbW9kYWwgYW5kIG1vZGFsIGRpYWxvZy4KK2Z1bmN0aW9uIHNob3dBbmRUZXN0RGlh
bG9nKGRpYWxvZywgY2hlY2tlcikgeworICAgIGRpYWxvZy5zaG93KCk7CisgICAgY2hlY2tlcigp
OworICAgIGRpYWxvZy5jbG9zZSgpOworCisgICAgZGlhbG9nLnNob3dNb2RhbCgpOworICAgIGNo
ZWNrZXIoKTsKKyAgICBkaWFsb2cuY2xvc2UoKTsKK30KIDwvc2NyaXB0PgogPC9oZWFkPgogPGJv
ZHk+CkBAIC0zMCwxMDYgKzQxLDEyNiBAQCBkZXNjcmlwdGlvbigiVGVzdHMgZGVmYXVsdCBwb3Np
dGlvbmluZyBvZiBub24tYW5jaG9yZWQgZGlhbG9ncy4iKTsKIAogZGlhbG9nID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ215ZGlhbG9nJyk7CiAKLS8vIERpYWxvZyBzaG91bGQgYmUgY2VudGVy
ZWQgaW4gdGhlIHZpZXdwb3J0LgotZGlhbG9nLnNob3coKTsKLWNoZWNrQ2VudGVyZWQoZGlhbG9n
KTsKLWRpYWxvZy5jbG9zZSgpOworZGVidWcoJ0RpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4g
dGhlIHZpZXdwb3J0LicpOworc2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsg
Y2hlY2tDZW50ZXJlZChkaWFsb2cpIH0pOwogCi0vLyBEaWFsb2cgc2hvdWxkIHN0aWxsIGJlIGNl
bnRlcmVkIGlmIHNob3duIGFmdGVyIHdpbmRvdyBpcyBzY3JvbGxlZC4KK2RlYnVnKCc8YnI+RGlh
bG9nIHNob3VsZCBiZSByZWNlbnRlcmVkIGlmIHNob3coKSBpcyBjYWxsZWQgYWZ0ZXIgY2xvc2Uo
KS4nKTsKIHdpbmRvdy5zY3JvbGwoMCwgNTAwKTsKIGRpYWxvZy5zaG93KCk7CiBjaGVja0NlbnRl
cmVkKGRpYWxvZyk7CisKK2RlYnVnKCc8YnI+RGlhbG9nIHNob3VsZCBub3QgYmUgcmVjZW50ZXJl
ZCBvbiBhIHJlbGF5b3V0LicpOwordmFyIGV4cGVjdGVkVG9wID0gZGlhbG9nLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLnRvcDsKK3dpbmRvdy5zY3JvbGwoMCwgMTAwMCk7Cit2YXIgZm9yY2VSZWxh
eW91dERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworZm9yY2VSZWxheW91dERp
di5zdHlsZS53aWR0aCA9ICcxMDBweCc7Citmb3JjZVJlbGF5b3V0RGl2LnN0eWxlLmhlaWdodCA9
ICcxMDBweCc7Citmb3JjZVJlbGF5b3V0RGl2LnN0eWxlLmJvcmRlciA9ICdzb2xpZCc7Citkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcmNlUmVsYXlvdXREaXYpOword2luZG93LnNjcm9sbCgw
LCA1MDApOworc2hvdWxkQmUoJ2RpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AnLCAn
ZXhwZWN0ZWRUb3AnKTsKK2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZm9yY2VSZWxheW91dERp
dik7CiBkaWFsb2cuY2xvc2UoKTsKIAotLy8gQSB0YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRp
b25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydC4KK2RlYnVnKCc8YnI+QSB0YWxsIGRpYWxv
ZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydC4nKTsKIHZh
ciBkaWFsb2dJbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogZGlhbG9nSW5u
ZXIuY2xhc3NOYW1lID0gJ2ZpbGxlcic7CiBkaWFsb2cuYXBwZW5kQ2hpbGQoZGlhbG9nSW5uZXIp
OwotZGlhbG9nLnNob3coKTsKLWNoZWNrVG9wT2ZWaWV3cG9ydChkaWFsb2cpOwotZGlhbG9nLmNs
b3NlKCk7CitzaG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBjaGVja1RvcE9m
Vmlld3BvcnQoZGlhbG9nKSB9KTsKIGRpYWxvZy5yZW1vdmVDaGlsZChkaWFsb2dJbm5lcik7CiAK
LS8vIEFkZCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIuIFRoZSBkaWFsb2cgc2hvdWxkIGJlIGNl
bnRlcmVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXNlbmNlIG9mIHNjcm9sbGJhcnMuCitkZWJ1Zygn
PGJyPlRoZSBkaWFsb2cgc2hvdWxkIGJlIGNlbnRlcmVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXNl
bmNlIG9mIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIuJyk7CiB2YXIgZmlsbGVyRGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGxlckRpdicpOwogZmlsbGVyRGl2LnN0eWxlLndpZHRoID0g
JzQwMDBweCc7Ci1kaWFsb2cuc2hvdygpOwotY2hlY2tDZW50ZXJlZChkaWFsb2cpOwotZGlhbG9n
LmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBjaGVja0Nl
bnRlcmVkKGRpYWxvZykgfSk7CiBmaWxsZXJEaXYuc3R5bGUud2lkdGggPSAnYXV0byc7CiAKLS8v
IFRlc3QgdGhhdCBjZW50ZXJpbmcgd29ya3Mgd2hlbiBkaWFsb2cgaXMgaW5zaWRlIHBvc2l0aW9u
ZWQgY29udGFpbmVycy4KLXZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKLWNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7Ci1jb250YWluZXIu
c3R5bGUudG9wID0gJzgwMHB4OycKLWNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9ICc1MHB4OycKLWNv
bnRhaW5lci5zdHlsZS53aWR0aCA9ICc5MCUnOworZGVidWcoJzxicj5UZXN0IHRoYXQgY2VudGVy
aW5nIHdvcmtzIHdoZW4gZGlhbG9nIGlzIGluc2lkZSBwb3NpdGlvbmVkIGNvbnRhaW5lcnMuJyk7
Cit2YXIgYWJzb2x1dGVDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
K2Fic29sdXRlQ29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKK2Fic29sdXRl
Q29udGFpbmVyLnN0eWxlLnRvcCA9ICc4MDBweDsnCithYnNvbHV0ZUNvbnRhaW5lci5zdHlsZS5o
ZWlnaHQgPSAnNTBweDsnCithYnNvbHV0ZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICc5MCUnOwog
ZGlhbG9nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGlhbG9nKTsKLWRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoY29udGFpbmVyKTsKLWNvbnRhaW5lci5hcHBlbmRDaGlsZChkaWFsb2cpOwotZGlh
bG9nLnNob3coKTsKLWNoZWNrQ2VudGVyZWQoZGlhbG9nKTsKLWRpYWxvZy5jbG9zZSgpOwotY29u
dGFpbmVyLnJlbW92ZUNoaWxkKGRpYWxvZyk7Ci0KLXZhciBjb250YWluZXIyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0vLyBGSVhNRTogVGhpcyB0ZXN0IGZhaWxzIGZvciBwb3Np
dGlvbiA9ICdyZWxhdGl2ZScuCi1jb250YWluZXIyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRl
JzsKLWNvbnRhaW5lcjIuc3R5bGUudG9wID0gJzIwcHgnOwotY29udGFpbmVyMi5zdHlsZS5oZWln
aHQgPSAnMzBweCc7Ci1jb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyMik7Ci1jb250YWlu
ZXIyLmFwcGVuZENoaWxkKGRpYWxvZyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFic29s
dXRlQ29udGFpbmVyKTsKK2Fic29sdXRlQ29udGFpbmVyLmFwcGVuZENoaWxkKGRpYWxvZyk7Citz
aG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBjaGVja0NlbnRlcmVkKGRpYWxv
ZykgfSk7CithYnNvbHV0ZUNvbnRhaW5lci5yZW1vdmVDaGlsZChkaWFsb2cpOworCit2YXIgcmVs
YXRpdmVDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK3JlbGF0aXZl
Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKK3JlbGF0aXZlQ29udGFpbmVy
LnN0eWxlLnRvcCA9ICcyMHB4JzsKK3JlbGF0aXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcz
MHB4JzsKK2Fic29sdXRlQ29udGFpbmVyLmFwcGVuZENoaWxkKHJlbGF0aXZlQ29udGFpbmVyKTsK
K3JlbGF0aXZlQ29udGFpbmVyLmFwcGVuZENoaWxkKGRpYWxvZyk7CiBkaWFsb2cuc2hvdygpOwog
Y2hlY2tDZW50ZXJlZChkaWFsb2cpOworCitkZWJ1ZygiPGJyPkRpYWxvZydzIHBvc2l0aW9uIHNo
b3VsZCBzdXJ2aXZlIGFmdGVyIGJlY29taW5nIGRpc3BsYXk6bm9uZSB0ZW1wb3JhcmlseS4iKTsK
K2V4cGVjdGVkVG9wID0gZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKK3dpbmRv
dy5zY3JvbGwoMCwgMTAwMCk7CityZWxhdGl2ZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25v
bmUnOworcmVsYXRpdmVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7Cit3aW5kb3cu
c2Nyb2xsKDAsIDUwMCk7CitzaG91bGRCZSgnZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LnRvcCcsICdleHBlY3RlZFRvcCcpOworCitkZWJ1ZygiPGJyPkRpYWxvZydzIHBvc2l0aW9uIHNo
b3VsZCBzdXJ2aXZlIGFmdGVyIGJlaW5nIHJlLWFkZGVkIHRvIGRvY3VtZW50IHdpdGhvdXQgYW5v
dGhlciBjYWxsIHRvIHNob3coKS4iKTsKK2V4cGVjdGVkVG9wID0gZGlhbG9nLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLnRvcDsKK3dpbmRvdy5zY3JvbGwoMCwgMTAwMCk7CityZWxhdGl2ZUNvbnRh
aW5lci5yZW1vdmVDaGlsZChkaWFsb2cpOworcmVsYXRpdmVDb250YWluZXIuYXBwZW5kQ2hpbGQo
ZGlhbG9nKTsKK3dpbmRvdy5zY3JvbGwoMCwgNTAwKTsKK3Nob3VsZEJlKCdkaWFsb2cuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkudG9wJywgJ2V4cGVjdGVkVG9wJyk7CiBkaWFsb2cuY2xvc2UoKTsK
IAotLy8gVGVzdCB0aGF0IHNldHRpbmcgdG9wIG1hbnVhbGx5IGlzIHRoZSBzYW1lIGFzIGZvciBh
IHBsYWluIGRpdi4KK2RlYnVnKCI8YnI+RGlhbG9nIHNob3VsZCBub3QgYmUgY2VudGVyZWQgaWYg
c2hvdygpIHdhcyBjYWxsZWQgd2hlbiBhbiBhbmNlc3RvciBoYWQgZGlzcGxheSAnbm9uZScuIik7
CiB2YXIgcGxhaW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLWNvbnRhaW5l
cjIuYXBwZW5kQ2hpbGQocGxhaW5EaXYpOwogcGxhaW5EaXYuc3R5bGUucG9zaXRpb24gPSAnYWJz
b2x1dGUnOwotcGxhaW5EaXYuc3R5bGUudG9wID0gJzUwcHgnOwotZGlhbG9nLnN0eWxlLnRvcCA9
ICc1MHB4JzsKK3JlbGF0aXZlQ29udGFpbmVyLmFwcGVuZENoaWxkKHBsYWluRGl2KTsKK2V4cGVj
dGVkVG9wID0gcGxhaW5EaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOworYWJzb2x1dGVD
b250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKIGRpYWxvZy5zaG93KCk7Ci1zaG91bGRC
ZSgnZGlhbG9nLm9mZnNldFRvcCcsICdwbGFpbkRpdi5vZmZzZXRUb3AnKTsKK2Fic29sdXRlQ29u
dGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworc2hvdWxkQmUoJ2RpYWxvZy5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS50b3AnLCAnZXhwZWN0ZWRUb3AnKTsKIGRpYWxvZy5jbG9zZSgpOwog
Ci0vLyBUZXN0IHRoYXQgc2V0dGluZyBib3R0b20gbWFudWFsbHkgaXMgdGhlIHNhbWUgYXMgZm9y
IGEgcGxhaW4gZGl2LgorZGVidWcoIjxicj5UZXN0IHRoYXQgc2V0dGluZyAndG9wJyBvbiBkaWFs
b2cgcmVzdWx0cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyBmb3IgYSBwbGFpbiBkaXYuIik7Citw
bGFpbkRpdi5zdHlsZS50b3AgPSAnNTBweCc7CitkaWFsb2cuc3R5bGUudG9wID0gJzUwcHgnOwor
c2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgc2hvdWxkQmUoJ2RpYWxvZy5v
ZmZzZXRUb3AnLCAncGxhaW5EaXYub2Zmc2V0VG9wJyk7IH0pOworCitkZWJ1ZygiPGJyPlRlc3Qg
dGhhdCBzZXR0aW5nICdib3R0b20nIG9uIGRpYWxvZyByZXN1bHRzIGluIHRoZSBzYW1lIHBvc2l0
aW9uIGFzIGZvciBhIHBsYWluIGRpdi4iKTsKIGRpYWxvZy5zdHlsZS50b3AgPSAnYXV0byc7CiBw
bGFpbkRpdi5zdHlsZS50b3AgPSAnYXV0byc7CiBkaWFsb2cuc3R5bGUuYm90dG9tID0gJzUwcHgn
OwogcGxhaW5EaXYuc3R5bGUuYm90dG9tID0gJzUwcHgnOwotZGlhbG9nLnNob3coKTsKLXNob3Vs
ZEJlKCdkaWFsb2cub2Zmc2V0Qm90dG9tJywgJ3BsYWluRGl2Lm9mZnNldEJvdHRvbScpOwotZGlh
bG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBzaG91
bGRCZSgnZGlhbG9nLm9mZnNldEJvdHRvbScsICdwbGFpbkRpdi5vZmZzZXRCb3R0b20nKTsgfSk7
CiAKLS8vIFRlc3QgdGhhdCBmaXhlZCBwb3NpdGlvbiBoYXMgdGhlIHVzdWFsIGJlaGF2aW9yLgor
ZGVidWcoJzxicj5UZXN0IHRoYXQgZml4ZWQgcG9zaXRpb25pbmcgZm9yIGRpYWxvZyBoYXMgc2Ft
ZSBiZWhhdmlvciBhcyBmb3IgYSBwbGFpbiBkaXYuJyk7CiBwbGFpbkRpdi5zdHlsZS5wb3NpdGlv
biA9ICdmaXhlZCc7CiBwbGFpbkRpdi5zdHlsZS50b3AgPSAnNTBweCc7CiBkaWFsb2cuc3R5bGUu
cG9zaXRpb24gPSAnZml4ZWQnOwogZGlhbG9nLnN0eWxlLnRvcCA9ICc1MHB4JzsKLWRpYWxvZy5z
aG93KCk7Ci1zaG91bGRCZSgnZGlhbG9nLm9mZnNldFRvcCcsICdwbGFpbkRpdi5vZmZzZXRUb3An
KTsKLWRpYWxvZy5jbG9zZSgpOworc2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigp
IHsgc2hvdWxkQmUoJ2RpYWxvZy5vZmZzZXRUb3AnLCAncGxhaW5EaXYub2Zmc2V0VG9wJyk7IH0p
OwogCi0vLyBUZXN0IHRoYXQgc3RhdGljIHBvc2l0aW9uIGhhcyB0aGUgdXN1YWwgYmVoYXZpb3Iu
CitkZWJ1ZygnPGJyPlRlc3QgdGhhdCBzdGF0aWMgcG9zaXRpb24gZm9yIGEgbm9uLW1vZGFsIGRp
YWxvZyBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgZm9yIGEgcGxhaW4gZGl2LicpOworLy8gSnVz
dCB0ZXN0IG5vbi1tb2RhbCBzaW5jZSBtb2RhbCBpcyBjb3ZlcmVkIGJ5IG90aGVyIHRlc3RzIChm
b3IgbW9kYWwsIHN0YXRpYyBjb21wdXRlcyB0byBhYnNvbHV0ZSkKIHBsYWluRGl2LnN0eWxlLnBv
c2l0aW9uID0gJ3N0YXRpYyc7CiBwbGFpbkRpdi5zdHlsZS50b3AgPSAnYXV0byc7CiB2YXIgZXhw
ZWN0ZWRUb3AgPSBwbGFpbkRpdi5vZmZzZXRUb3A7CiBwbGFpbkRpdi5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKHBsYWluRGl2KTsKIGRpYWxvZy5zdHlsZS5wb3NpdGlvbiA9ICdzdGF0aWMnOwotZGlh
bG9nLnN0eWxlLnRvcCA9ICdhdXRvJzsKIGRpYWxvZy5zaG93KCk7CiBzaG91bGRCZSgnZGlhbG9n
Lm9mZnNldFRvcCcsICdleHBlY3RlZFRvcCcpOwogZGlhbG9nLmNsb3NlKCk7Ci1kaWFsb2cucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChkaWFsb2cpOwogCi0vLyBUZXN0IHRoYXQgcmVsYXRpdmUgcG9z
aXRpb24gaGFzIHRoZSB1c3VhbCBiZWhhdmlvci4KLWNvbnRhaW5lcjIuYXBwZW5kQ2hpbGQocGxh
aW5EaXYpOworZGVidWcoJzxicj5UZXN0IHRoYXQgcmVsYXRpdmUgcG9zaXRpb24gZm9yIGEgbm9u
LW1vZGFsIGRpYWxvZyBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgZm9yIGEgcGxhaW4gZGl2Licp
OworLy8gSnVzdCB0ZXN0IG5vbi1tb2RhbCBzaW5jZSBtb2RhbCBpcyBjb3ZlcmVkIGJ5IG90aGVy
IHRlc3RzIChmb3IgbW9kYWwsIHJlbGF0aXZlIGNvbXB1dGVzIHRvIGFic29sdXRlKQorcmVsYXRp
dmVDb250YWluZXIuYXBwZW5kQ2hpbGQocGxhaW5EaXYpOwogcGxhaW5EaXYuc3R5bGUucG9zaXRp
b24gPSAncmVsYXRpdmUnOwogcGxhaW5EaXYuc3R5bGUudG9wID0gJzUwcHgnOwogZXhwZWN0ZWRU
b3AgPSBwbGFpbkRpdi5vZmZzZXRUb3A7CiBwbGFpbkRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KHBsYWluRGl2KTsKLWNvbnRhaW5lcjIuYXBwZW5kQ2hpbGQoZGlhbG9nKTsKIGRpYWxvZy5zdHls
ZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CiBkaWFsb2cuc3R5bGUudG9wID0gJzUwcHgnOwogZGlh
bG9nLnNob3coKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183389</attachid>
            <date>2013-01-18 00:05:14 -0800</date>
            <delta_ts>2013-02-19 04:49:55 -0800</delta_ts>
            <desc>review comments</desc>
            <filename>bug-95946-20130118170212.patch</filename>
            <type>text/plain</type>
            <size>35059</size>
            <attacher name="Matt Falkenhagen">falken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk5OGY4N2I5NWY3NWZm
MzljNTYzNjAzN2RjZmFmMTdlMjM0OWE3Zi4uNTU4Y2Q2NWVkMWQyNjJjY2Q1NTE1NjJhMmIyZjQ5
YTMyYzhlMjMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTAxLTE4ICBNYXR0
IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICA8ZGlhbG9nPiBj
ZW50ZXJpbmcgYnJlYWtzIHdoZW4gdGhlcmUgaXMgYSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYW5j
ZXN0b3IgY29udGFpbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NTk0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBkaWFsb2cncyBjZW50ZXJpbmctaW4tdmlld3BvcnQg
dG8gb2NjdXIgZHVyaW5nCisgICAgICAgIGRpYWxvZy5zaG93KCkgaW5zdGVhZCBvZiBkdXJpbmcg
bGF5b3V0LiBkaWFsb2cuc2hvdygpIGZvcmNlcyBhCisgICAgICAgIHN5bmNocm9ub3VzIGxheW91
dCBhbmQgdGhlbiBzZXRzIGRpYWxvZydzICd0b3AnIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQKKyAg
ICAgICAgaW4gdGhlIHZpZXdwb3J0LiBUaGlzIHNhdGlzZmllcyB0aGUgc3BlYyB0aGF0IGRpYWxv
ZyBpcyBjZW50ZXJlZCBvbmx5CisgICAgICAgIG9uIGRpYWxvZy5zaG93KCkgYW5kIG5vdCByZS1j
ZW50ZXJlZCBvbiBzdWJzZXF1ZW50IHJlbGF5b3V0cy4KKworICAgICAgICBUaGUgcHJldmlvdXMg
aW1wbGVtZW50YXRpb24gKHIxMjc2ODEpIGluY29ycmVjdGx5IHJlbGllZCBvbiBkaWFsb2cncwor
ICAgICAgICBhbmNlc3RvcnMgaGF2aW5nIGFscmVhZHkgYmVlbiBsYXllZCBvdXQgZHVyaW5nIGRp
YWxvZydzIGxheW91dC4KKyAgICAgICAgRnVydGhlcm1vcmUsIGl0IHJlY2VudGVyZWQgZGlhbG9n
IG9uIGEgcmVsYXlvdXQuCisKKyAgICAgICAgTmV3IHRlc3RzIGFkZGVkIHRvIG5vbi1hbmNob3Jl
ZC1kaWFsb2ctcG9zaXRpb25pbmcuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IFJl
bW92ZSBSZW5kZXJEaWFsb2cgZmlsZXMsIHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkLgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IERpdHRvLgorICAgICAgICAqIFRhcmdldC5wcmk6
IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxE
aWFsb2dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEaWFsb2dFbGVtZW50OjpI
VE1MRGlhbG9nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6
Y2xvc2UpOiBSZXNldCAndG9wJyBzbyB0aGUgZGlhbG9nIGlzIHJlY2VudGVyZWQgaWYgb3BlbmVk
IGFnYWluLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGlhbG9n
RWxlbWVudDo6c2V0dXBEZWZhdWx0VW5hbmNob3JlZFBvc2l0aW9uKTogU2FmZSBjZW50ZXIgaW4g
dmlld3BvcnQuIFdlIG11c3QgZmlyc3QgZG8gYSBzeW5jIGxheW91dAorICAgICAgICBzbyBkaWFs
b2cncyBhbmNlc3RvcnMnIHBvc2l0aW9ucyBhbmQgZGlhbG9nJ3MgZGltZW5zaW9ucyBhcmUga25v
d24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRGlhbG9nRWxlbWVudDo6c2hvd01vZGFsKToKKyAgICAgICAgKiBodG1s
L0hUTUxEaWFsb2dFbGVtZW50Lmg6CisgICAgICAgIChIVE1MRGlhbG9nRWxlbWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFJldmVydCB0aGUgYXNzZXJ0aW9uIHJlbW92
YWxzIG5lZWRlZCBieSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgY2VudGVyaW5nIChy
MTI3NjgxKQorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjptYXBBYnNvbHV0ZVRvTG9jYWxQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVU
b0xvY2FsUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEaWFsb2cuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEaWFsb2cuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IFJlbW92ZSBSZW5kZXJEaWFsb2cgcmVmZXJl
bmNlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwOiBEaXR0by4K
KwogMjAxMy0wMS0xNyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgMjAxMy0wMS0xNyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5j
b20+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDU1MWVkMjY4YmYwMDdlNzI0ODYzYjNjNzc0MDJm
MjQ5NTRhNmQ3MjcuLmMwMGVhYTg3MzI5ZjE0YmQ3NTc4ODNhNDY5NmZkNTIzZmI3MDNkZjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMTIxLDcgKzIxMjEsNiBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHAKLSAgICByZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcAogICAgIHJlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3Bw
CiAgICAgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggMDE5ZDg5MGVmM2JkNGVkYWMzNjY2NzRjMmY1MDRhNjRhMDIy
OWM2Mi4uZjU5MWM3NTVlZDVlMmE0MGZhZDRiOGE2NmIyZmM5YmY4NzE4MzNhYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00MzMyLDcgKzQzMzIsNiBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3guaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDQxMDMyNjA0ZTIwOGY2
MDlhZDA0MmM4MzEwYmJmZDRmYTdkZWI2YWIuLjFlNjhkZmIzMjRlMmQxMGQ0M2YyY2FjMDlmZjQw
YmE2YzJkODY3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTE2NSw3ICsxMTY1LDYgQEAgU09VUkNFUyAr
PSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuY3BwIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcCBcCiAgICAgcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZp
ZWxkc2V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggYTc0MWM4ZDdmMGExNjBlZmNiOGExNzA3NTE5MmEzM2EzNzJh
MTkwMy4uZGQyYjYzMDkzY2QxYWRiNzBhZTk0NDJlZjA2YjAxZjY4NjQ2NThkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMjI5Niw3ICsyMjk2LDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5k
ZXJEZXRhaWxzTWFya2VyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiYzgyMTY2YjcyZDVjOWY0YTk0OTkxNjA2ZGZm
ODE5ZWVlMDM3NjM2Li4xMTcyNDU5YTk5MTEwM2Y0ODFmZjViNzVmOWRmZjI1MjE1MjNjNDNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xOTczLDggKzE5NzMsNiBAQAogCQk3NkNERDJGNTExMDNEQTY2MDA2ODA1MjEgLyogQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc2Q0REMkVGMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5oICovOyB9OwogCQk3NkNERDJGNjExMDNEQTY2MDA2ODA1MjEgLyogQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc2Q0REMkYwMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmls
aXR5TWVudUxpc3RPcHRpb24uY3BwICovOyB9OwogCQk3NkNERDJGNzExMDNEQTY2MDA2ODA1MjEg
LyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkNERDJGMTExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNz
aWJpbGl0eU1lbnVMaXN0T3B0aW9uLmggKi87IH07Ci0JCTc2RjJFMkVCMTVGNzRDRUYwMDVGRjY2
NCAvKiBSZW5kZXJEaWFsb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzZGMkUyRTkxNUY3NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5jcHAg
Ki87IH07Ci0JCTc2RjJFMkVDMTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RjJFMkVBMTVGNzRD
RUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuaCAqLzsgfTsKIAkJNzZGQzJCMEIxMjM3MERBMDAw
NkE5OTFBIC8qIERPTVRva2VuTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3NkZDMkIwODEyMzcwREEwMDA2QTk5MUEgLyogRE9NVG9rZW5MaXN0
LmNwcCAqLzsgfTsKIAkJNzZGQzJCMEMxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzZGQzJCMDkx
MjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5oICovOyB9OwogCQk3NkZGMTdFMzExMjM1
NjczMDAxRDYxQjUgLyogUGx1Z2luVmlld05vbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzZGRjE3RTIxMTIzNTY3MzAwMUQ2MUI1IC8qIFBsdWdp
blZpZXdOb25lLmNwcCAqLzsgfTsKQEAgLTkzNTIsOCArOTM1MCw2IEBACiAJCTc2Q0REMkVGMTEw
M0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkNERDJGMDExMDNEQTY2MDA2ODA1MjEgLyogQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc2Q0REMkYxMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5
TWVudUxpc3RPcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNz
aWJpbGl0eU1lbnVMaXN0T3B0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc2
RjJFMkU5MTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRGlhbG9nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNzZGMkUyRUExNUY3NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJEaWFsb2cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZGQzJCMDgxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRv
a2VuTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01Ub2tl
bkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZDMkIwOTEyMzcwREEw
MDA2QTk5MUEgLyogRE9NVG9rZW5MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTVRva2VuTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZDMkIw
QTEyMzcwREEwMDA2QTk5MUEgLyogRE9NVG9rZW5MaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBET01Ub2tlbkxpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE5
NTEsOCArMjE5NDcsNiBAQAogCQkJCUJDRUE0ODJGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJE
ZXByZWNhdGVkRmxleGlibGVCb3guaCAqLywKIAkJCQlEMzAyNzU0NTEyQTVGRTg0MDA0QkQ4Mjgg
LyogUmVuZGVyRGV0YWlsc01hcmtlci5jcHAgKi8sCiAJCQkJRDMwMjc1NDYxMkE1RkU4NDAwNEJE
ODI4IC8qIFJlbmRlckRldGFpbHNNYXJrZXIuaCAqLywKLQkJCQk3NkYyRTJFOTE1Rjc0Q0VGMDA1
RkY2NjQgLyogUmVuZGVyRGlhbG9nLmNwcCAqLywKLQkJCQk3NkYyRTJFQTE1Rjc0Q0VGMDA1RkY2
NjQgLyogUmVuZGVyRGlhbG9nLmggKi8sCiAJCQkJMEY1QjdBNTIxMEY2NUQ3QTAwMzc2MzAyIC8q
IFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCAqLywKIAkJCQkwRjVCN0E1MzEwRjY1RDdBMDAzNzYz
MDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCAqLywKIAkJCQlBOEVBNzNBRjBBMTkwMEUzMDBB
OEVGNUYgLyogUmVuZGVyRmllbGRzZXQuY3BwICovLApAQCAtMjUzMjksNyArMjUzMjMsNiBAQAog
CQkJCTkzOTJGMTQyMEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0VBNDg2RTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlEMzAyNzU0QTEyQTVGRTg0MDA0QkQ4Mjgg
LyogUmVuZGVyRGV0YWlsc01hcmtlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzZGMkUyRUMxNUY3
NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RTVG
N0YxMzVFMERDRjAwQTY5ODM3IC8qIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTlCMzJDREE5MTNERjdGQTkwMEYzNEQxMyAvKiBSZW5kZXJlZFBvc2l0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjVCN0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjg2MzcsNyArMjg2MzAsNiBAQAogCQkJ
CTkzOTJGMTQ0MEFEMTg1RkUwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDRUE0ODZEMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJEZXByZWNhdGVkRmxl
eGlibGVCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDMwMjc1NDkxMkE1RkU4NDAwNEJEODI4
IC8qIFJlbmRlckRldGFpbHNNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzZGMkUyRUIx
NUY3NENFRjAwNUZGNjY0IC8qIFJlbmRlckRpYWxvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
QjMyQ0RBQTEzREY3RkE5MDBGMzREMTMgLyogUmVuZGVyZWRQb3NpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjVCN0E1NDEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTczQzMwQTE5MDBFMzAwQThFRjVGIC8qIFJl
bmRlckZpZWxkc2V0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
aWFsb2dFbGVtZW50LmNwcAppbmRleCBiNzk5MTRlMGVhZTg4OWE3NDBmZTJhYTczNzg1YjdlODc3
ZGVhOWUzLi44ODk1MTYyMDc2ZTM3YzIwOTU5MzU0ZjQxMjQ1NDU4ZjFjMDNmMGQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmNwcApAQCAtMjksNyArMjksOCBAQAog
I2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJSZW5kZXJEaWFsb2cuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsNiArMzgs
NyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MRGlhbG9nRWxlbWVudDo6SFRN
TERpYWxvZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX2Nz
c1RvcElzT3ZlcnJpZGVuKGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGRpYWxvZ1Rh
ZykpOwogfQpAQCAtNTIsOCArNTQsMzggQEAgdm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6Y2xvc2Uo
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0Qm9vbGVhbkF0dHJpYnV0ZShvcGVuQXR0ciwgZmFs
c2UpOwogICAgIGRvY3VtZW50KCktPnJlbW92ZUZyb21Ub3BMYXllcih0aGlzKTsKKyAgICBzZXRC
b29sZWFuQXR0cmlidXRlKG9wZW5BdHRyLCBmYWxzZSk7CisgICAgaWYgKG1fY3NzVG9wSXNPdmVy
cmlkZW4pIHsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwg
ImF1dG8iLCBmYWxzZSk7CisgICAgICAgIG1fY3NzVG9wSXNPdmVycmlkZW4gPSBmYWxzZTsKKyAg
ICB9Cit9CisKK3ZvaWQgSFRNTERpYWxvZ0VsZW1lbnQ6OnNldHVwRGVmYXVsdFVuYW5jaG9yZWRQ
b3NpdGlvbigpCit7CisgICAgLy8gTGF5b3V0IGJlY2F1c2Ugd2UgbmVlZCB0byBrbm93IG91ciBh
bmNlc3RvcnMnIHBvc2l0aW9ucyBhbmQgb3VyIG93biBoZWlnaHQuCisgICAgZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisKKyAgICBpZiAoIXJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJl
bmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKHN0eWxlVG9Vc2UtPnBvc2l0aW9uKCkgIT0gQWJz
b2x1dGVQb3NpdGlvbiB8fCAhc3R5bGVUb1VzZS0+dG9wKCkuaXNBdXRvKCkgfHwgIXN0eWxlVG9V
c2UtPmJvdHRvbSgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcigpKTsKKworICAgIC8vIFNldCB1cCBkaWFs
b2cncyBwb3NpdGlvbiB0byBiZSBzYWZlLWNlbnRlcmVkIGluIHRoZSB2aWV3cG9ydC4KKyAgICAv
LyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRvIGluIHZlcnRpY2FsIHdyaXRpbmcgbW9kZS4K
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBpbnQg
c2Nyb2xsVG9wID0gZnJhbWVWaWV3LT5zY3JvbGxPZmZzZXQoKS5oZWlnaHQoKTsKKyAgICBGbG9h
dFBvaW50IGFic29sdXRlUG9pbnQoMCwgc2Nyb2xsVG9wKTsKKyAgICBpbnQgdmlzaWJsZUhlaWdo
dCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpLmhlaWdodCgpOworICAgIGlm
IChibG9jay0+aGVpZ2h0KCkgPCB2aXNpYmxlSGVpZ2h0KQorICAgICAgICBhYnNvbHV0ZVBvaW50
Lm1vdmUoMCwgKHZpc2libGVIZWlnaHQgLSBibG9jay0+aGVpZ2h0KCkpIC8gMik7CisgICAgRmxv
YXRQb2ludCBsb2NhbFBvaW50ID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpLT5hYnNvbHV0ZVRv
TG9jYWwoYWJzb2x1dGVQb2ludCk7CisgICAgTGF5b3V0VW5pdCBsb2NhbFRvcCA9IExheW91dFNp
emUobG9jYWxQb2ludC54KCksIGxvY2FsUG9pbnQueSgpKS5oZWlnaHQoKTsKKyAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBTdHJpbmc6Om51bWJlcihsb2NhbFRvcC50
b0ludCgpKSArICJweCIsIGZhbHNlKTsKKyAgICBtX2Nzc1RvcElzT3ZlcnJpZGVuID0gdHJ1ZTsK
IH0KIAogdm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6c2hvdygpCkBAIC02MSw2ICs5Myw3IEBAIHZv
aWQgSFRNTERpYWxvZ0VsZW1lbnQ6OnNob3coKQogICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKG9w
ZW5BdHRyKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldEJvb2xlYW5BdHRyaWJ1dGUob3BlbkF0
dHIsIHRydWUpOworICAgIHNldHVwRGVmYXVsdFVuYW5jaG9yZWRQb3NpdGlvbigpOwogfQogCiB2
b2lkIEhUTUxEaWFsb2dFbGVtZW50OjpzaG93TW9kYWwoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC02
OSw4ICsxMDIsOSBAQCB2b2lkIEhUTUxEaWFsb2dFbGVtZW50OjpzaG93TW9kYWwoRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgc2V0Qm9vbGVhbkF0dHJpYnV0ZShvcGVuQXR0ciwgdHJ1ZSk7CiAgICAg
ZG9jdW1lbnQoKS0+YWRkVG9Ub3BMYXllcih0aGlzKTsKKyAgICBzZXRCb29sZWFuQXR0cmlidXRl
KG9wZW5BdHRyLCB0cnVlKTsKKyAgICBzZXR1cERlZmF1bHRVbmFuY2hvcmVkUG9zaXRpb24oKTsK
IH0KIAogYm9vbCBIVE1MRGlhbG9nRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKQEAgLTgzLDExICsxMTcsNiBAQCBib29sIEhU
TUxEaWFsb2dFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdAogICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNQcmVzZW50YXRpb25B
dHRyaWJ1dGUobmFtZSk7CiB9CiAKLVJlbmRlck9iamVjdCogSFRNTERpYWxvZ0VsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQotewotICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJEaWFsb2codGhpcyk7Ci19Ci0KIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmgKaW5kZXggZTAxMDQ1YmNlOWFkMjYw
OTJmZDk5NTNiMjg1Njg4MTA5NmRhOTA3NS4uYmEzNTVlYWMwZjhlNGFkMTBlZjFhZjdhNTIwMGZh
MTk5ZWZkMDY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGlhbG9nRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERpYWxvZ0VsZW1lbnQuaApAQCAt
NDYsOCArNDYsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVE1MRGlhbG9nRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdCBPVkVSUklERTsKKyAgICB2b2lkIHNldHVwRGVmYXVsdFVuYW5jaG9yZWRQ
b3NpdGlvbigpOworCisgICAgYm9vbCBtX2Nzc1RvcElzT3ZlcnJpZGVuOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRl
eCBmZTU4NmMyNTZiMmI3NTJmMjM1M2FkODY4ZWZiYWFkOWQ3ZDhlYmU4Li5jYmM5N2FlNjY3ZDNk
OTg1YzgwMGE1N2ZmMTU5MjAwMGJiNjQ2NjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtMTY0MSw2ICsxNjQxLDkgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5k
ZXJCb3g6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamUK
IAogdm9pZCBSZW5kZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5hdGVz
RmxhZ3MgbW9kZSwgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogeworICAg
IC8vIFdlIGRvbid0IGV4cGVjdCBhYnNvbHV0ZVRvTG9jYWwoKSB0byBiZSBjYWxsZWQgZHVyaW5n
IGxheW91dCAoeWV0KQorICAgIEFTU0VSVCghdmlldygpIHx8ICF2aWV3KCktPmxheW91dFN0YXRl
RW5hYmxlZCgpKTsKKwogICAgIGJvb2wgaXNGaXhlZFBvcyA9IHN0eWxlKCktPnBvc2l0aW9uKCkg
PT0gRml4ZWRQb3NpdGlvbjsKICAgICBib29sIGhhc1RyYW5zZm9ybSA9IGhhc0xheWVyKCkgJiYg
bGF5ZXIoKS0+dHJhbnNmb3JtKCk7CiAgICAgaWYgKGhhc1RyYW5zZm9ybSAmJiAhaXNGaXhlZFBv
cykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggZmMzM2RiZTQ3ZGQ1NDU4OGQ0ODYxNTU0NDA5NGUyMDllOWE1YTFhNy4uYjgy
Y2U3MzQyZGMxOWE4ZTc1ZTVhOWZmNmM3OGI4NDhkMWIxZWE0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0yNzg3LDYgKzI3
ODcsOSBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzaG91bGRBbnRpYWxpYXNMaW5lcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1h
cEFic29sdXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSwgVHJhbnNmb3Jt
U3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogeworICAgIC8vIFdlIGRvbid0IGV4cGVjdCBh
YnNvbHV0ZVRvTG9jYWwoKSB0byBiZSBjYWxsZWQgZHVyaW5nIGxheW91dCAoeWV0KQorICAgIEFT
U0VSVCghdmlldygpIHx8ICF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpKTsKKwogICAgIFJl
bmRlck9iamVjdCogbyA9IGNvbnRhaW5lcigpOwogICAgIGlmICghbykKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjI0OThhZTRjNWU1ZjAzMTkwNDI3OTIxYmJjNzlhMGQ0Nzk0MmI0
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyRGlh
bG9nLmgiCi0KLSNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9p
ZCBSZW5kZXJEaWFsb2c6OmxheW91dCgpCi17Ci0gICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQ
b2ludCBsYXlvdXRDaGVja1BvaW50OwotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRo
aXMsIHRydWUpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCks
IHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24o
KSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKLQotICAgIFJlbmRl
ckJsb2NrOjpsYXlvdXQoKTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUo
KTsKLSAgICBpZiAoc3R5bGVUb1VzZS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uIHx8
ICFzdHlsZVRvVXNlLT50b3AoKS5pc0F1dG8oKSB8fCAhc3R5bGVUb1VzZS0+Ym90dG9tKCkuaXNB
dXRvKCkpIHsKLSAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBBZGp1c3QgdGhlIGRpYWxvZydzIHBvc2l0aW9uIHRvIGJlIGNlbnRlcmVk
IGluIG9yIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0LgotICAgIC8vIEZJWE1FOiBGaWd1cmUg
b3V0IHdoYXQgdG8gZG8gaW4gdmVydGljYWwgd3JpdGluZyBtb2RlLgotICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOwotICAgIGludCBzY3JvbGxUb3AgPSBmcmFt
ZVZpZXctPnNjcm9sbE9mZnNldCgpLmhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQ
b2ludCgwLCBzY3JvbGxUb3ApOwotICAgIGludCB2aXNpYmxlSGVpZ2h0ID0gZnJhbWVWaWV3LT52
aXNpYmxlQ29udGVudFJlY3QodHJ1ZSkuaGVpZ2h0KCk7Ci0gICAgaWYgKGhlaWdodCgpIDwgdmlz
aWJsZUhlaWdodCkKLSAgICAgICAgYWJzb2x1dGVQb2ludC5tb3ZlKDAsICh2aXNpYmxlSGVpZ2h0
IC0gaGVpZ2h0KCkpIC8gMik7Ci0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gY29udGFpbmlu
Z0Jsb2NrKCktPmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZVBvaW50KTsKLSAgICBMYXlvdXRVbml0
IGxvY2FsVG9wID0gTGF5b3V0U2l6ZShsb2NhbFBvaW50LngoKSwgbG9jYWxQb2ludC55KCkpLmhl
aWdodCgpOwotICAgIHNldFkobG9jYWxUb3ApOwotCi0gICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0g
ICAgLy8gRklYTUU6IFNpbmNlIHRoZXJlIGlzIGFsd2F5cyBhIGxheWVyIGhlcmUsIHJlcGFpbnRl
ciBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LiBCdXQgd2l0aG91dCBpdCwgdGhlIGRpYWxvZyBpcyBz
b21ldGltZXMgbm90IHBhaW50ZWQgKHNlZSBidWcgOTA2NzApLgotICAgIHJlcGFpbnRlci5yZXBh
aW50QWZ0ZXJMYXlvdXQoKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEaWFsb2cuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEaWFsb2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzNTdmOTc0
NDFiY2M4Y2Y5ZmE0MWE3NGUwNjJmYWJiMWQ0NjgyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlh
bG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZW5k
ZXJEaWFsb2dfaAotI2RlZmluZSBSZW5kZXJEaWFsb2dfaAotCi0jaWYgRU5BQkxFKERJQUxPR19F
TEVNRU5UKQotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyV2lkZ2V0
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTERpYWxvZ0VsZW1lbnQ7Ci0K
LWNsYXNzIFJlbmRlckRpYWxvZyA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgUmVuZGVyRGlhbG9nKENvbnRhaW5lck5vZGUqIG5vZGUpCi0gICAgICAgIDogUmVu
ZGVyQmxvY2sobm9kZSkKLSAgICB7IH0KLQotICAgIHZpcnR1YWwgflJlbmRlckRpYWxvZygpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRGlh
bG9nIjsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0RpYWxvZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIHRydWU7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNl
bmRpZiAvLyBSZW5kZXJEaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IDY1YjI3ZjFmMmJmYjJlMmNiMDg2ZWRhYWYxZWE4ZDFjMjIwZjBlZWQuLjExY2I2
MzQ3ZTdmYjI0YzQ0ZDc1ODA5MjAxYTI4OTIyZjcwODdjYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTMxNiw5ICszMTYsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzQmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNCb3hNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jaWYgRU5B
QkxFKERJQUxPR19FTEVNRU5UKQotICAgIHZpcnR1YWwgYm9vbCBpc0RpYWxvZygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKaW5kZXggYWU2NzU2
ZjkzMTM2YjRlMjZiYmJmNjM4YjEyMmY5NmFjMGE3MTY0MC4uMzcxNzM5YTQwNTMyNmU3OWJjZTZj
OTUzNjJmZjVkNTU5ZjY4MWRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcmluZ0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyaW5nQWxsSW5PbmUuY3BwCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQ291
bnRlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcCIKICNp
bmNsdWRlICJSZW5kZXJEZXRhaWxzTWFya2VyLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJEaWFsb2cu
Y3BwIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJGaWVsZHNldC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGQ3NTU5YjZhY2FhNjczNTA1N2E5NWY4ZGI2NjY3NmUzZTdlZTA2NzcuLmY0MmRkNzk0
ZTMwZmZkNjE0NjlmZWE3YTJjNjk5Njc0NDJmMzc0M2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxMy0wMS0xOCAgTWF0dCBGYWxrZW5oYWdlbiAgPGZhbGtlbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgPGRpYWxvZz4gY2VudGVyaW5nIGJyZWFrcyB3aGVuIHRoZXJlIGlzIGEgcmVsYXRpdmVs
eSBwb3NpdGlvbmVkIGFuY2VzdG9yIGNvbnRhaW5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU5NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbW9yZSB0ZXN0IGNhc2VzIHRvIG5vbi1hbmNob3Jl
ZC1kaWFsb2ctcG9zaXRpb25pbmcuaHRtbCBmb3IgZGlhbG9nCisgICAgICAgIHBvc2l0aW9uaW5n
IHdoZW4gaW5zaWRlIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBjb250YWluZXJzLiBBbHNvLCBhZGQK
KyAgICAgICAgdGVzdCBjYXNlcyB0byBlbnN1cmUgZGlhbG9nIGlzIG5vdCByZS1jZW50ZXJlZCBv
biByZWxheW91dCwgYW5kIHRlc3QKKyAgICAgICAgbW9kYWwgZGlhbG9ncyBhcyB3ZWxsLgorCisg
ICAgICAgICogZmFzdC9kb20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1w
b3NpdGlvbmluZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vSFRNTERpYWxvZ0Vs
ZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy5odG1sOgorCiAyMDEzLTAxLTE3
ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZl
cnQgcjEyMjgyNCBmb3IgYSB3aGlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
SFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9y
ZWQtZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dAppbmRleCBmMDk1NWMxNzBjNGFlMzRj
MmFhZTY5ZWU0NGVlOWUzNTM1ZmVkMDFjLi44NzZlYjliNjY5YzI3MGVkOWIwZTczY2Y0MzA4ZmZm
ZTY4MzY2MDZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxl
bWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9n
LXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dApAQCAtMywxNiArMyw1NCBAQCBUZXN0cyBkZWZhdWx0
IHBvc2l0aW9uaW5nIG9mIG5vbi1hbmNob3JlZCBkaWFsb2dzLgogT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgogCiAKK0RpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0Lgog
UEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCiBQ
QVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKwor
RGlhbG9nIHNob3VsZCBiZSByZWNlbnRlcmVkIGlmIHNob3coKSBpcyBjYWxsZWQgYWZ0ZXIgY2xv
c2UoKS4KK1BBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyBleHBlY3Rl
ZFRvcAorCitEaWFsb2cgc2hvdWxkIG5vdCBiZSByZWNlbnRlcmVkIG9uIGEgcmVsYXlvdXQuCitQ
QVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKwor
QSB0YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3
cG9ydC4KK1BBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCiBQQVNT
IGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMAorCitUaGUgZGlhbG9nIHNo
b3VsZCBiZSBjZW50ZXJlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZiBhIGhvcml6b250
YWwgc2Nyb2xsYmFyLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlz
IGV4cGVjdGVkVG9wCiBQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMg
ZXhwZWN0ZWRUb3AKKworVGVzdCB0aGF0IGNlbnRlcmluZyB3b3JrcyB3aGVuIGRpYWxvZyBpcyBp
bnNpZGUgcG9zaXRpb25lZCBjb250YWluZXJzLgogUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCiBQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKLVBBU1MgZGlhbG9nLm9mZnNldFRvcCBpcyBwbGFp
bkRpdi5vZmZzZXRUb3AKLVBBU1MgZGlhbG9nLm9mZnNldEJvdHRvbSBpcyBwbGFpbkRpdi5vZmZz
ZXRCb3R0b20KLVBBU1MgZGlhbG9nLm9mZnNldFRvcCBpcyBwbGFpbkRpdi5vZmZzZXRUb3AKK1BB
U1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyBleHBlY3RlZFRvcAorCitE
aWFsb2cncyBwb3NpdGlvbiBzaG91bGQgc3Vydml2ZSBhZnRlciBiZWNvbWluZyBkaXNwbGF5Om5v
bmUgdGVtcG9yYXJpbHkuCitQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ag
aXMgZXhwZWN0ZWRUb3AKKworRGlhbG9nJ3MgcG9zaXRpb24gc2hvdWxkIHN1cnZpdmUgYWZ0ZXIg
YmVpbmcgcmUtYWRkZWQgdG8gZG9jdW1lbnQgd2l0aG91dCBhbm90aGVyIGNhbGwgdG8gc2hvdygp
LgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9w
CisKK0RpYWxvZyBzaG91bGQgbm90IGJlIGNlbnRlcmVkIGlmIHNob3coKSB3YXMgY2FsbGVkIHdo
ZW4gYW4gYW5jZXN0b3IgaGFkIGRpc3BsYXkgJ25vbmUnLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCisKK1Rlc3QgdGhhdCBzZXR0aW5nICd0
b3AnIG9uIGRpYWxvZyByZXN1bHRzIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIGZvciBhIHBsYWlu
LCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgc3Bhbi4KK1BBU1MgZGlhbG9nLm9mZnNldFRvcCBpcyBw
bGFpblNwYW4ub2Zmc2V0VG9wCitQQVNTIGRpYWxvZy5vZmZzZXRUb3AgaXMgcGxhaW5TcGFuLm9m
ZnNldFRvcAorCitUZXN0IHRoYXQgc2V0dGluZyAnYm90dG9tJyBvbiBkaWFsb2cgcmVzdWx0cyBp
biB0aGUgc2FtZSBwb3NpdGlvbiBhcyBmb3IgYSBwbGFpbiwgYWJzb2x1dGVseSBwb3NpdGlvbmVk
IHNwYW4uCitQQVNTIGRpYWxvZy5vZmZzZXRCb3R0b20gaXMgcGxhaW5TcGFuLm9mZnNldEJvdHRv
bQorUEFTUyBkaWFsb2cub2Zmc2V0Qm90dG9tIGlzIHBsYWluU3Bhbi5vZmZzZXRCb3R0b20KKwor
VGVzdCB0aGF0IGZpeGVkIHBvc2l0aW9uaW5nIGZvciBkaWFsb2cgaGFzIHNhbWUgYmVoYXZpb3Ig
YXMgZm9yIGEgcGxhaW4gc3Bhbi4KK1BBU1MgZGlhbG9nLm9mZnNldFRvcCBpcyBwbGFpblNwYW4u
b2Zmc2V0VG9wCitQQVNTIGRpYWxvZy5vZmZzZXRUb3AgaXMgcGxhaW5TcGFuLm9mZnNldFRvcAor
CitUZXN0IHRoYXQgc3RhdGljIHBvc2l0aW9uIGZvciBhIG5vbi1tb2RhbCBkaWFsb2cgaGFzIHRo
ZSBzYW1lIGJlaGF2aW9yIGFzIGZvciBhIHBsYWluIHNwYW4uCiBQQVNTIGRpYWxvZy5vZmZzZXRU
b3AgaXMgZXhwZWN0ZWRUb3AKKworVGVzdCB0aGF0IHJlbGF0aXZlIHBvc2l0aW9uIGZvciBhIG5v
bi1tb2RhbCBkaWFsb2cgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGZvciBhIHBsYWluIHNwYW4u
CiBQQVNTIGRpYWxvZy5vZmZzZXRUb3AgaXMgZXhwZWN0ZWRUb3AKIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTERp
YWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3Np
dGlvbmluZy5odG1sCmluZGV4IDkwMzE2NDFjNTVhM2Y5MDBlODIyY2ZjNzk4ZjY1ZWI5MjdiNzM0
NDkuLmQ0YWVhNTYzZGFkYTc3OGQ2Mjk2Y2QzZWM0MjU2MTJiYmQ1MzQ5YjAgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxEaWFsb2dFbGVtZW50L25vbi1hbmNob3JlZC1kaWFs
b2ctcG9zaXRpb25pbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9n
RWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLmh0bWwKQEAgLTUsNiArNSwx
MiBAQAogLmZpbGxlciB7CiAgICAgaGVpZ2h0OiAyMDAwMHB4OwogfQorCitkaWFsb2cgeworICAg
IC8qIFJlbW92ZSBib3JkZXIgYW5kIHBhZGRpbmcgdG8gYWxsb3cgY29tcGFyaW5nIGRpYWxvZydz
IHBvc2l0aW9uIHdpdGggdGhhdCBvZiBwbGFpbiBzcGFuIGVsZW1lbnRzLiAqLworICAgIGJvcmRl
cjogMDsKKyAgICBwYWRkaW5nOiAwOworfQogPC9zdHlsZT4KIDxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KQEAgLTE5LDYg
KzI1LDE3IEBAIGZ1bmN0aW9uIGNoZWNrQ2VudGVyZWQoZGlhbG9nKSB7CiAgICAgZXhwZWN0ZWRU
b3AgPSAod2luZG93LmlubmVySGVpZ2h0IC0gZGlhbG9nLm9mZnNldEhlaWdodCkgLyAyOwogICAg
IHNob3VsZEJlKCdkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wJywgJ2V4cGVjdGVk
VG9wJyk7CiB9CisKKy8vIEhlbHBlciB0byB0ZXN0IGJvdGggYSBub24tbW9kYWwgYW5kIG1vZGFs
IGRpYWxvZy4KK2Z1bmN0aW9uIHNob3dBbmRUZXN0RGlhbG9nKGRpYWxvZywgY2hlY2tlcikgewor
ICAgIGRpYWxvZy5zaG93KCk7CisgICAgY2hlY2tlcigpOworICAgIGRpYWxvZy5jbG9zZSgpOwor
CisgICAgZGlhbG9nLnNob3dNb2RhbCgpOworICAgIGNoZWNrZXIoKTsKKyAgICBkaWFsb2cuY2xv
c2UoKTsKK30KIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CkBAIC0zMCwxMDYgKzQ3LDEyNSBA
QCBkZXNjcmlwdGlvbigiVGVzdHMgZGVmYXVsdCBwb3NpdGlvbmluZyBvZiBub24tYW5jaG9yZWQg
ZGlhbG9ncy4iKTsKIAogZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGlhbG9n
Jyk7CiAKLS8vIERpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0LgotZGlh
bG9nLnNob3coKTsKLWNoZWNrQ2VudGVyZWQoZGlhbG9nKTsKLWRpYWxvZy5jbG9zZSgpOworZGVi
dWcoJ0RpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0LicpOworc2hvd0Fu
ZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgY2hlY2tDZW50ZXJlZChkaWFsb2cpIH0p
OwogCi0vLyBEaWFsb2cgc2hvdWxkIHN0aWxsIGJlIGNlbnRlcmVkIGlmIHNob3duIGFmdGVyIHdp
bmRvdyBpcyBzY3JvbGxlZC4KK2RlYnVnKCc8YnI+RGlhbG9nIHNob3VsZCBiZSByZWNlbnRlcmVk
IGlmIHNob3coKSBpcyBjYWxsZWQgYWZ0ZXIgY2xvc2UoKS4nKTsKIHdpbmRvdy5zY3JvbGwoMCwg
NTAwKTsKIGRpYWxvZy5zaG93KCk7CiBjaGVja0NlbnRlcmVkKGRpYWxvZyk7CisKK2RlYnVnKCc8
YnI+RGlhbG9nIHNob3VsZCBub3QgYmUgcmVjZW50ZXJlZCBvbiBhIHJlbGF5b3V0LicpOwordmFy
IGV4cGVjdGVkVG9wID0gZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKK3dpbmRv
dy5zY3JvbGwoMCwgMTAwMCk7Cit2YXIgZm9yY2VSZWxheW91dERpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworZm9yY2VSZWxheW91dERpdi5zdHlsZS53aWR0aCA9ICcxMDBweCc7
Citmb3JjZVJlbGF5b3V0RGl2LnN0eWxlLmhlaWdodCA9ICcxMDBweCc7Citmb3JjZVJlbGF5b3V0
RGl2LnN0eWxlLmJvcmRlciA9ICdzb2xpZCc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZv
cmNlUmVsYXlvdXREaXYpOword2luZG93LnNjcm9sbCgwLCA1MDApOworc2hvdWxkQmUoJ2RpYWxv
Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AnLCAnZXhwZWN0ZWRUb3AnKTsKK2RvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZm9yY2VSZWxheW91dERpdik7CiBkaWFsb2cuY2xvc2UoKTsKIAot
Ly8gQSB0YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2
aWV3cG9ydC4KK2RlYnVnKCc8YnI+QSB0YWxsIGRpYWxvZyBzaG91bGQgYmUgcG9zaXRpb25lZCBh
dCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydC4nKTsKIHZhciBkaWFsb2dJbm5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogZGlhbG9nSW5uZXIuY2xhc3NOYW1lID0gJ2ZpbGxlcic7
CiBkaWFsb2cuYXBwZW5kQ2hpbGQoZGlhbG9nSW5uZXIpOwotZGlhbG9nLnNob3coKTsKLWNoZWNr
VG9wT2ZWaWV3cG9ydChkaWFsb2cpOwotZGlhbG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxv
ZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBjaGVja1RvcE9mVmlld3BvcnQoZGlhbG9nKSB9KTsKIGRp
YWxvZy5yZW1vdmVDaGlsZChkaWFsb2dJbm5lcik7CiAKLS8vIEFkZCB0aGUgaG9yaXpvbnRhbCBz
Y3JvbGxiYXIuIFRoZSBkaWFsb2cgc2hvdWxkIGJlIGNlbnRlcmVkIHJlZ2FyZGxlc3Mgb2YgdGhl
IHByZXNlbmNlIG9mIHNjcm9sbGJhcnMuCitkZWJ1ZygnPGJyPlRoZSBkaWFsb2cgc2hvdWxkIGJl
IGNlbnRlcmVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXNlbmNlIG9mIGEgaG9yaXpvbnRhbCBzY3Jv
bGxiYXIuJyk7CiB2YXIgZmlsbGVyRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGxl
ckRpdicpOwogZmlsbGVyRGl2LnN0eWxlLndpZHRoID0gJzQwMDBweCc7Ci1kaWFsb2cuc2hvdygp
OwotY2hlY2tDZW50ZXJlZChkaWFsb2cpOwotZGlhbG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERp
YWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBjaGVja0NlbnRlcmVkKGRpYWxvZykgfSk7CiBmaWxs
ZXJEaXYuc3R5bGUud2lkdGggPSAnYXV0byc7CiAKLS8vIFRlc3QgdGhhdCBjZW50ZXJpbmcgd29y
a3Mgd2hlbiBkaWFsb2cgaXMgaW5zaWRlIHBvc2l0aW9uZWQgY29udGFpbmVycy4KLXZhciBjb250
YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLWNvbnRhaW5lci5zdHlsZS5w
b3NpdGlvbiA9ICdhYnNvbHV0ZSc7Ci1jb250YWluZXIuc3R5bGUudG9wID0gJzgwMHB4OycKLWNv
bnRhaW5lci5zdHlsZS5oZWlnaHQ9ICc1MHB4OycKLWNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICc5
MCUnOworZGVidWcoJzxicj5UZXN0IHRoYXQgY2VudGVyaW5nIHdvcmtzIHdoZW4gZGlhbG9nIGlz
IGluc2lkZSBwb3NpdGlvbmVkIGNvbnRhaW5lcnMuJyk7Cit2YXIgYWJzb2x1dGVDb250YWluZXIg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2Fic29sdXRlQ29udGFpbmVyLnN0eWxl
LnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKK2Fic29sdXRlQ29udGFpbmVyLnN0eWxlLnRvcCA9ICc4
MDBweDsnCithYnNvbHV0ZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTBweDsnCithYnNvbHV0
ZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICc5MCUnOwogZGlhbG9nLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQoZGlhbG9nKTsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLWNv
bnRhaW5lci5hcHBlbmRDaGlsZChkaWFsb2cpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChh
YnNvbHV0ZUNvbnRhaW5lcik7CithYnNvbHV0ZUNvbnRhaW5lci5hcHBlbmRDaGlsZChkaWFsb2cp
Oworc2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgY2hlY2tDZW50ZXJlZChk
aWFsb2cpIH0pOworYWJzb2x1dGVDb250YWluZXIucmVtb3ZlQ2hpbGQoZGlhbG9nKTsKKwordmFy
IHJlbGF0aXZlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CityZWxh
dGl2ZUNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CityZWxhdGl2ZUNvbnRh
aW5lci5zdHlsZS50b3AgPSAnMjBweCc7CityZWxhdGl2ZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQg
PSAnMzBweCc7CithYnNvbHV0ZUNvbnRhaW5lci5hcHBlbmRDaGlsZChyZWxhdGl2ZUNvbnRhaW5l
cik7CityZWxhdGl2ZUNvbnRhaW5lci5hcHBlbmRDaGlsZChkaWFsb2cpOwogZGlhbG9nLnNob3co
KTsKIGNoZWNrQ2VudGVyZWQoZGlhbG9nKTsKKworZGVidWcoIjxicj5EaWFsb2cncyBwb3NpdGlv
biBzaG91bGQgc3Vydml2ZSBhZnRlciBiZWNvbWluZyBkaXNwbGF5Om5vbmUgdGVtcG9yYXJpbHku
Iik7CitleHBlY3RlZFRvcCA9IGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7Cit3
aW5kb3cuc2Nyb2xsKDAsIDEwMDApOworcmVsYXRpdmVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsKK3JlbGF0aXZlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOword2lu
ZG93LnNjcm9sbCgwLCA1MDApOworc2hvdWxkQmUoJ2RpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS50b3AnLCAnZXhwZWN0ZWRUb3AnKTsKKworZGVidWcoIjxicj5EaWFsb2cncyBwb3NpdGlv
biBzaG91bGQgc3Vydml2ZSBhZnRlciBiZWluZyByZS1hZGRlZCB0byBkb2N1bWVudCB3aXRob3V0
IGFub3RoZXIgY2FsbCB0byBzaG93KCkuIik7CitleHBlY3RlZFRvcCA9IGRpYWxvZy5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS50b3A7Cit3aW5kb3cuc2Nyb2xsKDAsIDEwMDApOworcmVsYXRpdmVD
b250YWluZXIucmVtb3ZlQ2hpbGQoZGlhbG9nKTsKK3JlbGF0aXZlQ29udGFpbmVyLmFwcGVuZENo
aWxkKGRpYWxvZyk7Cit3aW5kb3cuc2Nyb2xsKDAsIDUwMCk7CitzaG91bGRCZSgnZGlhbG9nLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCcsICdleHBlY3RlZFRvcCcpOwogZGlhbG9nLmNsb3Nl
KCk7Ci1jb250YWluZXIucmVtb3ZlQ2hpbGQoZGlhbG9nKTsKLQotdmFyIGNvbnRhaW5lcjIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLS8vIEZJWE1FOiBUaGlzIHRlc3QgZmFpbHMg
Zm9yIHBvc2l0aW9uID0gJ3JlbGF0aXZlJy4KLWNvbnRhaW5lcjIuc3R5bGUucG9zaXRpb24gPSAn
YWJzb2x1dGUnOwotY29udGFpbmVyMi5zdHlsZS50b3AgPSAnMjBweCc7Ci1jb250YWluZXIyLnN0
eWxlLmhlaWdodCA9ICczMHB4JzsKLWNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIyKTsK
LWNvbnRhaW5lcjIuYXBwZW5kQ2hpbGQoZGlhbG9nKTsKKworZGVidWcoIjxicj5EaWFsb2cgc2hv
dWxkIG5vdCBiZSBjZW50ZXJlZCBpZiBzaG93KCkgd2FzIGNhbGxlZCB3aGVuIGFuIGFuY2VzdG9y
IGhhZCBkaXNwbGF5ICdub25lJy4iKTsKK3ZhciBwbGFpblNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzcGFuJyk7CitwbGFpblNwYW4uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwor
cmVsYXRpdmVDb250YWluZXIuYXBwZW5kQ2hpbGQocGxhaW5TcGFuKTsKK2V4cGVjdGVkVG9wID0g
cGxhaW5TcGFuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKK2Fic29sdXRlQ29udGFpbmVy
LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiBkaWFsb2cuc2hvdygpOwotY2hlY2tDZW50ZXJlZChk
aWFsb2cpOworYWJzb2x1dGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CitzaG91
bGRCZSgnZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCcsICdleHBlY3RlZFRvcCcp
OwogZGlhbG9nLmNsb3NlKCk7CiAKLS8vIFRlc3QgdGhhdCBzZXR0aW5nIHRvcCBtYW51YWxseSBp
cyB0aGUgc2FtZSBhcyBmb3IgYSBwbGFpbiBkaXYuCi12YXIgcGxhaW5EaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKLWNvbnRhaW5lcjIuYXBwZW5kQ2hpbGQocGxhaW5EaXYpOwot
cGxhaW5EaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwotcGxhaW5EaXYuc3R5bGUudG9w
ID0gJzUwcHgnOworZGVidWcoIjxicj5UZXN0IHRoYXQgc2V0dGluZyAndG9wJyBvbiBkaWFsb2cg
cmVzdWx0cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyBmb3IgYSBwbGFpbiwgYWJzb2x1dGVseSBw
b3NpdGlvbmVkIHNwYW4uIik7CitwbGFpblNwYW4uc3R5bGUudG9wID0gJzUwcHgnOwogZGlhbG9n
LnN0eWxlLnRvcCA9ICc1MHB4JzsKLWRpYWxvZy5zaG93KCk7Ci1zaG91bGRCZSgnZGlhbG9nLm9m
ZnNldFRvcCcsICdwbGFpbkRpdi5vZmZzZXRUb3AnKTsKLWRpYWxvZy5jbG9zZSgpOworc2hvd0Fu
ZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgc2hvdWxkQmUoJ2RpYWxvZy5vZmZzZXRU
b3AnLCAncGxhaW5TcGFuLm9mZnNldFRvcCcpOyB9KTsKIAotLy8gVGVzdCB0aGF0IHNldHRpbmcg
Ym90dG9tIG1hbnVhbGx5IGlzIHRoZSBzYW1lIGFzIGZvciBhIHBsYWluIGRpdi4KK2RlYnVnKCI8
YnI+VGVzdCB0aGF0IHNldHRpbmcgJ2JvdHRvbScgb24gZGlhbG9nIHJlc3VsdHMgaW4gdGhlIHNh
bWUgcG9zaXRpb24gYXMgZm9yIGEgcGxhaW4sIGFic29sdXRlbHkgcG9zaXRpb25lZCBzcGFuLiIp
OwogZGlhbG9nLnN0eWxlLnRvcCA9ICdhdXRvJzsKLXBsYWluRGl2LnN0eWxlLnRvcCA9ICdhdXRv
JzsKK3BsYWluU3Bhbi5zdHlsZS50b3AgPSAnYXV0byc7CiBkaWFsb2cuc3R5bGUuYm90dG9tID0g
JzUwcHgnOwotcGxhaW5EaXYuc3R5bGUuYm90dG9tID0gJzUwcHgnOwotZGlhbG9nLnNob3coKTsK
LXNob3VsZEJlKCdkaWFsb2cub2Zmc2V0Qm90dG9tJywgJ3BsYWluRGl2Lm9mZnNldEJvdHRvbScp
OwotZGlhbG9nLmNsb3NlKCk7CitwbGFpblNwYW4uc3R5bGUuYm90dG9tID0gJzUwcHgnOworc2hv
d0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgc2hvdWxkQmUoJ2RpYWxvZy5vZmZz
ZXRCb3R0b20nLCAncGxhaW5TcGFuLm9mZnNldEJvdHRvbScpOyB9KTsKIAotLy8gVGVzdCB0aGF0
IGZpeGVkIHBvc2l0aW9uIGhhcyB0aGUgdXN1YWwgYmVoYXZpb3IuCi1wbGFpbkRpdi5zdHlsZS5w
b3NpdGlvbiA9ICdmaXhlZCc7Ci1wbGFpbkRpdi5zdHlsZS50b3AgPSAnNTBweCc7CitkZWJ1Zygn
PGJyPlRlc3QgdGhhdCBmaXhlZCBwb3NpdGlvbmluZyBmb3IgZGlhbG9nIGhhcyBzYW1lIGJlaGF2
aW9yIGFzIGZvciBhIHBsYWluIHNwYW4uJyk7CitwbGFpblNwYW4uc3R5bGUucG9zaXRpb24gPSAn
Zml4ZWQnOworcGxhaW5TcGFuLnN0eWxlLnRvcCA9ICc1MHB4JzsKIGRpYWxvZy5zdHlsZS5wb3Np
dGlvbiA9ICdmaXhlZCc7CiBkaWFsb2cuc3R5bGUudG9wID0gJzUwcHgnOwotZGlhbG9nLnNob3co
KTsKLXNob3VsZEJlKCdkaWFsb2cub2Zmc2V0VG9wJywgJ3BsYWluRGl2Lm9mZnNldFRvcCcpOwot
ZGlhbG9nLmNsb3NlKCk7CitzaG93QW5kVGVzdERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBz
aG91bGRCZSgnZGlhbG9nLm9mZnNldFRvcCcsICdwbGFpblNwYW4ub2Zmc2V0VG9wJyk7IH0pOwog
Ci0vLyBUZXN0IHRoYXQgc3RhdGljIHBvc2l0aW9uIGhhcyB0aGUgdXN1YWwgYmVoYXZpb3IuCi1w
bGFpbkRpdi5zdHlsZS5wb3NpdGlvbiA9ICdzdGF0aWMnOwotcGxhaW5EaXYuc3R5bGUudG9wID0g
J2F1dG8nOwotdmFyIGV4cGVjdGVkVG9wID0gcGxhaW5EaXYub2Zmc2V0VG9wOwotcGxhaW5EaXYu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwbGFpbkRpdik7CitkZWJ1ZygnPGJyPlRlc3QgdGhhdCBz
dGF0aWMgcG9zaXRpb24gZm9yIGEgbm9uLW1vZGFsIGRpYWxvZyBoYXMgdGhlIHNhbWUgYmVoYXZp
b3IgYXMgZm9yIGEgcGxhaW4gc3Bhbi4nKTsKKy8vIEp1c3QgdGVzdCBub24tbW9kYWwgc2luY2Ug
bW9kYWwgaXMgY292ZXJlZCBieSBvdGhlciB0ZXN0cyAoZm9yIG1vZGFsLCBzdGF0aWMgY29tcHV0
ZXMgdG8gYWJzb2x1dGUpCitwbGFpblNwYW4uc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsKK3Zh
ciBleHBlY3RlZFRvcCA9IHBsYWluU3Bhbi5vZmZzZXRUb3A7CitwbGFpblNwYW4ucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChwbGFpblNwYW4pOwogZGlhbG9nLnN0eWxlLnBvc2l0aW9uID0gJ3N0YXRp
Yyc7Ci1kaWFsb2cuc3R5bGUudG9wID0gJ2F1dG8nOwogZGlhbG9nLnNob3coKTsKIHNob3VsZEJl
KCdkaWFsb2cub2Zmc2V0VG9wJywgJ2V4cGVjdGVkVG9wJyk7CiBkaWFsb2cuY2xvc2UoKTsKLWRp
YWxvZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAKLS8vIFRlc3QgdGhhdCByZWxh
dGl2ZSBwb3NpdGlvbiBoYXMgdGhlIHVzdWFsIGJlaGF2aW9yLgotY29udGFpbmVyMi5hcHBlbmRD
aGlsZChwbGFpbkRpdik7Ci1wbGFpbkRpdi5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7Ci1w
bGFpbkRpdi5zdHlsZS50b3AgPSAnNTBweCc7Ci1leHBlY3RlZFRvcCA9IHBsYWluRGl2Lm9mZnNl
dFRvcDsKLXBsYWluRGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocGxhaW5EaXYpOwotY29udGFp
bmVyMi5hcHBlbmRDaGlsZChkaWFsb2cpOworZGVidWcoJzxicj5UZXN0IHRoYXQgcmVsYXRpdmUg
cG9zaXRpb24gZm9yIGEgbm9uLW1vZGFsIGRpYWxvZyBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMg
Zm9yIGEgcGxhaW4gc3Bhbi4nKTsKKy8vIEp1c3QgdGVzdCBub24tbW9kYWwgc2luY2UgbW9kYWwg
aXMgY292ZXJlZCBieSBvdGhlciB0ZXN0cyAoZm9yIG1vZGFsLCByZWxhdGl2ZSBjb21wdXRlcyB0
byBhYnNvbHV0ZSkKK3JlbGF0aXZlQ29udGFpbmVyLmFwcGVuZENoaWxkKHBsYWluU3Bhbik7Citw
bGFpblNwYW4uc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworcGxhaW5TcGFuLnN0eWxlLnRv
cCA9ICc1MHB4JzsKK2V4cGVjdGVkVG9wID0gcGxhaW5TcGFuLm9mZnNldFRvcDsKK3BsYWluU3Bh
bi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBsYWluU3Bhbik7CiBkaWFsb2cuc3R5bGUucG9zaXRp
b24gPSAncmVsYXRpdmUnOwogZGlhbG9nLnN0eWxlLnRvcCA9ICc1MHB4JzsKIGRpYWxvZy5zaG93
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189061</attachid>
            <date>2013-02-19 04:50:01 -0800</date>
            <delta_ts>2013-04-08 21:33:08 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-95946-20130219214622.patch</filename>
            <type>text/plain</type>
            <size>47820</size>
            <attacher name="Matt Falkenhagen">falken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ1MTMyYzEyM2ZlMjE4
NTk3MGZjNTM3ZTY5NWM3NmE4OGUyMjU3Yy4uNWE5ZWI1MDQxYjllYWQxYTc4ODVhYjljYzMwMTlj
NDI4MTQ2YTY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEzLTAyLTE5ICBNYXR0
IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICA8ZGlhbG9nPiBj
ZW50ZXJpbmcgYnJlYWtzIHdoZW4gdGhlcmUgaXMgYSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYW5j
ZXN0b3IgY29udGFpbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NTk0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBkaWFsb2cncyBjZW50ZXJpbmctaW4tdmlld3BvcnQg
dG8gb2NjdXIgZHVyaW5nCisgICAgICAgIGRpYWxvZy5zaG93KCkgaW5zdGVhZCBvZiBkdXJpbmcg
bGF5b3V0LiBkaWFsb2cuc2hvdygpIGZvcmNlcyBhCisgICAgICAgIHN5bmNocm9ub3VzIGxheW91
dCBhbmQgdGhlbiBjb21wdXRlcyB0aGUgJ3RvcCcgdmFsdWUgdGhhdCB3b3VsZCBjZW50ZXIKKyAg
ICAgICAgaW4gdGhlIHZpZXdwb3J0LiBUaGlzIHZhbHVlIGlzIHN0b3JlZCBpbiBhIG5ldyBDU1Mg
cHJvcGVydHkKKyAgICAgICAgJy13ZWJraXQtZGVmYXVsdC1zdGF0aWMtdG9wJyB3aGljaCBSZW5k
ZXJCb3ggdXNlcyBmb3IgYWJzcG9zIGxheW91dCwKKyAgICAgICAgYXMgbG9uZyBhcyAndG9wJyBp
cyAnYXV0bycuCisKKyAgICAgICAgVGhpcyBzYXRpc2ZpZXMgdGhlIHNwZWMgdGhhdCBkaWFsb2cg
aXMgY2VudGVyZWQgb25seSBvbiBkaWFsb2cuc2hvdygpCisgICAgICAgIGFuZCBub3QgcmUtY2Vu
dGVyZWQgb24gc3Vic2VxdWVudCByZWxheW91dHMuCisKKyAgICAgICAgVGhlIHByZXZpb3VzIGlt
cGxlbWVudGF0aW9uIChyMTI3NjgxKSBpbmNvcnJlY3RseSByZWxpZWQgb24gZGlhbG9nJ3MKKyAg
ICAgICAgYW5jZXN0b3JzIGhhdmluZyBhbHJlYWR5IGJlZW4gbGF5ZWQgb3V0IGR1cmluZyBkaWFs
b2cncyBsYXlvdXQuCisgICAgICAgIEZ1cnRoZXJtb3JlLCBpdCByZWNlbnRlcmVkIGRpYWxvZyBv
biBhIHJlbGF5b3V0LgorCisgICAgICAgIE5ldyB0ZXN0cyBhZGRlZCB0byBub24tYW5jaG9yZWQt
ZGlhbG9nLXBvc2l0aW9uaW5nLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBSZW1v
dmUgUmVuZGVyRGlhbG9nIGZpbGVzLCB3aGljaCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBE
aXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6IEFkZCAtd2Via2l0LWRlZmF1bHQtc3RhdGljLXRvcC4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlDU1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6aXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5LmNwcDog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0
eSk6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46IERpdHRvLgorICAgICAgICAq
IGNzcy9TdHlsZUJ1aWxkZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlcjo6U3R5bGVCdWlsZGVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6Cisg
ICAgICAgICogaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRGlhbG9nRWxlbWVudDo6Y2xvc2UpOiBSZXNldCAtd2Via2l0LWRlZmF1bHQtc3RhdGljLXRv
cCwgc28gdGhlIGRpYWxvZyBpcyByZWNlbnRlcmVkIGlmIG9wZW5lZCBhZ2Fpbi4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERpYWxvZ0VsZW1lbnQ6OnNldHVwRGVm
YXVsdFVuYW5jaG9yZWRQb3NpdGlvbik6IFNhZmUgY2VudGVyIGluIHRoZSB2aWV3cG9ydC4gV2Ug
bXVzdCBmaXJzdCBkbworICAgICAgICBhIHN5bmMgbGF5b3V0IHNvIGRpYWxvZydzIGFuY2VzdG9y
cycgcG9zaXRpb25zIGFuZCBkaWFsb2cncyBkaW1lbnNpb25zIGFyZSBrbm93bi4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxEaWFsb2dFbGVtZW50OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxEaWFsb2dFbGVtZW50OjpzaG93TW9kYWwpOgorICAgICAgICAqIGh0bWwvSFRNTERpYWxvZ0Vs
ZW1lbnQuaDoKKyAgICAgICAgKEhUTUxEaWFsb2dFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDogCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KTogUmV2
ZXJ0IHRoZSBhc3NlcnRpb24gcmVtb3ZhbHMgbmVlZGVkIGJ5IHRoZSBwcmV2aW91cyBpbXBsZW1l
bnRhdGlvbiBvZiBjZW50ZXJpbmcgKHIxMjc2ODEpCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodCk6IFVzZSAtd2Via2l0LWRlZmF1bHQt
c3RhdGljLXRvcCBhcyB0aGUgc3RhdGljIHRvcCBwb3NpdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6IFJldmVydCB0aGUg
YXNzZXJ0aW9uIHJlbW92YWxzIG5lZWRlZCBieSB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24g
b2YgY2VudGVyaW5nIChyMTI3NjgxKSAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckRpYWxvZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRpYWxv
Zy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogUmVtb3Zl
IFJlbmRlckRpYWxvZyByZWZlcmVuY2VzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJpbmdB
bGxJbk9uZS5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6ZGlmZik6IEFjY291bnQgZm9y
IC13ZWJraXQtZGVmYXVsdC1zdGF0aWMtdG9wCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEuaDoKKyAgICAgICAgKFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEpOgorCiAy
MDEzLTAyLTE4ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkIHNwZWN1bGF0aXZlIGZpeCBmb3IgQ2hyb21pdW0gTWFjLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBkYTZkNmU1ZmJiNDUyMTQ4N2ZhMzhmYjk5ZWE1NDc3OTBkMDVkZDk2
Li43OGE0Y2U2ZDRiMzUwNjdlODVmNDRkNzdmZGExOGFjZTA5OWZhNjJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMjE1MCw3ICsyMTUwLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCi0g
ICAgcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAogICAgIHJlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IGQ3MGIxZDFlOGRiMjgyMDI4MzliMDcwMjkzZTdkNjAxNjEzOTMwYjUuLmUxOWFj
YWFlZDkyYzMyYWI2ZDdlMDlhZDgzZmQ0ZDM2MDc5ZGQ3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQpAQCAtNDQwMCw3ICs0NDAwLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaCBcCi0JU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpZWxkc2V0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzZTc4YjQxOWFiYjc1MjhjNmUyYmJiZjU4
NDQ1NGZhNmYwNGE5MDM3Li44NThjMDQ4M2NiMzQxZmFiYjg5MmY1M2MyOGM0ZDk2MTkzOTE2MGRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKQEAgLTExOTEsNyArMTE5MSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHJl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNw
cCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAg
XAogICAgIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGFjY2Y4ZTNlZWNhNjhjYjUzMTczZDIzZjc2MWRiNWI1MmI5ZTkzNDYuLmRjZGZk
MDg2OWI0YWZlMGM4M2QyNDI0MTEzMDRjNjU0ZGRjM2NiYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTIzMzMsNyArMjMzMyw2IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmgn
LAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJEaWFsb2cuY3BwJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVy
RmllbGRzZXQuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMmJiNjdiOTJlNzk2MDVmNzQxY2E0NmU1NTdhZjY5NzFjODYwYTI1
My4uYzVlMTQxODFkZDk2NDExNWRkN2VkOTViZTVlN2ZmNjY2NTU4YWQ4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTk4NSw4
ICsxOTg1LDYgQEAKIAkJNzZDREQyRjUxMTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlN
ZW51TGlzdFBvcHVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NkNERDJFRjExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9w
dXAuaCAqLzsgfTsKIAkJNzZDREQyRjYxMTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlN
ZW51TGlzdE9wdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NkNERDJGMDExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0
T3B0aW9uLmNwcCAqLzsgfTsKIAkJNzZDREQyRjcxMTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2li
aWxpdHlNZW51TGlzdE9wdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzZDREQyRjExMTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlNZW51
TGlzdE9wdGlvbi5oICovOyB9OwotCQk3NkYyRTJFQjE1Rjc0Q0VGMDA1RkY2NjQgLyogUmVuZGVy
RGlhbG9nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc2RjJFMkU5MTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuY3BwICovOyB9OwotCQk3
NkYyRTJFQzE1Rjc0Q0VGMDA1RkY2NjQgLyogUmVuZGVyRGlhbG9nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkYyRTJFQTE1Rjc0Q0VGMDA1RkY2NjQg
LyogUmVuZGVyRGlhbG9nLmggKi87IH07CiAJCTc2RkMyQjBCMTIzNzBEQTAwMDZBOTkxQSAvKiBE
T01Ub2tlbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzZGQzJCMDgxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5jcHAgKi87IH07
CiAJCTc2RkMyQjBDMTIzNzBEQTAwMDZBOTkxQSAvKiBET01Ub2tlbkxpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RkMyQjA5MTIzNzBEQTAwMDZB
OTkxQSAvKiBET01Ub2tlbkxpc3QuaCAqLzsgfTsKIAkJNzZGRjE3RTMxMTIzNTY3MzAwMUQ2MUI1
IC8qIFBsdWdpblZpZXdOb25lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc2RkYxN0UyMTEyMzU2NzMwMDFENjFCNSAvKiBQbHVnaW5WaWV3Tm9uZS5j
cHAgKi87IH07CkBAIC05NDUzLDggKzk0NTEsNiBAQAogCQk3NkNERDJFRjExMDNEQTY2MDA2ODA1
MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzZDREQyRjAxMTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlN
ZW51TGlzdE9wdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
Y2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3NkNERDJGMTExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlNZW51
TGlzdE9wdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3NkYyRTJFOTE1Rjc0
Q0VGMDA1RkY2NjQgLyogUmVuZGVyRGlhbG9nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlckRpYWxvZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTc2RjJFMkVBMTVGNzRDRUYwMDVGRjY2NCAvKiBSZW5kZXJEaWFsb2cuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRGlhbG9nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc2RkMyQjA4MTIzNzBEQTAwMDZBOTkxQSAvKiBET01Ub2tlbkxpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NVG9rZW5MaXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZGQzJCMDkxMjM3MERBMDAwNkE5OTFBIC8q
IERPTVRva2VuTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Ub2tl
bkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZGQzJCMEExMjM3MERBMDAw
NkE5OTFBIC8qIERPTVRva2VuTGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NVG9r
ZW5MaXN0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMjU4LDggKzIyMjU0
LDYgQEAKIAkJCQlCQ0VBNDgyRjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmggKi8sCiAJCQkJRDMwMjc1NDUxMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRl
dGFpbHNNYXJrZXIuY3BwICovLAogCQkJCUQzMDI3NTQ2MTJBNUZFODQwMDRCRDgyOCAvKiBSZW5k
ZXJEZXRhaWxzTWFya2VyLmggKi8sCi0JCQkJNzZGMkUyRTkxNUY3NENFRjAwNUZGNjY0IC8qIFJl
bmRlckRpYWxvZy5jcHAgKi8sCi0JCQkJNzZGMkUyRUExNUY3NENFRjAwNUZGNjY0IC8qIFJlbmRl
ckRpYWxvZy5oICovLAogCQkJCTBGNUI3QTUyMTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAgKi8sCiAJCQkJMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRl
ckVtYmVkZGVkT2JqZWN0LmggKi8sCiAJCQkJQThFQTczQUYwQTE5MDBFMzAwQThFRjVGIC8qIFJl
bmRlckZpZWxkc2V0LmNwcCAqLywKQEAgLTI1NjczLDcgKzI1NjY3LDYgQEAKIAkJCQk5MzkyRjE0
MjBBRDE4NUY0MDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNFQTQ4NkUwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRDMwMjc1NEExMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRl
dGFpbHNNYXJrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTc2RjJFMkVDMTVGNzRDRUYwMDVGRjY2
NCAvKiBSZW5kZXJEaWFsb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkU1RjdGMTM1RTBEQ0Yw
MEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
QjMyQ0RBOTEzREY3RkE5MDBGMzREMTMgLyogUmVuZGVyZWRQb3NpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MDI0LDcgKzI5MDE3LDYgQEAKIAkJCQk5MzkyRjE0NDBB
RDE4NUZFMDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VBNDg2RDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUQzMDI3NTQ5MTJBNUZFODQwMDRCRDgyOCAvKiBSZW5kZXJE
ZXRhaWxzTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTc2RjJFMkVCMTVGNzRDRUYwMDVG
RjY2NCAvKiBSZW5kZXJEaWFsb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUIzMkNEQUExM0RG
N0ZBOTAwRjM0RDEzIC8qIFJlbmRlcmVkUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY1QjdBNTQxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4RUE3M0MzMEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJGaWVsZHNl
dC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggMzFhZDczNjNhYmNmMmY4ODRlMTFkMDQ4MjZj
NTgwNjQwOGUwOGQ3ZC4uNDNjZmFmYjJmYjQ0ZGMxYTlhNWQ2MTY2MzhiMmNiYmM5ZDdjYTM3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKQEAgLTE4NTcsNiArMTg1NywxMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydAogICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShBbGlnblN0cmV0
Y2gpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5hbGlnblNlbGYoKSk7CisjaWYgRU5BQkxFKERJQUxPR19FTEVNRU5U
KQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RGVmYXVsdFN0YXRpY1RvcDoKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZGVmYXVsdFN0
YXRpY1RvcCgpKTsKKyNlbmRpZgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleDoK
ICAgICAgICAgICAgIHJldHVybiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0ZvclNob3J0aGFuZFByb3Bl
cnRpZXMod2Via2l0RmxleFNob3J0aGFuZCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZsZXhCYXNpczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggMDE0YTY2YmNjZDhm
YWEzNWQ0ZTMzOWU2MDI4ZDliMDMzYTczMWJhZS4uMTZiNjY2NjYxZmQxMzkzNWNlOTlkZDgwN2Q0
MWZlNTQ5ZThiOGYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTU2NSw2ICs1NjUs
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJZCwgYm9vbCYgYWNjZQogICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5n
TGVmdDoKICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OgogICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWRkaW5nVG9wOgorI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0RGVmYXVsdFN0YXRpY1RvcDoKKyNlbmRpZgogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMb2dpY2FsV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2lj
YWxIZWlnaHQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxXaWR0aDoKQEAg
LTIyMjUsNiArMjIyOCw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmln
aHQ6ICAgICAgICAgLy8gICBXaGljaCBpcyBkZWZpbmVkIGFzCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eU1hcmdpbkJvdHRvbTogICAgICAgIC8vICAgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRv
IHwgaW5oZXJpdAogICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OiAgICAgICAgICAvLy8v
CisjaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRE
ZWZhdWx0U3RhdGljVG9wOgorI2VuZGlmCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdp
blN0YXJ0OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5FbmQ6CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuY3Bw
CmluZGV4IDNhNDAyY2ZmNzVkZmUzNWNlMjViZDUwYzg3MTdhNWUxZTQ2NWQwNmEuLmM1YWM1NDU2
M2I0YmUyMjdiOWE1OWIyZjgwYmE2ODYyZDcyYTM5MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5LmNwcApAQCAtNTY1LDYgKzU2NSw5IEBAIGJvb2wgQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVk
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBbGlnbkNvbnRlbnQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFsaWduSXRlbXM6
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFsaWduU2VsZjoKKyNpZiBFTkFCTEUoRElBTE9H
X0VMRU1FTlQpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERlZmF1bHRTdGF0aWNUb3A6Cisj
ZW5kaWYKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0RmxleEJhc2lzOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RGlyZWN0
aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4g
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgppbmRleCBhYzNmZGU1NjE1
YjViMTM5YzhmYWQxNDQ5OTg5NmQ0YWQ3YjY2NmRhLi45ODZlNzA2YzRjZTA2YjA5YmFmODg2NjJm
ZTNkMWM0NTIzNDkwODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVy
dHlOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgpA
QCAtMjgxLDYgKzI4MSw5IEBAIHotaW5kZXgKIC13ZWJraXQtYWxpZ24tY29udGVudAogLXdlYmtp
dC1hbGlnbi1pdGVtcwogLXdlYmtpdC1hbGlnbi1zZWxmCisjaWYgZGVmaW5lZChFTkFCTEVfRElB
TE9HX0VMRU1FTlQpICYmIEVOQUJMRV9ESUFMT0dfRUxFTUVOVAorLXdlYmtpdC1kZWZhdWx0LXN0
YXRpYy10b3AKKyNlbmRpZgogLXdlYmtpdC1mbGV4CiAtd2Via2l0LWZsZXgtYmFzaXMKIC13ZWJr
aXQtZmxleC1kaXJlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKaW5kZXggNGQ4
NzhiMmU5YjMyNWUyNWVlMzZhZDhjYmYyYjIwMGYyZjM4MjEwYS4uZDQ1ZjFiYTNiNmQ3ZGNlNDAx
YjQwZGRjODBjMWRiNWIzNjIwNDI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAK
QEAgLTE5ODQsNiArMTk4NCw5IEBAIFN0eWxlQnVpbGRlcjo6U3R5bGVCdWlsZGVyKCkKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbGlnbkNvbnRlbnQsIEFwcGx5UHJv
cGVydHlEZWZhdWx0PEVBbGlnbkNvbnRlbnQsICZSZW5kZXJTdHlsZTo6YWxpZ25Db250ZW50LCBF
QWxpZ25Db250ZW50LCAmUmVuZGVyU3R5bGU6OnNldEFsaWduQ29udGVudCwgRUFsaWduQ29udGVu
dCwgJlJlbmRlclN0eWxlOjppbml0aWFsQWxpZ25Db250ZW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsK
ICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbGlnbkl0ZW1zLCBBcHBs
eVByb3BlcnR5RGVmYXVsdDxFQWxpZ25JdGVtcywgJlJlbmRlclN0eWxlOjphbGlnbkl0ZW1zLCBF
QWxpZ25JdGVtcywgJlJlbmRlclN0eWxlOjpzZXRBbGlnbkl0ZW1zLCBFQWxpZ25JdGVtcywgJlJl
bmRlclN0eWxlOjppbml0aWFsQWxpZ25JdGVtcz46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QWxpZ25TZWxmLCBBcHBseVByb3BlcnR5
RGVmYXVsdDxFQWxpZ25JdGVtcywgJlJlbmRlclN0eWxlOjphbGlnblNlbGYsIEVBbGlnbkl0ZW1z
LCAmUmVuZGVyU3R5bGU6OnNldEFsaWduU2VsZiwgRUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEFsaWduU2VsZj46OmNyZWF0ZUhhbmRsZXIoKSk7CisjaWYgRU5BQkxFKERJQUxPR19F
TEVNRU5UKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdERlZmF1bHRT
dGF0aWNUb3AsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpkZWZhdWx0U3RhdGlj
VG9wLCAmUmVuZGVyU3R5bGU6OnNldERlZmF1bHRTdGF0aWNUb3AsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbE9mZnNldCwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworI2VuZGlmCiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0RmxleCwgQXBwbHlQcm9wZXJ0eUV4
cGFuZGluZzxTdXBwcmVzc1ZhbHVlLCBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhHcm93LCBDU1NQcm9w
ZXJ0eVdlYmtpdEZsZXhTaHJpbmssIENTU1Byb3BlcnR5V2Via2l0RmxleEJhc2lzPjo6Y3JlYXRl
SGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGbGV4
QmFzaXMsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpmbGV4QmFzaXMsICZSZW5k
ZXJTdHlsZTo6c2V0RmxleEJhc2lzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbGV4QmFzaXMsIEF1
dG9FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRGbGV4RGlyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFRmxleERp
cmVjdGlvbiwgJlJlbmRlclN0eWxlOjpmbGV4RGlyZWN0aW9uLCBFRmxleERpcmVjdGlvbiwgJlJl
bmRlclN0eWxlOjpzZXRGbGV4RGlyZWN0aW9uLCBFRmxleERpcmVjdGlvbiwgJlJlbmRlclN0eWxl
Ojppbml0aWFsRmxleERpcmVjdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZWRmNTMzY2RjOGI3MDU2YzBmZDA3YThjNWVkYzVjYzg1
ZjkwMGI3Yi4uYTI2YWE1ODRmMzhmMmU3NDM0MTA3Y2ZiOWE1ZTExNGEzM2QzMjc2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMzc0MSw2ICszNzQxLDkgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QWxpZ25Db250ZW50OgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBbGlnbkl0ZW1zOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bGlnblNlbGY6CisjaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXREZWZhdWx0U3RhdGljVG9wOgorI2VuZGlmCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZsZXg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhCYXNpczoKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0RmxleERpcmVjdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTERpYWxvZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RGlhbG9nRWxlbWVudC5jcHAKaW5kZXggZmRhZGFmM2JjZDZiZGM5M2JjNDA0YmVhNjU4YTM2OGQ2
NWZhMjIwZC4uY2VlNDRjMWExZDE0NWRkMTQ5NWI0ODYxZGQyOGU2NGVkOWIyNGZjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGlhbG9nRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDggQEAK
ICNpbmNsdWRlICJIVE1MRGlhbG9nRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIlJlbmRlckRpYWxvZy5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MSw4
ICs1MiwzNCBAQCB2b2lkIEhUTUxEaWFsb2dFbGVtZW50OjpjbG9zZShFeGNlcHRpb25Db2RlJiBl
YykKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBzZXRCb29sZWFuQXR0cmlidXRlKG9wZW5BdHRyLCBmYWxzZSk7CiAgICAgZG9jdW1l
bnQoKS0+cmVtb3ZlRnJvbVRvcExheWVyKHRoaXMpOworICAgIHNldEJvb2xlYW5BdHRyaWJ1dGUo
b3BlbkF0dHIsIGZhbHNlKTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0RGVmYXVsdFN0YXRpY1RvcCk7Cit9CisKK3ZvaWQgSFRNTERpYWxvZ0VsZW1lbnQ6
OnNldHVwRGVmYXVsdFVuYW5jaG9yZWRQb3NpdGlvbigpCit7CisgICAgLy8gTGF5b3V0IGJlY2F1
c2Ugd2UgbmVlZCB0byBrbm93IG91ciBhbmNlc3RvcnMnIHBvc2l0aW9ucyBhbmQgb3VyIG93biBo
ZWlnaHQuCisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisKKyAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKHN0eWxl
VG9Vc2UtPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbiB8fCAhc3R5bGVUb1VzZS0+dG9w
KCkuaXNBdXRvKCkgfHwgIXN0eWxlVG9Vc2UtPmJvdHRvbSgpLmlzQXV0bygpKQorICAgICAgICBy
ZXR1cm47CisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcigp
KTsKKworICAgIC8vIFNldCB1cCBkaWFsb2cncyBwb3NpdGlvbiB0byBiZSBzYWZlLWNlbnRlcmVk
IGluIHRoZSB2aWV3cG9ydC4KKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRvIGlu
IHZlcnRpY2FsIHdyaXRpbmcgbW9kZS4KKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3Vt
ZW50KCktPnZpZXcoKTsKKyAgICBpbnQgc2Nyb2xsVG9wID0gZnJhbWVWaWV3LT5zY3JvbGxPZmZz
ZXQoKS5oZWlnaHQoKTsKKyAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQoMCwgc2Nyb2xsVG9w
KTsKKyAgICBpbnQgdmlzaWJsZUhlaWdodCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0
KHRydWUpLmhlaWdodCgpOworICAgIGlmIChibG9jay0+aGVpZ2h0KCkgPCB2aXNpYmxlSGVpZ2h0
KQorICAgICAgICBhYnNvbHV0ZVBvaW50Lm1vdmUoMCwgKHZpc2libGVIZWlnaHQgLSBibG9jay0+
aGVpZ2h0KCkpIC8gMik7CisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gYmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpLT5hYnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVQb2ludCk7CisgICAgTGF5b3V0
VW5pdCBsb2NhbFRvcCA9IExheW91dFNpemUobG9jYWxQb2ludC54KCksIGxvY2FsUG9pbnQueSgp
KS5oZWlnaHQoKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0
RGVmYXVsdFN0YXRpY1RvcCwgU3RyaW5nOjpudW1iZXIobG9jYWxUb3AudG9JbnQoKSkgKyAicHgi
LCBmYWxzZSk7CiB9CiAKIHZvaWQgSFRNTERpYWxvZ0VsZW1lbnQ6OnNob3coKQpAQCAtNjAsNiAr
ODcsNyBAQCB2b2lkIEhUTUxEaWFsb2dFbGVtZW50OjpzaG93KCkKICAgICBpZiAoZmFzdEhhc0F0
dHJpYnV0ZShvcGVuQXR0cikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRCb29sZWFuQXR0cmli
dXRlKG9wZW5BdHRyLCB0cnVlKTsKKyAgICBzZXR1cERlZmF1bHRVbmFuY2hvcmVkUG9zaXRpb24o
KTsKIH0KIAogdm9pZCBIVE1MRGlhbG9nRWxlbWVudDo6c2hvd01vZGFsKEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtNjgsOCArOTYsOSBAQCB2b2lkIEhUTUxEaWFsb2dFbGVtZW50OjpzaG93TW9kYWwo
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0Qm9vbGVhbkF0dHJpYnV0ZShvcGVuQXR0ciwgdHJ1
ZSk7CiAgICAgZG9jdW1lbnQoKS0+YWRkVG9Ub3BMYXllcih0aGlzKTsKKyAgICBzZXRCb29sZWFu
QXR0cmlidXRlKG9wZW5BdHRyLCB0cnVlKTsKKyAgICBzZXR1cERlZmF1bHRVbmFuY2hvcmVkUG9z
aXRpb24oKTsKIH0KIAogYm9vbCBIVE1MRGlhbG9nRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKQEAgLTgyLDExICsxMTEsNiBA
QCBib29sIEhUTUxEaWFsb2dFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNQcmVz
ZW50YXRpb25BdHRyaWJ1dGUobmFtZSk7CiB9CiAKLVJlbmRlck9iamVjdCogSFRNTERpYWxvZ0Vs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQot
ewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJEaWFsb2codGhpcyk7Ci19Ci0KIH0KIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaWFsb2dFbGVtZW50LmgKaW5kZXggOWM5Nzgy
ZDkxYWQzYzEwNTA0M2JmODQ0M2ZjNDQ0M2M0MjFhOWM5OC4uMDE1YzJiNGQ2YTc3ZTRhZDg3MDZh
NGU1M2IwOTBlMDhiMGMyMGFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RGlhbG9nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERpYWxvZ0VsZW1l
bnQuaApAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhUTUxEaWFsb2dF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgdmlydHVhbCBS
ZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIGNvbnN0IE9WRVJSSURFOworICAgIHZvaWQgc2V0dXBEZWZhdWx0VW5h
bmNob3JlZFBvc2l0aW9uKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGUyZDBiZmY5NzYzN2Y2NjM4YjhlZTJk
ZDlkYzNiZDQyOTczODcwOWQuLmQwYTU0ZmZmM2JiODlkMGUwNmY3MmQ3Mjg0ZjdjYWM5OWExOGY1
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0zNCw2ICszNCwx
MCBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KIAorI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKKyNpbmNsdWRlICJIVE1MRGlhbG9nRWxl
bWVudC5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCiAjaW5jbHVkZSAi
RXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCmluZGV4IDI2YTViMzkxODdmMTRhNjg2ZTMxNjc4MGUxNjNiMTlhYWEyMGQ2MjAu
LmRlMThkYWI1MzY1MDkzZjJhN2UyMjYyYzk5MjdiNTczMTI5OWY3NzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xNzA1LDYgKzE3MDUsOSBAQCBjb25zdCBSZW5k
ZXJPYmplY3QqIFJlbmRlckJveDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZQogCiB2b2lkIFJlbmRlckJveDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQo
TWFwQ29vcmRpbmF0ZXNGbGFncyBtb2RlLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUp
IGNvbnN0CiB7CisgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IGFic29sdXRlVG9Mb2NhbCgpIHRvIGJl
IGNhbGxlZCBkdXJpbmcgbGF5b3V0ICh5ZXQpCisgICAgQVNTRVJUKCF2aWV3KCkgfHwgIXZpZXco
KS0+bGF5b3V0U3RhdGVFbmFibGVkKCkpOworCiAgICAgYm9vbCBpc0ZpeGVkUG9zID0gc3R5bGUo
KS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwogICAgIGJvb2wgaGFzVHJhbnNmb3JtID0g
aGFzTGF5ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zvcm0oKTsKICAgICBpZiAoaGFzVHJhbnNmb3Jt
ICYmICFpc0ZpeGVkUG9zKSB7CkBAIC0zMjk2LDYgKzMyOTksMTAgQEAgdm9pZCBSZW5kZXJCb3g6
OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1
ZXMmIGNvbXAKICAgICBjb25zdCBMZW5ndGggbWFyZ2luQmVmb3JlID0gc3R5bGVUb1VzZS0+bWFy
Z2luQmVmb3JlKCk7CiAgICAgY29uc3QgTGVuZ3RoIG1hcmdpbkFmdGVyID0gc3R5bGVUb1VzZS0+
bWFyZ2luQWZ0ZXIoKTsKICAgICBMZW5ndGggbG9naWNhbFRvcExlbmd0aCA9IHN0eWxlVG9Vc2Ut
PmxvZ2ljYWxUb3AoKTsKKyNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCisgICAgaWYgKGxvZ2lj
YWxUb3BMZW5ndGguaXNBdXRvKCkgJiYgIXN0eWxlVG9Vc2UtPmRlZmF1bHRTdGF0aWNUb3AoKS5p
c0F1dG8oKSkKKyAgICAgICAgbG9naWNhbFRvcExlbmd0aCA9IHN0eWxlVG9Vc2UtPmRlZmF1bHRT
dGF0aWNUb3AoKTsKKyNlbmRpZgogICAgIExlbmd0aCBsb2dpY2FsQm90dG9tTGVuZ3RoID0gc3R5
bGVUb1VzZS0+bG9naWNhbEJvdHRvbSgpOwogCiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
aW5kZXggNjkxYzE0YjFmOGMzZTI1YTUyOGIzZjI3YjE5MTQxZmEwMDY5MWY5NC4uNDYwYmU3ODBh
Y2FiNjMxMGVmNDg1NmIyMzhmN2QyYTVmOWZiNWQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0yNzU1LDYgKzI3NTUsOSBA
QCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzaG91bGRBbnRpYWxpYXNMaW5lcyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1hcEFic29s
dXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSwgVHJhbnNmb3JtU3RhdGUm
IHRyYW5zZm9ybVN0YXRlKSBjb25zdAogeworICAgIC8vIFdlIGRvbid0IGV4cGVjdCBhYnNvbHV0
ZVRvTG9jYWwoKSB0byBiZSBjYWxsZWQgZHVyaW5nIGxheW91dCAoeWV0KQorICAgIEFTU0VSVCgh
dmlldygpIHx8ICF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpKTsKKwogICAgIFJlbmRlck9i
amVjdCogbyA9IGNvbnRhaW5lcigpOwogICAgIGlmICghbykKICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjI0OThhZTRjNWU1ZjAzMTkwNDI3OTIxYmJjNzlhMGQ0Nzk0MmI0My4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyRGlhbG9nLmgi
Ci0KLSNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBSZW5k
ZXJEaWFsb2c6OmxheW91dCgpCi17Ci0gICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBs
YXlvdXRDaGVja1BvaW50OwotICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIHRy
dWUpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMs
IGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBz
dHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKLQotICAgIFJlbmRlckJsb2Nr
OjpsYXlvdXQoKTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAg
ICBpZiAoc3R5bGVUb1VzZS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uIHx8ICFzdHls
ZVRvVXNlLT50b3AoKS5pc0F1dG8oKSB8fCAhc3R5bGVUb1VzZS0+Ym90dG9tKCkuaXNBdXRvKCkp
IHsKLSAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBBZGp1c3QgdGhlIGRpYWxvZydzIHBvc2l0aW9uIHRvIGJlIGNlbnRlcmVkIGluIG9y
IGF0IHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0LgotICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdo
YXQgdG8gZG8gaW4gdmVydGljYWwgd3JpdGluZyBtb2RlLgotICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOwotICAgIGludCBzY3JvbGxUb3AgPSBmcmFtZVZpZXct
PnNjcm9sbE9mZnNldCgpLmhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCgw
LCBzY3JvbGxUb3ApOwotICAgIGludCB2aXNpYmxlSGVpZ2h0ID0gZnJhbWVWaWV3LT52aXNpYmxl
Q29udGVudFJlY3QodHJ1ZSkuaGVpZ2h0KCk7Ci0gICAgaWYgKGhlaWdodCgpIDwgdmlzaWJsZUhl
aWdodCkKLSAgICAgICAgYWJzb2x1dGVQb2ludC5tb3ZlKDAsICh2aXNpYmxlSGVpZ2h0IC0gaGVp
Z2h0KCkpIC8gMik7Ci0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gY29udGFpbmluZ0Jsb2Nr
KCktPmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZVBvaW50KTsKLSAgICBMYXlvdXRVbml0IGxvY2Fs
VG9wID0gTGF5b3V0U2l6ZShsb2NhbFBvaW50LngoKSwgbG9jYWxQb2ludC55KCkpLmhlaWdodCgp
OwotICAgIHNldFkobG9jYWxUb3ApOwotCi0gICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0gICAgLy8g
RklYTUU6IFNpbmNlIHRoZXJlIGlzIGFsd2F5cyBhIGxheWVyIGhlcmUsIHJlcGFpbnRlciBzaG91
bGRuJ3QgYmUgbmVjZXNzYXJ5LiBCdXQgd2l0aG91dCBpdCwgdGhlIGRpYWxvZyBpcyBzb21ldGlt
ZXMgbm90IHBhaW50ZWQgKHNlZSBidWcgOTA2NzApLgotICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0
ZXJMYXlvdXQoKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEaWFsb2cuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJEaWFsb2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY3MmMwNmI4NzUyY2Qw
NDFiM2Q3NDdmODJkMDI4ZWRmNGVhMDU2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJEaWFs
b2dfaAotI2RlZmluZSBSZW5kZXJEaWFsb2dfaAotCi0jaWYgRU5BQkxFKERJQUxPR19FTEVNRU5U
KQotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTERpYWxvZ0VsZW1lbnQ7Ci0KLWNsYXNz
IFJlbmRlckRpYWxvZyA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgZXhwbGlj
aXQgUmVuZGVyRGlhbG9nKEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgICAgIDogUmVuZGVyQmxvY2so
ZWxlbWVudCkKLSAgICB7IH0KLQotICAgIHZpcnR1YWwgflJlbmRlckRpYWxvZygpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRGlhbG9nIjsg
fQotICAgIHZpcnR1YWwgYm9vbCBpc0RpYWxvZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAv
LyBSZW5kZXJEaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmlu
ZGV4IDUwZmFhNmNmMzkwNDZjNzg5OWFjNTMyZmY4NGI5ZmMxYmQyNmQ3ZmQuLmQ0OTlhMmQ1ZDlk
YjUwZDE4ODQ4MzI4NDIzMDRiMmU5OTRmYzVjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTMxNCw5ICszMTQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzQmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNCb3hNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jaWYgRU5BQkxFKERJ
QUxPR19FTEVNRU5UKQotICAgIHZpcnR1YWwgYm9vbCBpc0RpYWxvZygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0jZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKICNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKSB8fCBFTkFCTEUoSU5Q
VVRfTVVMVElQTEVfRklFTERTX1VJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJpbmdBbGxJbk9uZS5jcHAKaW5kZXggMDk2ZDc2MWRiMGE1NDM1ZDI0NGFhOTRhOWQ0YTMzYTQ1
NzUxOGQ1Yi4uYjA4Nzk1YTc1NDRmMWRiOThhODJlNmY5OTU3ZmU4MjJkMmIyMjAwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCkBAIC01Miw3
ICs1Miw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcCIKICNpbmNsdWRlICJSZW5kZXJEZXRhaWxzTWFya2Vy
LmNwcCIKLSNpbmNsdWRlICJSZW5kZXJEaWFsb2cuY3BwIgogI2luY2x1ZGUgIlJlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJGaWVsZHNldC5jcHAiCiAjaW5jbHVkZSAi
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggNzI1YjhkOGVjMTYyYTNkZDA0YTJjMjIxYTNi
NmUwYjQwNDZmMGU3Yy4uOThiOGUxZDExZjM0YjAzOTA1ZTNmZWQyMmZkZGRlYzQ0MmI5NjRmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBA
IC02MjAsNiArNjIwLDEwIEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJTdHlsZTo6ZGlmZihjb25z
dCBSZW5kZXJTdHlsZSogb3RoZXIsIHVuc2lnbmVkJiBjaGFuZ2VkQ29uCiAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBTaW1wbGlmaWVkTGF5b3V0IGNhbiBvcGVyYXRlIGNvcnJl
Y3RseSBvbiBSZW5kZXJJbmxpbmVzICh3ZSB3aWxsIG5lZWQKICAgICAgICAgICAgIC8vIHRvIGFk
ZCBhIHNlbGZOZWVkc1NpbXBsaWZpZWRMYXlvdXQgYml0IGluIG9yZGVyIHRvIG5vdCBnZXQgY29u
ZnVzZWQgYW5kIHRhaW50IGV2ZXJ5IGxpbmUpLgogICAgICAgICAgICAgcmV0dXJuIFN0eWxlRGlm
ZmVyZW5jZUxheW91dDsKKyNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCisgICAgICAgIH0gZWxz
ZSBpZiAocG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uICYmIGRlZmF1bHRTdGF0aWNUb3Ao
KSAhPSBvdGhlci0+ZGVmYXVsdFN0YXRpY1RvcCgpKSB7CisgICAgICAgICAgICByZXR1cm4gU3R5
bGVEaWZmZXJlbmNlTGF5b3V0UG9zaXRpb25lZE1vdmVtZW50T25seTsKKyNlbmRpZgogICAgICAg
ICB9IGVsc2UgaWYgKG1fYm94LT56SW5kZXgoKSAhPSBvdGhlci0+bV9ib3gtPnpJbmRleCgpIHx8
IG1fYm94LT5oYXNBdXRvWkluZGV4KCkgIT0gb3RoZXItPm1fYm94LT5oYXNBdXRvWkluZGV4KCkK
ICAgICAgICAgICAgICAgICAgfHwgdmlzdWFsLT5jbGlwICE9IG90aGVyLT52aXN1YWwtPmNsaXAg
fHwgdmlzdWFsLT5oYXNDbGlwICE9IG90aGVyLT52aXN1YWwtPmhhc0NsaXApCiAgICAgICAgICAg
ICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlUmVwYWludExheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBlYzU3ZjkwYzEzNzY0ZWJiMTRlM2Qw
OThjOWQ2OTI0NTQ2OGZjYWI4Li5iN2E4NmZkYWQ0YTNlOTFkOTlhNTY4N2Q0YTgyNjczZTE4NDBk
ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApA
QCAtNzU0LDYgKzc1NCw5IEBAIHB1YmxpYzoKICAgICBFQWxpZ25Db250ZW50IGFsaWduQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVBbGlnbkNvbnRlbnQ+KHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX2FsaWduQ29udGVudCk7IH0KICAgICBFQWxpZ25JdGVtcyBhbGlnbkl0ZW1z
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RUFsaWduSXRlbXM+KHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2FsaWduSXRlbXMpOyB9CiAgICAgRUFsaWduSXRlbXMgYWxpZ25TZWxmKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RUFsaWduSXRlbXM+KHJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX2FsaWduU2VsZik7IH0KKyNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCisgICAgTGVuZ3Ro
IGRlZmF1bHRTdGF0aWNUb3AoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxMZW5ndGg+KHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX2RlZmF1bHRTdGF0aWNUb3ApOyB9CisjZW5kaWYKICAgICBF
RmxleERpcmVjdGlvbiBmbGV4RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RUZsZXhEaXJlY3Rpb24+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZsZXhpYmxlQm94LT5tX2Zs
ZXhEaXJlY3Rpb24pOyB9CiAgICAgYm9vbCBpc0NvbHVtbkZsZXhEaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBmbGV4RGlyZWN0aW9uKCkgPT0gRmxvd0NvbHVtbiB8fCBmbGV4RGlyZWN0aW9uKCkg
PT0gRmxvd0NvbHVtblJldmVyc2U7IH0KICAgICBib29sIGlzUmV2ZXJzZUZsZXhEaXJlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBmbGV4RGlyZWN0aW9uKCkgPT0gRmxvd1Jvd1JldmVyc2UgfHwgZmxl
eERpcmVjdGlvbigpID09IEZsb3dDb2x1bW5SZXZlcnNlOyB9CkBAIC0xMjQ2LDYgKzEyNDksOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbGlnbkNvbnRlbnQoRUFsaWduQ29udGVudCBwKSB7IFNF
VF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fYWxpZ25Db250ZW50LCBwKTsgfQogICAgIHZv
aWQgc2V0QWxpZ25JdGVtcyhFQWxpZ25JdGVtcyBhKSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRl
ZERhdGEsIG1fYWxpZ25JdGVtcywgYSk7IH0KICAgICB2b2lkIHNldEFsaWduU2VsZihFQWxpZ25J
dGVtcyBhKSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fYWxpZ25TZWxmLCBhKTsg
fQorI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKKyAgICB2b2lkIHNldERlZmF1bHRTdGF0aWNU
b3AoTGVuZ3RoIGxlbmd0aCkgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX2RlZmF1
bHRTdGF0aWNUb3AsIGxlbmd0aCk7IH0KKyNlbmRpZgogICAgIHZvaWQgc2V0RmxleERpcmVjdGlv
bihFRmxleERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0
YS5hY2Nlc3MoKS0+bV9mbGV4aWJsZUJveCwgbV9mbGV4RGlyZWN0aW9uLCBkaXJlY3Rpb24pOyB9
CiAgICAgdm9pZCBzZXRGbGV4V3JhcChFRmxleFdyYXAgdykgeyBTRVRfVkFSKHJhcmVOb25Jbmhl
cml0ZWREYXRhLmFjY2VzcygpLT5tX2ZsZXhpYmxlQm94LCBtX2ZsZXhXcmFwLCB3KTsgfQogICAg
IHZvaWQgc2V0SnVzdGlmeUNvbnRlbnQoRUp1c3RpZnlDb250ZW50IHApIHsgU0VUX1ZBUihyYXJl
Tm9uSW5oZXJpdGVkRGF0YSwgbV9qdXN0aWZ5Q29udGVudCwgcCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWRE
YXRhLmNwcAppbmRleCBiNWE2ZWZmMjdlYmU5ZDhlYjEwYTRlMzk0NTdlZDkyMmRjZDdlNTVjLi5i
OWIzYjdhNjgwM2M5YWViMTgxZDk1ZjIwZDliNmU0ZDIxMjU3M2Y0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGEuY3BwCkBAIC0yNTIsNiArMjUyLDkgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWRE
YXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGMKICNp
ZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgICAgICAmJiBtX2VmZmVjdGl2ZUJsZW5kTW9k
ZSA9PSBvLm1fZWZmZWN0aXZlQmxlbmRNb2RlCiAjZW5kaWYKKyNpZiBFTkFCTEUoRElBTE9HX0VM
RU1FTlQpCisgICAgICAgICYmIG1fZGVmYXVsdFN0YXRpY1RvcCA9PSBvLm1fZGVmYXVsdFN0YXRp
Y1RvcAorI2VuZGlmCiAgICAgICAgICYmIG1faGFzQXNwZWN0UmF0aW8gPT0gby5tX2hhc0FzcGVj
dFJhdGlvOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCBjNGFjMGY2ZjM4Zjg5MjExZWMw
ODQzOThkMTlmNTI4NzU1ZjBkZDhiLi41ODUxN2ZhNjViNGExOTIzMTBkYmUzNGNkMDcwNzJlNGI5
NzM5ZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTE1Niw2ICsxNTYsMTEgQEAgcHVibGlj
OgogCiAgICAgQXRvbWljU3RyaW5nIG1fZmxvd1RocmVhZDsKICAgICBBdG9taWNTdHJpbmcgbV9y
ZWdpb25UaHJlYWQ7CisKKyNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCisgICAgTGVuZ3RoIG1f
ZGVmYXVsdFN0YXRpY1RvcDsKKyNlbmRpZgorCiAgICAgdW5zaWduZWQgbV9yZWdpb25PdmVyZmxv
dyA6IDE7IC8vIFJlZ2lvbk92ZXJmbG93CiAKICAgICB1bnNpZ25lZCBtX3JlZ2lvbkJyZWFrQWZ0
ZXIgOiAyOyAvLyBFUGFnZUJyZWFrCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDM2OWM0YjFmMThiM2VkMTM4MmI1YzU5OGYz
MjQ5OGQ0ODVhOGU2Ni4uMWY2N2IxMGJjODkwM2QyNmQ2YjNjODgxNzI5NzJkN2Q0Mjg4NGNkZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEzLTAyLTE5ICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFs
a2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICA8ZGlhbG9nPiBjZW50ZXJpbmcgYnJlYWtzIHdo
ZW4gdGhlcmUgaXMgYSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYW5jZXN0b3IgY29udGFpbmVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTk0NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtb3JlIHRl
c3QgY2FzZXMgdG8gbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy5odG1sIGZvciBkaWFs
b2cKKyAgICAgICAgcG9zaXRpb25pbmcgd2hlbiBpbnNpZGUgcmVsYXRpdmVseSBwb3NpdGlvbmVk
IGNvbnRhaW5lcnMuIEFsc28sIGFkZAorICAgICAgICB0ZXN0IGNhc2VzIHRvIGVuc3VyZSBkaWFs
b2cgaXMgbm90IHJlLWNlbnRlcmVkIG9uIHJlbGF5b3V0LCBhbmQgdGVzdAorICAgICAgICBtb2Rh
bCBkaWFsb2dzIGFzIHdlbGwuCisKKyAgICAgICAgKiBmYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVu
dC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9u
aW5nLmh0bWw6CisKIDIwMTMtMDItMTggIMOBZMOhbSBLYWxsYWkgIDxrYWRhbUBpbmYudS1zemVn
ZWQuaHU+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkIGdhcmRlbmluZy4gU2tpcHBlZCBmYWls
aW5nIHRlc3RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTERpYWxvZ0Vs
ZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxvZy1wb3NpdGlvbmluZy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBv
c2l0aW9uaW5nLWV4cGVjdGVkLnR4dAppbmRleCBmMDk1NWMxNzBjNGFlMzRjMmFhZTY5ZWU0NGVl
OWUzNTM1ZmVkMDFjLi5iNWZlZGJmMzdhNTZjNzM0OTdjYmMxOWIyNTIzZDg5MTkwNzJmMTI2IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5j
aG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5n
LWV4cGVjdGVkLnR4dApAQCAtMywxNiArMyw1NyBAQCBUZXN0cyBkZWZhdWx0IHBvc2l0aW9uaW5n
IG9mIG5vbi1hbmNob3JlZCBkaWFsb2dzLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAK
K0RpYWxvZyBzaG91bGQgYmUgY2VudGVyZWQgaW4gdGhlIHZpZXdwb3J0LgogUEFTUyBkaWFsb2cu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9wCiBQQVNTIGRpYWxvZy5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKworRGlhbG9nIHNob3Vs
ZCBiZSByZWNlbnRlcmVkIGlmIHNob3coKSBpcyBjYWxsZWQgYWZ0ZXIgY2xvc2UoKS4KK1BBU1Mg
ZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyBleHBlY3RlZFRvcAorCitEaWFs
b2cgc2hvdWxkIG5vdCBiZSByZWNlbnRlcmVkIG9uIGEgcmVsYXlvdXQuCitQQVNTIGRpYWxvZy5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKworQSB0YWxsIGRpYWxv
ZyBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydC4KK1BBU1Mg
ZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCiBQQVNTIGRpYWxvZy5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMAorCitUaGUgZGlhbG9nIHNob3VsZCBiZSBjZW50
ZXJlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZiBhIGhvcml6b250YWwgc2Nyb2xsYmFy
LgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIGV4cGVjdGVkVG9w
CitQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AK
KworVGVzdCB0aGF0IGNlbnRlcmluZyB3b3JrcyB3aGVuIGRpYWxvZyBpcyBpbnNpZGUgcG9zaXRp
b25lZCBjb250YWluZXJzLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9w
IGlzIGV4cGVjdGVkVG9wCiBQQVNTIGRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ag
aXMgZXhwZWN0ZWRUb3AKIFBBU1MgZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBp
cyBleHBlY3RlZFRvcAorCitEaWFsb2cncyBwb3NpdGlvbiBzaG91bGQgc3Vydml2ZSBhZnRlciBi
ZWNvbWluZyBkaXNwbGF5Om5vbmUgdGVtcG9yYXJpbHkuCitQQVNTIGRpYWxvZy5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AgaXMgZXhwZWN0ZWRUb3AKKworRGlhbG9nJ3MgcG9zaXRpb24gc2hv
dWxkIHN1cnZpdmUgYWZ0ZXIgYmVpbmcgcmUtYWRkZWQgdG8gZG9jdW1lbnQgd2l0aG91dCBhbm90
aGVyIGNhbGwgdG8gc2hvdygpLgorUEFTUyBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
dG9wIGlzIGV4cGVjdGVkVG9wCisKK0RpYWxvZydzIHBvc2l0aW9uIHNob3VsZCBzdXJ2aXZlIGFm
dGVyIGNsb3NlKCkgYW5kIHNob3coKS4KK1BBU1MgZGlhbG9nLnN0eWxlLnRvcCBpcyBleHBlY3Rl
ZFRvcAorCitEaWFsb2cgc2hvdWxkIG5vdCBiZSBjZW50ZXJlZCBpZiBzaG93KCkgd2FzIGNhbGxl
ZCB3aGVuIGFuIGFuY2VzdG9yIGhhZCBkaXNwbGF5ICdub25lJy4KIFBBU1MgZGlhbG9nLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyBleHBlY3RlZFRvcAotUEFTUyBkaWFsb2cub2Zmc2V0
VG9wIGlzIHBsYWluRGl2Lm9mZnNldFRvcAotUEFTUyBkaWFsb2cub2Zmc2V0Qm90dG9tIGlzIHBs
YWluRGl2Lm9mZnNldEJvdHRvbQotUEFTUyBkaWFsb2cub2Zmc2V0VG9wIGlzIHBsYWluRGl2Lm9m
ZnNldFRvcAorCitUZXN0IHRoYXQgc2V0dGluZyAndG9wJyBvbiBkaWFsb2cgcmVzdWx0cyBpbiB0
aGUgc2FtZSBwb3NpdGlvbiBhcyBmb3IgYSBwbGFpbiwgYWJzb2x1dGVseSBwb3NpdGlvbmVkIHNw
YW4uCitQQVNTIGRpYWxvZy5vZmZzZXRUb3AgaXMgcGxhaW5TcGFuLm9mZnNldFRvcAorUEFTUyBk
aWFsb2cub2Zmc2V0VG9wIGlzIHBsYWluU3Bhbi5vZmZzZXRUb3AKKworVGVzdCB0aGF0IHNldHRp
bmcgJ2JvdHRvbScgb24gZGlhbG9nIHJlc3VsdHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgZm9y
IGEgcGxhaW4sIGFic29sdXRlbHkgcG9zaXRpb25lZCBzcGFuLgorUEFTUyBkaWFsb2cub2Zmc2V0
Qm90dG9tIGlzIHBsYWluU3Bhbi5vZmZzZXRCb3R0b20KK1BBU1MgZGlhbG9nLm9mZnNldEJvdHRv
bSBpcyBwbGFpblNwYW4ub2Zmc2V0Qm90dG9tCisKK1Rlc3QgdGhhdCBmaXhlZCBwb3NpdGlvbmlu
ZyBmb3IgZGlhbG9nIGhhcyBzYW1lIGJlaGF2aW9yIGFzIGZvciBhIHBsYWluIHNwYW4uCitQQVNT
IGRpYWxvZy5vZmZzZXRUb3AgaXMgcGxhaW5TcGFuLm9mZnNldFRvcAorUEFTUyBkaWFsb2cub2Zm
c2V0VG9wIGlzIHBsYWluU3Bhbi5vZmZzZXRUb3AKKworVGVzdCB0aGF0IHN0YXRpYyBwb3NpdGlv
biBmb3IgYSBub24tbW9kYWwgZGlhbG9nIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBmb3IgYSBw
bGFpbiBzcGFuLgogUEFTUyBkaWFsb2cub2Zmc2V0VG9wIGlzIGV4cGVjdGVkVG9wCisKK1Rlc3Qg
dGhhdCByZWxhdGl2ZSBwb3NpdGlvbiBmb3IgYSBub24tbW9kYWwgZGlhbG9nIGhhcyB0aGUgc2Ft
ZSBiZWhhdmlvciBhcyBmb3IgYSBwbGFpbiBzcGFuLgogUEFTUyBkaWFsb2cub2Zmc2V0VG9wIGlz
IGV4cGVjdGVkVG9wCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxEaWFsb2dFbGVtZW50L25vbi1hbmNob3JlZC1k
aWFsb2ctcG9zaXRpb25pbmcuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxEaWFsb2dF
bGVtZW50L25vbi1hbmNob3JlZC1kaWFsb2ctcG9zaXRpb25pbmcuaHRtbAppbmRleCA5MDMxNjQx
YzU1YTNmOTAwZTgyMmNmYzc5OGY2NWViOTI3YjczNDQ5Li4xODRhYmRkMmQyZmFkYWNmYjRlZDA4
NDljYWRlOTNhNzA2Nzg4Y2YwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1M
RGlhbG9nRWxlbWVudC9ub24tYW5jaG9yZWQtZGlhbG9nLXBvc2l0aW9uaW5nLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTERpYWxvZ0VsZW1lbnQvbm9uLWFuY2hvcmVkLWRpYWxv
Zy1wb3NpdGlvbmluZy5odG1sCkBAIC01LDYgKzUsMTIgQEAKIC5maWxsZXIgewogICAgIGhlaWdo
dDogMjAwMDBweDsKIH0KKworZGlhbG9nIHsKKyAgICAvKiBSZW1vdmUgYm9yZGVyIGFuZCBwYWRk
aW5nIHRvIGFsbG93IGNvbXBhcmluZyBkaWFsb2cncyBwb3NpdGlvbiB3aXRoIHRoYXQgb2YgcGxh
aW4gc3BhbiBlbGVtZW50cy4gKi8KKyAgICBib3JkZXI6IDA7CisgICAgcGFkZGluZzogMDsKK30K
IDwvc3R5bGU+CiA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQ+CkBAIC0xOSw2ICsyNSwxNyBAQCBmdW5jdGlvbiBjaGVja0Nl
bnRlcmVkKGRpYWxvZykgewogICAgIGV4cGVjdGVkVG9wID0gKHdpbmRvdy5pbm5lckhlaWdodCAt
IGRpYWxvZy5vZmZzZXRIZWlnaHQpIC8gMjsKICAgICBzaG91bGRCZSgnZGlhbG9nLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpLnRvcCcsICdleHBlY3RlZFRvcCcpOwogfQorCisvLyBIZWxwZXIgdG8g
dGVzdCBib3RoIGEgbm9uLW1vZGFsIGFuZCBtb2RhbCBkaWFsb2cuCitmdW5jdGlvbiBzaG93QW5k
VGVzdERpYWxvZyhkaWFsb2csIGNoZWNrZXIpIHsKKyAgICBkaWFsb2cuc2hvdygpOworICAgIGNo
ZWNrZXIoKTsKKyAgICBkaWFsb2cuY2xvc2UoKTsKKworICAgIGRpYWxvZy5zaG93TW9kYWwoKTsK
KyAgICBjaGVja2VyKCk7CisgICAgZGlhbG9nLmNsb3NlKCk7Cit9CiA8L3NjcmlwdD4KIDwvaGVh
ZD4KIDxib2R5PgpAQCAtMzAsMTA2ICs0NywxMzQgQEAgZGVzY3JpcHRpb24oIlRlc3RzIGRlZmF1
bHQgcG9zaXRpb25pbmcgb2Ygbm9uLWFuY2hvcmVkIGRpYWxvZ3MuIik7CiAKIGRpYWxvZyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpYWxvZycpOwogCi0vLyBEaWFsb2cgc2hvdWxkIGJl
IGNlbnRlcmVkIGluIHRoZSB2aWV3cG9ydC4KLWRpYWxvZy5zaG93KCk7Ci1jaGVja0NlbnRlcmVk
KGRpYWxvZyk7Ci1kaWFsb2cuY2xvc2UoKTsKK2RlYnVnKCdEaWFsb2cgc2hvdWxkIGJlIGNlbnRl
cmVkIGluIHRoZSB2aWV3cG9ydC4nKTsKK3Nob3dBbmRUZXN0RGlhbG9nKGRpYWxvZywgZnVuY3Rp
b24oKSB7IGNoZWNrQ2VudGVyZWQoZGlhbG9nKSB9KTsKIAotLy8gRGlhbG9nIHNob3VsZCBzdGls
bCBiZSBjZW50ZXJlZCBpZiBzaG93biBhZnRlciB3aW5kb3cgaXMgc2Nyb2xsZWQuCitkZWJ1Zygn
PGJyPkRpYWxvZyBzaG91bGQgYmUgcmVjZW50ZXJlZCBpZiBzaG93KCkgaXMgY2FsbGVkIGFmdGVy
IGNsb3NlKCkuJyk7CiB3aW5kb3cuc2Nyb2xsKDAsIDUwMCk7CiBkaWFsb2cuc2hvdygpOwogY2hl
Y2tDZW50ZXJlZChkaWFsb2cpOworCitkZWJ1ZygnPGJyPkRpYWxvZyBzaG91bGQgbm90IGJlIHJl
Y2VudGVyZWQgb24gYSByZWxheW91dC4nKTsKK3ZhciBleHBlY3RlZFRvcCA9IGRpYWxvZy5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS50b3A7Cit3aW5kb3cuc2Nyb2xsKDAsIDEwMDApOwordmFyIGZv
cmNlUmVsYXlvdXREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2ZvcmNlUmVs
YXlvdXREaXYuc3R5bGUud2lkdGggPSAnMTAwcHgnOworZm9yY2VSZWxheW91dERpdi5zdHlsZS5o
ZWlnaHQgPSAnMTAwcHgnOworZm9yY2VSZWxheW91dERpdi5zdHlsZS5ib3JkZXIgPSAnc29saWQn
OworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JjZVJlbGF5b3V0RGl2KTsKK3dpbmRvdy5z
Y3JvbGwoMCwgNTAwKTsKK3Nob3VsZEJlKCdkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
dG9wJywgJ2V4cGVjdGVkVG9wJyk7Citkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcmNlUmVs
YXlvdXREaXYpOwogZGlhbG9nLmNsb3NlKCk7CiAKLS8vIEEgdGFsbCBkaWFsb2cgc2hvdWxkIGJl
IHBvc2l0aW9uZWQgYXQgdGhlIHRvcCBvZiB0aGUgdmlld3BvcnQuCitkZWJ1ZygnPGJyPkEgdGFs
bCBkaWFsb2cgc2hvdWxkIGJlIHBvc2l0aW9uZWQgYXQgdGhlIHRvcCBvZiB0aGUgdmlld3BvcnQu
Jyk7CiB2YXIgZGlhbG9nSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIGRp
YWxvZ0lubmVyLmNsYXNzTmFtZSA9ICdmaWxsZXInOwogZGlhbG9nLmFwcGVuZENoaWxkKGRpYWxv
Z0lubmVyKTsKLWRpYWxvZy5zaG93KCk7Ci1jaGVja1RvcE9mVmlld3BvcnQoZGlhbG9nKTsKLWRp
YWxvZy5jbG9zZSgpOworc2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgY2hl
Y2tUb3BPZlZpZXdwb3J0KGRpYWxvZykgfSk7CiBkaWFsb2cucmVtb3ZlQ2hpbGQoZGlhbG9nSW5u
ZXIpOwogCi0vLyBBZGQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyLiBUaGUgZGlhbG9nIHNob3Vs
ZCBiZSBjZW50ZXJlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZiBzY3JvbGxiYXJzLgor
ZGVidWcoJzxicj5UaGUgZGlhbG9nIHNob3VsZCBiZSBjZW50ZXJlZCByZWdhcmRsZXNzIG9mIHRo
ZSBwcmVzZW5jZSBvZiBhIGhvcml6b250YWwgc2Nyb2xsYmFyLicpOwogdmFyIGZpbGxlckRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxsZXJEaXYnKTsKIGZpbGxlckRpdi5zdHlsZS53
aWR0aCA9ICc0MDAwcHgnOwotZGlhbG9nLnNob3coKTsKLWNoZWNrQ2VudGVyZWQoZGlhbG9nKTsK
LWRpYWxvZy5jbG9zZSgpOworc2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsg
Y2hlY2tDZW50ZXJlZChkaWFsb2cpIH0pOwogZmlsbGVyRGl2LnN0eWxlLndpZHRoID0gJ2F1dG8n
OwogCi0vLyBUZXN0IHRoYXQgY2VudGVyaW5nIHdvcmtzIHdoZW4gZGlhbG9nIGlzIGluc2lkZSBw
b3NpdGlvbmVkIGNvbnRhaW5lcnMuCi12YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7Ci1jb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwotY29u
dGFpbmVyLnN0eWxlLnRvcCA9ICc4MDBweDsnCi1jb250YWluZXIuc3R5bGUuaGVpZ2h0PSAnNTBw
eDsnCi1jb250YWluZXIuc3R5bGUud2lkdGggPSAnOTAlJzsKK2RlYnVnKCc8YnI+VGVzdCB0aGF0
IGNlbnRlcmluZyB3b3JrcyB3aGVuIGRpYWxvZyBpcyBpbnNpZGUgcG9zaXRpb25lZCBjb250YWlu
ZXJzLicpOwordmFyIGFic29sdXRlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7CithYnNvbHV0ZUNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7Cith
YnNvbHV0ZUNvbnRhaW5lci5zdHlsZS50b3AgPSAnODAwcHg7JworYWJzb2x1dGVDb250YWluZXIu
c3R5bGUuaGVpZ2h0ID0gJzUwcHg7JworYWJzb2x1dGVDb250YWluZXIuc3R5bGUud2lkdGggPSAn
OTAlJzsKIGRpYWxvZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7Ci1kb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Ci1jb250YWluZXIuYXBwZW5kQ2hpbGQoZGlhbG9n
KTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYWJzb2x1dGVDb250YWluZXIpOworYWJzb2x1
dGVDb250YWluZXIuYXBwZW5kQ2hpbGQoZGlhbG9nKTsKK3Nob3dBbmRUZXN0RGlhbG9nKGRpYWxv
ZywgZnVuY3Rpb24oKSB7IGNoZWNrQ2VudGVyZWQoZGlhbG9nKSB9KTsKK2Fic29sdXRlQ29udGFp
bmVyLnJlbW92ZUNoaWxkKGRpYWxvZyk7CisKK3ZhciByZWxhdGl2ZUNvbnRhaW5lciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworcmVsYXRpdmVDb250YWluZXIuc3R5bGUucG9zaXRp
b24gPSAncmVsYXRpdmUnOworcmVsYXRpdmVDb250YWluZXIuc3R5bGUudG9wID0gJzIwcHgnOwor
cmVsYXRpdmVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzMwcHgnOworYWJzb2x1dGVDb250YWlu
ZXIuYXBwZW5kQ2hpbGQocmVsYXRpdmVDb250YWluZXIpOworcmVsYXRpdmVDb250YWluZXIuYXBw
ZW5kQ2hpbGQoZGlhbG9nKTsKIGRpYWxvZy5zaG93KCk7CiBjaGVja0NlbnRlcmVkKGRpYWxvZyk7
CisKK2RlYnVnKCI8YnI+RGlhbG9nJ3MgcG9zaXRpb24gc2hvdWxkIHN1cnZpdmUgYWZ0ZXIgYmVj
b21pbmcgZGlzcGxheTpub25lIHRlbXBvcmFyaWx5LiIpOworZXhwZWN0ZWRUb3AgPSBkaWFsb2cu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOword2luZG93LnNjcm9sbCgwLCAxMDAwKTsKK3Jl
bGF0aXZlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CityZWxhdGl2ZUNvbnRhaW5l
ci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKK3dpbmRvdy5zY3JvbGwoMCwgNTAwKTsKK3Nob3Vs
ZEJlKCdkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wJywgJ2V4cGVjdGVkVG9wJyk7
CisKK2RlYnVnKCI8YnI+RGlhbG9nJ3MgcG9zaXRpb24gc2hvdWxkIHN1cnZpdmUgYWZ0ZXIgYmVp
bmcgcmUtYWRkZWQgdG8gZG9jdW1lbnQgd2l0aG91dCBhbm90aGVyIGNhbGwgdG8gc2hvdygpLiIp
OworZXhwZWN0ZWRUb3AgPSBkaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOword2lu
ZG93LnNjcm9sbCgwLCAxMDAwKTsKK3JlbGF0aXZlQ29udGFpbmVyLnJlbW92ZUNoaWxkKGRpYWxv
Zyk7CityZWxhdGl2ZUNvbnRhaW5lci5hcHBlbmRDaGlsZChkaWFsb2cpOword2luZG93LnNjcm9s
bCgwLCA1MDApOworc2hvdWxkQmUoJ2RpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3An
LCAnZXhwZWN0ZWRUb3AnKTsKIGRpYWxvZy5jbG9zZSgpOwotY29udGFpbmVyLnJlbW92ZUNoaWxk
KGRpYWxvZyk7Ci0KLXZhciBjb250YWluZXIyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7Ci0vLyBGSVhNRTogVGhpcyB0ZXN0IGZhaWxzIGZvciBwb3NpdGlvbiA9ICdyZWxhdGl2ZScu
Ci1jb250YWluZXIyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKLWNvbnRhaW5lcjIuc3R5
bGUudG9wID0gJzIwcHgnOwotY29udGFpbmVyMi5zdHlsZS5oZWlnaHQgPSAnMzBweCc7Ci1jb250
YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyMik7Ci1jb250YWluZXIyLmFwcGVuZENoaWxkKGRp
YWxvZyk7CisKK2RlYnVnKCI8YnI+RGlhbG9nJ3MgcG9zaXRpb24gc2hvdWxkIHN1cnZpdmUgYWZ0
ZXIgY2xvc2UoKSBhbmQgc2hvdygpLiIpOwogZGlhbG9nLnNob3coKTsKLWNoZWNrQ2VudGVyZWQo
ZGlhbG9nKTsKK2RpYWxvZy5zdHlsZS50b3AgPSAnMHB4JzsKIGRpYWxvZy5jbG9zZSgpOworZGlh
bG9nLnNob3coKTsKK3ZhciBleHBlY3RlZFRvcCA9ICcwcHgnOworc2hvdWxkQmUoJ2RpYWxvZy5z
dHlsZS50b3AnLCAnZXhwZWN0ZWRUb3AnKTsKK2RpYWxvZy5zdHlsZS50b3AgPSAnYXV0byc7CiAK
LS8vIFRlc3QgdGhhdCBzZXR0aW5nIHRvcCBtYW51YWxseSBpcyB0aGUgc2FtZSBhcyBmb3IgYSBw
bGFpbiBkaXYuCi12YXIgcGxhaW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
LWNvbnRhaW5lcjIuYXBwZW5kQ2hpbGQocGxhaW5EaXYpOwotcGxhaW5EaXYuc3R5bGUucG9zaXRp
b24gPSAnYWJzb2x1dGUnOwotcGxhaW5EaXYuc3R5bGUudG9wID0gJzUwcHgnOwotZGlhbG9nLnN0
eWxlLnRvcCA9ICc1MHB4JzsKK2RlYnVnKCI8YnI+RGlhbG9nIHNob3VsZCBub3QgYmUgY2VudGVy
ZWQgaWYgc2hvdygpIHdhcyBjYWxsZWQgd2hlbiBhbiBhbmNlc3RvciBoYWQgZGlzcGxheSAnbm9u
ZScuIik7Cit2YXIgcGxhaW5TcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwor
cGxhaW5TcGFuLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKK3JlbGF0aXZlQ29udGFpbmVy
LmFwcGVuZENoaWxkKHBsYWluU3Bhbik7CitleHBlY3RlZFRvcCA9IHBsYWluU3Bhbi5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS50b3A7CithYnNvbHV0ZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOwogZGlhbG9nLnNob3coKTsKLXNob3VsZEJlKCdkaWFsb2cub2Zmc2V0VG9wJywgJ3Bs
YWluRGl2Lm9mZnNldFRvcCcpOworYWJzb2x1dGVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdi
bG9jayc7CitzaG91bGRCZSgnZGlhbG9nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCcsICdl
eHBlY3RlZFRvcCcpOwogZGlhbG9nLmNsb3NlKCk7CiAKLS8vIFRlc3QgdGhhdCBzZXR0aW5nIGJv
dHRvbSBtYW51YWxseSBpcyB0aGUgc2FtZSBhcyBmb3IgYSBwbGFpbiBkaXYuCitkZWJ1ZygiPGJy
PlRlc3QgdGhhdCBzZXR0aW5nICd0b3AnIG9uIGRpYWxvZyByZXN1bHRzIGluIHRoZSBzYW1lIHBv
c2l0aW9uIGFzIGZvciBhIHBsYWluLCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgc3Bhbi4iKTsKK3Bs
YWluU3Bhbi5zdHlsZS50b3AgPSAnNTBweCc7CitkaWFsb2cuc3R5bGUudG9wID0gJzUwcHgnOwor
c2hvd0FuZFRlc3REaWFsb2coZGlhbG9nLCBmdW5jdGlvbigpIHsgc2hvdWxkQmUoJ2RpYWxvZy5v
ZmZzZXRUb3AnLCAncGxhaW5TcGFuLm9mZnNldFRvcCcpOyB9KTsKKworZGVidWcoIjxicj5UZXN0
IHRoYXQgc2V0dGluZyAnYm90dG9tJyBvbiBkaWFsb2cgcmVzdWx0cyBpbiB0aGUgc2FtZSBwb3Np
dGlvbiBhcyBmb3IgYSBwbGFpbiwgYWJzb2x1dGVseSBwb3NpdGlvbmVkIHNwYW4uIik7CiBkaWFs
b2cuc3R5bGUudG9wID0gJ2F1dG8nOwotcGxhaW5EaXYuc3R5bGUudG9wID0gJ2F1dG8nOworcGxh
aW5TcGFuLnN0eWxlLnRvcCA9ICdhdXRvJzsKIGRpYWxvZy5zdHlsZS5ib3R0b20gPSAnNTBweCc7
Ci1wbGFpbkRpdi5zdHlsZS5ib3R0b20gPSAnNTBweCc7Ci1kaWFsb2cuc2hvdygpOwotc2hvdWxk
QmUoJ2RpYWxvZy5vZmZzZXRCb3R0b20nLCAncGxhaW5EaXYub2Zmc2V0Qm90dG9tJyk7Ci1kaWFs
b2cuY2xvc2UoKTsKK3BsYWluU3Bhbi5zdHlsZS5ib3R0b20gPSAnNTBweCc7CitzaG93QW5kVGVz
dERpYWxvZyhkaWFsb2csIGZ1bmN0aW9uKCkgeyBzaG91bGRCZSgnZGlhbG9nLm9mZnNldEJvdHRv
bScsICdwbGFpblNwYW4ub2Zmc2V0Qm90dG9tJyk7IH0pOwogCi0vLyBUZXN0IHRoYXQgZml4ZWQg
cG9zaXRpb24gaGFzIHRoZSB1c3VhbCBiZWhhdmlvci4KLXBsYWluRGl2LnN0eWxlLnBvc2l0aW9u
ID0gJ2ZpeGVkJzsKLXBsYWluRGl2LnN0eWxlLnRvcCA9ICc1MHB4JzsKK2RlYnVnKCc8YnI+VGVz
dCB0aGF0IGZpeGVkIHBvc2l0aW9uaW5nIGZvciBkaWFsb2cgaGFzIHNhbWUgYmVoYXZpb3IgYXMg
Zm9yIGEgcGxhaW4gc3Bhbi4nKTsKK3BsYWluU3Bhbi5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7
CitwbGFpblNwYW4uc3R5bGUudG9wID0gJzUwcHgnOwogZGlhbG9nLnN0eWxlLnBvc2l0aW9uID0g
J2ZpeGVkJzsKIGRpYWxvZy5zdHlsZS50b3AgPSAnNTBweCc7Ci1kaWFsb2cuc2hvdygpOwotc2hv
dWxkQmUoJ2RpYWxvZy5vZmZzZXRUb3AnLCAncGxhaW5EaXYub2Zmc2V0VG9wJyk7Ci1kaWFsb2cu
Y2xvc2UoKTsKK3Nob3dBbmRUZXN0RGlhbG9nKGRpYWxvZywgZnVuY3Rpb24oKSB7IHNob3VsZEJl
KCdkaWFsb2cub2Zmc2V0VG9wJywgJ3BsYWluU3Bhbi5vZmZzZXRUb3AnKTsgfSk7CiAKLS8vIFRl
c3QgdGhhdCBzdGF0aWMgcG9zaXRpb24gaGFzIHRoZSB1c3VhbCBiZWhhdmlvci4KLXBsYWluRGl2
LnN0eWxlLnBvc2l0aW9uID0gJ3N0YXRpYyc7Ci1wbGFpbkRpdi5zdHlsZS50b3AgPSAnYXV0byc7
Ci12YXIgZXhwZWN0ZWRUb3AgPSBwbGFpbkRpdi5vZmZzZXRUb3A7Ci1wbGFpbkRpdi5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKHBsYWluRGl2KTsKK2RlYnVnKCc8YnI+VGVzdCB0aGF0IHN0YXRpYyBw
b3NpdGlvbiBmb3IgYSBub24tbW9kYWwgZGlhbG9nIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBm
b3IgYSBwbGFpbiBzcGFuLicpOworLy8gSnVzdCB0ZXN0IG5vbi1tb2RhbCBzaW5jZSBtb2RhbCBp
cyBjb3ZlcmVkIGJ5IG90aGVyIHRlc3RzIChmb3IgbW9kYWwsIHN0YXRpYyBjb21wdXRlcyB0byBh
YnNvbHV0ZSkKK3BsYWluU3Bhbi5zdHlsZS5wb3NpdGlvbiA9ICdzdGF0aWMnOwordmFyIGV4cGVj
dGVkVG9wID0gcGxhaW5TcGFuLm9mZnNldFRvcDsKK3BsYWluU3Bhbi5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKHBsYWluU3Bhbik7CiBkaWFsb2cuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsKLWRp
YWxvZy5zdHlsZS50b3AgPSAnYXV0byc7CiBkaWFsb2cuc2hvdygpOwogc2hvdWxkQmUoJ2RpYWxv
Zy5vZmZzZXRUb3AnLCAnZXhwZWN0ZWRUb3AnKTsKIGRpYWxvZy5jbG9zZSgpOwotZGlhbG9nLnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQoZGlhbG9nKTsKIAotLy8gVGVzdCB0aGF0IHJlbGF0aXZlIHBv
c2l0aW9uIGhhcyB0aGUgdXN1YWwgYmVoYXZpb3IuCi1jb250YWluZXIyLmFwcGVuZENoaWxkKHBs
YWluRGl2KTsKLXBsYWluRGl2LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKLXBsYWluRGl2
LnN0eWxlLnRvcCA9ICc1MHB4JzsKLWV4cGVjdGVkVG9wID0gcGxhaW5EaXYub2Zmc2V0VG9wOwot
cGxhaW5EaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwbGFpbkRpdik7Ci1jb250YWluZXIyLmFw
cGVuZENoaWxkKGRpYWxvZyk7CitkZWJ1ZygnPGJyPlRlc3QgdGhhdCByZWxhdGl2ZSBwb3NpdGlv
biBmb3IgYSBub24tbW9kYWwgZGlhbG9nIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBmb3IgYSBw
bGFpbiBzcGFuLicpOworLy8gSnVzdCB0ZXN0IG5vbi1tb2RhbCBzaW5jZSBtb2RhbCBpcyBjb3Zl
cmVkIGJ5IG90aGVyIHRlc3RzIChmb3IgbW9kYWwsIHJlbGF0aXZlIGNvbXB1dGVzIHRvIGFic29s
dXRlKQorcmVsYXRpdmVDb250YWluZXIuYXBwZW5kQ2hpbGQocGxhaW5TcGFuKTsKK3BsYWluU3Bh
bi5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CitwbGFpblNwYW4uc3R5bGUudG9wID0gJzUw
cHgnOworZXhwZWN0ZWRUb3AgPSBwbGFpblNwYW4ub2Zmc2V0VG9wOworcGxhaW5TcGFuLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQocGxhaW5TcGFuKTsKIGRpYWxvZy5zdHlsZS5wb3NpdGlvbiA9ICdy
ZWxhdGl2ZSc7CiBkaWFsb2cuc3R5bGUudG9wID0gJzUwcHgnOwogZGlhbG9nLnNob3coKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>