<?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>3749</bug_id>
          
          <creation_ts>2005-06-28 13:17:39 -0700</creation_ts>
          <short_desc>XHTML 1.1 Ruby  Annotation</short_desc>
          <delta_ts>2009-11-06 11:29:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>312.x</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.3</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>28420</dup_id>
          
          <bug_file_loc>http://www.w3.org/TR/2001/REC-ruby-20010531/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>26829</dependson>
    
    <dependson>26832</dependson>
    
    <dependson>27324</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Storey">dstorey</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>havill</cc>
    
    <cc>mh+webkit</cc>
    
    <cc>robburns1</cc>
    
    <cc>rolandsteiner</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>13450</commentid>
    <comment_count>0</comment_count>
    <who name="David Storey">dstorey</who>
    <bug_when>2005-06-28 13:17:40 -0700</bug_when>
    <thetext>Safari does not support Ruby Annotation, as added to the XHTML spec in 1.1.  Information on Ruby can 
be found in the w3c document stated above.  Currently only IE win/mac supports this (for simple, and 
makes an attempt but fails at complex annotations).  I have created a test case I will attach with this 
report (create from W3C examples).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13451</commentid>
    <comment_count>1</comment_count>
      <attachid>2690</attachid>
    <who name="David Storey">dstorey</who>
    <bug_when>2005-06-28 13:19:31 -0700</bug_when>
    <thetext>Created attachment 2690
Test cases for simple and complex Ruby</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13461</commentid>
    <comment_count>2</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2005-06-28 18:28:04 -0700</bug_when>
    <thetext>Before Safari can really implement the Ruby spec, the Ruby spec has to be
corrected to include error handling rules for what to do when the markup doesn&apos;t
match the required syntax. IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16223</commentid>
    <comment_count>3</comment_count>
      <attachid>3285</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-08-08 14:38:03 -0700</bug_when>
    <thetext>Created attachment 3285
Some CSS I found which adds ruby support.

This can be used to demonstrate what ruby should look like, and give
rudimentary support if included in your user.css file. It&apos;s not perfect though,
but I thought readers might like it as a stop-gap till this bug is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19139</commentid>
    <comment_count>4</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2005-09-08 22:23:03 -0700</bug_when>
    <thetext>I&apos;m confirming this doesn&apos;t work. This is, IMHO, an enhancement more than a bug, so i&apos;m marking it p3, 
enhancement. Setting HasReduction too, since it does have a testcase :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26786</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-27 13:29:39 -0800</bug_when>
    <thetext>Assigning bugs which hyatt is not actively working on to &quot;nobody&quot; for clarity/consistancy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55974</commentid>
    <comment_count>6</comment_count>
      <attachid>10658</attachid>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2006-09-19 18:25:37 -0700</bug_when>
    <thetext>Created attachment 10658
Ruby Test Case with prposed default user agent css

I tried adding the css to the test case and think this would certainly be an improvement over the current (do nothing) approach. I also think some tweaking to the css may be all that&apos;s necessary for WebKit to have full ruby annotation support. I&apos;ll take a look at the css, but someone with more css experience than I might make quick work of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55975</commentid>
    <comment_count>7</comment_count>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2006-09-19 18:33:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Before Safari can really implement the Ruby spec, the Ruby spec has to be
&gt; corrected to include error handling rules for what to do when the markup doesn&apos;t
&gt; match the required syntax. IMHO.

The issue does not at all seem specific to ruby annotation.  Isn&apos;t the current recommendation to not display ill-formed xml (or only up until the error) and if its invalild (e.g., ruby elements containing elements other than rbc, rtc, rt, rb, or rp, then the policiy could be similar to WebKits reponse to similar invalid tables for instance. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56497</commentid>
    <comment_count>8</comment_count>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2006-09-25 19:45:21 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=10658) [edit]
&gt; Ruby Test Case with prposed default user agent css
&gt; 
... some tweaking
&gt; to the css may be all that&apos;s necessary for WebKit to have full ruby annotation
&gt; support. 

After further reflection, support also for the rspan attribute woudl be necessary for complex ruby base. This attribute is much like the span attributes as implemented in HTML tables. Again some redeployment of code by someone more familiar with this could make relatively quick work of this moving Safarai to XHTML 1.1 compliance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128140</commentid>
    <comment_count>9</comment_count>
      <attachid>31843</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-06-25 02:27:15 -0700</bug_when>
    <thetext>Created attachment 31843
Implmentation for basic HTML5 ruby support

As described in the release notes, this patch implements basic HTML5 ruby support with minor nods towards CSS3. In particular, it does not honor any CS3 ruby properties, nor render complex ruby.

(Put in Dave Hyatt as Reviewer, since we had some discussion on the topic on the mailing list)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128432</commentid>
    <comment_count>10</comment_count>
      <attachid>31843</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-26 01:24:20 -0700</bug_when>
    <thetext>Comment on attachment 31843
Implmentation for basic HTML5 ruby support

Not possible to review a 400k patch. :(

Please break this out into smaller pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128502</commentid>
    <comment_count>11</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-06-26 10:35:44 -0700</bug_when>
    <thetext>A few unsolicited code reviews for some style issues:

- CSSStyleSelector.cpp has some /* */ comments. Are they really necessary? If so, adding some comments would help readers. Also, ruby.css seems to have a line which is commented out.
- I think destructors should be virtual. Otherwise we may have resource leaks in future.
- It would be better to add &quot;// namespace WebCore&quot; when you close namespaces.
- I think specialHeight() needs some comments to describe how it is special.
- For RenderRuby*::isChildAllowed, WebKit doesn&apos;t use line breaks around || , I think.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128774</commentid>
    <comment_count>12</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-06-28 20:44:11 -0700</bug_when>
    <thetext>(In reply to comment #10 and comment #11)

Will try to break up the patch into smaller chunks, as suggested here and on the mailing list.

&gt; A few unsolicited code reviews for some style issues:
[snipped]

Thanks! Will correct those places.

&gt; - For RenderRuby*::isChildAllowed, WebKit doesn&apos;t use line breaks around || , I
&gt; think.

FWIW, I saw both styles in the code (IMHO, line breaks make it easier to add/remove entries), but as the code has solidified, I can remove them.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128782</commentid>
    <comment_count>13</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-06-28 23:47:00 -0700</bug_when>
    <thetext>Thanks for fixing!

&gt; FWIW, I saw both styles in the code (IMHO, line breaks make it easier to
&gt; add/remove entries), but as the code has solidified, I can remove them.

Ah, you are right. I thought we should not have line breaks in expressions, but the style guide contains an example like yours.

http://webkit.org/coding/coding-style.html

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131284</commentid>
    <comment_count>14</comment_count>
      <attachid>32654</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-07-13 02:52:47 -0700</bug_when>
    <thetext>Created attachment 32654
patch: implementation of minimal HTML5 ruby support

Reduced-size patch for HTML5 ruby support. The patch contains no layout tests, which will be contained in a separate patch file, to make things more manageable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131286</commentid>
    <comment_count>15</comment_count>
      <attachid>32655</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-07-13 03:02:50 -0700</bug_when>
    <thetext>Created attachment 32655
patch: layout tests for ruby implementation

The layout tests for the ruby implementation - see previous patch attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131296</commentid>
    <comment_count>16</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-07-13 04:26:49 -0700</bug_when>
    <thetext>(In reply to comment #14)

The patch is still rather large, but I&apos;m a bit at a loss what else to factor out. The only thing that comes to mind is to separate the configuration files for the ENABLE_RUBY flag from the actual implementation (?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131818</commentid>
    <comment_count>17</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-15 00:58:26 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=32654) [details]
&gt; patch: implementation of minimal HTML5 ruby support

I found some style issues when I&apos;m testing linter for WebKit:

- WebCore/rendering/RenderRubyBase.h:32:  Missing space before {  [whitespace/braces] [5]
- WebCore/rendering/RubyInlineFlowBox.cpp:40:  Missing space before ( in if(  [whitespace/parens] [5]
- WebCore/rendering/RubyInlineFlowBox.cpp:48:  Missing space before ( in if(  [whitespace/parens] [5]
- This patch contains some tab characters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132112</commentid>
    <comment_count>18</comment_count>
      <attachid>32823</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-07-15 17:51:33 -0700</bug_when>
    <thetext>Created attachment 32823
patch: HTML5 ruby functionality only - requires patch in bug #32822 for build option

In order to further reduce patch sizes, I split out the build option from the actual functionality.

Note that the patch in bug #32822 that adds ENABLE_RUBY must be used/committed before this patch can be applied!

(Also removed the mentioned linting issues.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132113</commentid>
    <comment_count>19</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-07-15 17:53:34 -0700</bug_when>
    <thetext>Correction: the latest patch requires the patch _attachment_ #32822 in bug entry #27324.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132118</commentid>
    <comment_count>20</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-07-15 18:15:53 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Correction: the latest patch requires the patch _attachment_ #32822 in bug
&gt; entry #27324.

Note: updated patch attachment to #27324 (definitely need more coffee! &gt;_&lt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134366</commentid>
    <comment_count>21</comment_count>
      <attachid>32823</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-07-23 22:40:10 -0700</bug_when>
    <thetext>Comment on attachment 32823
patch: HTML5 ruby functionality only - requires patch in bug #32822 for build option

Why an extra ruby stylesheet?  I think the rules can just go in html.css.  There are only 4!

ruby { display: inline } is unnecessary.  The default display type is inline, so you don&apos;t need that rule.

Can rp just always be display:none?

When does rt occur outside a ruby?

There is funny indentation in InlineFlowBox.h... it looks like you 3-space indented instead of 4.

I do not like the addition of an extra virtual function call in InlineFlowBox.cpp&apos;s placeBoxesVertically method.  Possible to avoid it?

In RenderBlock.cpp I worked hard to devirtualize the container walk, so having it be re-virtualized is bothersome.  I&apos;m curious why that is needed.  It looks like you&apos;re using some CSS style constant to scramble order.  Is that actually part of HTML5?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134401</commentid>
    <comment_count>22</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-07-23 23:52:34 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 32823 [details])
&gt; Why an extra ruby stylesheet?  I think the rules can just go in html.css. 
&gt; There are only 4!

The idea was that ruby.css would not be included if ENABLE_RUBY isn&apos;t set. Esp, the CSS rule &quot;rp { display: none; }&quot; shouldn&apos;t be used in that case.

&gt; Can rp just always be display:none?
&gt;
&gt; When does rt occur outside a ruby?

Both shouldn&apos;t occur outside of &lt;ruby&gt;, but the HTML5 spec says: &quot;An rt element that is not a child of a ruby element represents the same thing as its children.&quot; (same for &lt;rp&gt;).

&gt; I do not like the addition of an extra virtual function call in
&gt; InlineFlowBox.cpp&apos;s placeBoxesVertically method.  Possible to avoid it?

Will remove this and re-order the children instead, as discussed on #webkit. 
 
&gt; In RenderBlock.cpp I worked hard to devirtualize the container walk, so having
&gt; it be re-virtualized is bothersome.  I&apos;m curious why that is needed.  It looks
&gt; like you&apos;re using some CSS style constant to scramble order.  Is that actually
&gt; part of HTML5?

My very first implementation was more CSS3 oriented . That constant and the box model are the only holdover from that implementation: I felt that the ability to choose where to put the ruby text (in the &apos;before&apos; or &apos;after&apos; position) was worthwhile to keep. At the moment, this is more of an implementation detail, though - while you CAN put the ruby text into the &apos;after&apos; position with the current implementation, I haven&apos;t added layout tests for that feature yet, because I felt that it may be controversial.

Even without that constant the virtual function however would have been necessary anyway in the current approach, to scramble the layout order as you say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136926</commentid>
    <comment_count>23</comment_count>
      <attachid>34043</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-04 01:06:19 -0700</bug_when>
    <thetext>Created attachment 34043
patch: new ruby implementation (reordering of renderers)

New implementation of the HTML5 ruby support.

As discussed with Dave Hyatt, this now works by re-ordering the render children of otherwise standard RenderBlock objects, rather than doing special layouting.

This new implementation made it important to work in the face of DOM manipulation, which I hope I have addressed fully.

Known limitations/bugs: 

.) Selection follows visual layout order, but text copy-paste follows HTML order
.) In some cases there is some incorrect selection painting when selecting right-to-left over the start of a ruby or ruby run.
   (There seems to be no problems if the selection is performed in the &quot;normal&quot; left-to-right direction.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136928</commentid>
    <comment_count>24</comment_count>
      <attachid>34045</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-04 01:08:20 -0700</bug_when>
    <thetext>Created attachment 34045
patch: layout tests for new ruby implementation

These are the layout tests for the new ruby implementation.

As the new implementation reorders the renderer children, the layout tests also cover DOM manipulation within &lt;ruby&gt; elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137074</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-04 11:40:21 -0700</bug_when>
    <thetext>The commit queue might not be smart enough yet to handle multiple patches on the same bug, but we&apos;ll see.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137208</commentid>
    <comment_count>26</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-04 17:35:50 -0700</bug_when>
    <thetext>
Re-reading the bug description, and given the change of focus in my implementation towards HTML5, I wonder if it wouldn&apos;t be more correct to open a new bug entry &quot;HTML5 Ruby Annotation&quot; (?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137235</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-04 19:28:57 -0700</bug_when>
    <thetext>Too big for me to review, but possibly Hyatt can help you.  No need to set commit-queue=?  I&apos;m sure Adam will write up some docs on commit-queue soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140393</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 17:21:55 -0700</bug_when>
    <thetext>This is too big for me to review, but maybe Hyatt can help you here.  If there is any way to split this patch down into smaller stages, I think that will help your review times substantially.

We don&apos;t normally use &quot;get&quot; in method names.  Sometimes &quot;lookup&quot; for when there is some computation needed, but normally instead of &quot;getFoo&quot; we just use &quot;foo&quot;. This is covered in the style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140985</commentid>
    <comment_count>29</comment_count>
      <attachid>35011</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-17 21:24:00 -0700</bug_when>
    <thetext>Created attachment 35011
patch: new ruby implementation (reordering of renderers)

Same as previous &quot;new ruby implementation&quot; patch, with the following minor changes:

.) factored out &apos;isAfterContent&apos; handling -&gt; separate bug #28376 (reviewed+ by Eric)
.) renamed methods as per Eric&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140986</commentid>
    <comment_count>30</comment_count>
      <attachid>35012</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-17 21:26:59 -0700</bug_when>
    <thetext>Created attachment 35012
patch: new ruby implementation (reordering of renderers)

(set reviewer flag)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140999</commentid>
    <comment_count>31</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-08-17 22:17:17 -0700</bug_when>
    <thetext>
As the focus of the patches for this bug entry drifted towards a HTML5-based implementation rather than a CSS3/XHTML-based implementation, new patches will be posted under https://bugs.webkit.org/show_bug.cgi?id=28420 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149800</commentid>
    <comment_count>32</comment_count>
      <attachid>34045</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-24 12:56:24 -0700</bug_when>
    <thetext>Comment on attachment 34045
patch: layout tests for new ruby implementation

These are just tests, and look fine to me.  I assume they depend on other patches so should not be cq+&apos;d?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151131</commentid>
    <comment_count>33</comment_count>
      <attachid>34045</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-29 18:24:14 -0700</bug_when>
    <thetext>Comment on attachment 34045
patch: layout tests for new ruby implementation

I&apos;m assuming this depends on the other patch and marking it cq-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156074</commentid>
    <comment_count>34</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-10-19 23:34:54 -0700</bug_when>
    <thetext>@_@, Oops, I didn&apos;t realize that these patches here are still active. Everything concerning my ruby implementation has moved to https://bugs.webkit.org/show_bug.cgi?id=28420 and the patches here are outdated!

Please disable the patches here (is there a way apart from uploading a dummy file?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156075</commentid>
    <comment_count>35</comment_count>
      <attachid>41482</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2009-10-19 23:39:07 -0700</bug_when>
    <thetext>Created attachment 41482
dummy file to disable obsolete patch files

Uploading a dummy file to disable obsolete patch files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156080</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-19 23:46:05 -0700</bug_when>
    <thetext>You can always obsolete them by clicking on the &quot;details&quot; link for each.  Should this bug even still be open?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156106</commentid>
    <comment_count>37</comment_count>
      <attachid>41482</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-10-20 02:23:44 -0700</bug_when>
    <thetext>Comment on attachment 41482
dummy file to disable obsolete patch files

Marking final attachment obsolete. (Note: it&apos;s possible to mark an attachment obsolete without posting a new one superseding it. Use the &quot;Details&quot; view, there is a checkbox.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161194</commentid>
    <comment_count>38</comment_count>
      <attachid>34045</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-06 11:28:56 -0800</bug_when>
    <thetext>Comment on attachment 34045
patch: layout tests for new ruby implementation

Clearing r+ on an obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161195</commentid>
    <comment_count>39</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-06 11:29:42 -0800</bug_when>
    <thetext>Marking as a duplicate of bug 28420 per above comment.

*** This bug has been marked as a duplicate of bug 28420 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>2690</attachid>
            <date>2005-06-28 13:19:31 -0700</date>
            <delta_ts>2005-06-28 13:19:31 -0700</delta_ts>
            <desc>Test cases for simple and complex Ruby</desc>
            <filename>ruby.html</filename>
            <type>text/html</type>
            <size>2387</size>
            <attacher name="David Storey">dstorey</attacher>
            
              <data encoding="base64">77u/PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIgoiaHR0
cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgoKPGh0bWwgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cgk8aGVhZD4KCSAg
ICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9ImFwcGxpY2F0aW9uL3ho
dG1sOyBjaGFyc2V0PXV0Zi04IiAvPgoJPC9oZWFkPgoJCgk8Ym9keT4KCQk8aDE+UnVieSB0ZXN0
IGNhc2VzPC9oMT4KCQkKCQk8aDI+U2ltcGxlIFJ1Ynk8L2gyPgoJCTxwPlRoaXMgaW5jbHVkZXMg
YSBydWJ5IHRleHQgKHdvcmxkIHdpZGUgd2ViKSBhbmQgYSBydWJ5IGJhc2UgKHd3dyk8L3A+CgkJ
PGgzPkV4cGVjdGVkIHJlc3VsdDwvaDM+CgkJPGltZyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDEvUkVDLXJ1YnktMjAwMTA1MzEvcnVieS1lbi1leC5naWYiIGFsdD0iU2ltcGxlIHJ1Ynkg
dGV4dCBleHBlY3RlZCByZXN1bHQiIC8+CgkJPGgzPkFjdHVhbCByZXN1bHQ8L2gzPgoJCTxydWJ5
PgogIAkJCTxyYj5XV1c8L3JiPgogIAkJCTxydD5Xb3JsZCBXaWRlIFdlYjwvcnQ+CgkJPC9ydWJ5
PgoJCQoJCTxoMj5TaW1wbGUgUnVieSB3aXRoIHBhcmVudGhlc2VzPC9oMj4KCQk8cD5UaGlzIGlu
Y2x1ZGVzIHRoZSBzYW1lIGFzIGFib3ZlLCBidXQgaW5jbHVkZXMgcnVieSBwYXJlbnRoZXNlcyBh
cm91bmQgdGhlIHJ1YnkgdGV4dC4gIFRoZXNlIHBhcmVudGhlc2VzIHNob3VsZCBiZSBpZ25vcmVk
IHdoZW4gcnVieSBjYW4gYmUgcmVuZGVyZWQgYnkgYW4gYWdlbnQuPC9wPgoJCTxoMz5FeHBlY3Rl
ZCByZXN1bHQgKGZvciBhZ2VudHMgdGhhdCBkbyBzdXBwb3J0IHJ1YnkpPC9oMz4KCQk8aW1nIHNy
Yz0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtcnVieS0yMDAxMDUzMS9ydWJ5LWVuLWV4
LmdpZiIgYWx0PSJTaW1wbGUgcnVieSB0ZXh0IHdpdGggcGFyZW50aGVzZXMgZXhwZWN0ZWQgcmVz
dWx0IiAvPgoJCSAgIAoJCTxoMz5FeHBlY3RlZCByZXN1bHQgKGZvciBhZ2VudHMgdGhhdCBkbyBu
b3Qgc3VwcG9ydCBydWJ5KTwvaDM+CgkJPHA+V1dXIChXb3JsZCBXaWRlIFdlYik8L3A+CgkJPGgz
PkFjdHVhbCByZXN1bHQ8L2gzPgoJCTxydWJ5PgogIAkJCTxyYj5XV1c8L3JiPgogIAkJCTxycD4o
PC9ycD48cnQ+V29ybGQgV2lkZSBXZWI8L3J0PjxycD4pPC9ycD4KCQk8L3J1Ynk+CgkJCgkJPGgy
PkNvbXBsZXggUnVieTwvaDI+CgkJPHA+VGhpcyBpbmNsdWRlcyBhIHJ1YnkgYmFzZSBhbG9uZyB3
aXRoIHR3byBydWJ5IHRleHRzLiAgVGhlIGZpcnN0IHJ1YnkgdGV4dCBpcyBzcGxpdCBpbnRvIHRo
cmVlIGNvbXBvbmVudHMgKG1vbnRoLCBkYXkgYW5kIHllYXIpLCB3aGljaCBhcmUgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBvbmVudCBpbiB0aGUgYmFzZSB0ZXh0ICgxMCwg
MzEsIGFuZCAyMDAyKS4gIFRoZSBzZWNvbmQgcnVieSB0ZXh0IGlzIGEgc2luZ2xlIGNvbXBvbmVu
dCBhc3NvY2lhdGVkIHdpdGggdGhlIGVudGlyZSBiYXNlIHRleHQuPC9wPgoJCTxoMz5FeHBlY3Rl
ZCByZXN1bHQ8L2gzPgoJCTx0YWJsZT4KICAJCQk8dGJvZHk+CiAgICAJCQk8dHIgY2xhc3M9InJ0
IiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KICAgICAgCQkJCTx0ZD5Nb250aDwvdGQ+CiAg
ICAgIAkJCQk8dGQ+RGF5PC90ZD4KICAgICAgCQkJCTx0ZD5ZZWFyPC90ZD4KICAgIAkJCTwvdHI+
CiAgICAJCQk8dHIgY2xhc3M9InJiIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KICAgIAkJ
CSAgPHRkPjxzdHJvbmc+MTA8L3N0cm9uZz48L3RkPgogICAgCQkJICA8dGQ+PHN0cm9uZz4zMTwv
c3Ryb25nPjwvdGQ+CiAgICAJCQkgIDx0ZD48c3Ryb25nPjIwMDI8L3N0cm9uZz48L3RkPgogICAg
CQkJPC90cj4KICAgIAkJCTx0ciBjbGFzcz0icnQiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIi
PgogICAgCQkJICA8dGQgY29sc3Bhbj0iMyI+RXhwaXJhdGlvbiBEYXRlPC90ZD4KICAgIAkJCTwv
dHI+CiAgCQkJPC90Ym9keT4KCQk8L3RhYmxlPgoJCQoJCTxoMz5BY3R1YWwgcmVzdWx0PC9oMz4K
CgkJPHJ1Ynk+CiAgCQkJPHJiYz4KICAgIAkJCTxyYj4xMDwvcmI+CiAgICAJCQk8cmI+MzE8L3Ji
PgogICAgCQkJPHJiPjIwMDI8L3JiPgogIAkJCTwvcmJjPgogIAkJCTxydGM+CiAgICAJCQk8cnQ+
TW9udGg8L3J0PgogICAgCQkJPHJ0PkRheTwvcnQ+CiAgICAJCQk8cnQ+WWVhcjwvcnQ+CiAgCQkJ
PC9ydGM+CiAgCQkJPHJ0Yz4KICAgIAkJCTxydCByYnNwYW49IjMiPkV4cGlyYXRpb24gRGF0ZTwv
cnQ+CiAgCQkJPC9ydGM+CgkJPC9ydWJ5PgoJCQoJCQoJPC9ib2R5Pgo8L2h0bWw+Cgk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3285</attachid>
            <date>2005-08-08 14:38:03 -0700</date>
            <delta_ts>2005-08-08 14:38:03 -0700</delta_ts>
            <desc>Some CSS I found which adds ruby support.</desc>
            <filename>ruby.css</filename>
            <type>text/css</type>
            <size>819</size>
            <attacher name="Nicholas Shanks">nickshanks</attacher>
            
              <data encoding="base64">77u/LyogcnVieSBzdXBwb3J0ICov4oCocnVieeKAqHvigKgJZGlzcGxheTogaW5saW5lLXRhYmxl
O+KAqAl0ZXh0LWFsaWduOiBjZW50ZXI74oCoCXdoaXRlLXNwYWNlOiBub3dyYXA74oCoCXRleHQt
aW5kZW50OiAwO+KAqAltYXJnaW46IDA74oCoCXZlcnRpY2FsLWFsaWduOiAtMjAlO+KAqH3igKji
gKgvKiDjg6vjg5Pjg5njg7zjgrkgKi/igKhydWJ5ID4gcmIsIHJ1YnkgPiByYmPigKh74oCoCWRp
c3BsYXk6IHRhYmxlLXJvdy1ncm91cDvigKgJbGluZS1oZWlnaHQ6IDkwJTvigKh94oCo4oCoLyog
5YmN5YG044Or44OT44OG44Kt44K544OIICov4oCocnVieSA+IHJ0LCBydWJ5ID4gcmJjICsgcnRj
4oCoe+KAqAlkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA74oCoCWZvbnQtc2l6ZTogNjAlO+KA
qAlsaW5lLWhlaWdodDogNDAlO+KAqAlsZXR0ZXItc3BhY2luZzogMDvigKh94oCo4oCoLyog5b6M
5YG044Or44OT44OG44Kt44K544OIICov4oCocnVieSA+IHJiYyArIHJ0YyArIHJ0Y+KAqHvigKgJ
ZGlzcGxheTogdGFibGUtZm9vdGVyLWdyb3VwO+KAqAlmb250LXNpemU6IDYwJTvigKgJbGluZS1o
ZWlnaHQ6IDQwJTvigKgJbGV0dGVyLXNwYWNpbmc6IDA74oCofeKAqOKAqC8qIOikh+mbkeODq+OD
k+ODhuOCreOCueODiCAqL+KAqHJiYyA+IHJiLCBydGMgPiBydOKAqHvigKgJZGlzcGxheTogdGFi
bGUtY2VsbDvigKgJbGV0dGVyLXNwYWNpbmc6IDA74oCofeKAqOKAqHJ0YyA+IHJ0W3Jic3Bhbl0g
eyBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uOyB94oCo4oCoLyog44Or44OT5ous5bynICov4oCocnAg
eyBkaXNwbGF5OiBub25lOyB94oCo
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10658</attachid>
            <date>2006-09-19 18:25:37 -0700</date>
            <delta_ts>2006-09-19 18:25:37 -0700</delta_ts>
            <desc>Ruby Test Case with prposed default user agent css</desc>
            <filename>RubyTestCase.html</filename>
            <type>text/html</type>
            <size>3148</size>
            <attacher name="Robert Burns">robburns1</attacher>
            
              <data encoding="base64">77u/PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIgoiaHR0
cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgoKPGh0bWwgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cgk8aGVhZD4KCSAg
ICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9ImFwcGxpY2F0aW9uL3ho
dG1sOyBjaGFyc2V0PXV0Zi04IiAvPgoJICAgIAoJICAgIDxzdHlsZT4KCSAgICAvKiBydWJ5IHN1
cHBvcnQgKi8KcnVieQp7CglkaXNwbGF5OiBpbmxpbmUtdGFibGU7Cgl0ZXh0LWFsaWduOiBjZW50
ZXI7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwoJdGV4dC1pbmRlbnQ6IDA7CgltYXJnaW46IDA7Cgl2
ZXJ0aWNhbC1hbGlnbjogLTIwJTsKfQoKLyog44Or44OT44OZ44O844K5ICovCnJ1YnkgPiByYiwg
cnVieSA+IHJiYwp7CglkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7CglsaW5lLWhlaWdodDogOTAl
Owp9CgovKiDliY3lgbTjg6vjg5Pjg4bjgq3jgrnjg4ggKi8KcnVieSA+IHJ0LCBydWJ5ID4gcmJj
ICsgcnRjCnsKCWRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKCWZvbnQtc2l6ZTogNjAlOwoJ
bGluZS1oZWlnaHQ6IDQwJTsKCWxldHRlci1zcGFjaW5nOiAwOwp9CgovKiDlvozlgbTjg6vjg5Pj
g4bjgq3jgrnjg4ggKi8KcnVieSA+IHJiYyArIHJ0YyArIHJ0Ywp7CglkaXNwbGF5OiB0YWJsZS1m
b290ZXItZ3JvdXA7Cglmb250LXNpemU6IDYwJTsKCWxpbmUtaGVpZ2h0OiA0MCU7CglsZXR0ZXIt
c3BhY2luZzogMDsKfQoKLyog6KSH6ZuR44Or44OT44OG44Kt44K544OIICovCnJiYyA+IHJiLCBy
dGMgPiBydAp7CglkaXNwbGF5OiB0YWJsZS1jZWxsOwoJbGV0dGVyLXNwYWNpbmc6IDA7Cn0KCnJ0
YyA+IHJ0W3Jic3Bhbl0geyBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uOyB9CgovKiDjg6vjg5Pmi6zl
vKcgKi8KcnAgeyBkaXNwbGF5OiBub25lOyB9CgoJICAgIDwvc3R5bGU+Cgk8L2hlYWQ+CgkKCTxi
b2R5PgoJCTxoMT5SdWJ5IHRlc3QgY2FzZXM8L2gxPgoJCQoJCTxoMj5TaW1wbGUgUnVieTwvaDI+
CgkJPHA+VGhpcyBpbmNsdWRlcyBhIHJ1YnkgdGV4dCAod29ybGQgd2lkZSB3ZWIpIGFuZCBhIHJ1
YnkgYmFzZSAod3d3KTwvcD4KCQk8aDM+RXhwZWN0ZWQgcmVzdWx0PC9oMz4KCQk8aW1nIHNyYz0i
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtcnVieS0yMDAxMDUzMS9ydWJ5LWVuLWV4Lmdp
ZiIgYWx0PSJTaW1wbGUgcnVieSB0ZXh0IGV4cGVjdGVkIHJlc3VsdCIgLz4KCQk8aDM+QWN0dWFs
IHJlc3VsdDwvaDM+CgkJPHJ1Ynk+CiAgCQkJPHJiPldXVzwvcmI+CiAgCQkJPHJ0PldvcmxkIFdp
ZGUgV2ViPC9ydD4KCQk8L3J1Ynk+CgkJCgkJPGgyPlNpbXBsZSBSdWJ5IHdpdGggcGFyZW50aGVz
ZXM8L2gyPgoJCTxwPlRoaXMgaW5jbHVkZXMgdGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCBpbmNsdWRl
cyBydWJ5IHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgcnVieSB0ZXh0LiAgVGhlc2UgcGFyZW50aGVz
ZXMgc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBydWJ5IGNhbiBiZSByZW5kZXJlZCBieSBhbiBhZ2Vu
dC48L3A+CgkJPGgzPkV4cGVjdGVkIHJlc3VsdCAoZm9yIGFnZW50cyB0aGF0IGRvIHN1cHBvcnQg
cnVieSk8L2gzPgoJCTxpbWcgc3JjPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1ydWJ5
LTIwMDEwNTMxL3J1YnktZW4tZXguZ2lmIiBhbHQ9IlNpbXBsZSBydWJ5IHRleHQgd2l0aCBwYXJl
bnRoZXNlcyBleHBlY3RlZCByZXN1bHQiIC8+CgkJICAgCgkJPGgzPkV4cGVjdGVkIHJlc3VsdCAo
Zm9yIGFnZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IHJ1YnkpPC9oMz4KCQk8cD5XV1cgKFdvcmxk
IFdpZGUgV2ViKTwvcD4KCQk8aDM+QWN0dWFsIHJlc3VsdDwvaDM+CgkJPHJ1Ynk+CiAgCQkJPHJi
PldXVzwvcmI+CiAgCQkJPHJwPig8L3JwPjxydD5Xb3JsZCBXaWRlIFdlYjwvcnQ+PHJwPik8L3Jw
PgoJCTwvcnVieT4KCQkKCQk8aDI+Q29tcGxleCBSdWJ5PC9oMj4KCQk8cD5UaGlzIGluY2x1ZGVz
IGEgcnVieSBiYXNlIGFsb25nIHdpdGggdHdvIHJ1YnkgdGV4dHMuICBUaGUgZmlyc3QgcnVieSB0
ZXh0IGlzIHNwbGl0IGludG8gdGhyZWUgY29tcG9uZW50cyAobW9udGgsIGRheSBhbmQgeWVhciks
IHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50IGlu
IHRoZSBiYXNlIHRleHQgKDEwLCAzMSwgYW5kIDIwMDIpLiAgVGhlIHNlY29uZCBydWJ5IHRleHQg
aXMgYSBzaW5nbGUgY29tcG9uZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50aXJlIGJhc2UgdGV4
dC48L3A+CgkJPGgzPkV4cGVjdGVkIHJlc3VsdDwvaDM+CgkJPHRhYmxlPgogIAkJCTx0Ym9keT4K
ICAgIAkJCTx0ciBjbGFzcz0icnQiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAJ
CQkJPHRkPk1vbnRoPC90ZD4KICAgICAgCQkJCTx0ZD5EYXk8L3RkPgogICAgICAJCQkJPHRkPlll
YXI8L3RkPgogICAgCQkJPC90cj4KICAgIAkJCTx0ciBjbGFzcz0icmIiIHN0eWxlPSJ0ZXh0LWFs
aWduOiBjZW50ZXIiPgogICAgCQkJICA8dGQ+PHN0cm9uZz4xMDwvc3Ryb25nPjwvdGQ+CiAgICAJ
CQkgIDx0ZD48c3Ryb25nPjMxPC9zdHJvbmc+PC90ZD4KICAgIAkJCSAgPHRkPjxzdHJvbmc+MjAw
Mjwvc3Ryb25nPjwvdGQ+CiAgICAJCQk8L3RyPgogICAgCQkJPHRyIGNsYXNzPSJydCIgc3R5bGU9
InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAJCQkgIDx0ZCBjb2xzcGFuPSIzIj5FeHBpcmF0aW9u
IERhdGU8L3RkPgogICAgCQkJPC90cj4KICAJCQk8L3Rib2R5PgoJCTwvdGFibGU+CgkJCgkJPGgz
PkFjdHVhbCByZXN1bHQ8L2gzPgoKCQk8cnVieT4KICAJCQk8cmJjPgogICAgCQkJPHJiPjEwPC9y
Yj4KICAgIAkJCTxyYj4zMTwvcmI+CiAgICAJCQk8cmI+MjAwMjwvcmI+CiAgCQkJPC9yYmM+CiAg
CQkJPHJ0Yz4KICAgIAkJCTxydD5Nb250aDwvcnQ+CiAgICAJCQk8cnQ+RGF5PC9ydD4KICAgIAkJ
CTxydD5ZZWFyPC9ydD4KICAJCQk8L3J0Yz4KICAJCQk8cnRjPgogICAgCQkJPHJ0IHJic3Bhbj0i
MyI+RXhwaXJhdGlvbiBEYXRlPC9ydD4KICAJCQk8L3J0Yz4KCQk8L3J1Ynk+CgkJCgkJCgk8L2Jv
ZHk+CjwvaHRtbD4KCQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31843</attachid>
            <date>2009-06-25 02:27:15 -0700</date>
            <delta_ts>2009-07-13 02:52:47 -0700</delta_ts>
            <desc>Implmentation for basic HTML5 ruby support</desc>
            <filename>ruby.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="16414"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32654</attachid>
            <date>2009-07-13 02:52:47 -0700</date>
            <delta_ts>2009-07-15 17:51:33 -0700</delta_ts>
            <desc>patch: implementation of minimal HTML5 ruby support</desc>
            <filename>ruby.patch</filename>
            <type>text/plain</type>
            <size>93997</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ1Nzk1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDct
MTMgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBnb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJCUFkZGVkIGZsYWcgRU5BQkxFX1JVQlkg
dG8gZW5hYmxlL2Rpc2FibGUgSFRNTDUgcnVieSBzdXBwb3J0LgorCisgICAgICAgICogY29uZmln
dXJlLmFjOiBBZGRlZCBmbGFnIEVOQUJMRV9SVUJZLgorCiAyMDA5LTA3LTEzICBEcmV3IFdpbHNv
biAgPGF0d2lsc29uQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlndXJlLmFjCShyZXZp
c2lvbiA0NTc4MikKKysrIGNvbmZpZ3VyZS5hYwkod29ya2luZyBjb3B5KQpAQCAtMzUzLDYgKzM1
MywxNCBAQCBBQ19BUkdfRU5BQkxFKGljb25fZGF0YWJhc2UsCiAgICAgICAgICAgICAgIFtdLFtl
bmFibGVfaWNvbl9kYXRhYmFzZT0ieWVzIl0pCiBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2ljb25f
ZGF0YWJhc2VdKQogCisjIGNoZWNrIHdoZXRoZXIgdG8gZW5hYmxlIEhUTUw1IHJ1Ynkgc3VwcG9y
dAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBIVE1MNSBydWJ5IHN1cHBvcnRd
KQorQUNfQVJHX0VOQUJMRShydWJ5LAorICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS1l
bmFibGUtcnVieV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgSFRNTDUg
cnVieSBzdXBwb3J0IFtkZWZhdWx0PXllc11dKSwKKyAgICAgICAgICAgICAgW10sW2VuYWJsZV9y
dWJ5PSJ5ZXMiXSkKK0FDX01TR19SRVNVTFQoWyRlbmFibGVfcnVieV0pCisKICMgY2hlY2sgd2hl
dGhlciB0byBlbmFibGUgSFRNTDUgYXVkaW8vdmlkZW8gc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5H
KFt3aGV0aGVyIHRvIGVuYWJsZSBIVE1MNSB2aWRlbyBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUo
dmlkZW8sCkBAIC02ODAsNiArNjg4LDcgQEAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9YUEFUSF0s
W3Rlc3QgIiRlbgogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9YU0xUXSxbdGVzdCAiJGVuYWJsZV94
c2x0IiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfRklMVEVSU10sW3Rlc3QgIiRl
bmFibGVfZmlsdGVycyIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX0dFT0xPQ0FU
SU9OXSwgW3Rlc3QgIiRlbmFibGVfZ2VvbG9jYXRpb24iID0gInllcyJdKQorQU1fQ09ORElUSU9O
QUwoW0VOQUJMRV9SVUJZXSxbdGVzdCAiJGVuYWJsZV9ydWJ5IiA9ICJ5ZXMiXSkKIEFNX0NPTkRJ
VElPTkFMKFtFTkFCTEVfVklERU9dLFt0ZXN0ICIkZW5hYmxlX3ZpZGVvIiA9ICJ5ZXMiXSkKIEFN
X0NPTkRJVElPTkFMKFtFTkFCTEVfU1ZHXSxbdGVzdCAiJGVuYWJsZV9zdmciID0gInllcyJdKQog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9TVkdfQU5JTUFUSU9OXSxbdGVzdCAiJGVuYWJsZV9zdmdf
YW5pbWF0aW9uIiA9ICJ5ZXMiXSkKQEAgLTcyNyw2ICs3MzYsNyBAQCBGZWF0dXJlczoKICBIVE1M
NSBjaGFubmVsIG1lc3NhZ2luZyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRl
bmFibGVfY2hhbm5lbF9tZXNzYWdpbmcKICBIVE1MNSBjbGllbnQtc2lkZSBzZXNzaW9uIGFuZCBw
ZXJzaXN0ZW50IHN0b3JhZ2Ugc3VwcG9ydCA6ICRlbmFibGVfZG9tX3N0b3JhZ2UKICBIVE1MNSBj
bGllbnQtc2lkZSBkYXRhYmFzZSBzdG9yYWdlIHN1cHBvcnQgICAgICAgICAgICAgICA6ICRlbmFi
bGVfZGF0YWJhc2UKKyBIVE1MNSBydWJ5IHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICRlbmFibGVfcnVieQogIEhUTUw1IHZpZGVvIGVsZW1lbnQgc3VwcG9y
dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV92aWRlbwogIEljb24gZGF0
YWJhc2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJs
ZV9pY29uX2RhdGFiYXNlCiAgU1ZHIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX3N2ZwpJbmRleDogSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
NDU3OTUpCisrKyBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMSBAQAorMjAwOS0wNy0xMyAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwkJQWRk
ZWQgZmxhZyBFTkFCTEVfUlVCWSB0byBlbmFibGUvZGlzYWJsZSBIVE1MNSBydWJ5IHN1cHBvcnQu
CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzogQWRk
ZWQgZmxhZyBFTkFCTEVfUlVCWS4KKwogMjAwOS0wNy0xMyAgRHJldyBXaWxzb24gIDxhdHdpbHNv
bkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDog
SmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMu
eGNjb25maWcJKHJldmlzaW9uIDQ1NzgyKQorKysgSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAgRU5BQkxFX0dFT0xPQ0FUSU9OID0gOwogRU5BQkxFX0lDT05EQVRBQkFTRSA9IEVOQUJMRV9J
Q09OREFUQUJBU0U7CiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUiA9IEVOQUJMRV9KQVZBU0NS
SVBUX0RFQlVHR0VSOwogRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUyA9IEVOQUJMRV9P
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlM7CitFTkFCTEVfUlVCWSA9IEVOQUJMRV9SVUJZOwogRU5B
QkxFX1NWRyA9IEVOQUJMRV9TVkc7CiBFTkFCTEVfU1ZHX0FOSU1BVElPTiA9IEVOQUJMRV9TVkdf
QU5JTUFUSU9OOwogRU5BQkxFX1NWR19BU19JTUFHRSA9IEVOQUJMRV9TVkdfQVNfSU1BR0U7CkBA
IC01Miw0ICs1Myw0IEBAIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVf
WFBBVEggPSBFTkFCTEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFU
VVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVT
U0FHSU5HKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfRE9NX1NUT1JBR0UpICQoRU5BQkxF
X0ZJTFRFUlMpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQo
RU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfQU5JTUFUSU9OKSAkKEVOQUJMRV9TVkdf
QVNfSU1BR0UpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZP
TlRTKSAkKEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QpICQoRU5BQkxFX1NWR19VU0UpICQoRU5B
QkxFX1ZJREVPKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hQQVRI
KSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklO
RykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJM
RV9ET01fU1RPUkFHRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQo
RU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFC
TEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAkKEVOQUJMRV9SVUJZKSAkKEVOQUJMRV9TVkcp
ICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVf
U1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19G
T1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxF
X1dNTCkgJChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOwpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDQ1Nzk1KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNTkgQEAKKzIwMDktMDctMTMgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCQkKKyAgICAgICAgSW1wbGVtZW50
ZWQgYmFzaWMgSFRNTDUgcnVieSBzdXBwb3J0LiAKKwkJKHNlZSBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90ZXh0LWxldmVsLXNlbWFu
dGljcy5odG1sI3RoZS1ydWJ5LWVsZW1lbnQpCisJCQorCQlObyBDU1MzIHJ1YnkgcHJvcGVydGll
cyBvciB2YWx1ZXMgYXJlIGhvbm9yZWQuCisJCVRoZSBDU1MzIGJveCBtb2RlbCBpcyBob25vcmVk
IGluIGEgcnVkaW1lbnRhcnkgd2F5IAorCQkoYm9yZGVycyBhbmQgcGFkZGluZyBzdXJyb3VuZCB0
aGUgd2hvbGUgPHJ1Ynk+IGVsZW1lbnQ+LgorCQkKKwkJUnVieSBpcyByZW5kZXJlZCBpZiBhIDxy
dWJ5PiBIVE1MIHRhZyBpcyBlbmNvdW50ZXJlZC4KKwkJQ1NTMyBkaXNwbGF5IHZhbHVlcyAoJ3J1
YnknLCAncnVieS1iYXNlJywgZXRjLikgYXJlIG5vdCB1c2VkLiAKKwkJVGhlIG5vcm1hbCBib3gg
bW9kZWwgaXMgYXMgZm9sbG93cyAod2l0aCB0aGVpciBkaXNwbGF5IGFuYWxvZ3kgaW4gYnJhY2tl
dHMpOgorCQkKKwkJUmVuZGVyUnVieUFzSW5saW5lKikgKGlubGluZSkvUmVuZGVyUnVieUFzQmxv
Y2sqKSAoYmxvY2spCisJCQkxKyBSZW5kZXJSdWJ5UnVuIChpbmxpbmUtYmxvY2spCisJCQkJMSBS
ZW5kZXJSdWJ5QmFzZShibG9jaykKKwkJCQkJMSsgdGV4dCBhbmQvb3IgaW5saW5lIG9iamVjdHMK
KwkJCQkwLTIqKikgUmVuZGVyUnVieVRleHQoYmxvY2spCisJCQkJCTErIHRleHQgYW5kL29yIGlu
bGluZSBvYmplY3RzCisJCQkJCQorCQlPdGhlciBvYmplY3RzIGFyZSB3cmFwcGVkIGFzIG5lY2Vz
c2FyeSBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGlzIHRyZWUgc3RydWN0dXJlLgorCisJCSopIHJ1
YnkgaXMgbm9ybWFsbHkgYW4gaW5saW5lIG9iamVjdHMsIGFuZCB0aHVzIHdpbGwgYmUgcmVwcmVz
ZW50ZWQgYnkgUmVuZGVyUnVieUFzSW5saW5lLgorCQlIb3dldmVyLCB3aGVuIHRoZSBydWJ5IGVs
ZW1lbnQgaXRzZWxmIGlzIGZsb2F0ZWQgb3IgcG9zaXRpb25lZCwgUmVuZGVyUnVieUFzQmxvY2sg
d2lsbCBiZSB1c2VkLgorCisJCSoqKUEgMm5kIDxydD4gZm9yIGEgZ2l2ZW4gYmFzZSBjdXJyZW50
bHkgaXMgYWxsb3dlZCBhbmQgd2lsbCByZW5kZXIgYmVsb3cgdGhlIGJhc2UuCisJCU5vdGUgdGhh
dCB0aGlzIGlzbid0IHRlc3RlZCBmb3IgaW4gdGhlIGxheW91dCB0ZXN0cywgYXMgdGhpcyBmZWF0
dXJlIG1heSBiZSBjb250cm92ZXJzaWFsLgorCQkKKwkJVGhlIG1haW4gbG9naWMgaXMgY29udGFp
bmVkIGluIFJlbmRlclJ1YnlSdW4gYW5kIFJ1YnlJbmxpbmVGbG93Qm94LgorCQkKKwkJUmVuZGVy
UnVieUFzSW5saW5lL1JlbmRlclJ1YnlBc0Jsb2NrIGFyZSByYXRoZXIgc2ltcGxlIHN1Yi1jbGFz
c2VzIHRoYXQgbWFpbmx5IGRvIHNwZWNpYWwgY2hpbGQgaGFuZGxpbmcuCisJCVJlbmRlclJ1YnlS
dW4gc3ViY2xhc3NlcyBhbmQgcmUtdXNlcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBSZW5kZXJCbG9j
ayBmb3IgbGF5b3V0aW5nLgorCQlSZW5kZXJSdWJ5QmFzZSBhbmQgUmVuZGVyUnVieVRleHQgYXJl
IHNpbXBsZSBzdWJjbGFzc2VzIG9mIFJlbmRlckJsb2NrIHRoYXQgb25seSBkbyBzcGVjaWFsIGNo
aWxkIGhhbmRsaW5nLgkJCisJCVJ1YnlJbmxpbmVGbG93Qm94IGlzIGEgc3ViY2xhc3Mgb2YgSW5s
aW5lRkxvd0JveCBhbmQgZG9lcyB0aGUgYm9yZGVyIGFuZCBwYWRkaW5nIGhhbmRsaW5nIAorCQlm
b3IgdGhlIHdob2xlIDxydWJ5PiBlbGVtZW50IGFuZCBpdHMgY29udGVudHMuCisJCVJvdWJ5Um9v
dElubGluZUJveCBpcyBhIHNpbWlsYXIgc3ViY2xhc3MgdG8gUm9vdElubGluZUJveCwgYnV0IGFz
IGl0cyB1c2VkIG9ubHkgaW4gYmxvY2sKKwkJbGF5b3V0aW5nLCBpdCBvbmx5IG5lZWRzIHRvIG92
ZXJyaWRlIGEgc2luZ2xlIGluZm9ybWF0aW9uIG1ldGhvZCBpc1J1YnkoKS4gCisKKyAgICAgICAg
VG8gbGltaXQgdGhlIHNpemUgb2YgdGhlIHBhdGNoLCB0ZXN0cyBhcmUgY29udGFpbmVkIGluIGEg
c2VwYXJhdGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgCisgICAgICAgIFRlc3RzOiBmYXN0L3J1Ynkv
cnVieS1sZW5ndGgtYm9yZGVyLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LWxl
bmd0aC5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieS1ydW4tYnJlYWstYm9yZGVy
Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXJ1bi1icmVhay5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L3J1YnkvcnVieS1ydW5zLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
cnVieS9ydWJ5LXNpbXBsZS1ycC5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieS1z
aW1wbGUuaHRtbAorCisgICAgICAgIENvbmZpZ3VyYXRpb24gZmlsZSBjaGFuZ2VzIChtYWlubHkg
YWRkIEVOQUJMRV9SVUJZIGZsYWcpOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KTogbG9hZGluZyBvZiBl
eHRyYSBzdHlsZXNoZWV0IGZvciBydWJ5CisgICAgICAgIAorICAgICAgICAqIGNzcy9ydWJ5LmNz
czogQWRkZWQuICBEZWZhdWx0IHN0eWxlc2hlZXQgZm9yIHJ1YnkgZWxlbWVudHMKKyAgICAgICAg
CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lQm94Ojppc1J1YnkpOiBxdWVyeSBtZXRob2QKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJv
eDo6YmFzZWxpbmVQb3NpdGlvbik6IHZpcnR1YWwgd2hlbiBFTkFCTEVfUlVCWSBpcyBzZXQsIG92
ZXJyaWRkZW4gYnkgcnVieSAKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6bGluZUhlaWdo
dCk6IHZpcnR1YWwgd2hlbiBFTkFCTEVfUlVCWSBpcyBzZXQsIG92ZXJyaWRkZW4gYnkgcnVieSAK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6IAorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHkpOiBhZGFwdCBib3ggcGxhY2Vt
ZW50IGZvciBydWJ5IGlubGluZSBmbG93IGJveGVzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHA6IAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpcnN0Q2hpbGRC
b3hJbkxheW91dE9yZGVyKTogaGFuZGxlIG9yZGVyIGluIHdoaWNoIGJsb2NrIGJveGVzIGFyZSBz
dGFja2VkLCBvdmVycmlkZGVuIGJ5IHJ1YnkgCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bmV4dENoaWxkQm94SW5MYXlvdXRPcmRlcik6IGhhbmRsZSBvcmRlciBpbiB3aGljaCBibG9j
ayBib3hlcyBhcmUgc3RhY2tlZCwgb3ZlcnJpZGRlbiBieSBydWJ5CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbik6IG1ha2UgdXNlIG9mIGFib3ZlIG1l
dGhvZHMKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
Y3JlYXRlT2JqZWN0KTogY3JlYXRpb24gb2YgcnVieSByZW5kZXJlcnMKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omlz
UnVieSk6IGluZm9ybWF0aW9uIG1ldGhvZCBhZGRlZAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0Ojppc1J1YnlSdW4pOiBpbmZvcm1hdGlvbiBtZXRob2QgYWRkZWQgCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUnVieUJhc2UpOiBpbmZvcm1hdGlvbiBtZXRob2QgYWRk
ZWQKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSdWJ5VGV4dCk6IGluZm9ybWF0
aW9uIG1ldGhvZCBhZGRlZAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OlJlbmRlclJ1YnlBc0lu
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6On5SZW5kZXJSdWJ5
QXNJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjppc0NoaWxk
QWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OmFkZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6Y3JlYXRlQW5vbnltb3Vz
UnVieVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OmNyZWF0ZUlu
bGluZUZsb3dCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6OlJlbmRl
clJ1YnlBc0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjp+UmVu
ZGVyUnVieUFzQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6Omlz
Q2hpbGRBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjphZGRD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6Y3JlYXRlQW5vbnlt
b3VzUnVieVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6Y3JlYXRl
Um9vdElubGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnkuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OnJlbmRlck5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjppc1J1YnkpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUnVieUFzQmxvY2s6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUnVieUFzQmxvY2s6OmlzUnVieSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5
QXNCbG9jazo6c2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUnVieUJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlC
YXNlOjpSZW5kZXJSdWJ5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6
flJlbmRlclJ1YnlCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjppc0No
aWxkQWxsb3dlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6OnJlbmRlck5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6OmlzUnVieUJhc2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJSdWJ5UnVuLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
dWJ5UnVuOjpSZW5kZXJSdWJ5UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46
On5SZW5kZXJSdWJ5UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46Omhhc1J1
YnlCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46Om51bWJlck9mUnVieVRl
eHRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmJhc2VsaW5lUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6Zmlyc3RMaW5lQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6dXBkYXRlRmlyc3RMZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aXNDaGlsZEFsbG93ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UnVieVJ1bjo6Zmlyc3RDaGlsZEJveEluTGF5b3V0T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUnVieVJ1bjo6bmV4dENoaWxkQm94SW5MYXlvdXRPcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5UnVuOjplZmZlY3RpdmVSdWJ5UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUnVieVJ1bjo6Z2V0UnVieUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUnVieVJ1bjo6Z2V0Rmlyc3RSdWJ5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
dWJ5UnVuOjpnZXRMYXN0UnVieVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1
bjo6Y3JlYXRlQW5vbnltb3VzUnVieUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVi
eVJ1bjo6Y3JlYXRlQW5vbnltb3VzUnVieVRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJSdWJ5UnVuLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6cmVu
ZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjppc1J1YnlSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aXNJbmxpbmVCbG9ja09ySW5saW5lVGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6c2hvdWxkUGFpbnRTZWxlY3Rp
b25HYXBzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlUZXh0OjpSZW5kZXJSdWJ5VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5VGV4dDo6flJlbmRlclJ1YnlUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlUZXh0Ojppc0NoaWxkQWxsb3dlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclJ1YnlUZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UnVieVRleHQ6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVRleHQ6
OmlzUnVieVRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmV4dHJhUnVieVN0eWxlU2hlZXQpOiBleHRyYSBzdHls
ZXNoZWV0IGZvciBydWJ5IAorICAgICAgICAqIHJlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVieUlubGluZUZsb3dCb3g6OlJ1YnlJbmxp
bmVGbG93Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1YnlJbmxpbmVGbG93Qm94Ojp2aXJ0dWFs
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1YnlJbmxpbmVGbG93Qm94OjpiYXNlbGluZVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1YnlJbmxpbmVGbG93Qm94Ojpjb21wdXRlSGVp
Z2h0QW5kQmFzZWxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJ1YnlJbmxpbmVGbG93Qm94Ojppc1J1YnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVieUlubGluZUZsb3dCb3g6OmxpbmVIZWlnaHQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SdWJ5Um9vdElubGluZUJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UnVieVJvb3RJbmxpbmVCb3g6OlJ1YnlSb290SW5saW5lQm94KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUnVieVJvb3RJbmxpbmVCb3guaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
dWJ5Um9vdElubGluZUJveDo6aXNSdWJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisKIDIwMDktMDctMTMg
IERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDQ1NzgyKQorKysg
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsNiArNTIz
LDEwIEBAIFhQYXRoR3JhbW1hci5jcHAgOiB4bWwvWFBhdGhHcmFtbWFyLnkgJCgKIAogVVNFUl9B
R0VOVF9TVFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sLmNzcyAkKFdlYkNvcmUpL2Nz
cy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3NzL3ZpZXctc291cmNlLmNzcyAkKFdlYkNvcmUpL2Nz
cy90aGVtZVdpbi5jc3MgJChXZWJDb3JlKS9jc3MvdGhlbWVXaW5RdWlya3MuY3NzIAogCitpZmVx
ICgkKGZpbmRzdHJpbmcgRU5BQkxFX1JVQlksJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1JV
QlkpCisgICAgVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMgOj0gJChVU0VSX0FHRU5UX1NUWUxFX1NI
RUVUUykgJChXZWJDb3JlKS9jc3MvcnVieS5jc3MgCitlbmRpZgorCiBpZmVxICgkKGZpbmRzdHJp
bmcgRU5BQkxFX1NWRywkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfU1ZHKQogICAgIFVTRVJf
QUdFTlRfU1RZTEVfU0hFRVRTIDo9ICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpICQoV2ViQ29y
ZSkvY3NzL3N2Zy5jc3MgCiBlbmRpZgpAQCAtNTU4LDYgKzU2MiwxMCBAQCBpZmVxICgkKGZpbmRz
dHJpbmcgRU5BQkxFX1ZJREVPLCQoRkVBVFVSCiAgICAgSFRNTF9GTEFHUyA6PSAkKEhUTUxfRkxB
R1MpIEVOQUJMRV9WSURFTz0xCiBlbmRpZgogCitpZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1JV
QlksJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1JVQlkpCisgICAgSFRNTF9GTEFHUyA6PSAk
KEhUTUxfRkxBR1MpIEVOQUJMRV9SVUJZPTEKK2VuZGlmCisKIGlmZGVmIEhUTUxfRkxBR1MKIAog
SFRNTEVsZW1lbnRGYWN0b3J5LmNwcCBIVE1MTmFtZXMuY3BwIDogZG9tL21ha2VfbmFtZXMucGwg
aHRtbC9IVE1MVGFnTmFtZXMuaW4gaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KSW5kZXg6IFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjA3LDYgKzIyMDcsMzAgQEAgd2ViY29yZV9saWJhZGQgKz0gXAogZW5kaWYgIyBF
TkQgRU5BQkxFX1ZJREVPCiAKICMgLS0tLQorIyBSdWJ5IFN1cHBvcnQKKyMgLS0tLQoraWYgRU5B
QkxFX1JVQlkKKworSFRNTF9GRUFUVVJFUyArPSBFTkFCTEVfUlVCWT0xCit3ZWJjb3JlX2NwcGZs
YWdzICs9IC1ERU5BQkxFX1JVQlk9MQorCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
LmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcCBcCisJV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVi
eVJ1bi5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCBcCisJV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5VGV4dC5oIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5jcHAg
XAorCVdlYkNvcmUvcmVuZGVyaW5nL1J1YnlJbmxpbmVGbG93Qm94LmggXAorCVdlYkNvcmUvcmVu
ZGVyaW5nL1J1YnlSb290SW5saW5lQm94LmNwcCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvUnVieVJv
b3RJbmxpbmVCb3guaAorCitlbmRpZiAjIEVORCBFTkFCTEVfUlVCWQorCisjIC0tLS0KICMgWFBh
dGggU3VwcG9ydAogIyAtLS0tCiBpZiBFTkFCTEVfWFBBVEgKQEAgLTMxMjgsNiArMzE1MiwxMyBA
QCBVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9IFwKIAkkKFdlYkNvcmUpL2Nzcy93bWwuY3NzIFwK
IAkkKFdlYkNvcmUpL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwogCitpZiBFTkFCTEVfUlVCWQorIyBO
b3RlOiBydWJ5LmNzcyBzZXRzIDxycD4gZGlzcGxheTpub25lLCB3aGljaCB3ZSBkb24ndCB3YW50
IGlmIHJ1YnkgaXNuJ3QsIGluIGZhY3QsIGVuYWJsZWQKK1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRT
ICs9IFwKKwkkKFdlYkNvcmUpL2Nzcy9ydWJ5LmNzcworZW5kaWYgIyBFTkQgRU5BQkxFX1JVQlkK
KwkKKwogIyBuZXctc3R5bGUgSmF2YVNjcmlwdCBiaW5kaW5ncwogU0NSSVBUU19CSU5ESU5HUyA9
IFwKIAkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBcCkBAIC0z
MjcyLDYgKzMzMDMsMTMgQEAgd2ViY29yZV9kaXN0ICs9IFwKIAlXZWJDb3JlL3htbC94bWxhdHRy
cy5pbiBcCiAJV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKIAoraWYgRU5BQkxFX1JVQlkKKyMg
Tm90ZTogcnVieS5jc3Mgc2V0cyA8cnA+IGRpc3BsYXk6bm9uZSwgd2hpY2ggd2UgZG9uJ3Qgd2Fu
dCBpZiBydWJ5IGlzbid0LCBpbiBmYWN0LCBlbmFibGVkCit3ZWJjb3JlX2Rpc3QgKz0gXAorCVdl
YkNvcmUvY3NzL3J1YnkuY3NzCitlbmRpZiAjIEVORCBFTkFCTEVfUlVCWQorCQorCiAjIEluc3Rh
bGxpbmcgd2ViIGluc3BlY3RvciBmaWxlcwogd2ViaW5zcGVjdG9yZGlyID0gJHtkYXRhZGlyfS93
ZWJraXQtMS4wL3dlYmluc3BlY3RvcgogZGlzdF93ZWJpbnNwZWN0b3JfREFUQSA9IFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiA0NTc4MikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzQ3LDYgKzI3NDcsMTQgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyUnVieS5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5
LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAnLAorICAgICAg
ICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5oJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyUnVieVJ1bi5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5
UnVuLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5jcHAnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVy
U1ZHQmxvY2suaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5j
cHAnLApAQCAtMjgzMiw2ICsyODQwLDEwIEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRl
cldvcmRCcmVhay5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SdWJ5SW5saW5lRmxvd0JveC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUnVieVJvb3RJ
bmxpbmVCb3guY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUnVieVJvb3RJbmxpbmVCb3gu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCcsCiAgICAgICAg
ICAgICAncmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ1NzgyKQorKysg
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw5IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9TSU5HTEVfVEhSRUFERUQKICAgICBERUZJTkVTICs9IEVO
QUJMRV9TVkdfRk9OVFM9MCBFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUPTAgRU5BQkxFX1NWR19B
TklNQVRJT049MCBFTkFCTEVfU1ZHX0FTX0lNQUdFPTAgRU5BQkxFX1NWR19VU0U9MAogfQogCisj
IEhUTUw1IHJ1Ynkgc3VwcG9ydAorIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9SVUJZPS4pOiBE
RUZJTkVTICs9IEVOQUJMRV9SVUJZPTEKKwogIyBIVE1MNSBtZWRpYSBzdXBwb3J0CiAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPS4pIHsKICAgICBjb250YWlucyhRVF9DT05GSUcsIHBo
b25vbik6REVGSU5FUyArPSBFTkFCTEVfVklERU89MQpAQCAtMTQ4MCw2ICsxNDgzLDE5IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKIH0KIAorY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX1JVQlk9MSkgeworCVNUWUxFU0hFRVRTX0VNQkVEICs9IFwKKwkJJCRQV0QvY3Nz
L3J1YnkuY3NzCisKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgcmVuZGVyaW5nL1JlbmRlclJ1
YnkuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcCBcCisgICAgICAg
IHJlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9SZW5kZXJS
dWJ5VGV4dC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvUnVieUlubGluZUZsb3dCb3guY3BwIFwK
KyAgICAgICAgcmVuZGVyaW5nL1J1YnlSb290SW5saW5lQm94LmNwcAorfQorCiBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfWFBBVEg9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBU
ICs9IEVOQUJMRV9YUEFUSD0xCiAKSW5kZXg6IFdlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVy
ZURlZmluZXMueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL0NvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQg
KzEsNSBAQAogLy8gQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MSw3IEBAIEVO
QUJMRV9HRU9MT0NBVElPTiA9IDsKIEVOQUJMRV9JQ09OREFUQUJBU0UgPSBFTkFCTEVfSUNPTkRB
VEFCQVNFOwogRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIgPSBFTkFCTEVfSkFWQVNDUklQVF9E
RUJVR0dFUjsKIEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMgPSBFTkFCTEVfT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TOworRU5BQkxFX1JVQlkgPSBFTkFCTEVfUlVCWTsKIEVOQUJMRV9T
VkcgPSBFTkFCTEVfU1ZHOwogRU5BQkxFX1NWR19BTklNQVRJT04gPSBFTkFCTEVfU1ZHX0FOSU1B
VElPTjsKIEVOQUJMRV9TVkdfQVNfSU1BR0UgPSBFTkFCTEVfU1ZHX0FTX0lNQUdFOwpAQCAtNTMs
NCArNTUsNCBAQCBFTkFCTEVfV09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hQQVRI
ID0gRU5BQkxFX1hQQVRIOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9E
RUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lO
RykgJChFTkFCTEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9ET01fU1RP
UkFHRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0lD
T05EQVRBQkFTRSkgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04p
ICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAk
KEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVf
U1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dNTCkgJChFTkFCTEVfV09SS0VSUykg
JChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFC
TEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfREFU
QUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9ET01fU1RPUkFHRSkgJChFTkFCTEVf
RklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKSAkKEVOQUJMRV9SVUJZKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04p
ICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAk
KEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVf
U1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dNTCkgJChFTkFCTEVfV09SS0VSUykg
JChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ1NzgyKQorKysgV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsx
ODQsMTkgQEAKIAkJMTQyMDExQjcwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQy
MDExQjUwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovOyB9Owog
CQkxNDMyRTg0NzBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMyRTg0NjBDNTE0OTM4MDBCMTUw
MEYgLyogR0NDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQzMkU4NDkwQzUxNDkzRjAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMyRTg0
ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMTQzM0MzNDAx
MDBCMEY2RTAwNEQ2MzFDIC8qIHJ1YnkuY3NzIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMzQzMzRjEwMEIwRjZFMDA0RDYzMUMgLyogcnVieS5jc3Mg
Ki87IH07CisJCTE0MzNDMzQ5MTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MzNDMzQxMTAwQjBG
QUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5LmNwcCAqLzsgfTsKKwkJMTQzM0MzNEExMDBCMEZBQzAw
NEQ2MzFDIC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MzNDMzQyMTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5LmggKi87
IH07CisJCTE0MzNDMzRCMTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5QmFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMzQzM0MzEwMEIw
RkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieUJhc2UuY3BwICovOyB9OworCQkxNDMzQzM0QzEwMEIw
RkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MzNDMzQ0MTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJS
dWJ5QmFzZS5oICovOyB9OworCQkxNDMzQzM0RDEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVi
eVJ1bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDMzQzM0NTEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieVJ1bi5jcHAgKi87IH07CisJCTE0
MzNDMzRFMTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5UnVuLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMzQzM0NjEwMEIwRkFDMDA0RDYzMUMg
LyogUmVuZGVyUnVieVJ1bi5oICovOyB9OworCQkxNDMzQzM0RjEwMEIwRkFDMDA0RDYzMUMgLyog
UmVuZGVyUnVieVRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQzM0MzNDcxMDBCMEZBQzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnlUZXh0LmNwcCAq
LzsgfTsKKwkJMTQzM0MzNTAxMDBCMEZBQzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnlUZXh0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMzQzM0ODEwMEIw
RkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieVRleHQuaCAqLzsgfTsKKwkJMTQzM0MzNTUxMDBCMEZC
QjAwNEQ2MzFDIC8qIFJ1YnlJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MzNDMzUxMTAwQjBGQkIwMDRENjMxQyAvKiBSdWJ5
SW5saW5lRmxvd0JveC5jcHAgKi87IH07CisJCTE0MzNDMzU2MTAwQjBGQkIwMDRENjMxQyAvKiBS
dWJ5SW5saW5lRmxvd0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQzM0MzNTIxMDBCMEZCQjAwNEQ2MzFDIC8qIFJ1YnlJbmxpbmVGbG93Qm94Lmgg
Ki87IH07CisJCTE0MzNDMzU3MTAwQjBGQkIwMDRENjMxQyAvKiBSdWJ5Um9vdElubGluZUJveC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMzQzM1
MzEwMEIwRkJCMDA0RDYzMUMgLyogUnVieVJvb3RJbmxpbmVCb3guY3BwICovOyB9OworCQkxNDMz
QzM1ODEwMEIwRkJCMDA0RDYzMUMgLyogUnVieVJvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MzNDMzU0MTAwQjBGQkIwMDRENjMx
QyAvKiBSdWJ5Um9vdElubGluZUJveC5oICovOyB9OwogCQkxNDc3RTc3NjBCRjQxMzRBMDAxNTI4
NzIgLyogUGFnZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwICovOyB9
OwogCQkxNDc3RTc3NzBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc3RTc3NTBCRjQxMzRBMDAxNTI4
NzIgLyogUGFnZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMTQ4QUZEQTUwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDhBRkRB
MzBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTA4NSw2ICs1MDk4LDE5IEBACiAJ
CTE0MjAxMUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDMyRTg0NjBDNTE0OTM4MDBCMTUwMEYgLyog
R0NDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0NvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzMkU4NDgwQzUxNDkzRjAw
QjE1MDBGIC8qIEdDQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR0NDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTQzM0MzM0YxMDBCMEY2RTAwNEQ2MzFDIC8qIHJ1YnkuY3NzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7
IHBhdGggPSBydWJ5LmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQzM0MzNDEx
MDBCMEZBQzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0MzNDMzQyMTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1YnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTQzM0MzNDMxMDBCMEZBQzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnlCYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlCYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQzM0MzNDQxMDBCMEZBQzAwNEQ2MzFDIC8q
IFJlbmRlclJ1YnlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clJ1YnlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MzNDMzQ1MTAwQjBG
QUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNDMzQzM0NjEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieVJ1bi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJSdWJ5UnVuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0MzNDMzQ3MTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5VGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJSdWJ5VGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MzNDMzQ4MTAwQjBGQUMwMDRE
NjMxQyAvKiBSZW5kZXJSdWJ5VGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJSdWJ5VGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDMzQzM1
MTEwMEIwRkJCMDA0RDYzMUMgLyogUnVieUlubGluZUZsb3dCb3guY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVieUlubGluZUZsb3dCb3guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNDMzQzM1MjEwMEIwRkJCMDA0RDYzMUMgLyogUnVieUlubGlu
ZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVieUlubGluZUZs
b3dCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQzM0MzNTMxMDBCMEZCQjAw
NEQ2MzFDIC8qIFJ1YnlSb290SW5saW5lQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJ1YnlSb290SW5saW5lQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTQzM0MzNTQxMDBCMEZCQjAwNEQ2MzFDIC8qIFJ1YnlSb290SW5saW5lQm94Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1YnlSb290SW5saW5lQm94Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBQ
YWdlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VD
YWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzdFNzc1MEJGNDEzNEEw
MDE1Mjg3MiAvKiBQYWdlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgxM0JGMzA5RURG
ODhFMDBGNzU3RTEgLyogSURMUGFyc2VyLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7
IG5hbWUgPSBJRExQYXJzZXIucG07IHBhdGggPSBzY3JpcHRzL0lETFBhcnNlci5wbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MjI0LDYgKzE0MjUwLDcgQEAKIAkJCQlCQzQzNjhF
NzBDMjI2RTMyMDA1RUZCNUYgLyogUmVjdC5oICovLAogCQkJCUE4MEU3OTk2MEExOUJEMjEwMDdG
QjhDNSAvKiBSZWN0LmlkbCAqLywKIAkJCQk4NThDMzhFRjBBQThGREQxMDBCMTg3QTQgLyogUkdC
Q29sb3IuaWRsICovLAorCQkJCTE0MzNDMzNGMTAwQjBGNkUwMDRENjMxQyAvKiBydWJ5LmNzcyAq
LywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUuY3BwICovLAog
CQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oICovLAogCQkJCUE4
MEU3MzRDMEExOTlDNzcwMDdGQjhDNSAvKiBTdHlsZUJhc2UuY3BwICovLApAQCAtMTQzNjgsNiAr
MTQzOTUsMTQgQEAKIAkJCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFj
ZWQuaCAqLywKIAkJCQlCQ0E4NDZENDBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5j
cHAgKi8sCiAJCQkJQkNBODQ2RDUwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuaCAq
LywKKwkJCQkxNDMzQzM0MTEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieS5jcHAgKi8sCisJ
CQkJMTQzM0MzNDIxMDBCMEZBQzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnkuaCAqLywKKwkJCQkxNDMz
QzM0MzEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieUJhc2UuY3BwICovLAorCQkJCTE0MzND
MzQ0MTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5QmFzZS5oICovLAorCQkJCTE0MzNDMzQ1
MTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5UnVuLmNwcCAqLywKKwkJCQkxNDMzQzM0NjEw
MEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieVJ1bi5oICovLAorCQkJCTE0MzNDMzQ3MTAwQjBG
QUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi8sCisJCQkJMTQzM0MzNDgxMDBCMEZB
QzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnlUZXh0LmggKi8sCiAJCQkJQkMzQkU5OTAwRTlDMUM3QzAw
ODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgKi8sCiAJCQkJQkMzQkU5OTEwRTlDMUM3QzAw
ODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5oICovLAogCQkJCUJDM0JFOUFBMEU5QzI0MjAwMDgz
NTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCAqLywKQEAgLTE0NDQxLDYgKzE0NDc2LDEw
IEBACiAJCQkJOTM3OTlFRjcwQkYyNzQzNjAwRDBGMjMwIC8qIFJlbmRlcldvcmRCcmVhay5oICov
LAogCQkJCUE4Q0ZGNUUwMEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmNwcCAqLywK
IAkJCQlBOENGRjVEQTBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAorCQkJ
CTE0MzNDMzUxMTAwQjBGQkIwMDRENjMxQyAvKiBSdWJ5SW5saW5lRmxvd0JveC5jcHAgKi8sCisJ
CQkJMTQzM0MzNTIxMDBCMEZCQjAwNEQ2MzFDIC8qIFJ1YnlJbmxpbmVGbG93Qm94LmggKi8sCisJ
CQkJMTQzM0MzNTMxMDBCMEZCQjAwNEQ2MzFDIC8qIFJ1YnlSb290SW5saW5lQm94LmNwcCAqLywK
KwkJCQkxNDMzQzM1NDEwMEIwRkJCMDA0RDYzMUMgLyogUnVieVJvb3RJbmxpbmVCb3guaCAqLywK
IAkJCQk1RDkyNUI2NTBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuY3BwICovLAog
CQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxCZWhhdmlvci5oICovLAogCQkJ
CUIyQjMzQTVEMEI4ODdDRUYwMEMxNTk4NCAvKiBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcCAq
LywKQEAgLTE2OTY1LDYgKzE3MDA0LDEyIEBACiAJCQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJD
IC8qIFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIw
MDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3
MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDMz
QzM0QTEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MTQzM0MzNEMxMDBCMEZBQzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnlCYXNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkxNDMzQzM0RTEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieVJ1bi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTQzM0MzNTAxMDBCMEZBQzAwNEQ2MzFDIC8qIFJlbmRlclJ1YnlUZXh0
LmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDMzQzM1NjEwMEIwRkJCMDA0RDYzMUMgLyogUnVieUlu
bGluZUZsb3dCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MzNDMzU4MTAwQjBGQkIwMDRENjMx
QyAvKiBSdWJ5Um9vdElubGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzA3NCw2ICsxNzEx
OSw3IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNpemVDdXJzb3Iu
cG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9v
bUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5
RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKKwkJCQkxNDMzQzM0MDEw
MEIwRjZFMDA0RDYzMUMgLyogcnVieS5jc3MgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg5ODcsNiAr
MTkwMzMsMTIgQEAKIAkJCQk5M0YxOUIwNDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVD
RjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MzNDMzQ5MTAwQjBG
QUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MzNDMzRC
MTAwQjBGQUMwMDRENjMxQyAvKiBSZW5kZXJSdWJ5QmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkxNDMzQzM0RDEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieVJ1bi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxNDMzQzM0RjEwMEIwRkFDMDA0RDYzMUMgLyogUmVuZGVyUnVieVRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMTQzM0MzNTUxMDBCMEZCQjAwNEQ2MzFDIC8qIFJ1YnlJbmxp
bmVGbG93Qm94LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0MzNDMzU3MTAwQjBGQkIwMDRENjMx
QyAvKiBSdWJ5Um9vdElubGluZUJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA0NTc4MikKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEx
NDUsNiArMTE0NiwxNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9y
CiAgICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUlVCWSkKKyAgICBzdGF0aWMgYm9vbCBsb2Fk
ZWRSdWJ5U3R5bGVTaGVldDsKKyAgICBpZiAoIWxvYWRlZFJ1YnlTdHlsZVNoZWV0ICYmIChlLT5o
YXNUYWdOYW1lKHJ1YnlUYWcpIHx8IGUtPmhhc1RhZ05hbWUocnBUYWcpIHx8IGUtPmhhc1RhZ05h
bWUocnRUYWcpKSkgeworICAgICAgICBsb2FkZWRSdWJ5U3R5bGVTaGVldCA9IHRydWU7CisgICAg
ICAgIFN0cmluZyBydWJ5UnVsZXMgPSBTdHJpbmcocnVieVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZihydWJ5VXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5leHRyYVJ1YnlTdHlsZVNoZWV0KCk7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIHJ1YnlT
aGVldCA9IHBhcnNlVUFTaGVldChydWJ5UnVsZXMpOworICAgICAgICBkZWZhdWx0U3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KHJ1YnlTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVs
dFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHJ1YnlTaGVldCwgcHJpbnRFdmFsKCkpOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgaW50IGZpcnN0VUFSdWxlID0gLTEsIGxhc3RVQVJ1bGUgPSAt
MTsKICAgICBpbnQgZmlyc3RVc2VyUnVsZSA9IC0xLCBsYXN0VXNlclJ1bGUgPSAtMTsKICAgICBp
bnQgZmlyc3RBdXRob3JSdWxlID0gLTEsIGxhc3RBdXRob3JSdWxlID0gLTE7CkluZGV4OiBXZWJD
b3JlL2Nzcy9ydWJ5LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9ydWJ5LmNzcwkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL3J1YnkuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKy8qIHJ1YnkgSFRNTCBlbGVtZW50cyAqLworCitydWJ5IHsKKyAgICBkaXNwbGF5OiBpbmxp
bmU7Cit9CisKK3J0IHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKK3J1YnkgPiBy
dCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9udC1zaXplOiA2MCU7ICAgICAgICAgLyog
bWFrZSBzbGlnaHRseSBsYXJnZXIgdGhhbiA1MCUgZm9yIGJldHRlciByZWFkYWJpbGl0eSAqLwor
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworcnVieSA+IHJwIHsKKyAgICBkaXNwbGF5OiBu
b25lOworfQorCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gNDU3ODIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEz
Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVGbG93Qm94KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVUZXh0Qm94KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSb290SW5saW5lQm94KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyNpZiBFTkFCTEUoUlVCWSkKKwl2aXJ0dWFsIGJvb2wgaXNSdWJ5
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogI2lmIEVOQUJMRShTVkcpIAogICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3goKSB7IHJldHVybiBmYWxzZTsgfQogCkBA
IC0yMDUsOCArMjA4LDE0IEBAIHB1YmxpYzoKIAogICAgIGludCBoZWlnaHQoKSBjb25zdDsKIAot
ICAgIGlubGluZSBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0
IHsgcmV0dXJuIHJlbmRlcmVyKCktPmJhc2VsaW5lUG9zaXRpb24obV9maXJzdExpbmUsIGlzUm9v
dExpbmVCb3gpOyB9Ci0gICAgaW5saW5lIGludCBsaW5lSGVpZ2h0KGJvb2wgaXNSb290TGluZUJv
eCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNS
b290TGluZUJveCk7IH0KKyNpZiBFTkFCTEUoUlVCWSkKKwkvLyB0aGUgYm9vbCBwYXJhbWV0ZXIg
aXMgb25seSBuZWNlc3NhcnkgZm9yIGNvbXBhdGliaWxpdHkgd2hlbiBFTkFCTEUoUlVCWSkgaXMg
ZmFsc2UKKwl2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgaXNSb290TGluZUJveCkg
Y29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+YmFzZWxpbmVQb3NpdGlvbihtX2ZpcnN0TGluZSwg
aXNSb290TGluZUJveCk7IH0KKwl2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgaXNSb290TGlu
ZUJveCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwg
aXNSb290TGluZUJveCk7IH0KKyNlbHNlCisJaW5saW5lIGludCBiYXNlbGluZVBvc2l0aW9uKGJv
b2wgaXNSb290TGluZUJveCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+YmFzZWxpbmVQb3Np
dGlvbihtX2ZpcnN0TGluZSwgaXNSb290TGluZUJveCk7IH0KKwlpbmxpbmUgaW50IGxpbmVIZWln
aHQoYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5saW5lSGVp
Z2h0KG1fZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsgfQorI2VuZGlmCiAKICAgICB2aXJ0dWFs
IGludCB0b3BPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIHkoKTsgfQogICAgIHZpcnR1YWwgaW50
IGJvdHRvbU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA0NTc4MikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsOSAr
NTIwLDE3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHkKICAgICAg
ICAgaW50IG92ZXJmbG93VG9wID0gMDsKICAgICAgICAgaW50IG92ZXJmbG93Qm90dG9tID0gMDsK
ICAgICAgICAgaWYgKGN1cnItPmlzVGV4dCgpIHx8IGN1cnItPmlzSW5saW5lRmxvd0JveCgpKSB7
Ci0gICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gY3Vyci0+cmVuZGVyZXIoKS0+c3R5bGUo
bV9maXJzdExpbmUpLT5mb250KCk7Ci0gICAgICAgICAgICBuZXdZICs9IGN1cnItPmJhc2VsaW5l
UG9zaXRpb24oZmFsc2UpIC0gZm9udC5hc2NlbnQoKTsKLQorI2lmIEVOQUJMRShSVUJZKQorICAg
ICAgICAgICAgaWYgKCFjdXJyLT5pc1J1YnkoKSkKKyNlbmRpZgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjdXJyLT5yZW5kZXJlcigpLT5zdHlsZSht
X2ZpcnN0TGluZSktPmZvbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdZICs9IGN1cnItPmJhc2Vs
aW5lUG9zaXRpb24oZmFsc2UpIC0gZm9udC5hc2NlbnQoKTsKKworICAgICAgICAgICAgICAgIGlm
IChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3WSAtPSBj
dXJyLT5ib3hNb2RlbE9iamVjdCgpLT5ib3JkZXJUb3AoKSArIGN1cnItPmJveE1vZGVsT2JqZWN0
KCktPnBhZGRpbmdUb3AoKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoU2hhZG93RGF0YSogc2hhZG93ID0gY3Vyci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
dGV4dFNoYWRvdygpOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRvdy0+bmV4dCkgewogICAgICAgICAg
ICAgICAgIG92ZXJmbG93VG9wID0gbWluKG92ZXJmbG93VG9wLCBzaGFkb3ctPnkgLSBzaGFkb3ct
PmJsdXIpOwogICAgICAgICAgICAgICAgIG92ZXJmbG93Qm90dG9tID0gbWF4KG92ZXJmbG93Qm90
dG9tLCBzaGFkb3ctPnkgKyBzaGFkb3ctPmJsdXIpOwpAQCAtNTQzLDkgKzU1MSw2IEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHkKICAgICAgICAgICAgICAgICBvdmVy
Zmxvd1RvcCA9IG1pbihvdmVyZmxvd1RvcCwgYm94LT5yZWZsZWN0aW9uQm94KCkueSgpKTsKICAg
ICAgICAgICAgICAgICBvdmVyZmxvd0JvdHRvbSA9IG1heChvdmVyZmxvd0JvdHRvbSwgYm94LT5y
ZWZsZWN0aW9uQm94KCkuYm90dG9tKCkpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpCi0gICAgICAgICAgICAgICAgbmV3WSAtPSBjdXJy
LT5ib3hNb2RlbE9iamVjdCgpLT5ib3JkZXJUb3AoKSArIGN1cnItPmJveE1vZGVsT2JqZWN0KCkt
PnBhZGRpbmdUb3AoKTsKICAgICAgICAgfSBlbHNlIGlmICghY3Vyci0+cmVuZGVyZXIoKS0+aXNC
UigpKSB7CiAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KGN1cnItPnJl
bmRlcmVyKCkpOwogICAgICAgICAgICAgbmV3WSArPSBib3gtPm1hcmdpblRvcCgpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDUsNiArMTMwNSwx
NiBAQCB2b2lkIFJlbmRlckJsb2NrOjpoYW5kbGVCb3R0b21PZkJsb2NrKGluCiAgICAgc2V0Q29s
bGFwc2VkQm90dG9tTWFyZ2luKG1hcmdpbkluZm8pOwogfQogCitSZW5kZXJCb3gqIFJlbmRlckJs
b2NrOjpmaXJzdENoaWxkQm94SW5MYXlvdXRPcmRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZp
cnN0Q2hpbGRCb3goKTsKK30KKworUmVuZGVyQm94KiBSZW5kZXJCbG9jazo6bmV4dENoaWxkQm94
SW5MYXlvdXRPcmRlcihSZW5kZXJCb3gqIGNoaWxkKSBjb25zdAoreworICAgIHJldHVybiBjaGls
ZC0+bmV4dFNpYmxpbmdCb3goKTsKK30KKwogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tD
aGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgbWF4RmxvYXRCb3R0b20pCiB7CiAg
ICAgaWYgKGdQZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXApIHsKQEAgLTEzNDEsMTEgKzEzNTEs
MTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAgIGludCBw
cmV2aW91c0Zsb2F0Qm90dG9tID0gMDsKICAgICBtYXhGbG9hdEJvdHRvbSA9IDA7CiAKLSAgICBS
ZW5kZXJCb3gqIG5leHQgPSBmaXJzdENoaWxkQm94KCk7CisgICAgUmVuZGVyQm94KiBuZXh0ID0g
Zmlyc3RDaGlsZEJveEluTGF5b3V0T3JkZXIoKTsKIAogICAgIHdoaWxlIChuZXh0KSB7CiAgICAg
ICAgIFJlbmRlckJveCogY2hpbGQgPSBuZXh0OwotICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRT
aWJsaW5nQm94KCk7CisgICAgICAgIG5leHQgPSBuZXh0Q2hpbGRCb3hJbkxheW91dE9yZGVyKGNo
aWxkKTsKIAogICAgICAgICBpZiAobGVnZW5kID09IGNoaWxkKQogICAgICAgICAgICAgY29udGlu
dWU7IC8vIFNraXAgdGhlIGxlZ2VuZCwgc2luY2UgaXQgaGFzIGFscmVhZHkgYmVlbiBwb3NpdGlv
bmVkIHVwIGluIHRoZSBmaWVsZHNldCdzIGJvcmRlci4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAkocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTIsNiArMzUyLDE0IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgaGFzTGluZUlmRW1wdHkoKSBjb25zdDsKICAgICBib29sIGxheW91dE9ubHlQb3Np
dGlvbmVkT2JqZWN0cygpOwogCitwcm90ZWN0ZWQ6CisjaWYgRU5BQkxFKFJVQlkpCisgICAgdmly
dHVhbCBSZW5kZXJCb3gqIGZpcnN0Q2hpbGRCb3hJbkxheW91dE9yZGVyKCkgY29uc3Q7IC8vIG92
ZXJyaWRkZW4gYnkgcnVieQorICAgIHZpcnR1YWwgUmVuZGVyQm94KiBuZXh0Q2hpbGRCb3hJbkxh
eW91dE9yZGVyKFJlbmRlckJveCogY2hpbGRCb3gpIGNvbnN0OyAvLyBvdmVycmlkZGVuIGJ5IHJ1
YnkKKyNlbHNlCisgICAgUmVuZGVyQm94KiBmaXJzdENoaWxkQm94SW5MYXlvdXRPcmRlcigpIGNv
bnN0OworICAgIFJlbmRlckJveCogbmV4dENoaWxkQm94SW5MYXlvdXRPcmRlcihSZW5kZXJCb3gq
IGNoaWxkQm94KSBjb25zdDsKKyNlbmRpZgogICAgIAogcHJpdmF0ZToKICAgICBQb3NpdGlvbiBw
b3NpdGlvbkZvckJveChJbmxpbmVCb3gqLCBib29sIHN0YXJ0ID0gdHJ1ZSkgY29uc3Q7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDQ1NzgyKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcg
QEAKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwNCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29s
Zi5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUxLDYg
KzUyLDExIEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCisjaWYgRU5BQkxFKFJVQlkpCisjaW5jbHVkZSAiUmVu
ZGVyUnVieS5oIgorI2luY2x1ZGUgIlJlbmRlclJ1YnlUZXh0LmgiCisjZW5kaWYKKwogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0
b3IuaCIKICNlbmRpZgpAQCAtMTAxLDU2ICsxMDcsNTIgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJP
YmplY3Q6OmNyZWF0ZU9iamVjdAogICAgICAgICByZXR1cm4gaW1hZ2U7CiAgICAgfQogCi0gICAg
UmVuZGVyT2JqZWN0KiBvID0gMDsKKyNpZiBFTkFCTEUoUlVCWSkKKyAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZShydWJ5VGFnKSkgeworICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJ
TkUpCisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUnVieUFzSW5saW5lKG5v
ZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVy
UnVieUFzQmxvY2sobm9kZSk7CisgICAgfQorICAgIC8vIHRyZWF0IDxydD4gYXMgcnVieSB0ZXh0
IE9OTFkgaWYgaXQgc3RpbGwgaGFzIGl0cyBkZWZhdWx0IHRyZWF0bWVudCBvZiBibG9jaworICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKHJ0VGFnKSAmJiBzdHlsZS0+ZGlzcGxheSgpID09IEJMT0NL
KQorICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUnVieVRleHQobm9kZSk7IAorI2Vu
ZGlmCiAKICAgICBzd2l0Y2ggKHN0eWxlLT5kaXNwbGF5KCkpIHsKICAgICAgICAgY2FzZSBOT05F
OgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2Fz
ZSBJTkxJTkU6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVu
ZGVySW5saW5lKG5vZGUpOwogICAgICAgICBjYXNlIEJMT0NLOgotICAgICAgICAgICAgbyA9IG5l
dyAoYXJlbmEpIFJlbmRlckJsb2NrKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgSU5MSU5FX0JMT0NLOgotICAgICAgICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlckJs
b2NrKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTElTVF9JVEVNOgot
ICAgICAgICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlckxpc3RJdGVtKG5vZGUpOwotICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUlVOX0lOOgogICAgICAgICBjYXNlIENPTVBBQ1Q6
Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyQmxvY2sobm9kZSk7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhu
b2RlKTsKKyAgICAgICAgY2FzZSBMSVNUX0lURU06CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
cmVuYSkgUmVuZGVyTGlzdEl0ZW0obm9kZSk7CiAgICAgICAgIGNhc2UgVEFCTEU6CiAgICAgICAg
IGNhc2UgSU5MSU5FX1RBQkxFOgotICAgICAgICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlclRh
YmxlKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
cmVuYSkgUmVuZGVyVGFibGUobm9kZSk7CiAgICAgICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQOgog
ICAgICAgICBjYXNlIFRBQkxFX0hFQURFUl9HUk9VUDoKICAgICAgICAgY2FzZSBUQUJMRV9GT09U
RVJfR1JPVVA6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVTZWN0aW9u
KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVu
YSkgUmVuZGVyVGFibGVTZWN0aW9uKG5vZGUpOwogICAgICAgICBjYXNlIFRBQkxFX1JPVzoKLSAg
ICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZVJvdyhub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlUm93
KG5vZGUpOwogICAgICAgICBjYXNlIFRBQkxFX0NPTFVNTl9HUk9VUDoKICAgICAgICAgY2FzZSBU
QUJMRV9DT0xVTU46Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVDb2wo
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5h
KSBSZW5kZXJUYWJsZUNvbChub2RlKTsKICAgICAgICAgY2FzZSBUQUJMRV9DRUxMOgotICAgICAg
ICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlQ2VsbChub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlQ2VsbChu
b2RlKTsKICAgICAgICAgY2FzZSBUQUJMRV9DQVBUSU9OOgotICAgICAgICAgICAgbyA9IG5ldyAo
YXJlbmEpIFJlbmRlckJsb2NrKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyQmxvY2sobm9kZSk7CiAgICAgICAgIGNhc2UgQk9Y
OgogICAgICAgICBjYXNlIElOTElORV9CT1g6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkg
UmVuZGVyRmxleGlibGVCb3gobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJGbGV4aWJsZUJveChub2RlKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gbzsKKyAgICByZXR1cm4gMDsKIH0KIAogI2lmbmRlZiBOREVCVUcgCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAg
ICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwNCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5
Miw2ICsyOTMsMTMgQEAgcHVibGljOgogICAgIGJvb2wgY2VsbFdpZHRoQ2hhbmdlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2VsbFdpZHRoQ2hhbmdlZDsgfQogICAgIHZvaWQgc2V0Q2VsbFdpZHRoQ2hh
bmdlZChib29sIGIgPSB0cnVlKSB7IG1fY2VsbFdpZHRoQ2hhbmdlZCA9IGI7IH0KIAorI2lmIEVO
QUJMRShSVUJZKQorICAgIHZpcnR1YWwgYm9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlSdW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlCYXNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNSdWJ5VGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisj
ZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gRklYTUU6IFVudGlsIGFsbCBTVkcgcmVu
ZGVycyBjYW4gYmUgc3ViY2xhc3NlcyBvZiBSZW5kZXJTVkdNb2RlbE9iamVjdCB3ZSBoYXZlCiAg
ICAgLy8gdG8gYWRkIFNWRyByZW5kZXJlciBtZXRob2RzIHRvIFJlbmRlck9iamVjdCB3aXRoIGFu
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSdWJ5LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgorCisjaWYgRU5BQkxFKFJVQlkpCisK
KyNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCisjaW5jbHVkZSAiUnVieUlubGluZUZsb3dCb3gu
aCIKKyNpbmNsdWRlICJSdWJ5Um9vdElubGluZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vPT09IHJ1YnkgYXMgaW5saW5lIG9iamVjdCA9PT0KKworUmVuZGVyUnVieUFzSW5saW5l
OjpSZW5kZXJSdWJ5QXNJbmxpbmUoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlcklubGluZShub2Rl
KQoreworfQorCitSZW5kZXJSdWJ5QXNJbmxpbmU6On5SZW5kZXJSdWJ5QXNJbmxpbmUoKQorewor
fQorCitib29sIFJlbmRlclJ1YnlBc0lubGluZTo6aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0
KiBjaGlsZCwgUmVuZGVyU3R5bGUqKSBjb25zdAoreworICAgIHJldHVybiBjaGlsZC0+aXNSdWJ5
UnVuKCkKKyAgICAgICAgfHwgY2hpbGQtPmlzUnVieUJhc2UoKQorICAgICAgICB8fCBjaGlsZC0+
aXNSdWJ5VGV4dCgpCisgICAgICAgIHx8IGNoaWxkLT5pc0lubGluZSgpOworfQorCit2b2lkIFJl
bmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICAvLyBvbmx5IFJlbmRlclJ1YnlSdW4gb2JqZWN0cyBj
YW4gYmUgZGlyZWN0bHkgYWRkZWQgYXMgYSBjaGlsZCwgZXZlcnl0aGluZyBlbHNlIG11c3QgYmUg
d3JhcHBlZC4KKyAgICBpZiAoY2hpbGQtPmlzUnVieVJ1bigpKSB7CisgICAgICAgIFJlbmRlcklu
bGluZTo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAvLyBpZiBpdCdzIGEgcnVieSB0ZXh0LCB0aGVuIGNoZWNrIGlmIHdlIGNhbiBhZGQg
aXQgdG8gdGhlIHByZXZpb3VzIHJ1bgorICAgIGlmIChjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7Cisg
ICAgICAgIFJlbmRlck9iamVjdCogcHJldiA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnBy
ZXZpb3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CisgICAgICAgIGlmIChwcmV2ICYmIHByZXYt
PmlzUnVieVJ1bigpKSB7CisgICAgICAgICAgICBwcmV2LT5hZGRDaGlsZChjaGlsZCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gY2FuJ3QgYWRkLCBvciBu
b3QgYSBydWJ5IHRleHQgLT4gbXVzdCBjcmVhdGUgbmV3IHJ1biBhbmQgYWRkIGl0IHRoZXJlCisg
ICAgUmVuZGVyT2JqZWN0KiByciA9IGNyZWF0ZUFub255bW91c1J1YnlSdW4oKTsKKyAgICBhZGRD
aGlsZChyciwgYmVmb3JlQ2hpbGQpOworICAgIHJyLT5hZGRDaGlsZChjaGlsZCk7Cit9CisKK1Jl
bmRlclJ1YnlSdW4qIFJlbmRlclJ1YnlBc0lubGluZTo6Y3JlYXRlQW5vbnltb3VzUnVieVJ1bigp
Cit7CisgICAgUmVuZGVyUnVieVJ1biogcnIgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclJ1
YnlSdW4oZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgKi8pOworICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5bGUtPmluaGVy
aXRGcm9tKHN0eWxlKCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7
IC8vIEZJWE1FOiB1c2UgSU5MSU5FX1RBQkxFIG9yIGEgc3BlY2lhbCBXRUJLSVRfUlVCWV9SVU4g
aW5zdGVhZD8/CisgICAgcnItPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CisgICAgcmV0
dXJuIHJyOworfQorCitJbmxpbmVGbG93Qm94KiBSZW5kZXJSdWJ5QXNJbmxpbmU6OmNyZWF0ZUlu
bGluZUZsb3dCb3goKSAKK3sKKyAgICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBSdWJ5SW5s
aW5lRmxvd0JveCh0aGlzKTsKK30KKworLy89PT0gcnVieSBhcyBibG9jayBvYmplY3QgPT09CisK
K1JlbmRlclJ1YnlBc0Jsb2NrOjpSZW5kZXJSdWJ5QXNCbG9jayhOb2RlKiBub2RlKQorICAgIDog
UmVuZGVyQmxvY2sobm9kZSkKK3sKK30KKworUmVuZGVyUnVieUFzQmxvY2s6On5SZW5kZXJSdWJ5
QXNCbG9jaygpCit7Cit9CisKK2Jvb2wgUmVuZGVyUnVieUFzQmxvY2s6OmlzQ2hpbGRBbGxvd2Vk
KFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2hpbGQtPmlzUnVieVJ1bigpCisgICAgICAgIHx8IGNoaWxkLT5pc1J1YnlCYXNlKCkKKyAgICAg
ICAgfHwgY2hpbGQtPmlzUnVieVRleHQoKQorICAgICAgICB8fCBjaGlsZC0+aXNJbmxpbmUoKTsK
K30KKwordm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICAvLyBvbmx5IFJlbmRlclJ1YnlS
dW4gb2JqZWN0cyBjYW4gYmUgZGlyZWN0bHkgYWRkZWQgYXMgYSBjaGlsZCwgZXZlcnl0aGluZyBl
bHNlIG11c3QgYmUgd3JhcHBlZC4KKyAgICBpZiAoY2hpbGQtPmlzUnVieVJ1bigpKSB7CisgICAg
ICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIC8vIGlmIGl0J3MgYSBydWJ5IHRleHQsIHRoZW4gY2hlY2sgaWYg
d2UgY2FuIGFkZCBpdCB0byB0aGUgcHJldmlvdXMgcnVuCisgICAgaWYgKGNoaWxkLT5pc1J1YnlU
ZXh0KCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gYmVmb3JlQ2hpbGQgPyBiZWZv
cmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKHBy
ZXYgJiYgcHJldi0+aXNSdWJ5UnVuKCkpIHsKKyAgICAgICAgICAgIHByZXYtPmFkZENoaWxkKGNo
aWxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBjYW4n
dCBhZGQsIG9yIG5vdCBhIHJ1YnkgdGV4dCAtPiBtdXN0IGNyZWF0ZSBuZXcgcnVuIGFuZCBhZGQg
aXQgdGhlcmUKKyAgICBSZW5kZXJPYmplY3QqIHJyID0gY3JlYXRlQW5vbnltb3VzUnVieVJ1bigp
OworICAgIGFkZENoaWxkKHJyLCBiZWZvcmVDaGlsZCk7CisgICAgcnItPmFkZENoaWxkKGNoaWxk
KTsKK30KKworUmVuZGVyUnVieVJ1biogUmVuZGVyUnVieUFzQmxvY2s6OmNyZWF0ZUFub255bW91
c1J1YnlSdW4oKQoreworICAgIFJlbmRlclJ1YnlSdW4qIHJyID0gbmV3IChyZW5kZXJBcmVuYSgp
KSBSZW5kZXJSdWJ5UnVuKGRvY3VtZW50KCkgLyogYW5vbnltb3VzICovKTsKKyAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIG5ld1N0
eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKKyAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShJTkxJ
TkVfQkxPQ0spOyAvLyBGSVhNRTogdXNlIElOTElORV9UQUJMRSBvciBhIHNwZWNpYWwgV0VCS0lU
X1JVQllfUlVOIGluc3RlYWQ/PworICAgIHJyLT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNlKCkp
OworICAgIHJldHVybiBycjsKK30KKworUm9vdElubGluZUJveCogUmVuZGVyUnVieUFzQmxvY2s6
OmNyZWF0ZVJvb3RJbmxpbmVCb3goKSAKK3sKKyAgICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgp
KSBSdWJ5Um9vdElubGluZUJveCh0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFJVQlkpCisKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclJ1YnlfaAorI2RlZmluZSBSZW5kZXJSdWJ5
X2gKKworI2lmIEVOQUJMRShSVUJZKQorCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5k
ZXJSdWJ5UnVuOworCisvLyBGb2xsb3dpbmcgdGhlIEhUTUwgNSBzcGVjLCB0aGUgYm94IG9iamVj
dCBtb2RlbCBmb3IgYSA8cnVieT4gZWxlbWVudCBsb29rcyBhcyBmb2xsb3dzOgorLy8KKy8vIDEg
UmVuZGVyUnVieSBvYmplY3QsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdob2xlIDxydWJ5PiBIVE1M
IGVsZW1lbnQgCisvLyAgICAxKyBSZW5kZXJSdWJ5UnVuIG9iamVjdChzKSwgZWFjaCBvbmUgd3Jh
cHBpbmcgYSBydWJ5IGJhc2Ugd2l0aCBpdHMgY29ycmVzcG9uZGluZyBydWJ5IHRleHQocykKKy8v
ICAgICAgICAxIFJlbmRlclJ1YnlCYXNlIG9iamVjdAorLy8gICAgICAgICAgIG4gaW5saW5lIG9i
amVjdChzKQorLy8gICAgICAgIDArIFJlbmRlclJ1YnlUZXh0IG9iamVjdChzKQorLy8gICAgICAg
ICAgIG4gaW5saW5lIG9iamVjdChzKQorLy8KKy8vIE5vdGU6IDxycD4gZWxlbWVudHMgYXJlIGRl
ZmluZWQgYXMgaGF2aW5nICdkaXNwbGF5Om5vbmUnIGFuZCB0aHVzIG5vcm1hbGx5IGFyZSBub3Qg
YXNzaWduZWQgYSByZW5kZXJlci4KKy8vCisvLyBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgYm90aCBz
ZXZlcmFsIHJ1bnMgb2YgcnVieSBiYXNlcyB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgcnVieSB0ZXh0
cyAoc2VlIEhUTUw1IHNwZWMpLgorCisvLyA8cnVieT4gd2hlbiB1c2VkIGFzICdkaXNwbGF5Omlu
bGluZScgCitjbGFzcyBSZW5kZXJSdWJ5QXNJbmxpbmUgOiBwdWJsaWMgUmVuZGVySW5saW5lIHsK
K3B1YmxpYzoKKyAgICBSZW5kZXJSdWJ5QXNJbmxpbmUoTm9kZSopOworICAgIHZpcnR1YWwgflJl
bmRlclJ1YnlBc0lubGluZSgpOworCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclJ1YnkgKGlubGluZSkiOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNSdWJ5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29s
IGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQgPSAwKTsKKworCUlubGluZUZsb3dCb3gqIGNyZWF0ZUlubGluZUZsb3dCb3go
KTsKKworcHJpdmF0ZToKKyAgICBSZW5kZXJSdWJ5UnVuKiBjcmVhdGVBbm9ueW1vdXNSdWJ5UnVu
KCk7Cit9OworCisvLyA8cnVieT4gd2hlbiB1c2VkIGFzICdkaXNwbGF5OmJsb2NrJyBvciAnZGlz
cGxheTppbmxpbmUtYmxvY2snCitjbGFzcyBSZW5kZXJSdWJ5QXNCbG9jayA6IHB1YmxpYyBSZW5k
ZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyUnVieUFzQmxvY2soTm9kZSopOworICAgIHZp
cnR1YWwgflJlbmRlclJ1YnlBc0Jsb2NrKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJl
bmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUnVieSAoYmxvY2spIjsgfQorCisgICAg
dmlydHVhbCBib29sIGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1
YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRT
ZWxlY3Rpb25HYXBzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgUm9v
dElubGluZUJveCogY3JlYXRlUm9vdElubGluZUJveCgpOworCitwcml2YXRlOgorICAgIFJlbmRl
clJ1YnlSdW4qIGNyZWF0ZUFub255bW91c1J1YnlSdW4oKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJZKQorCisjZW5kaWYgLy8gUmVuZGVyUnVi
eV9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5
QmFzZS5oIgorCisjaWYgRU5BQkxFKFJVQlkpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVu
ZGVyUnVieUJhc2U6OlJlbmRlclJ1YnlCYXNlKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJCbG9j
ayhub2RlKQoreworICAgIHNldElubGluZShmYWxzZSk7Cit9CisKK1JlbmRlclJ1YnlCYXNlOjp+
UmVuZGVyUnVieUJhc2UoKQoreworfQorCitib29sIFJlbmRlclJ1YnlCYXNlOjppc0NoaWxkQWxs
b3dlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNoaWxkLT5pc0lubGluZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVi
eUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyUnVieUJhc2VfaAorI2RlZmlu
ZSBSZW5kZXJSdWJ5QmFzZV9oCisKKyNpZiBFTkFCTEUoUlVCWSkKKworI2luY2x1ZGUgIlJlbmRl
ckJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyUnVieUJhc2Ug
OiBwdWJsaWMgUmVuZGVyQmxvY2t7CitwdWJsaWM6CisgICAgUmVuZGVyUnVieUJhc2UoTm9kZSop
OworICAgIHZpcnR1YWwgflJlbmRlclJ1YnlCYXNlKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlclJ1
YnlCYXNlIChhbm9ueW1vdXMpIiA6ICJSZW5kZXJSdWJ5QmFzZSI7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBpc1J1YnlCYXNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwor
I2VuZGlmIC8vIFJlbmRlclJ1YnlCYXNlX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlS
dW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKworI2luY2x1
ZGUgIlJlbmRlclJ1YnlCYXNlLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieVRleHQuaCIKKyNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVuZGVyUnVieVJ1bjo6UmVuZGVyUnVieVJ1bihOb2RlKiBub2RlKQorICAg
IDogUmVuZGVyQmxvY2sobm9kZSkKK3sKKyAgICBzZXRSZXBsYWNlZCh0cnVlKTsKKyAgICBzZXRJ
bmxpbmUodHJ1ZSk7Cit9CisKK1JlbmRlclJ1YnlSdW46On5SZW5kZXJSdWJ5UnVuKCkKK3sKK30K
KworYm9vbCBSZW5kZXJSdWJ5UnVuOjpoYXNSdWJ5QmFzZSgpIGNvbnN0Cit7CisgICAgLy8gbm9y
bWFsbHksIHRoZSBiYXNlIHNob3VsZCBiZSB0aGUgZmlyc3QgY2hpbGQgKHByb3ZpZGVkIGl0IGhh
cyBhbHJlYWR5IGJlZW4gYWRkZWQpCisgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkgfHwgZmlyc3RD
aGlsZCgpLT5pc1J1YnlCYXNlKCkpOworICAgIAorICAgIHJldHVybiBnZXRSdWJ5QmFzZSgpOwor
fQorCitpbnQgUmVuZGVyUnVieVJ1bjo6bnVtYmVyT2ZSdWJ5VGV4dHMoKSBjb25zdAoreworICAg
ICAvLyBub3JtYWxseSwgdGhlIGZpcnN0IGNoaWxkIHNob3VsZCBiZSB0aGUgYmFzZSwgbm90IGEg
dGV4dAorICAgIEFTU0VSVCghZmlyc3RDaGlsZCgpIHx8IGZpcnN0Q2hpbGQoKS0+aXNSdWJ5QmFz
ZSgpKTsKKworICAgIGludCBuID0gMDsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgIGlmIChjaGlsZC0+aXNSdWJ5VGV4dCgpKQorICAgICAgICAgICAgKytuOworICAgIH0KKyAg
ICByZXR1cm4gbjsKK30KKworaW50IFJlbmRlclJ1YnlSdW46OmJhc2VsaW5lUG9zaXRpb24oYm9v
bCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK3sKKyAgICBSZW5kZXJSdWJ5
QmFzZSogcmIgPSBnZXRSdWJ5QmFzZSgpOworICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgcGFzcyAn
aXNSb290TGluZUJveCcgYmVsb3csIG9yIGp1c3QgJ2ZhbHNlJz8KKyAgICByZXR1cm4gcmIgPyBy
Yi0+eSgpICsgcmItPmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KSA6
IC0xOworfQorCitSZW5kZXJCbG9jayogUmVuZGVyUnVieVJ1bjo6Zmlyc3RMaW5lQmxvY2soKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCit2b2lkIFJlbmRlclJ1YnlSdW46OnVwZGF0ZUZp
cnN0TGV0dGVyKCkKK3sKK30KKworYm9vbCBSZW5kZXJSdWJ5UnVuOjppc0NoaWxkQWxsb3dlZChS
ZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGNo
aWxkLT5pc1J1YnlCYXNlKCkKKyAgICAgICAgfHwgY2hpbGQtPmlzUnVieVRleHQoKQorICAgICAg
ICB8fCBjaGlsZC0+aXNJbmxpbmUoKTsKK30KKwordm9pZCBSZW5kZXJSdWJ5UnVuOjphZGRDaGls
ZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAg
IGlmICghYmVmb3JlQ2hpbGQgJiYgaXNBZnRlckNvbnRlbnQobGFzdENoaWxkKCkpKQorICAgICAg
ICBiZWZvcmVDaGlsZCA9IGxhc3RDaGlsZCgpOworICAgIAorICAgIC8vIFJlbmRlclJ1YnlUZXh0
CisgICAgaWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkpIHsKKyAgICAgICAgUmVuZGVyQmxvY2s6OmFk
ZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Ly8gUmVuZGVyUnVieUJhc2UKKyAgICBpZiAoY2hpbGQtPmlzUnVieUJhc2UoKSkgeworICAgICAg
ICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAvLyBwbGFpbiB0ZXh0IG9yIG90aGVyIGlubGluZSBlbGVtZW50cyAt
PiBhcHBlbmQgdG8gcHJldmlvdXMgUmVuZGVyUnVieUJhc2UgaWYgZXhpc3RlbnQsIG90aGVyd2lz
ZSBjcmVhdGUgYW5vbnltb3VzIFJlbmRlclJ1YnlCYXNlCisgICAgUmVuZGVyT2JqZWN0KiBwcmV2
ID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hp
bGQoKTsKKyAgICBpZiAocHJldiAmJiBwcmV2LT5pc1J1YnlCYXNlKCkpIHsKKyAgICAgICAgcHJl
di0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlbmRlck9i
amVjdCogcmIgPSBjcmVhdGVBbm9ueW1vdXNSdWJ5QmFzZSgpOworICAgIGFkZENoaWxkKHJiLCBi
ZWZvcmVDaGlsZCk7CisgICAgcmItPmFkZENoaWxkKGNoaWxkKTsKK30KKworUmVuZGVyQm94KiBS
ZW5kZXJSdWJ5UnVuOjpmaXJzdENoaWxkQm94SW5MYXlvdXRPcmRlcigpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGhhc1J1YnlCYXNlKCkpOworCisgICAgLy8gZmlyc3QgbGF5b3V0IGFsbCAnQkVGT1JF
JyB0ZXh0cywgaW4gcmV2ZXJzZSBvcmRlcgorICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGxh
c3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nQm94KCkp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkgJiYgZWZmZWN0aXZlUnVieVBvc2l0
aW9uKGNoaWxkKSA9PSBSUF9CRUZPUkUpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAg
fQorCisgICAgLy8gaWYgdGhlcmUgYXJlIG5vICdCRUZPUkUnIHRleHRzLCBzdGFydCB3aXRoIHRo
ZSBiYXNlIAorICAgIC8vICh0aGlzIHNob3VsZG4ndCByZXR1cm4gTlVMTCAtIGlmIGl0IGRvZXMg
aXQganVzdCBtZWFucyB0aGF0IHdlIGFsc28gZGlzcmVnYXJkIGFsbCAnQUZURVInIHRleHRzKQor
ICAgIHJldHVybiBnZXRSdWJ5QmFzZSgpOworfQorCitSZW5kZXJCb3gqIFJlbmRlclJ1YnlSdW46
Om5leHRDaGlsZEJveEluTGF5b3V0T3JkZXIoUmVuZGVyQm94KiBjaGlsZCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaGFzUnVieUJhc2UoKSk7CisKKyAgICAvLyBpZiB0aGUgY3VycmVudCBjaGlsZCBp
cyBhICdCRUZPUkUnIHRleHQsIHNlYXJjaCBmb3Igb3RoZXIgQkVGT1JFIHRleHRzIGluIHJldmVy
c2Ugb3JkZXIKKyAgICAvLyBOb3RlOiB0aGVyZSBzaG91bGQgb25seSBiZSAxIHN1Y2ggdGV4dCBw
ZXIgc2UsIGJ1dCBldmVuIGluIHdlbGwtZm9ybWVkIEhUTUwvQ1NTLCB0aGUgZGVzaWduZXIgY291
bGQgCisgICAgLy8gaGF2ZSBleHBsaWNpdGVseSBzZXQgJ3J1YnktcG9zaXRpb246IGJlZm9yZScg
Zm9yIGFsbCB0ZXh0cyAob25jZSB3ZSBzdXBwb3J0IHJ1YnktcG9zaXRpb24pCisgICAgaWYgKGNo
aWxkLT5pc1J1YnlUZXh0KCkgJiYgZWZmZWN0aXZlUnVieVBvc2l0aW9uKGNoaWxkKSA9PSBSUF9C
RUZPUkUpIHsKKyAgICAgICAgZm9yIChjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmdCb3go
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZ0JveCgpKSB7CisgICAgICAg
ICAgICBpZiAoY2hpbGQtPmlzUnVieVRleHQoKSAmJiBlZmZlY3RpdmVSdWJ5UG9zaXRpb24oY2hp
bGQpID09IFJQX0JFRk9SRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAg
IH0KKworICAgICAgICAvLyBubyBvdGhlciAnQkVGT1JFJyB0ZXh0cyBmb3VuZCwgY29udGludWUg
d2l0aCB0aGUgYmFzZSBjb250YWluZXIKKyAgICAgICAgLy8gKHRoaXMgc2hvdWxkbid0IHJldHVy
biBOVUxMIC0gaWYgaXQgZG9lcyBpdCBqdXN0IG1lYW5zIHRoYXQgd2UgYWxzbyBkaXNyZWdhcmQg
YWxsICdBRlRFUicgdGV4dHMpCisgICAgICAgIHJldHVybiBnZXRSdWJ5QmFzZSgpOworICAgIH0K
KworICAgIC8vIGlmIHdlIGp1c3QgaGFkIGEgcnVieSBiYXNlLCB0aGVuIGZvciBkZWZlbnNlLWRl
cHRoIHB1cnBvc2VzLCBsb29rIGZvciBvdGhlciBiYXNlcyBqdXN0IHRvIGJlIHN1cmUKKyAgICBp
ZiAoY2hpbGQtPmlzUnVieUJhc2UoKSkgeworICAgICAgICBmb3IgKGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7
CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzUnVieUJhc2UoKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChmYWxzZSk7ICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW4sIHRoZSAybmQgYmFzZSBz
aG91bGQgaGF2ZSBmb3JtZWQgYSBuZXcgUmVuZGVyUnVieVJ1bgorICAgICAgICAgICAgICAgIHJl
dHVybiBjaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHRo
ZXJlIGFyZSBubyBzcHVyaW91cyBhZGRpdGlvbmFsIGJhc2VzLCByZXR1cm4gdGhlIGZpcnN0IEFG
VEVSIHRleHQKKyAgICAgICAgZm9yIChjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNSdWJ5VGV4dCgpICYmIGVmZmVjdGl2ZVJ1YnlQb3NpdGlvbihjaGlsZCkgPT0gUlBfQUZURVIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHdpdGggdGhlIG5l
eHQgJ0FGVEVSJyB0ZXh0CisgICAgLy8gTm90ZTogdGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBzdWNo
IHRleHQgcGVyIHNlLCBidXQgZXZlbiBpbiB3ZWxsLWZvcm1lZCBIVE1ML0NTUywgdGhlIGRlc2ln
bmVyIGNvdWxkIAorICAgIC8vIGhhdmUgZXhwbGljaXRlbHkgc2V0ICdydWJ5LXBvc2l0aW9uOiBh
ZnRlcicgZm9yIGFsbCB0ZXh0cyAob25jZSB3ZSBzdXBwb3J0IHJ1YnktcG9zaXRpb24pCisgICAg
QVNTRVJUKGNoaWxkLT5pc1J1YnlUZXh0KCkgJiYgZWZmZWN0aXZlUnVieVBvc2l0aW9uKGNoaWxk
KSA9PSBSUF9BRlRFUik7CisgICAgZm9yIChjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBpZiAo
Y2hpbGQtPmlzUnVieVRleHQoKSAmJiBlZmZlY3RpdmVSdWJ5UG9zaXRpb24oY2hpbGQpID09IFJQ
X0FGVEVSKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgIH0KKworICAgIHJldHVybiBO
VUxMOworfQorCitFUnVieVBvc2l0aW9uIFJlbmRlclJ1YnlSdW46OmVmZmVjdGl2ZVJ1YnlQb3Np
dGlvbihSZW5kZXJPYmplY3QqIGNoaWxkKSBjb25zdAoreworICAgIEFTU0VSVChjaGlsZC0+aXNS
dWJ5VGV4dCgpKTsKKyAgICAvLyBydWJ5LXBvc2l0aW9uIENTUyBwcm9wZXJ0eSBub3QgaW1wbGVt
ZW50ZWQuCisgICAgLy8gc2ltcGx5IHBvc2l0aW9uIHRoZSBmaXJzdCA8cnQ+IGluIEJFRk9SRSBw
b3NpdGlvbiwgdGhlIDJuZCBpbiBBRlRFUiBwb3NpdGlvbgorICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBzaWJsaW5nID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0g
c2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmctPmlzUnVi
eVRleHQoKSAmJiBlZmZlY3RpdmVSdWJ5UG9zaXRpb24oc2libGluZykgPT0gUlBfQkVGT1JFKQor
ICAgICAgICAgICAgcmV0dXJuIFJQX0FGVEVSOworICAgIH0KKyAgICByZXR1cm4gUlBfQkVGT1JF
OworfQorCitSZW5kZXJSdWJ5QmFzZSogUmVuZGVyUnVieVJ1bjo6Z2V0UnVieUJhc2UoKSBjb25z
dAoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1J1
YnlCYXNlKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyUnVieUJhc2Uq
PihjaGlsZCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitSZW5kZXJSdWJ5VGV4dCog
UmVuZGVyUnVieVJ1bjo6Z2V0Rmlyc3RSdWJ5VGV4dCgpIGNvbnN0Cit7CisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzUnVieVRleHQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJSdWJ5VGV4dCo+KGNoaWxkKTsKKyAgICB9Cisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK1JlbmRlclJ1YnlUZXh0KiBSZW5kZXJSdWJ5UnVuOjpnZXRM
YXN0UnVieVRleHQoKSBjb25zdAoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxh
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyUnVieVRleHQqPihjaGlsZCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOwor
fQorCitSZW5kZXJSdWJ5QmFzZSogUmVuZGVyUnVieVJ1bjo6Y3JlYXRlQW5vbnltb3VzUnVieUJh
c2UoKQoreworICAgIFJlbmRlclJ1YnlCYXNlKiByYiA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVu
ZGVyUnVieUJhc2UoZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgKi8pOworICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5bGUt
PmluaGVyaXRGcm9tKHN0eWxlKCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
KyAgICBuZXdTdHlsZS0+c2V0VGV4dEFsaWduKENFTlRFUik7IC8vIEZJWE1FOiB1c2UgV0VCS0lU
X0NFTlRFUj8KKyAgICByYi0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKKyAgICByZXR1
cm4gcmI7Cit9CisKK1JlbmRlclJ1YnlUZXh0KiBSZW5kZXJSdWJ5UnVuOjpjcmVhdGVBbm9ueW1v
dXNSdWJ5VGV4dCgpCit7CisgICAgUmVuZGVyUnVieVRleHQqIHJ0ID0gbmV3IChyZW5kZXJBcmVu
YSgpKSBSZW5kZXJSdWJ5VGV4dChkb2N1bWVudCgpIC8qIGFub255bW91cyAqLyk7CisgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBu
ZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CisgICAgbmV3U3R5bGUtPnNldERpc3BsYXko
QkxPQ0spOworICAgIG5ld1N0eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsgLy8gRklYTUU6IHRl
bXBvcmFyeSBzb2x1dGlvbiAtIG5lZWQgRElTVFJJQlVURV9MRVRURVJTL1NQQUNFUworICAgIHJ0
LT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOworICAgIHJldHVybiBydDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFJVQlkpCisKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5UnVuLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJl
bmRlclJ1YnlSdW5faAorI2RlZmluZSBSZW5kZXJSdWJ5UnVuX2gKKworI2lmIEVOQUJMRShSVUJZ
KQorCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSZW5kZXJSdWJ5QmFzZTsKK2NsYXNzIFJlbmRlclJ1YnlUZXh0OworCisvLyBSZW5kZXJS
dWJ5UnVuIGFyZSAnaW5saW5lLWJsb2NrL3RhYmxlJyBsaWtlIG9iamVjdHMsYW5kIHdyYXAgYSBz
aW5nbGUgcGFpcmluZyBvZiBhIHJ1YnkgYmFzZSB3aXRoIGl0cyBydWJ5IHRleHQocykuCisvLyBT
ZWUgUmVuZGVyUnVieS5oIGZvciBmdXJ0aGVyIGNvbW1lbnRzIG9uIHRoZSBzdHJ1Y3R1cmUKKwor
Y2xhc3MgUmVuZGVyUnVieVJ1biA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAg
UmVuZGVyUnVieVJ1bihOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVyUnVieVJ1bigpOworCisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clJ1YnlSdW4gKGFub255bW91cykiOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSdWJ5UnVuKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZUJsb2NrT3JJ
bmxpbmVUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgaGFzUnVieUJh
c2UoKSBjb25zdDsKKyAgICBpbnQgIG51bWJlck9mUnVieVRleHRzKCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQ
b3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0
OworCisgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2soKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRQYWludFNlbGVjdGlvbkdhcHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
UmVuZGVyUnVieUJhc2UqIGdldFJ1YnlCYXNlKCkgY29uc3Q7CisgICAgUmVuZGVyUnVieVRleHQq
IGdldEZpcnN0UnVieVRleHQoKSBjb25zdDsKKyAgICBSZW5kZXJSdWJ5VGV4dCogZ2V0TGFzdFJ1
YnlUZXh0KCkgY29uc3Q7CisgICAgCisgICAgRVJ1YnlQb3NpdGlvbiBlZmZlY3RpdmVSdWJ5UG9z
aXRpb24oUmVuZGVyT2JqZWN0KiBjaGlsZCkgY29uc3Q7CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBSZW5kZXJCb3gqIGZpcnN0Q2hpbGRCb3hJbkxheW91dE9yZGVyKCkgY29uc3Q7ICAg
ICAgICAKKyAgICB2aXJ0dWFsIFJlbmRlckJveCogbmV4dENoaWxkQm94SW5MYXlvdXRPcmRlcihS
ZW5kZXJCb3gqIGNoaWxkQm94KSBjb25zdDsgCisKK3ByaXZhdGU6CisgICAgUmVuZGVyUnVieUJh
c2UqIGNyZWF0ZUFub255bW91c1J1YnlCYXNlKCk7CisgICAgUmVuZGVyUnVieVRleHQqIGNyZWF0
ZUFub255bW91c1J1YnlUZXh0KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8vIFJlbmRlclJ1YnlSdW5faApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieVRleHQuaCIKKwor
I2lmIEVOQUJMRShSVUJZKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclJ1YnlUZXh0
OjpSZW5kZXJSdWJ5VGV4dChOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sK
K30KKworUmVuZGVyUnVieVRleHQ6On5SZW5kZXJSdWJ5VGV4dCgpCit7Cit9CisKK2Jvb2wgUmVu
ZGVyUnVieVRleHQ6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0
eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hpbGQtPmlzSW5saW5lKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJZKQorCisKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFJlbmRlclJ1YnlUZXh0X2gKKyNkZWZpbmUgUmVuZGVyUnVieVRleHRfaAorCisjaWYgRU5BQkxF
KFJVQlkpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlbmRlclJ1YnlUZXh0IDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoK
KyAgICBSZW5kZXJSdWJ5VGV4dChOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVyUnVieVRleHQo
KTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJSdWJ5VGV4dCI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlUZXh0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJl
bmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8vIFJlbmRlclJ1YnlU
ZXh0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gNDU3ODIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMiAr
NzgsMTUgQEAgcHVibGljOgogICAgIC8vIFJlbmRlclRoZW1lTWFjLmNwcCBmb3IgTWFjIE9TIFgu
CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHJldHVybiB0aGUgdGhlbWUncyBleHRyYSBzdHlsZSBz
aGVldHMgcnVsZXMsIHRvIGxldCBlYWNoIHBsYXRmb3JtCi0gICAgLy8gYWRqdXN0IHRoZSBkZWZh
dWx0IENTUyBydWxlcyBpbiBodG1sLmNzcywgcXVpcmtzLmNzcywgb3IgbWVkaWFDb250cm9scy5j
c3MKKyAgICAvLyBhZGp1c3QgdGhlIGRlZmF1bHQgQ1NTIHJ1bGVzIGluIGh0bWwuY3NzLCBxdWly
a3MuY3NzLCBtZWRpYUNvbnRyb2xzLmNzcywgb3IgcnVieS5jc3MKICAgICB2aXJ0dWFsIFN0cmlu
ZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0
dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQog
I2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CiAjZW5kaWYKKyNpZiBFTkFCTEUoUlVC
WSkKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVJ1YnlTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3Ry
aW5nKCk7IH07CisjZW5kaWYKIAogICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxp
bmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2Vk
IGlmIGEgYmFzZWxpbmUKICAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBl
eGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUg
ZXhhbXBsZXMgb2YKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1J1YnlJbmxpbmVGbG93Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJ1YnlJbmxpbmVGbG93Qm94LmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisKK1J1YnlJbmxpbmVGbG93
Qm94OjpSdWJ5SW5saW5lRmxvd0JveChSZW5kZXJPYmplY3QqIG9iaikKKyAgICA6IElubGluZUZs
b3dCb3gob2JqKQorICAgICwgbV9jYWNoZWRIZWlnaHQoMCkKKyAgICAsIG1fY2FjaGVkQmFzZWxp
bmUoMCkKK3sKKyAgICBzZXRIYXNWaXJ0dWFsSGVpZ2h0KCk7Cit9CisKK2ludCBSdWJ5SW5saW5l
Rmxvd0JveDo6dmlydHVhbEhlaWdodCgpIGNvbnN0Cit7CisgICAgaWYobV9jYWNoZWRIZWlnaHQg
PD0gMCkKKyAgICAgICAgY29tcHV0ZUhlaWdodEFuZEJhc2VsaW5lKCk7CisKKyAgICByZXR1cm4g
bV9jYWNoZWRIZWlnaHQ7Cit9CisKK2ludCBSdWJ5SW5saW5lRmxvd0JveDo6YmFzZWxpbmVQb3Np
dGlvbihib29sKSBjb25zdAoreworICAgIGlmKG1fY2FjaGVkQmFzZWxpbmUgPD0gMCkKKyAgICAg
ICAgY29tcHV0ZUhlaWdodEFuZEJhc2VsaW5lKCk7CisKKyAgICByZXR1cm4gbV9jYWNoZWRCYXNl
bGluZTsKK30KKwordm9pZCBSdWJ5SW5saW5lRmxvd0JveDo6Y29tcHV0ZUhlaWdodEFuZEJhc2Vs
aW5lKCkgY29uc3QKK3sKKyAgICBpbnQgbWF4QXNjZW50ID0gMDsKKyAgICBpbnQgbWF4RGVzY2Vu
dCA9IDA7CisKKyAgICBmb3IgKElubGluZUJveCogcnVuID0gZmlyc3RDaGlsZCgpOyBydW47IHJ1
biA9IHJ1bi0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGludCBydW5IZWlnaHQgPSBydW4tPmhl
aWdodCgpOworICAgICAgICBpbnQgcnVuQmFzZWxpbmUgPSBydW4tPmJhc2VsaW5lUG9zaXRpb24o
ZmFsc2UpOworICAgICAgICBpbnQgeSA9IHJ1bi0+eSgpOworICAgICAgICBpbnQgYXNjZW50ID0g
eSArIHJ1bkJhc2VsaW5lOworICAgICAgICBpbnQgZGVzY2VudCA9IHJ1bkhlaWdodCAtIHJ1bkJh
c2VsaW5lOworICAgICAgICBtYXhBc2NlbnQgPSBtYXgobWF4QXNjZW50LCBhc2NlbnQpOworICAg
ICAgICBtYXhEZXNjZW50ID0gbWF4KG1heERlc2NlbnQsIGRlc2NlbnQpOworICAgIH0KKyAgICAK
KyAgICBtX2NhY2hlZEJhc2VsaW5lID0gbWF4QXNjZW50ICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCk7CisgICAgbV9jYWNoZWRIZWlnaHQgPSBtX2NhY2hlZEJhc2VsaW5lICsgbWF4RGVzY2Vu
dCArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpOworICAgIEFTU0VSVChtX2NhY2hl
ZEJhc2VsaW5lID49IDApOworICAgIEFTU0VSVChtX2NhY2hlZEhlaWdodCA+PSAwKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFJVQlkpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1J1YnlJbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBSdWJ5SW5saW5lRmxvd0JveF9oCisjZGVmaW5lIFJ1YnlJbmxpbmVGbG93Qm94
X2gKKworI2lmIEVOQUJMRShSVUJZKQorCisjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJ1YnlJbmxpbmVGbG93Qm94IDogcHVibGljIElu
bGluZUZsb3dCb3ggeworcHVibGljOgorICAgIFJ1YnlJbmxpbmVGbG93Qm94KFJlbmRlck9iamVj
dCogb2JqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIC8qaXNSb290TGluZUJveCovKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgLyppc1Jvb3RMaW5lQm94Ki8pIGNvbnN0IHsg
cmV0dXJuIGhlaWdodCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGNvbXB1dGVIZWlnaHRB
bmRCYXNlbGluZSgpIGNvbnN0OwkvLyBvcGVyYXRlcyBvbiBtdXRhYmxlIG1lbWJlcnMgb25seQor
Citwcml2YXRlOgorICAgIG11dGFibGUgaW50IG1fY2FjaGVkSGVpZ2h0OworICAgIG11dGFibGUg
aW50IG1fY2FjaGVkQmFzZWxpbmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8vIFJ1YnlJbmxpbmVGbG93Qm94X2gKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1J1YnlSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5Um9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5Um9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJ1YnlSb290
SW5saW5lQm94LmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSdWJ5Um9vdElubGluZUJveDo6UnVieVJvb3RJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmop
CisJOiBSb290SW5saW5lQm94KG9iaikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFJVQlkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5Um9v
dElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1J1YnlSb290SW5s
aW5lQm94LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5Um9vdElubGlu
ZUJveC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSdWJ5Um9vdElubGlu
ZUJveF9oCisjZGVmaW5lIFJ1YnlSb290SW5saW5lQm94X2gKKworI2lmIEVOQUJMRShSVUJZKQor
CisjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFJ1YnlSb290SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpbmVCb3ggeworcHVibGljOgor
ICAgIFJ1YnlSb290SW5saW5lQm94KFJlbmRlck9iamVjdCogb2JqKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8vIFJ1YnlSb290
SW5saW5lQm94X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29u
c3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGVDb25zdGFudHMuaAkocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE1
IEBAIGVudW0gRVRyYW5zZm9ybVN0eWxlM0QgewogZW51bSBFQmFja2ZhY2VWaXNpYmlsaXR5IHsK
ICAgICBCYWNrZmFjZVZpc2liaWxpdHlWaXNpYmxlLCBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4K
IH07CisgICAgCisjaWYgRU5BQkxFKFJVQlkpCitlbnVtIEVSdWJ5UG9zaXRpb24geworLy8gIFJQ
X0FVVE8sIC8vIDwtIHNlZSBodHRwOi8vd3d3LnczLm9yZy9TdHlsZS9DU1MvVHJhY2tlci9pc3N1
ZXMvMTA3CisgICAgUlBfQkVGT1JFLAorICAgIFJQX0FGVEVSLAorLy8gIFJQX1JJR0hUCit9Owor
I2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViS2l0L21hYy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1Nzk1
KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBA
QAorMjAwOS0wNy0xMyAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwkJQWRkZWQgZmxhZyBF
TkFCTEVfUlVCWSB0byBlbmFibGUvZGlzYWJsZSBIVE1MNSBydWJ5IHN1cHBvcnQuCisKKyAgICAg
ICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKwogMjAwOS0wNy0x
MyAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCShyZXZpc2lvbiA0NTc4MikKKysrIFdlYktpdC9tYWMv
Q29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAgRU5BQkxFX0dFT0xPQ0FUSU9OID0gOwogRU5BQkxFX0lDT05EQVRBQkFT
RSA9IEVOQUJMRV9JQ09OREFUQUJBU0U7CiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUiA9IEVO
QUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSOwogRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UyA9IEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlM7CitFTkFCTEVfUlVCWSA9IEVOQUJM
RV9SVUJZOwogRU5BQkxFX1NWRyA9IEVOQUJMRV9TVkc7CiBFTkFCTEVfU1ZHX0FOSU1BVElPTiA9
IEVOQUJMRV9TVkdfQU5JTUFUSU9OOwogRU5BQkxFX1NWR19BU19JTUFHRSA9IEVOQUJMRV9TVkdf
QVNfSU1BR0U7CkBAIC01Myw0ICs1NCw0IEBAIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktF
UlM7CiBFTkFCTEVfWFBBVEggPSBFTkFCTEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9Y
U0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxF
X0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQp
ICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9HRU9MT0NB
VElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VS
KSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1NWRykgJChFTkFC
TEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZHX0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9N
X09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05f
T0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfV01MKSAk
KEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YUEFUSCkgJChFTkFCTEVfWFNMVCk7CitGRUFUVVJF
X0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FH
SU5HKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RPTV9T
VE9SQUdFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVf
SUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9PRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQoRU5BQkxFX1NWRykgJChFTkFC
TEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZHX0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9N
X09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05f
T0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfV01MKSAk
KEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YUEFUSCkgJChFTkFCTEVfWFNMVCk7CkluZGV4OiBX
ZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwko
cmV2aXNpb24gNDU3OTUpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDExIEBACisyMDA5LTA3LTEzICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWlu
ZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
CQlBZGRlZCBuZXcgZmlsZXMgZm9yIEhUTUw1IHJ1Ynkgc3VwcG9ydCB0byBwcm9qZWN0IGZpbGUu
CisKKyAgICAgICAgKiBXZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2o6CisKIDIwMDktMDctMTIg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFpbC5jb20+CiAKICAgICAgICAgU3BlY3VsYXRp
dmUgV2luZG93cyBidWlsZCBmaXggYWZ0ZXIgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvNDU3ODYuCkluZGV4OiBXZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvagkocmV2
aXNpb24gNDU3ODIpCisrKyBXZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1
dERpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZSZx
dW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxXZWJDb3JlJnF1b3Q7OyZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXFdlYkNvcmUmcXVvdDs7JnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVv
dDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJz
JnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXGljdSZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxpY3UmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJp
ZXNEaXIpXGluY2x1ZGVccHRocmVhZHMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXElu
Y2x1ZGVcQ29yZUZvdW5kYXRpb25cT1NYQ29tcGF0aWJpbGl0eUhlYWRlcnMmcXVvdDs7JnF1b3Q7
JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcQ29yZUZvdW5kYXRpb25cT1NYQ29tcGF0aWJp
bGl0eUhlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcQ29yZUZv
dW5kYXRpb25cT1NYQ29tcGF0aWJpbGl0eUhlYWRlcnNcR05VQ29tcGF0aWJpbGl0eSZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxDb3JlRm91bmRhdGlvblxPU1hDb21w
YXRpYmlsaXR5SGVhZGVyc1xHTlVDb21wYXRpYmlsaXR5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cilcLi4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
XC4uXFdlYkNvcmVTdXBwb3J0JnF1b3Q7OyZxdW90OyQoSW50RGlyKVxpbmNsdWRlJnF1b3Q7OyZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcV2ViS2l0XERlcml2ZWRTb3VyY2VzJnF1b3Q7Igot
CQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1dFQktJVF9FWFBPUlRTO0ZSQU1F
V09SS19OQU1FPVdlYktpdDtFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkc7RU5BQkxFX0RBVEFCQVNF
O0VOQUJMRV9EQVRBR1JJRDtFTkFCTEVfRE9NX1NUT1JBR0U7RU5BQkxFX0lDT05EQVRBQkFTRTtF
TkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TO0VOQUJMRV9TVkc7RU5BQkxFX1NWR19BTklN
QVRJT047RU5BQkxFX1NWR19BU19JTUFHRTtFTkFCTEVfU1ZHX0ZPTlRTO0VOQUJMRV9TVkdfRk9S
RUlHTl9PQkpFQ1Q7RU5BQkxFX1NWR19VU0U7RU5BQkxFX1ZJREVPO0VOQUJMRV9XT1JLRVJTO0VO
QUJMRV9YUEFUSDtFTkFCTEVfWFNMVCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VT
UkRMTDtXRUJLSVRfRVhQT1JUUztGUkFNRVdPUktfTkFNRT1XZWJLaXQ7RU5BQkxFX0NIQU5ORUxf
TUVTU0FHSU5HO0VOQUJMRV9EQVRBQkFTRTtFTkFCTEVfREFUQUdSSUQ7RU5BQkxFX0RPTV9TVE9S
QUdFO0VOQUJMRV9JQ09OREFUQUJBU0U7RU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUztF
TkFCTEVfUlVCWTtFTkFCTEVfU1ZHO0VOQUJMRV9TVkdfQU5JTUFUSU9OO0VOQUJMRV9TVkdfQVNf
SU1BR0U7RU5BQkxFX1NWR19GT05UUztFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUO0VOQUJMRV9T
VkdfVVNFO0VOQUJMRV9WSURFTztFTkFCTEVfV09SS0VSUztFTkFCTEVfWFBBVEg7RU5BQkxFX1hT
TFQiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJUHJlY29tcGlsZWRIZWFkZXJU
aHJvdWdoPSJXZWJLaXRQcmVmaXguaCIKIAkJCQlGb3JjZWRJbmNsdWRlRmlsZXM9IldlYktpdFBy
ZWZpeC5oIgpAQCAtMTE2LDcgKzExNiw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxJbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlJnF1b3Q7
OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXFdlYkNvcmUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcV2ViQ29yZSZxdW90OzsmcXVvdDskKFdlYktpdE91
dHB1dERpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQo
V2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVv
dDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7
JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcaWN1JnF1b3Q7OyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxJbmNsdWRlXGljdSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rp
cilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVk
ZVxDb3JlRm91bmRhdGlvblxPU1hDb21wYXRpYmlsaXR5SGVhZGVycyZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxDb3JlRm91bmRhdGlvblxPU1hDb21wYXRpYmlsaXR5
SGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxDb3JlRm91bmRh
dGlvblxPU1hDb21wYXRpYmlsaXR5SGVhZGVyc1xHTlVDb21wYXRpYmlsaXR5JnF1b3Q7OyZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXENvcmVGb3VuZGF0aW9uXE9TWENvbXBhdGli
aWxpdHlIZWFkZXJzXEdOVUNvbXBhdGliaWxpdHkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwu
LiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5c
V2ViQ29yZVN1cHBvcnQmcXVvdDs7JnF1b3Q7JChJbnREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXG9ialxXZWJLaXRcRGVyaXZlZFNvdXJjZXMmcXVvdDsiCi0JCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7V0VCS0lUX0VYUE9SVFM7RlJBTUVXT1JL
X05BTUU9V2ViS2l0O0VOQUJMRV9DSEFOTkVMX01FU1NBR0lORztFTkFCTEVfREFUQUJBU0U7RU5B
QkxFX0RBVEFHUklEO0VOQUJMRV9ET01fU1RPUkFHRTtFTkFCTEVfSUNPTkRBVEFCQVNFO0VOQUJM
RV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlM7RU5BQkxFX1NWRztFTkFCTEVfU1ZHX0FOSU1BVElP
TjtFTkFCTEVfU1ZHX0FTX0lNQUdFO0VOQUJMRV9TVkdfRk9OVFM7RU5BQkxFX1NWR19GT1JFSUdO
X09CSkVDVDtFTkFCTEVfU1ZHX1VTRTtFTkFCTEVfVklERU87RU5BQkxFX1dPUktFUlM7RU5BQkxF
X1hQQVRIO0VOQUJMRV9YU0xUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExM
O1dFQktJVF9FWFBPUlRTO0ZSQU1FV09SS19OQU1FPVdlYktpdDtFTkFCTEVfQ0hBTk5FTF9NRVNT
QUdJTkc7RU5BQkxFX0RBVEFCQVNFO0VOQUJMRV9EQVRBR1JJRDtFTkFCTEVfRE9NX1NUT1JBR0U7
RU5BQkxFX0lDT05EQVRBQkFTRTtFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TO0VOQUJM
RV9SVUJZO0VOQUJMRV9TVkc7RU5BQkxFX1NWR19BTklNQVRJT047RU5BQkxFX1NWR19BU19JTUFH
RTtFTkFCTEVfU1ZHX0ZPTlRTO0VOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1Q7RU5BQkxFX1NWR19V
U0U7RU5BQkxFX1ZJREVPO0VOQUJMRV9XT1JLRVJTO0VOQUJMRV9YUEFUSDtFTkFCTEVfWFNMVCIK
IAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlQcmVjb21waWxlZEhlYWRlclRocm91
Z2g9IldlYktpdFByZWZpeC5oIgogCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iV2ViS2l0UHJlZml4
LmgiCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFdlYktpdE91
dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXElu
Y2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGUmcXVvdDs7JnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcV2ViQ29yZSZxdW90OzsmcXVvdDskKFdlYktp
dExpYnJhcmllc0RpcilcSW5jbHVkZVxXZWJDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxJbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJL
aXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90Ozsm
cXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVv
dDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVv
dDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxpY3UmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJy
YXJpZXNEaXIpXEluY2x1ZGVcaWN1JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXENv
cmVGb3VuZGF0aW9uXE9TWENvbXBhdGliaWxpdHlIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxJbmNsdWRlXENvcmVGb3VuZGF0aW9uXE9TWENvbXBhdGliaWxpdHlIZWFk
ZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXENvcmVGb3VuZGF0aW9u
XE9TWENvbXBhdGliaWxpdHlIZWFkZXJzXEdOVUNvbXBhdGliaWxpdHkmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcQ29yZUZvdW5kYXRpb25cT1NYQ29tcGF0aWJpbGl0
eUhlYWRlcnNcR05VQ29tcGF0aWJpbGl0eSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJD
b3JlU3VwcG9ydCZxdW90OzsmcXVvdDskKEludERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdl
YktpdE91dHB1dERpcilcb2JqXFdlYktpdFxEZXJpdmVkU291cmNlcyZxdW90OyIKLQkJCQlQcmVw
cm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtXRUJLSVRfRVhQT1JUUztGUkFNRVdPUktfTkFN
RT1XZWJLaXQ7RU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HO0VOQUJMRV9EQVRBQkFTRTtFTkFCTEVf
REFUQUdSSUQ7RU5BQkxFX0RPTV9TVE9SQUdFO0VOQUJMRV9JQ09OREFUQUJBU0U7RU5BQkxFX09G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUztFTkFCTEVfU1ZHO0VOQUJMRV9TVkdfQU5JTUFUSU9OO0VO
QUJMRV9TVkdfQVNfSU1BR0U7RU5BQkxFX1NWR19GT05UUztFTkFCTEVfU1ZHX0ZPUkVJR05fT0JK
RUNUO0VOQUJMRV9TVkdfVVNFO0VOQUJMRV9WSURFTztFTkFCTEVfV09SS0VSUztFTkFCTEVfWFBB
VEg7RU5BQkxFX1hTTFQiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7V0VC
S0lUX0VYUE9SVFM7RlJBTUVXT1JLX05BTUU9V2ViS2l0O0VOQUJMRV9DSEFOTkVMX01FU1NBR0lO
RztFTkFCTEVfREFUQUJBU0U7RU5BQkxFX0RBVEFHUklEO0VOQUJMRV9ET01fU1RPUkFHRTtFTkFC
TEVfSUNPTkRBVEFCQVNFO0VOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlM7RU5BQkxFX1JV
Qlk7RU5BQkxFX1NWRztFTkFCTEVfU1ZHX0FOSU1BVElPTjtFTkFCTEVfU1ZHX0FTX0lNQUdFO0VO
QUJMRV9TVkdfRk9OVFM7RU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVDtFTkFCTEVfU1ZHX1VTRTtF
TkFCTEVfVklERU87RU5BQkxFX1dPUktFUlM7RU5BQkxFX1hQQVRIO0VOQUJMRV9YU0xUIgogCQkJ
CVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgogCQkJCVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0i
V2ViS2l0UHJlZml4LmgiCiAJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxz
ZSIKQEAgLTI2OSw3ICsyNjksNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5j
bHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZSZxdW90OzsmcXVv
dDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxXZWJDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxJbmNsdWRlXFdlYkNvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktp
dExpYnJhcmllc0RpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXGljdSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJh
cmllc0RpcilcSW5jbHVkZVxpY3UmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGlu
Y2x1ZGVccHRocmVhZHMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcQ29y
ZUZvdW5kYXRpb25cT1NYQ29tcGF0aWJpbGl0eUhlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRM
aWJyYXJpZXNEaXIpXEluY2x1ZGVcQ29yZUZvdW5kYXRpb25cT1NYQ29tcGF0aWJpbGl0eUhlYWRl
cnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcQ29yZUZvdW5kYXRpb25c
T1NYQ29tcGF0aWJpbGl0eUhlYWRlcnNcR05VQ29tcGF0aWJpbGl0eSZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxDb3JlRm91bmRhdGlvblxPU1hDb21wYXRpYmlsaXR5
SGVhZGVyc1xHTlVDb21wYXRpYmlsaXR5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi4mcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYkNv
cmVTdXBwb3J0JnF1b3Q7OyZxdW90OyQoSW50RGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxvYmpcV2ViS2l0XERlcml2ZWRTb3VyY2VzJnF1b3Q7IgotCQkJCVByZXBy
b2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1dFQktJVF9FWFBPUlRTO0ZSQU1FV09SS19OQU1F
PVdlYktpdDtFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkc7RU5BQkxFX0RBVEFCQVNFO0VOQUJMRV9E
QVRBR1JJRDtFTkFCTEVfRE9NX1NUT1JBR0U7RU5BQkxFX0lDT05EQVRBQkFTRTtFTkFCTEVfT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TO0VOQUJMRV9TVkc7RU5BQkxFX1NWR19BTklNQVRJT047RU5B
QkxFX1NWR19BU19JTUFHRTtFTkFCTEVfU1ZHX0ZPTlRTO0VOQUJMRV9TVkdfRk9SRUlHTl9PQkpF
Q1Q7RU5BQkxFX1NWR19VU0U7RU5BQkxFX1dPUktFUlM7RU5BQkxFX1hQQVRIO0VOQUJMRV9YU0xU
IgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1dFQktJVF9FWFBPUlRTO0ZS
QU1FV09SS19OQU1FPVdlYktpdDtFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkc7RU5BQkxFX0RBVEFC
QVNFO0VOQUJMRV9EQVRBR1JJRDtFTkFCTEVfRE9NX1NUT1JBR0U7RU5BQkxFX0lDT05EQVRBQkFT
RTtFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TO0VOQUJMRV9SVUJZO0VOQUJMRV9TVkc7
RU5BQkxFX1NWR19BTklNQVRJT047RU5BQkxFX1NWR19BU19JTUFHRTtFTkFCTEVfU1ZHX0ZPTlRT
O0VOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1Q7RU5BQkxFX1NWR19VU0U7RU5BQkxFX1dPUktFUlM7
RU5BQkxFX1hQQVRIO0VOQUJMRV9YU0xUIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgog
CQkJCVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0iV2ViS2l0UHJlZml4LmgiCiAJCQkJRm9yY2Vk
SW5jbHVkZUZpbGVzPSJXZWJLaXRQcmVmaXguaCIKQEAgLTM0OCw3ICszNDgsNyBAQAogCQkJPFRv
b2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM9IiZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90Ozsm
cXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJh
cmllc0RpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxX
ZWJDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXFdlYkNvcmUm
cXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5n
SGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxXZWJDb3Jl
XEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRl
XEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRl
XEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXGlj
dSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxpY3UmcXVvdDs7JnF1
b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVhZHMmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcQ29yZUZvdW5kYXRpb25cT1NYQ29tcGF0aWJpbGl0eUhl
YWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcQ29yZUZvdW5k
YXRpb25cT1NYQ29tcGF0aWJpbGl0eUhlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXEluY2x1ZGVcQ29yZUZvdW5kYXRpb25cT1NYQ29tcGF0aWJpbGl0eUhlYWRlcnNcR05VQ29t
cGF0aWJpbGl0eSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxDb3Jl
Rm91bmRhdGlvblxPU1hDb21wYXRpYmlsaXR5SGVhZGVyc1xHTlVDb21wYXRpYmlsaXR5JnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcilcLi4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKSZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpXC4uXFdlYkNvcmVTdXBwb3J0JnF1b3Q7OyZxdW90OyQoSW50RGly
KVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcV2ViS2l0XERlcml2
ZWRTb3VyY2VzJnF1b3Q7IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1dF
QktJVF9FWFBPUlRTO0ZSQU1FV09SS19OQU1FPVdlYktpdDtFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJ
Tkc7RU5BQkxFX0RBVEFCQVNFO0VOQUJMRV9EQVRBR1JJRDtFTkFCTEVfRE9NX1NUT1JBR0U7RU5B
QkxFX0lDT05EQVRBQkFTRTtFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TO0VOQUJMRV9T
Vkc7RU5BQkxFX1NWR19BTklNQVRJT047RU5BQkxFX1NWR19BU19JTUFHRTtFTkFCTEVfU1ZHX0ZP
TlRTO0VOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1Q7RU5BQkxFX1NWR19VU0U7RU5BQkxFX1dPUktF
UlM7RU5BQkxFX1hQQVRIO0VOQUJMRV9YU0xUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25z
PSJfVVNSRExMO1dFQktJVF9FWFBPUlRTO0ZSQU1FV09SS19OQU1FPVdlYktpdDtFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkc7RU5BQkxFX0RBVEFCQVNFO0VOQUJMRV9EQVRBR1JJRDtFTkFCTEVfRE9N
X1NUT1JBR0U7RU5BQkxFX0lDT05EQVRBQkFTRTtFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TO0VOQUJMRV9SVUJZO0VOQUJMRV9TVkc7RU5BQkxFX1NWR19BTklNQVRJT047RU5BQkxFX1NW
R19BU19JTUFHRTtFTkFCTEVfU1ZHX0ZPTlRTO0VOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1Q7RU5B
QkxFX1NWR19VU0U7RU5BQkxFX1dPUktFUlM7RU5BQkxFX1hQQVRIO0VOQUJMRV9YU0xUIgogCQkJ
CVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgogCQkJCVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0i
V2ViS2l0UHJlZml4LmgiCiAJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJXZWJLaXRQcmVmaXguaCIK
SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ1Nzk1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDctMTMgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisJCUFkZGVkIGZsYWcgRU5BQkxFX1JVQlkgdG8gZW5hYmxlL2Rpc2FibGUgSFRN
TDUgcnVieSBzdXBwb3J0LgorCQlBZGRlZCBhZGRpdGlvbmFsIHJ1YnkuY3NzIHN0eWxlIHNoZWV0
IE9OTFkgaWYgcnVieSBzdXBwb3J0IGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1
aWxkLXdlYmtpdDoKKwogMjAwOS0wNy0xMyAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy9idWlsZC13ZWJraXQJKHJldmlzaW9uIDQ1NzgyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9i
dWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0NiwxMCBAQCBteSAkbWFrZUFy
Z3M7CiAKIG15ICgkdGhyZWVEUmVuZGVyaW5nU3VwcG9ydCwgJGNoYW5uZWxNZXNzYWdpbmdTdXBw
b3J0LCAkZGF0YWJhc2VTdXBwb3J0LCAkZG9tU3RvcmFnZVN1cHBvcnQsCiAgICAgJGZpbHRlcnNT
dXBwb3J0LCAkZ2VvbG9jYXRpb25TdXBwb3J0LCAkZ25vbWVLZXlyaW5nU3VwcG9ydCwgJGljb25E
YXRhYmFzZVN1cHBvcnQsCi0gICAgJGphdmFTY3JpcHREZWJ1Z2dlclN1cHBvcnQsICRvZmZsaW5l
V2ViQXBwbGljYXRpb25TdXBwb3J0LCAkc3ZnU3VwcG9ydCwgJHN2Z0FuaW1hdGlvblN1cHBvcnQs
Ci0gICAgJHN2Z0FzSW1hZ2VTdXBwb3J0LCAkc3ZnRE9NT2JqQ0JpbmRpbmdzU3VwcG9ydCwgJHN2
Z0ZvbnRzU3VwcG9ydCwgJHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0LAotICAgICRzdmdVc2VTdXBw
b3J0LCAkdmlkZW9TdXBwb3J0LCAkd21sU3VwcG9ydCwgJHdvcmtlcnNTdXBwb3J0LCAkeHBhdGhT
dXBwb3J0LCAkeHNsdFN1cHBvcnQsCi0gICAgJGNvdmVyYWdlU3VwcG9ydCk7CisgICAgJGphdmFT
Y3JpcHREZWJ1Z2dlclN1cHBvcnQsICRvZmZsaW5lV2ViQXBwbGljYXRpb25TdXBwb3J0LCAkcnVi
eVN1cHBvcnQsICRzdmdTdXBwb3J0LCAKKyAgICAkc3ZnQW5pbWF0aW9uU3VwcG9ydCwgJHN2Z0Fz
SW1hZ2VTdXBwb3J0LCAkc3ZnRE9NT2JqQ0JpbmRpbmdzU3VwcG9ydCwgJHN2Z0ZvbnRzU3VwcG9y
dCwgCisgICAgJHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0LCAkc3ZnVXNlU3VwcG9ydCwgJHZpZGVv
U3VwcG9ydCwgJHdtbFN1cHBvcnQsICR3b3JrZXJzU3VwcG9ydCwgCisgICAgJHhwYXRoU3VwcG9y
dCwgJHhzbHRTdXBwb3J0LCAkY292ZXJhZ2VTdXBwb3J0KTsKIAogbXkgQGZlYXR1cmVzID0gKAog
ICAgIHsgb3B0aW9uID0+ICIzZC1yZW5kZXJpbmciLCBkZXNjID0+ICJUb2dnbGUgM0QgcmVuZGVy
aW5nIHN1cHBvcnQiLApAQCAtODUsNiArODUsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBv
cHRpb24gPT4gIm9mZmxpbmUtd2ViLWFwcGxpY2F0aW9ucyIsIGRlc2MgPT4gIlRvZ2dsZSBPZmZs
aW5lIFdlYiBBcHBsaWNhdGlvbiBTdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX09G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRvZmZsaW5l
V2ViQXBwbGljYXRpb25TdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAicnVieSIsIGRlc2Mg
PT4gIlRvZ2dsZSBIVE1MNSBSdWJ5IHN1cHBvcnQiLAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
UlVCWSIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRydWJ5U3VwcG9ydCB9LAorCiAgICAgeyBv
cHRpb24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcgc3VwcG9ydCIsCiAgICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkc3ZnU3VwcG9ydCB9
LAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32655</attachid>
            <date>2009-07-13 03:02:50 -0700</date>
            <delta_ts>2009-08-04 01:08:20 -0700</delta_ts>
            <desc>patch: layout tests for ruby implementation</desc>
            <filename>ruby_layouttests.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32823</attachid>
            <date>2009-07-15 17:51:33 -0700</date>
            <delta_ts>2009-08-04 01:06:19 -0700</delta_ts>
            <desc>patch: HTML5 ruby functionality only - requires patch in bug #32822 for build option</desc>
            <filename>rubysplit_func.patch</filename>
            <type>text/plain</type>
            <size>72058</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
ICAgKHJldmlzaW9uIDQ1Nzk1KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cgICAod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1OSBAQAorMjAwOS0wNy0xMyAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRz
dGVpbmVyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgCisgICAgICAg
IEltcGxlbWVudGVkIGJhc2ljIEhUTUw1IHJ1Ynkgc3VwcG9ydC4gCisgICAgICAgKHNlZSBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90
ZXh0LWxldmVsLXNlbWFudGljcy5odG1sI3RoZS1ydWJ5LWVsZW1lbnQpCisgICAgICAgCisgICAg
ICAgTm8gQ1NTMyBydWJ5IHByb3BlcnRpZXMgb3IgdmFsdWVzIGFyZSBob25vcmVkLgorICAgICAg
IFRoZSBDU1MzIGJveCBtb2RlbCBpcyBob25vcmVkIGluIGEgcnVkaW1lbnRhcnkgd2F5IAorICAg
ICAgIChib3JkZXJzIGFuZCBwYWRkaW5nIHN1cnJvdW5kIHRoZSB3aG9sZSA8cnVieT4gZWxlbWVu
dD4uCisgICAgICAgCisgICAgICAgUnVieSBpcyByZW5kZXJlZCBpZiBhIDxydWJ5PiBIVE1MIHRh
ZyBpcyBlbmNvdW50ZXJlZC4KKyAgICAgICBDU1MzIGRpc3BsYXkgdmFsdWVzICgncnVieScsICdy
dWJ5LWJhc2UnLCBldGMuKSBhcmUgbm90IHVzZWQuIAorICAgICAgIFRoZSBub3JtYWwgYm94IG1v
ZGVsIGlzIGFzIGZvbGxvd3MgKHdpdGggdGhlaXIgZGlzcGxheSBhbmFsb2d5IGluIGJyYWNrZXRz
KToKKyAgICAgICAKKyAgICAgICBSZW5kZXJSdWJ5QXNJbmxpbmUqKSAoaW5saW5lKS9SZW5kZXJS
dWJ5QXNCbG9jayopIChibG9jaykKKyAgICAgICAgICAgMSsgUmVuZGVyUnVieVJ1biAoaW5saW5l
LWJsb2NrKQorICAgICAgICAgICAgICAgMSBSZW5kZXJSdWJ5QmFzZShibG9jaykKKyAgICAgICAg
ICAgICAgICAgICAxKyB0ZXh0IGFuZC9vciBpbmxpbmUgb2JqZWN0cworICAgICAgICAgICAgICAg
MC0yKiopIFJlbmRlclJ1YnlUZXh0KGJsb2NrKQorICAgICAgICAgICAgICAgICAgIDErIHRleHQg
YW5kL29yIGlubGluZSBvYmplY3RzCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgT3RoZXIg
b2JqZWN0cyBhcmUgd3JhcHBlZCBhcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhp
cyB0cmVlIHN0cnVjdHVyZS4KKworICAgICAgICopIHJ1YnkgaXMgbm9ybWFsbHkgYW4gaW5saW5l
IG9iamVjdHMsIGFuZCB0aHVzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkgUmVuZGVyUnVieUFzSW5s
aW5lLgorICAgICAgIEhvd2V2ZXIsIHdoZW4gdGhlIHJ1YnkgZWxlbWVudCBpdHNlbGYgaXMgZmxv
YXRlZCBvciBwb3NpdGlvbmVkLCBSZW5kZXJSdWJ5QXNCbG9jayB3aWxsIGJlIHVzZWQuCisKKyAg
ICAgICAqKilBIDJuZCA8cnQ+IGZvciBhIGdpdmVuIGJhc2UgY3VycmVudGx5IGlzIGFsbG93ZWQg
YW5kIHdpbGwgcmVuZGVyIGJlbG93IHRoZSBiYXNlLgorICAgICAgIE5vdGUgdGhhdCB0aGlzIGlz
bid0IHRlc3RlZCBmb3IgaW4gdGhlIGxheW91dCB0ZXN0cywgYXMgdGhpcyBmZWF0dXJlIG1heSBi
ZSBjb250cm92ZXJzaWFsLgorICAgICAgIAorICAgICAgIFRoZSBtYWluIGxvZ2ljIGlzIGNvbnRh
aW5lZCBpbiBSZW5kZXJSdWJ5UnVuIGFuZCBSdWJ5SW5saW5lRmxvd0JveC4KKyAgICAgICAKKyAg
ICAgICBSZW5kZXJSdWJ5QXNJbmxpbmUvUmVuZGVyUnVieUFzQmxvY2sgYXJlIHJhdGhlciBzaW1w
bGUgc3ViLWNsYXNzZXMgdGhhdCBtYWlubHkgZG8gc3BlY2lhbCBjaGlsZCBoYW5kbGluZy4KKyAg
ICAgICBSZW5kZXJSdWJ5UnVuIHN1YmNsYXNzZXMgYW5kIHJlLXVzZXMgdGhlIGZ1bmN0aW9uYWxp
dHkgb2YgUmVuZGVyQmxvY2sgZm9yIGxheW91dGluZy4KKyAgICAgICBSZW5kZXJSdWJ5QmFzZSBh
bmQgUmVuZGVyUnVieVRleHQgYXJlIHNpbXBsZSBzdWJjbGFzc2VzIG9mIFJlbmRlckJsb2NrIHRo
YXQgb25seSBkbyBzcGVjaWFsIGNoaWxkIGhhbmRsaW5nLiAgICAgCisgICAgICAgUnVieUlubGlu
ZUZsb3dCb3ggaXMgYSBzdWJjbGFzcyBvZiBJbmxpbmVGTG93Qm94IGFuZCBkb2VzIHRoZSBib3Jk
ZXIgYW5kIHBhZGRpbmcgaGFuZGxpbmcgCisgICAgICAgZm9yIHRoZSB3aG9sZSA8cnVieT4gZWxl
bWVudCBhbmQgaXRzIGNvbnRlbnRzLgorICAgICAgIFJvdWJ5Um9vdElubGluZUJveCBpcyBhIHNp
bWlsYXIgc3ViY2xhc3MgdG8gUm9vdElubGluZUJveCwgYnV0IGFzIGl0cyB1c2VkIG9ubHkgaW4g
YmxvY2sKKyAgICAgICBsYXlvdXRpbmcsIGl0IG9ubHkgbmVlZHMgdG8gb3ZlcnJpZGUgYSBzaW5n
bGUgaW5mb3JtYXRpb24gbWV0aG9kIGlzUnVieSgpLiAKKworICAgICAgICBUbyBsaW1pdCB0aGUg
c2l6ZSBvZiB0aGUgcGF0Y2gsIHRlc3RzIGFyZSBjb250YWluZWQgaW4gYSBzZXBhcmF0ZSBwYXRj
aCBmaWxlLgorICAgICAgICAKKyAgICAgICAgVGVzdHM6IGZhc3QvcnVieS9ydWJ5LWxlbmd0aC1i
b3JkZXIuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1YnktbGVuZ3RoLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXJ1bi1icmVhay1ib3JkZXIuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC9ydWJ5L3J1YnktcnVuLWJyZWFrLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvcnVieS9ydWJ5LXJ1bnMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1Ynktc2lt
cGxlLXJwLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXNpbXBsZS5odG1sCisK
KyAgICAgICAgQ29uZmlndXJhdGlvbiBmaWxlIGNoYW5nZXMgKG1haW5seSBhZGQgRU5BQkxFX1JV
QlkgZmxhZyk6CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25m
aWc6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQpOiBsb2FkaW5nIG9mIGV4dHJhIHN0eWxlc2hl
ZXQgZm9yIHJ1YnkKKyAgICAgICAgCisgICAgICAgICogY3NzL3J1YnkuY3NzOiBBZGRlZC4gIERl
ZmF1bHQgc3R5bGVzaGVldCBmb3IgcnVieSBlbGVtZW50cworICAgICAgICAKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmlzUnVi
eSk6IHF1ZXJ5IG1ldGhvZAorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpiYXNlbGluZVBv
c2l0aW9uKTogdmlydHVhbCB3aGVuIEVOQUJMRV9SVUJZIGlzIHNldCwgb3ZlcnJpZGRlbiBieSBy
dWJ5IAorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpsaW5lSGVpZ2h0KTogdmlydHVhbCB3
aGVuIEVOQUJMRV9SVUJZIGlzIHNldCwgb3ZlcnJpZGRlbiBieSBydWJ5IAorICAgICAgICAqIHJl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDogCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93
Qm94OjpwbGFjZUJveGVzVmVydGljYWxseSk6IGFkYXB0IGJveCBwbGFjZW1lbnQgZm9yIHJ1Ynkg
aW5saW5lIGZsb3cgYm94ZXMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDog
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Zmlyc3RDaGlsZEJveEluTGF5b3V0T3Jk
ZXIpOiBoYW5kbGUgb3JkZXIgaW4gd2hpY2ggYmxvY2sgYm94ZXMgYXJlIHN0YWNrZWQsIG92ZXJy
aWRkZW4gYnkgcnVieSAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0Q2hpbGRC
b3hJbkxheW91dE9yZGVyKTogaGFuZGxlIG9yZGVyIGluIHdoaWNoIGJsb2NrIGJveGVzIGFyZSBz
dGFja2VkLCBvdmVycmlkZGVuIGJ5IHJ1YnkKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpsYXlvdXRCbG9ja0NoaWxkcmVuKTogbWFrZSB1c2Ugb2YgYWJvdmUgbWV0aG9kcworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3Qp
OiBjcmVhdGlvbiBvZiBydWJ5IHJlbmRlcmVycworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSdWJ5KTogaW5mb3Jt
YXRpb24gbWV0aG9kIGFkZGVkCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUnVi
eVJ1bik6IGluZm9ybWF0aW9uIG1ldGhvZCBhZGRlZCAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6aXNSdWJ5QmFzZSk6IGluZm9ybWF0aW9uIG1ldGhvZCBhZGRlZAorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1J1YnlUZXh0KTogaW5mb3JtYXRpb24gbWV0aG9kIGFk
ZGVkCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6UmVuZGVyUnVieUFzSW5saW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6flJlbmRlclJ1YnlBc0lubGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OmlzQ2hpbGRBbGxvd2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjpjcmVhdGVBbm9ueW1vdXNSdWJ5UnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6Y3JlYXRlSW5saW5lRmxvd0JveCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6UmVuZGVyUnVieUFzQmxvY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6On5SZW5kZXJSdWJ5QXNCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6aXNDaGlsZEFsbG93ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjpjcmVhdGVBbm9ueW1vdXNSdWJ5UnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjpjcmVhdGVSb290SW5saW5lQm94
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSdWJ5QXNJbmxpbmU6OmlzUnVieSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
dWJ5QXNCbG9jazo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNC
bG9jazo6aXNSdWJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjpzaG91
bGRQYWludFNlbGVjdGlvbkdhcHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5QmFz
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6OlJlbmRlclJ1
YnlCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjp+UmVuZGVyUnVieUJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6OmlzQ2hpbGRBbGxvd2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSdWJ5QmFzZTo6aXNSdWJ5QmFzZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1
YnlSdW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OlJlbmRl
clJ1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6flJlbmRlclJ1YnlS
dW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aGFzUnVieUJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6bnVtYmVyT2ZSdWJ5VGV4dHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpmaXJzdExpbmVCbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSdWJ5UnVuOjp1cGRhdGVGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSdWJ5UnVuOjppc0NoaWxkQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
dWJ5UnVuOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpmaXJz
dENoaWxkQm94SW5MYXlvdXRPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVu
OjpuZXh0Q2hpbGRCb3hJbkxheW91dE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1
YnlSdW46OmVmZmVjdGl2ZVJ1YnlQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
dWJ5UnVuOjpnZXRSdWJ5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpn
ZXRGaXJzdFJ1YnlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmdldExh
c3RSdWJ5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpjcmVhdGVBbm9u
eW1vdXNSdWJ5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpjcmVhdGVB
bm9ueW1vdXNSdWJ5VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW5kZXJOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmlzUnVieVJ1bik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5UnVuOjppc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpzaG91bGRQYWludFNlbGVjdGlvbkdhcHMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUnVieVRleHQ6OlJlbmRlclJ1YnlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJ1YnlUZXh0Ojp+UmVuZGVyUnVieVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUnVieVRleHQ6OmlzQ2hpbGRBbGxvd2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UnVieVRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5VGV4dDo6cmVu
ZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5VGV4dDo6aXNSdWJ5VGV4dCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6ZXh0cmFSdWJ5U3R5bGVTaGVldCk6IGV4dHJhIHN0eWxlc2hlZXQgZm9yIHJ1
YnkgCisgICAgICAgICogcmVuZGVyaW5nL1J1YnlJbmxpbmVGbG93Qm94LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSdWJ5SW5saW5lRmxvd0JveDo6UnVieUlubGluZUZsb3dCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVieUlubGluZUZsb3dCb3g6OnZpcnR1YWxIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVieUlubGluZUZsb3dCb3g6OmJhc2VsaW5lUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UnVieUlubGluZUZsb3dCb3g6OmNvbXB1dGVIZWlnaHRBbmRCYXNlbGlu
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1J1YnlJbmxpbmVGbG93Qm94Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UnVieUlubGluZUZsb3dCb3g6OmlzUnVieSk6CisgICAgICAgIChXZWJD
b3JlOjpSdWJ5SW5saW5lRmxvd0JveDo6bGluZUhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5n
L1J1YnlSb290SW5saW5lQm94LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSdWJ5Um9v
dElubGluZUJveDo6UnVieVJvb3RJbmxpbmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SdWJ5
Um9vdElubGluZUJveC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJ1YnlSb290SW5saW5l
Qm94Ojppc1J1YnkpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0
YW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKwogMjAwOS0wNy0xMyAgRHJldyBXaWxzb24g
IDxhdHdpbHNvbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmlu
LgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZSAocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgKHdvcmtpbmcgY29weSkKQEAgLTUyMyw2ICs1MjMsMTAgQEAgWFBhdGhH
cmFtbWFyLmNwcCA6IHhtbC9YUGF0aEdyYW1tYXIueSAkKAogCiBVU0VSX0FHRU5UX1NUWUxFX1NI
RUVUUyA9ICQoV2ViQ29yZSkvY3NzL2h0bWwuY3NzICQoV2ViQ29yZSkvY3NzL3F1aXJrcy5jc3Mg
JChXZWJDb3JlKS9jc3Mvdmlldy1zb3VyY2UuY3NzICQoV2ViQ29yZSkvY3NzL3RoZW1lV2luLmNz
cyAkKFdlYkNvcmUpL2Nzcy90aGVtZVdpblF1aXJrcy5jc3MgCiAKK2lmZXEgKCQoZmluZHN0cmlu
ZyBFTkFCTEVfUlVCWSwkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfUlVCWSkKKyAgICBVU0VS
X0FHRU5UX1NUWUxFX1NIRUVUUyA6PSAkKFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTKSAkKFdlYkNv
cmUpL2Nzcy9ydWJ5LmNzcyAKK2VuZGlmCisKIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU1ZH
LCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkcpCiAgICAgVVNFUl9BR0VOVF9TVFlMRV9T
SEVFVFMgOj0gJChVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUykgJChXZWJDb3JlKS9jc3Mvc3ZnLmNz
cyAKIGVuZGlmCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0gIChyZXZpc2lvbiA0NTc4MikKKysrIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0gICh3b3JraW5nIGNvcHkpCkBAIC0yMjA3LDYgKzIyMDcsMzAgQEAgd2ViY29yZV9s
aWJhZGQgKz0gXAogZW5kaWYgIyBFTkQgRU5BQkxFX1ZJREVPCiAKICMgLS0tLQorIyBSdWJ5IFN1
cHBvcnQKKyMgLS0tLQoraWYgRU5BQkxFX1JVQlkKKworSFRNTF9GRUFUVVJFUyArPSBFTkFCTEVf
UlVCWT0xCit3ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxFX1JVQlk9MQorCit3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAgXAorICAgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oIFwKKyAgIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcCBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5oIFwK
KyAgIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwIFwKKyAgIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
VGV4dC5jcHAgXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaCBcCisgICBX
ZWJDb3JlL3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5jcHAgXAorICAgV2ViQ29yZS9yZW5k
ZXJpbmcvUnVieUlubGluZUZsb3dCb3guaCBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5Um9v
dElubGluZUJveC5jcHAgXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUnVieVJvb3RJbmxpbmVCb3gu
aAorCitlbmRpZiAjIEVORCBFTkFCTEVfUlVCWQorCisjIC0tLS0KICMgWFBhdGggU3VwcG9ydAog
IyAtLS0tCiBpZiBFTkFCTEVfWFBBVEgKQEAgLTMxMjgsNiArMzE1MiwxMyBAQCBVU0VSX0FHRU5U
X1NUWUxFX1NIRUVUUyA9IFwKICAgICQoV2ViQ29yZSkvY3NzL3dtbC5jc3MgXAogICAgJChXZWJD
b3JlKS9jc3MvbWVkaWFDb250cm9scy5jc3MKIAoraWYgRU5BQkxFX1JVQlkKKyMgTm90ZTogcnVi
eS5jc3Mgc2V0cyA8cnA+IGRpc3BsYXk6bm9uZSwgd2hpY2ggd2UgZG9uJ3Qgd2FudCBpZiBydWJ5
IGlzbid0LCBpbiBmYWN0LCBlbmFibGVkCitVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyArPSBcCisg
ICAkKFdlYkNvcmUpL2Nzcy9ydWJ5LmNzcworZW5kaWYgIyBFTkQgRU5BQkxFX1JVQlkKKyAgIAor
CiAjIG5ldy1zdHlsZSBKYXZhU2NyaXB0IGJpbmRpbmdzCiBTQ1JJUFRTX0JJTkRJTkdTID0gXAog
ICAgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gXApAQCAtMzI3
Miw2ICszMzAzLDEzIEBAIHdlYmNvcmVfZGlzdCArPSBcCiAgICBXZWJDb3JlL3htbC94bWxhdHRy
cy5pbiBcCiAgICBXZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQogCitpZiBFTkFCTEVfUlVCWQor
IyBOb3RlOiBydWJ5LmNzcyBzZXRzIDxycD4gZGlzcGxheTpub25lLCB3aGljaCB3ZSBkb24ndCB3
YW50IGlmIHJ1YnkgaXNuJ3QsIGluIGZhY3QsIGVuYWJsZWQKK3dlYmNvcmVfZGlzdCArPSBcCisg
ICBXZWJDb3JlL2Nzcy9ydWJ5LmNzcworZW5kaWYgIyBFTkQgRU5BQkxFX1JVQlkKKyAgIAorCiAj
IEluc3RhbGxpbmcgd2ViIGluc3BlY3RvciBmaWxlcwogd2ViaW5zcGVjdG9yZGlyID0gJHtkYXRh
ZGlyfS93ZWJraXQtMS4wL3dlYmluc3BlY3RvcgogZGlzdF93ZWJpbnNwZWN0b3JfREFUQSA9IFwK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5neXBpICAgIChyZXZpc2lvbiA0NTc4MikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpICAgICh3
b3JraW5nIGNvcHkpCkBAIC0yNzQ3LDYgKzI3NDcsMTQgQEAKICAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJlcGxp
Y2EuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5j
cHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5oJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5UnVuLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4
dC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU1ZHQmxvY2suaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5jcHAnLApAQCAtMjgzMiw2ICsyODQwLDEwIEBACiAgICAgICAgICAgICAncmVu
ZGVyaW5nL1JlbmRlcldvcmRCcmVhay5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgnLAor
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5jcHAnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SdWJ5SW5saW5lRmxvd0JveC5oJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvUnVieVJvb3RJbmxpbmVCb3guY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUnVieVJv
b3RJbmxpbmVCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNw
cCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmNwcCcsCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8gKHJldmlzaW9u
IDQ1NzgyKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybyAod29ya2luZyBjb3B5KQpAQCAtMTQ4MCw2
ICsxNDgzLDE5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKIH0KIAor
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1JVQlk9MSkgeworICAgU1RZTEVTSEVFVFNfRU1CRUQg
Kz0gXAorICAgICAgICQkUFdEL2Nzcy9ydWJ5LmNzcworCisgICAgU09VUkNFUyArPSBcCisgICAg
ICAgIHJlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9SZW5kZXJS
dWJ5QmFzZS5jcHAgXAorICAgICAgICByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAgXAorICAg
ICAgICByZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL1J1
YnlJbmxpbmVGbG93Qm94LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9SdWJ5Um9vdElubGluZUJv
eC5jcHAKK30KKwogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPTEpIHsKICAgICBGRUFU
VVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfWFBBVEg9MQogCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgIChyZXZpc2lvbiA0NTc4MikKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgKHdvcmtpbmcgY29w
eSkKQEAgLTE5MCw2ICsxOTAsMTkgQEAKICAgICAgICAxNDhBRkRBNjBBRjU4MzYwMDA4Q0M3MDAg
LyogRXhjZXB0aW9uSGFuZGxlcnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDhBRkRBNDBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxl
cnMubW0gKi87IH07CiAgICAgICAgMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLzsgfTsK
ICAgICAgICAxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFNDBCMkYy
QjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKyAgICAgICAxNDlDNzhGNDEwMERFNjEwMDAzNTE5QkIg
LyogUmVuZGVyUnVieS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDlDNzhFQzEwMERFNjEwMDAzNTE5QkIgLyogUmVuZGVyUnVieS5jcHAgKi87IH07
CisgICAgICAgMTQ5Qzc4RjUxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OUM3OEVEMTAwREU2MTAw
MDM1MTlCQiAvKiBSZW5kZXJSdWJ5LmggKi87IH07CisgICAgICAgMTQ5Qzc4RjYxMDBERTYxMDAw
MzUxOUJCIC8qIFJlbmRlclJ1YnlCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0OUM3OEVFMTAwREU2MTAwMDM1MTlCQiAvKiBSZW5kZXJSdWJ5
QmFzZS5jcHAgKi87IH07CisgICAgICAgMTQ5Qzc4RjcxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRl
clJ1YnlCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDlDNzhFRjEwMERFNjEwMDAzNTE5QkIgLyogUmVuZGVyUnVieUJhc2UuaCAqLzsgfTsKKyAg
ICAgICAxNDlDNzhGODEwMERFNjEwMDAzNTE5QkIgLyogUmVuZGVyUnVieVJ1bi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDlDNzhGMDEwMERFNjEw
MDAzNTE5QkIgLyogUmVuZGVyUnVieVJ1bi5jcHAgKi87IH07CisgICAgICAgMTQ5Qzc4RjkxMDBE
RTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OUM3OEYxMTAwREU2MTAwMDM1MTlCQiAvKiBSZW5kZXJS
dWJ5UnVuLmggKi87IH07CisgICAgICAgMTQ5Qzc4RkExMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRl
clJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0OUM3OEYyMTAwREU2MTAwMDM1MTlCQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi87IH07
CisgICAgICAgMTQ5Qzc4RkIxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnlUZXh0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDlDNzhGMzEwMERF
NjEwMDAzNTE5QkIgLyogUmVuZGVyUnVieVRleHQuaCAqLzsgfTsKKyAgICAgICAxNDlDNzkwMDEw
MERFNjI4MDAzNTE5QkIgLyogUnVieUlubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5Qzc4RkMxMDBERTYyODAwMzUxOUJCIC8q
IFJ1YnlJbmxpbmVGbG93Qm94LmNwcCAqLzsgfTsKKyAgICAgICAxNDlDNzkwMTEwMERFNjI4MDAz
NTE5QkIgLyogUnVieUlubGluZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0OUM3OEZEMTAwREU2MjgwMDM1MTlCQiAvKiBSdWJ5SW5saW5l
Rmxvd0JveC5oICovOyB9OworICAgICAgIDE0OUM3OTAyMTAwREU2MjgwMDM1MTlCQiAvKiBSdWJ5
Um9vdElubGluZUJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDlDNzhGRTEwMERFNjI4MDAzNTE5QkIgLyogUnVieVJvb3RJbmxpbmVCb3guY3Bw
ICovOyB9OworICAgICAgIDE0OUM3OTAzMTAwREU2MjgwMDM1MTlCQiAvKiBSdWJ5Um9vdElubGlu
ZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5
Qzc4RkYxMDBERTYyODAwMzUxOUJCIC8qIFJ1YnlSb290SW5saW5lQm94LmggKi87IH07CisgICAg
ICAgMTQ5Qzc5MDUxMDBERTY0NjAwMzUxOUJCIC8qIHJ1YnkuY3NzIGluIFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDlDNzkwNDEwMERFNjQ2MDAzNTE5QkIg
LyogcnVieS5jc3MgKi87IH07CiAgICAgICAgMTRDOUE1RUEwQjNEMTA1RjAwNUEwMjMyIC8qIFNl
dHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi87IH07CiAgICAgICAg
MTRDRjc4QTQwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjc4QTMwOUY1OENCRjAwRUIzNjY1
IC8qIEpTQ1NTVmFsdWUuY3BwICovOyB9OwogICAgICAgIDE0Q0Y3OEE2MDlGNThDRDgwMEVCMzY2
NSAvKiBKU0NTU1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNENGNzhBNTA5RjU4Q0Q4MDBFQjM2NjUgLyogSlNDU1NWYWx1ZS5oICovOyB9OwpA
QCAtNTA5Miw2ICs1MTA1LDE5IEBACiAgICAgICAgMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8q
IEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
ICAgICAgIDE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvY3VzQ29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAgICAgICAgMTQ5OTNCRTQwQjJGMkIxQzAwNTA0
OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRm9jdXNDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisgICAgICAg
MTQ5Qzc4RUMxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisgICAgICAgMTQ5Qzc4RUQxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1Ynku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUnVieS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworICAgICAgIDE0OUM3OEVFMTAwREU2MTAwMDM1MTlCQiAvKiBS
ZW5kZXJSdWJ5QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJSdWJ5QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisgICAgICAgMTQ5
Qzc4RUYxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnlCYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1YnlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisgICAgICAgMTQ5Qzc4RjAxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnlSdW4u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieVJ1bi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisgICAgICAgMTQ5Qzc4RjExMDBERTYxMDAw
MzUxOUJCIC8qIFJlbmRlclJ1YnlSdW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyUnVieVJ1bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworICAgICAgIDE0
OUM3OEYyMTAwREU2MTAwMDM1MTlCQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJSdWJ5VGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisgICAgICAgMTQ5Qzc4RjMxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRl
clJ1YnlUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1YnlU
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisgICAgICAgMTQ5Qzc4RkMxMDBERTYy
ODAwMzUxOUJCIC8qIFJ1YnlJbmxpbmVGbG93Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1YnlJbmxpbmVGbG93Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKyAgICAgICAxNDlDNzhGRDEwMERFNjI4MDAzNTE5QkIgLyogUnVieUlubGluZUZs
b3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVieUlubGluZUZsb3dC
b3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKyAgICAgICAxNDlDNzhGRTEwMERFNjI4
MDAzNTE5QkIgLyogUnVieVJvb3RJbmxpbmVCb3guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUnVieVJvb3RJbmxpbmVCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworICAgICAgIDE0OUM3OEZGMTAwREU2MjgwMDM1MTlCQiAvKiBSdWJ5Um9vdElubGlu
ZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdWJ5Um9vdElubGluZUJv
eC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworICAgICAgIDE0OUM3OTA0MTAwREU2NDYw
MDM1MTlCQiAvKiBydWJ5LmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gcnVieS5jc3M7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAgICAgICAgMTRDOUE1RTkwQjNEMTA1RjAwNUEw
MjMyIC8qIFNldHRpbmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZXR0aW5ncy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAgICAgICAgMTRDRjc4
NzEwOUY1ODdDQTAwRUIzNjY1IC8qIENTU1ZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gQ1NTVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogICAgICAgIDE0Q0Y3
OEEzMDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0NTU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0MjI0LDYgKzE0MjUwLDcgQEAKICAgICAgICAgICAgICAgIEJDNDM2OEU3MEMy
MjZFMzIwMDVFRkI1RiAvKiBSZWN0LmggKi8sCiAgICAgICAgICAgICAgICBBODBFNzk5NjBBMTlC
RDIxMDA3RkI4QzUgLyogUmVjdC5pZGwgKi8sCiAgICAgICAgICAgICAgICA4NThDMzhFRjBBQThG
REQxMDBCMTg3QTQgLyogUkdCQ29sb3IuaWRsICovLAorICAgICAgICAgICAgICAgMTQ5Qzc5MDQx
MDBERTY0NjAwMzUxOUJCIC8qIHJ1YnkuY3NzICovLAogICAgICAgICAgICAgICAgQTgwRTZDQ0Ew
QTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmNwcCAqLywKICAgICAgICAgICAgICAgIEE4
MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oICovLAogICAgICAgICAgICAg
ICAgQTgwRTczNEMwQTE5OUM3NzAwN0ZCOEM1IC8qIFN0eWxlQmFzZS5jcHAgKi8sCkBAIC0xNDM2
OCw2ICsxNDM5NSwxNCBAQAogICAgICAgICAgICAgICAgQTg3MURGREYwQTE1Mzc2QjAwQjEyQTY4
IC8qIFJlbmRlclJlcGxhY2VkLmggKi8sCiAgICAgICAgICAgICAgICBCQ0E4NDZENDBEQzY3QTM1
MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5jcHAgKi8sCiAgICAgICAgICAgICAgICBCQ0E4NDZE
NTBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5oICovLAorICAgICAgICAgICAgICAg
MTQ5Qzc4RUMxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnkuY3BwICovLAorICAgICAgICAg
ICAgICAgMTQ5Qzc4RUQxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnkuaCAqLywKKyAgICAg
ICAgICAgICAgIDE0OUM3OEVFMTAwREU2MTAwMDM1MTlCQiAvKiBSZW5kZXJSdWJ5QmFzZS5jcHAg
Ki8sCisgICAgICAgICAgICAgICAxNDlDNzhFRjEwMERFNjEwMDAzNTE5QkIgLyogUmVuZGVyUnVi
eUJhc2UuaCAqLywKKyAgICAgICAgICAgICAgIDE0OUM3OEYwMTAwREU2MTAwMDM1MTlCQiAvKiBS
ZW5kZXJSdWJ5UnVuLmNwcCAqLywKKyAgICAgICAgICAgICAgIDE0OUM3OEYxMTAwREU2MTAwMDM1
MTlCQiAvKiBSZW5kZXJSdWJ5UnVuLmggKi8sCisgICAgICAgICAgICAgICAxNDlDNzhGMjEwMERF
NjEwMDAzNTE5QkIgLyogUmVuZGVyUnVieVRleHQuY3BwICovLAorICAgICAgICAgICAgICAgMTQ5
Qzc4RjMxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnlUZXh0LmggKi8sCiAgICAgICAgICAg
ICAgICBCQzNCRTk5MDBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyLmNwcCAqLywK
ICAgICAgICAgICAgICAgIEJDM0JFOTkxMEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxi
YXIuaCAqLywKICAgICAgICAgICAgICAgIEJDM0JFOUFBMEU5QzI0MjAwMDgzNTU4OCAvKiBSZW5k
ZXJTY3JvbGxiYXJQYXJ0LmNwcCAqLywKQEAgLTE0NDQxLDYgKzE0NDc2LDEwIEBACiAgICAgICAg
ICAgICAgICA5Mzc5OUVGNzBCRjI3NDM2MDBEMEYyMzAgLyogUmVuZGVyV29yZEJyZWFrLmggKi8s
CiAgICAgICAgICAgICAgICBBOENGRjVFMDBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJv
eC5jcHAgKi8sCiAgICAgICAgICAgICAgICBBOENGRjVEQTBBMTU1QTA1MDAwQTQyMzQgLyogUm9v
dElubGluZUJveC5oICovLAorICAgICAgICAgICAgICAgMTQ5Qzc4RkMxMDBERTYyODAwMzUxOUJC
IC8qIFJ1YnlJbmxpbmVGbG93Qm94LmNwcCAqLywKKyAgICAgICAgICAgICAgIDE0OUM3OEZEMTAw
REU2MjgwMDM1MTlCQiAvKiBSdWJ5SW5saW5lRmxvd0JveC5oICovLAorICAgICAgICAgICAgICAg
MTQ5Qzc4RkUxMDBERTYyODAwMzUxOUJCIC8qIFJ1YnlSb290SW5saW5lQm94LmNwcCAqLywKKyAg
ICAgICAgICAgICAgIDE0OUM3OEZGMTAwREU2MjgwMDM1MTlCQiAvKiBSdWJ5Um9vdElubGluZUJv
eC5oICovLAogICAgICAgICAgICAgICAgNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9s
bEJlaGF2aW9yLmNwcCAqLywKICAgICAgICAgICAgICAgIDVEOTI1QjY2MEY2NEQ0REQwMEI4NDdG
MCAvKiBTY3JvbGxCZWhhdmlvci5oICovLAogICAgICAgICAgICAgICAgQjJCMzNBNUQwQjg4N0NF
RjAwQzE1OTg0IC8qIFNWR0NoYXJhY3RlckxheW91dEluZm8uY3BwICovLApAQCAtMTY5NjUsNiAr
MTcwMDQsMTIgQEAKICAgICAgICAgICAgICAgIDkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBY
U0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKICAgICAgICAgICAgICAgIEUxQkU1MTJFMENG
NkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogICAgICAg
ICAgICAgICAgOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFk
ZXJzICovLAorICAgICAgICAgICAgICAgMTQ5Qzc4RjUxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRl
clJ1YnkuaCBpbiBIZWFkZXJzICovLAorICAgICAgICAgICAgICAgMTQ5Qzc4RjcxMDBERTYxMDAw
MzUxOUJCIC8qIFJlbmRlclJ1YnlCYXNlLmggaW4gSGVhZGVycyAqLywKKyAgICAgICAgICAgICAg
IDE0OUM3OEY5MTAwREU2MTAwMDM1MTlCQiAvKiBSZW5kZXJSdWJ5UnVuLmggaW4gSGVhZGVycyAq
LywKKyAgICAgICAgICAgICAgIDE0OUM3OEZCMTAwREU2MTAwMDM1MTlCQiAvKiBSZW5kZXJSdWJ5
VGV4dC5oIGluIEhlYWRlcnMgKi8sCisgICAgICAgICAgICAgICAxNDlDNzkwMTEwMERFNjI4MDAz
NTE5QkIgLyogUnVieUlubGluZUZsb3dCb3guaCBpbiBIZWFkZXJzICovLAorICAgICAgICAgICAg
ICAgMTQ5Qzc5MDMxMDBERTYyODAwMzUxOUJCIC8qIFJ1YnlSb290SW5saW5lQm94LmggaW4gSGVh
ZGVycyAqLywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAgICAgICAgfTsKQEAgLTE3MDc0LDYgKzE3MTE5LDcgQEAKICAg
ICAgICAgICAgICAgIDg1MTM2Q0E4MEFFRDY2NTkwMEY5MEEzRCAvKiB3ZXN0UmVzaXplQ3Vyc29y
LnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAgICAgICAgICAgICAgICAxQUIxQUU3QTBDMDUxRkRFMDAx
MzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAgICAgICAgICAgICAg
ICAxQUIxQUU3QjBDMDUxRkRFMDAxMzlGNEYgLyogem9vbU91dEN1cnNvci5wbmcgaW4gUmVzb3Vy
Y2VzICovLAorICAgICAgICAgICAgICAgMTQ5Qzc5MDUxMDBERTY0NjAwMzUxOUJCIC8qIHJ1Ynku
Y3NzIGluIFJlc291cmNlcyAqLywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAgICAgICAgfTsKQEAgLTE4OTg3LDYgKzE5
MDMzLDEyIEBACiAgICAgICAgICAgICAgICA5M0YxOUIwNDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNM
VFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKICAgICAgICAgICAgICAgIEUxQkU1MTJEMENG
NkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAgICAg
ICAgICAgICAgICA5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4g
U291cmNlcyAqLywKKyAgICAgICAgICAgICAgIDE0OUM3OEY0MTAwREU2MTAwMDM1MTlCQiAvKiBS
ZW5kZXJSdWJ5LmNwcCBpbiBTb3VyY2VzICovLAorICAgICAgICAgICAgICAgMTQ5Qzc4RjYxMDBE
RTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnlCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorICAgICAg
ICAgICAgICAgMTQ5Qzc4RjgxMDBERTYxMDAwMzUxOUJCIC8qIFJlbmRlclJ1YnlSdW4uY3BwIGlu
IFNvdXJjZXMgKi8sCisgICAgICAgICAgICAgICAxNDlDNzhGQTEwMERFNjEwMDAzNTE5QkIgLyog
UmVuZGVyUnVieVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisgICAgICAgICAgICAgICAxNDlDNzkw
MDEwMERFNjI4MDAzNTE5QkIgLyogUnVieUlubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8s
CisgICAgICAgICAgICAgICAxNDlDNzkwMjEwMERFNjI4MDAzNTE5QkIgLyogUnVieVJvb3RJbmxp
bmVCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogICAgICAgIH07CkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcCAgICAocmV2aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcCAgICAod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xMTQ1LDYgKzExNDYsMTcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5
bGVTZWxlY3RvcgogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFJVQlkpCisgICAgc3RhdGlj
IGJvb2wgbG9hZGVkUnVieVN0eWxlU2hlZXQ7CisgICAgaWYgKCFsb2FkZWRSdWJ5U3R5bGVTaGVl
dCAmJiAoZS0+aGFzVGFnTmFtZShydWJ5VGFnKSB8fCBlLT5oYXNUYWdOYW1lKHJwVGFnKSB8fCBl
LT5oYXNUYWdOYW1lKHJ0VGFnKSkpIHsKKyAgICAgICAgbG9hZGVkUnVieVN0eWxlU2hlZXQgPSB0
cnVlOworICAgICAgICBTdHJpbmcgcnVieVJ1bGVzID0gU3RyaW5nKHJ1YnlVc2VyQWdlbnRTdHls
ZVNoZWV0LCBzaXplb2YocnVieVVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS0+ZXh0cmFSdWJ5U3R5bGVTaGVldCgpOworICAgICAgICBDU1NTdHlsZVNo
ZWV0KiBydWJ5U2hlZXQgPSBwYXJzZVVBU2hlZXQocnVieVJ1bGVzKTsKKyAgICAgICAgZGVmYXVs
dFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChydWJ5U2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAg
ICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChydWJ5U2hlZXQsIHByaW50
RXZhbCgpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGludCBmaXJzdFVBUnVsZSA9IC0xLCBsYXN0
VUFSdWxlID0gLTE7CiAgICAgaW50IGZpcnN0VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0g
LTE7CiAgICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBsYXN0QXV0aG9yUnVsZSA9IC0xOwpJ
bmRleDogV2ViQ29yZS9jc3MvcnVieS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvcnVi
eS5jc3MgICAgKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nzcy9ydWJ5LmNzcyAgICAocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisvKiBydWJ5IEhUTUwgZWxlbWVudHMgKi8KKworcnVieSB7Cisg
ICAgZGlzcGxheTogaW5saW5lOworfQorCitydCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OworfQorCitydWJ5ID4gcnQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTog
NjAlOyAgICAgICAgIC8qIG1ha2Ugc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gNTAlIGZvciBiZXR0ZXIg
cmVhZGFiaWxpdHkgKi8KKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK3J1YnkgPiBycCB7
CisgICAgZGlzcGxheTogbm9uZTsKK30KKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmggICAocmV2
aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaCAgICh3b3JraW5n
IGNvcHkpCkBAIC0xMzcsNiArMTM3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0lu
bGluZUZsb3dCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0lubGluZVRleHRCb3goKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Jv
b3RJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2lmIEVOQUJMRShSVUJZKQor
ICAgdmlydHVhbCBib29sIGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYK
ICNpZiBFTkFCTEUoU1ZHKSAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290SW5saW5lQm94KCkg
eyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMjA1LDggKzIwOCwxNCBAQCBwdWJsaWM6CiAKICAgICBp
bnQgaGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBpbmxpbmUgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9v
bCBpc1Jvb3RMaW5lQm94KSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5iYXNlbGluZVBvc2l0
aW9uKG1fZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsgfQotICAgIGlubGluZSBpbnQgbGluZUhl
aWdodChib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmxpbmVI
ZWlnaHQobV9maXJzdExpbmUsIGlzUm9vdExpbmVCb3gpOyB9CisjaWYgRU5BQkxFKFJVQlkpCisg
ICAvLyB0aGUgYm9vbCBwYXJhbWV0ZXIgaXMgb25seSBuZWNlc3NhcnkgZm9yIGNvbXBhdGliaWxp
dHkgd2hlbiBFTkFCTEUoUlVCWSkgaXMgZmFsc2UKKyAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9z
aXRpb24oYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5iYXNl
bGluZVBvc2l0aW9uKG1fZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsgfQorICAgdmlydHVhbCBp
bnQgbGluZUhlaWdodChib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVy
KCktPmxpbmVIZWlnaHQobV9maXJzdExpbmUsIGlzUm9vdExpbmVCb3gpOyB9CisjZWxzZQorICAg
aW5saW5lIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgaXNSb290TGluZUJveCkgY29uc3QgeyBy
ZXR1cm4gcmVuZGVyZXIoKS0+YmFzZWxpbmVQb3NpdGlvbihtX2ZpcnN0TGluZSwgaXNSb290TGlu
ZUJveCk7IH0KKyAgIGlubGluZSBpbnQgbGluZUhlaWdodChib29sIGlzUm9vdExpbmVCb3gpIGNv
bnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmxpbmVIZWlnaHQobV9maXJzdExpbmUsIGlzUm9vdExp
bmVCb3gpOyB9CisjZW5kaWYKIAogICAgIHZpcnR1YWwgaW50IHRvcE92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4geSgpOyB9CiAgICAgdmlydHVhbCBpbnQgYm90dG9tT3ZlcmZsb3coKSBjb25zdCB7
IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAgKHJldmlzaW9uIDQ1NzgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAgKHdvcmtpbmcgY29weSkKQEAgLTUyMCw5ICs1MjAsMTcgQEAgdm9pZCBJbmxpbmVGbG93
Qm94OjpwbGFjZUJveGVzVmVydGljYWxseQogICAgICAgICBpbnQgb3ZlcmZsb3dUb3AgPSAwOwog
ICAgICAgICBpbnQgb3ZlcmZsb3dCb3R0b20gPSAwOwogICAgICAgICBpZiAoY3Vyci0+aXNUZXh0
KCkgfHwgY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBjdXJyLT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKTsKLSAg
ICAgICAgICAgIG5ld1kgKz0gY3Vyci0+YmFzZWxpbmVQb3NpdGlvbihmYWxzZSkgLSBmb250LmFz
Y2VudCgpOwotCisjaWYgRU5BQkxFKFJVQlkpCisgICAgICAgICAgICBpZiAoIWN1cnItPmlzUnVi
eSgpKQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgRm9udCYg
Zm9udCA9IGN1cnItPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpOworICAg
ICAgICAgICAgICAgIG5ld1kgKz0gY3Vyci0+YmFzZWxpbmVQb3NpdGlvbihmYWxzZSkgLSBmb250
LmFzY2VudCgpOworCisgICAgICAgICAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgp
KQorICAgICAgICAgICAgICAgICAgICBuZXdZIC09IGN1cnItPmJveE1vZGVsT2JqZWN0KCktPmJv
cmRlclRvcCgpICsgY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+cGFkZGluZ1RvcCgpOworICAgICAg
ICAgICAgfSAKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTaGFkb3dEYXRhKiBzaGFk
b3cgPSBjdXJyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0U2hhZG93KCk7IHNoYWRvdzsgc2hh
ZG93ID0gc2hhZG93LT5uZXh0KSB7CiAgICAgICAgICAgICAgICAgb3ZlcmZsb3dUb3AgPSBtaW4o
b3ZlcmZsb3dUb3AsIHNoYWRvdy0+eSAtIHNoYWRvdy0+Ymx1cik7CiAgICAgICAgICAgICAgICAg
b3ZlcmZsb3dCb3R0b20gPSBtYXgob3ZlcmZsb3dCb3R0b20sIHNoYWRvdy0+eSArIHNoYWRvdy0+
Ymx1cik7CkBAIC01NDMsOSArNTUxLDYgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVz
VmVydGljYWxseQogICAgICAgICAgICAgICAgIG92ZXJmbG93VG9wID0gbWluKG92ZXJmbG93VG9w
LCBib3gtPnJlZmxlY3Rpb25Cb3goKS55KCkpOwogICAgICAgICAgICAgICAgIG92ZXJmbG93Qm90
dG9tID0gbWF4KG92ZXJmbG93Qm90dG9tLCBib3gtPnJlZmxlY3Rpb25Cb3goKS5ib3R0b20oKSk7
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3go
KSkKLSAgICAgICAgICAgICAgICBuZXdZIC09IGN1cnItPmJveE1vZGVsT2JqZWN0KCktPmJvcmRl
clRvcCgpICsgY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+cGFkZGluZ1RvcCgpOwogICAgICAgICB9
IGVsc2UgaWYgKCFjdXJyLT5yZW5kZXJlcigpLT5pc0JSKCkpIHsKICAgICAgICAgICAgIFJlbmRl
ckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vyci0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBu
ZXdZICs9IGJveC0+bWFyZ2luVG9wKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
ICAgKHJldmlzaW9uIDQ1NzgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
ICAgKHdvcmtpbmcgY29weSkKQEAgLTEzMDUsNiArMTMwNSwxNiBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpoYW5kbGVCb3R0b21PZkJsb2NrKGluCiAgICAgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKG1h
cmdpbkluZm8pOwogfQogCitSZW5kZXJCb3gqIFJlbmRlckJsb2NrOjpmaXJzdENoaWxkQm94SW5M
YXlvdXRPcmRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpcnN0Q2hpbGRCb3goKTsKK30KKwor
UmVuZGVyQm94KiBSZW5kZXJCbG9jazo6bmV4dENoaWxkQm94SW5MYXlvdXRPcmRlcihSZW5kZXJC
b3gqIGNoaWxkKSBjb25zdAoreworICAgIHJldHVybiBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsK
K30KKwogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIGludCYgbWF4RmxvYXRCb3R0b20pCiB7CiAgICAgaWYgKGdQZXJjZW50SGVpZ2h0
RGVzY2VuZGFudHNNYXApIHsKQEAgLTEzNDEsMTEgKzEzNTEsMTEgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAgIGludCBwcmV2aW91c0Zsb2F0Qm90dG9tID0g
MDsKICAgICBtYXhGbG9hdEJvdHRvbSA9IDA7CiAKLSAgICBSZW5kZXJCb3gqIG5leHQgPSBmaXJz
dENoaWxkQm94KCk7CisgICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGlsZEJveEluTGF5b3V0
T3JkZXIoKTsKIAogICAgIHdoaWxlIChuZXh0KSB7CiAgICAgICAgIFJlbmRlckJveCogY2hpbGQg
PSBuZXh0OwotICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7CisgICAgICAg
IG5leHQgPSBuZXh0Q2hpbGRCb3hJbkxheW91dE9yZGVyKGNoaWxkKTsKIAogICAgICAgICBpZiAo
bGVnZW5kID09IGNoaWxkKQogICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgdGhlIGxlZ2Vu
ZCwgc2luY2UgaXQgaGFzIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVkIHVwIGluIHRoZSBmaWVsZHNl
dCdzIGJvcmRlci4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCAocmV2aXNpb24gNDU3ODIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oICh3b3JraW5nIGNvcHkpCkBAIC0z
NTIsNiArMzUyLDE0IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1w
dHkoKSBjb25zdDsKICAgICBib29sIGxheW91dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpOwogCitw
cm90ZWN0ZWQ6CisjaWYgRU5BQkxFKFJVQlkpCisgICAgdmlydHVhbCBSZW5kZXJCb3gqIGZpcnN0
Q2hpbGRCb3hJbkxheW91dE9yZGVyKCkgY29uc3Q7IC8vIG92ZXJyaWRkZW4gYnkgcnVieQorICAg
IHZpcnR1YWwgUmVuZGVyQm94KiBuZXh0Q2hpbGRCb3hJbkxheW91dE9yZGVyKFJlbmRlckJveCog
Y2hpbGRCb3gpIGNvbnN0OyAvLyBvdmVycmlkZGVuIGJ5IHJ1YnkKKyNlbHNlCisgICAgUmVuZGVy
Qm94KiBmaXJzdENoaWxkQm94SW5MYXlvdXRPcmRlcigpIGNvbnN0OworICAgIFJlbmRlckJveCog
bmV4dENoaWxkQm94SW5MYXlvdXRPcmRlcihSZW5kZXJCb3gqIGNoaWxkQm94KSBjb25zdDsKKyNl
bmRpZgogICAgIAogcHJpdmF0ZToKICAgICBQb3NpdGlvbiBwb3NpdGlvbkZvckJveChJbmxpbmVC
b3gqLCBib29sIHN0YXJ0ID0gdHJ1ZSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAgIChyZXZpc2lvbiA0NTc4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAgICh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDA0IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTEsNiArNTIsMTEgQEAKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+CiAKKyNpZiBFTkFCTEUoUlVCWSkKKyNpbmNsdWRlICJSZW5kZXJSdWJ5LmgiCisjaW5jbHVk
ZSAiUmVuZGVyUnVieVRleHQuaCIKKyNlbmRpZgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2VuZGlmCkBAIC0x
MDEsNTYgKzEwNyw1MiBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0
CiAgICAgICAgIHJldHVybiBpbWFnZTsKICAgICB9CiAKLSAgICBSZW5kZXJPYmplY3QqIG8gPSAw
OworI2lmIEVOQUJMRShSVUJZKQorICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKHJ1YnlUYWcpKSB7
CisgICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IElOTElORSkKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJSdWJ5QXNJbmxpbmUobm9kZSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJSdWJ5QXNCbG9jayhub2RlKTsK
KyAgICB9CisgICAgLy8gdHJlYXQgPHJ0PiBhcyBydWJ5IHRleHQgT05MWSBpZiBpdCBzdGlsbCBo
YXMgaXRzIGRlZmF1bHQgdHJlYXRtZW50IG9mIGJsb2NrCisgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUocnRUYWcpICYmIHN0eWxlLT5kaXNwbGF5KCkgPT0gQkxPQ0spCisgICAgICAgIHJldHVybiBu
ZXcgKGFyZW5hKSBSZW5kZXJSdWJ5VGV4dChub2RlKTsgCisjZW5kaWYKIAogICAgIHN3aXRjaCAo
c3R5bGUtPmRpc3BsYXkoKSkgewogICAgICAgICBjYXNlIE5PTkU6Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIElOTElORToKLSAgICAgICAg
ICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJJbmxpbmUobm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbmxpbmUobm9kZSk7CiAg
ICAgICAgIGNhc2UgQkxPQ0s6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyQmxv
Y2sobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJTkxJTkVfQkxPQ0s6
Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyQmxvY2sobm9kZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMSVNUX0lURU06Ci0gICAgICAgICAgICBvID0gbmV3
IChhcmVuYSkgUmVuZGVyTGlzdEl0ZW0obm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSVU5fSU46CiAgICAgICAgIGNhc2UgQ09NUEFDVDoKLSAgICAgICAgICAgIG8gPSBu
ZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckJsb2NrKG5vZGUpOworICAgICAgICBjYXNl
IExJU1RfSVRFTToKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJMaXN0SXRl
bShub2RlKTsKICAgICAgICAgY2FzZSBUQUJMRToKICAgICAgICAgY2FzZSBJTkxJTkVfVEFCTEU6
Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyVGFibGUobm9kZSk7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZShu
b2RlKTsKICAgICAgICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6CiAgICAgICAgIGNhc2UgVEFCTEVf
SEVBREVSX0dST1VQOgogICAgICAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9VUDoKLSAgICAgICAg
ICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZVNlY3Rpb24obm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZVNlY3Rp
b24obm9kZSk7CiAgICAgICAgIGNhc2UgVEFCTEVfUk9XOgotICAgICAgICAgICAgbyA9IG5ldyAo
YXJlbmEpIFJlbmRlclRhYmxlUm93KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVSb3cobm9kZSk7CiAgICAgICAgIGNh
c2UgVEFCTEVfQ09MVU1OX0dST1VQOgogICAgICAgICBjYXNlIFRBQkxFX0NPTFVNTjoKLSAgICAg
ICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZUNvbChub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlQ29sKG5v
ZGUpOwogICAgICAgICBjYXNlIFRBQkxFX0NFTEw6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVu
YSkgUmVuZGVyVGFibGVDZWxsKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVDZWxsKG5vZGUpOwogICAgICAgICBjYXNl
IFRBQkxFX0NBUFRJT046Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyQmxvY2so
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5h
KSBSZW5kZXJCbG9jayhub2RlKTsKICAgICAgICAgY2FzZSBCT1g6CiAgICAgICAgIGNhc2UgSU5M
SU5FX0JPWDoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJGbGV4aWJsZUJveChu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlckZsZXhpYmxlQm94KG5vZGUpOwogICAgIH0KIAotICAgIHJldHVybiBvOworICAgIHJl
dHVybiAwOwogfQogCiAjaWZuZGVmIE5ERUJVRyAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oICAgIChyZXZpc2lvbiA0NTc4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oICAgICh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA0
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjkyLDYgKzI5MywxMyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjZWxsV2lkdGhDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9j
ZWxsV2lkdGhDaGFuZ2VkOyB9CiAgICAgdm9pZCBzZXRDZWxsV2lkdGhDaGFuZ2VkKGJvb2wgYiA9
IHRydWUpIHsgbV9jZWxsV2lkdGhDaGFuZ2VkID0gYjsgfQogCisjaWYgRU5BQkxFKFJVQlkpCisg
ICAgdmlydHVhbCBib29sIGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzUnVieVJ1bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzUnVieUJhc2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc1J1YnlUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCiAjaWYg
RU5BQkxFKFNWRykKICAgICAvLyBGSVhNRTogVW50aWwgYWxsIFNWRyByZW5kZXJzIGNhbiBiZSBz
dWJjbGFzc2VzIG9mIFJlbmRlclNWR01vZGVsT2JqZWN0IHdlIGhhdmUKICAgICAvLyB0byBhZGQg
U1ZHIHJlbmRlcmVyIG1ldGhvZHMgdG8gUmVuZGVyT2JqZWN0IHdpdGggYW4gQVNTRVJUX05PVF9S
RUFDSEVEKCkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJ1YnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnkuY3BwICAgIChyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5j
cHAgICAgKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5LmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKworI2luY2x1
ZGUgIlJlbmRlclJ1YnlSdW4uaCIKKyNpbmNsdWRlICJSdWJ5SW5saW5lRmxvd0JveC5oIgorI2lu
Y2x1ZGUgIlJ1YnlSb290SW5saW5lQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy89
PT0gcnVieSBhcyBpbmxpbmUgb2JqZWN0ID09PQorCitSZW5kZXJSdWJ5QXNJbmxpbmU6OlJlbmRl
clJ1YnlBc0lubGluZShOb2RlKiBub2RlKQorICAgIDogUmVuZGVySW5saW5lKG5vZGUpCit7Cit9
CisKK1JlbmRlclJ1YnlBc0lubGluZTo6flJlbmRlclJ1YnlBc0lubGluZSgpCit7Cit9CisKK2Jv
b2wgUmVuZGVyUnVieUFzSW5saW5lOjppc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoaWxkLT5pc1J1YnlSdW4oKQor
ICAgICAgICB8fCBjaGlsZC0+aXNSdWJ5QmFzZSgpCisgICAgICAgIHx8IGNoaWxkLT5pc1J1YnlU
ZXh0KCkKKyAgICAgICAgfHwgY2hpbGQtPmlzSW5saW5lKCk7Cit9CisKK3ZvaWQgUmVuZGVyUnVi
eUFzSW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQoreworICAgIC8vIG9ubHkgUmVuZGVyUnVieVJ1biBvYmplY3RzIGNhbiBiZSBk
aXJlY3RseSBhZGRlZCBhcyBhIGNoaWxkLCBldmVyeXRoaW5nIGVsc2UgbXVzdCBiZSB3cmFwcGVk
LgorICAgIGlmIChjaGlsZC0+aXNSdWJ5UnVuKCkpIHsKKyAgICAgICAgUmVuZGVySW5saW5lOjph
ZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IC8vIGlmIGl0J3MgYSBydWJ5IHRleHQsIHRoZW4gY2hlY2sgaWYgd2UgY2FuIGFkZCBpdCB0byB0
aGUgcHJldmlvdXMgcnVuCisgICAgaWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkpIHsKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiBwcmV2ID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKHByZXYgJiYgcHJldi0+aXNSdWJ5
UnVuKCkpIHsKKyAgICAgICAgICAgIHByZXYtPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBjYW4ndCBhZGQsIG9yIG5vdCBhIHJ1
YnkgdGV4dCAtPiBtdXN0IGNyZWF0ZSBuZXcgcnVuIGFuZCBhZGQgaXQgdGhlcmUKKyAgICBSZW5k
ZXJPYmplY3QqIHJyID0gY3JlYXRlQW5vbnltb3VzUnVieVJ1bigpOworICAgIGFkZENoaWxkKHJy
LCBiZWZvcmVDaGlsZCk7CisgICAgcnItPmFkZENoaWxkKGNoaWxkKTsKK30KKworUmVuZGVyUnVi
eVJ1biogUmVuZGVyUnVieUFzSW5saW5lOjpjcmVhdGVBbm9ueW1vdXNSdWJ5UnVuKCkKK3sKKyAg
ICBSZW5kZXJSdWJ5UnVuKiByciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyUnVieVJ1bihk
b2N1bWVudCgpIC8qIGFub255bW91cyAqLyk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdT
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20o
c3R5bGUoKSk7CisgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsgLy8gRklY
TUU6IHVzZSBJTkxJTkVfVEFCTEUgb3IgYSBzcGVjaWFsIFdFQktJVF9SVUJZX1JVTiBpbnN0ZWFk
Pz8KKyAgICByci0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gcnI7
Cit9CisKK0lubGluZUZsb3dCb3gqIFJlbmRlclJ1YnlBc0lubGluZTo6Y3JlYXRlSW5saW5lRmxv
d0JveCgpIAoreworICAgIHJldHVybiBuZXcgKHJlbmRlckFyZW5hKCkpIFJ1YnlJbmxpbmVGbG93
Qm94KHRoaXMpOworfQorCisvLz09PSBydWJ5IGFzIGJsb2NrIG9iamVjdCA9PT0KKworUmVuZGVy
UnVieUFzQmxvY2s6OlJlbmRlclJ1YnlBc0Jsb2NrKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJC
bG9jayhub2RlKQoreworfQorCitSZW5kZXJSdWJ5QXNCbG9jazo6flJlbmRlclJ1YnlBc0Jsb2Nr
KCkKK3sKK30KKworYm9vbCBSZW5kZXJSdWJ5QXNCbG9jazo6aXNDaGlsZEFsbG93ZWQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5bGUqKSBjb25zdAoreworICAgIHJldHVybiBjaGlsZC0+
aXNSdWJ5UnVuKCkKKyAgICAgICAgfHwgY2hpbGQtPmlzUnVieUJhc2UoKQorICAgICAgICB8fCBj
aGlsZC0+aXNSdWJ5VGV4dCgpCisgICAgICAgIHx8IGNoaWxkLT5pc0lubGluZSgpOworfQorCit2
b2lkIFJlbmRlclJ1YnlBc0Jsb2NrOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIC8vIG9ubHkgUmVuZGVyUnVieVJ1biBvYmpl
Y3RzIGNhbiBiZSBkaXJlY3RseSBhZGRlZCBhcyBhIGNoaWxkLCBldmVyeXRoaW5nIGVsc2UgbXVz
dCBiZSB3cmFwcGVkLgorICAgIGlmIChjaGlsZC0+aXNSdWJ5UnVuKCkpIHsKKyAgICAgICAgUmVu
ZGVyQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgLy8gaWYgaXQncyBhIHJ1YnkgdGV4dCwgdGhlbiBjaGVjayBpZiB3ZSBjYW4g
YWRkIGl0IHRvIHRoZSBwcmV2aW91cyBydW4KKyAgICBpZiAoY2hpbGQtPmlzUnVieVRleHQoKSkg
eworICAgICAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxk
LT5wcmV2aW91c1NpYmxpbmcoKSA6IGxhc3RDaGlsZCgpOworICAgICAgICBpZiAocHJldiAmJiBw
cmV2LT5pc1J1YnlSdW4oKSkgeworICAgICAgICAgICAgcHJldi0+YWRkQ2hpbGQoY2hpbGQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIC8vIGNhbid0IGFkZCwg
b3Igbm90IGEgcnVieSB0ZXh0IC0+IG11c3QgY3JlYXRlIG5ldyBydW4gYW5kIGFkZCBpdCB0aGVy
ZQorICAgIFJlbmRlck9iamVjdCogcnIgPSBjcmVhdGVBbm9ueW1vdXNSdWJ5UnVuKCk7CisgICAg
YWRkQ2hpbGQocnIsIGJlZm9yZUNoaWxkKTsKKyAgICByci0+YWRkQ2hpbGQoY2hpbGQpOworfQor
CitSZW5kZXJSdWJ5UnVuKiBSZW5kZXJSdWJ5QXNCbG9jazo6Y3JlYXRlQW5vbnltb3VzUnVieVJ1
bigpCit7CisgICAgUmVuZGVyUnVieVJ1biogcnIgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRl
clJ1YnlSdW4oZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgKi8pOworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5bGUtPmlu
aGVyaXRGcm9tKHN0eWxlKCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9D
Syk7IC8vIEZJWE1FOiB1c2UgSU5MSU5FX1RBQkxFIG9yIGEgc3BlY2lhbCBXRUJLSVRfUlVCWV9S
VU4gaW5zdGVhZD8/CisgICAgcnItPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CisgICAg
cmV0dXJuIHJyOworfQorCitSb290SW5saW5lQm94KiBSZW5kZXJSdWJ5QXNCbG9jazo6Y3JlYXRl
Um9vdElubGluZUJveCgpIAoreworICAgIHJldHVybiBuZXcgKHJlbmRlckFyZW5hKCkpIFJ1YnlS
b290SW5saW5lQm94KHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoUlVCWSkKKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaCAgKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmggIChyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9q
ZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJSdWJ5X2gKKyNkZWZpbmUgUmVuZGVyUnVieV9oCisK
KyNpZiBFTkFCTEUoUlVCWSkKKworI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyUnVi
eVJ1bjsKKworLy8gRm9sbG93aW5nIHRoZSBIVE1MIDUgc3BlYywgdGhlIGJveCBvYmplY3QgbW9k
ZWwgZm9yIGEgPHJ1Ynk+IGVsZW1lbnQgbG9va3MgYXMgZm9sbG93czoKKy8vCisvLyAxIFJlbmRl
clJ1Ynkgb2JqZWN0LCBjb3JyZXNwb25kaW5nIHRvIHRoZSB3aG9sZSA8cnVieT4gSFRNTCBlbGVt
ZW50IAorLy8gICAgMSsgUmVuZGVyUnVieVJ1biBvYmplY3QocyksIGVhY2ggb25lIHdyYXBwaW5n
IGEgcnVieSBiYXNlIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgcnVieSB0ZXh0KHMpCisvLyAgICAg
ICAgMSBSZW5kZXJSdWJ5QmFzZSBvYmplY3QKKy8vICAgICAgICAgICBuIGlubGluZSBvYmplY3Qo
cykKKy8vICAgICAgICAwKyBSZW5kZXJSdWJ5VGV4dCBvYmplY3QocykKKy8vICAgICAgICAgICBu
IGlubGluZSBvYmplY3QocykKKy8vCisvLyBOb3RlOiA8cnA+IGVsZW1lbnRzIGFyZSBkZWZpbmVk
IGFzIGhhdmluZyAnZGlzcGxheTpub25lJyBhbmQgdGh1cyBub3JtYWxseSBhcmUgbm90IGFzc2ln
bmVkIGEgcmVuZGVyZXIuCisvLworLy8gVGhpcyBzdHJ1Y3R1cmUgYWxsb3dzIGJvdGggc2V2ZXJh
bCBydW5zIG9mIHJ1YnkgYmFzZXMgd2l0aCB0aGVpciByZXNwZWN0aXZlIHJ1YnkgdGV4dHMgKHNl
ZSBIVE1MNSBzcGVjKS4KKworLy8gPHJ1Ynk+IHdoZW4gdXNlZCBhcyAnZGlzcGxheTppbmxpbmUn
IAorY2xhc3MgUmVuZGVyUnVieUFzSW5saW5lIDogcHVibGljIFJlbmRlcklubGluZSB7CitwdWJs
aWM6CisgICAgUmVuZGVyUnVieUFzSW5saW5lKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJS
dWJ5QXNJbmxpbmUoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJSdWJ5IChpbmxpbmUpIjsgfQorCisgICAgdmlydHVhbCBib29s
IGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0No
aWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gMCk7CisKKyAgIElubGluZUZsb3dCb3gqIGNyZWF0ZUlubGluZUZsb3dCb3goKTsK
KworcHJpdmF0ZToKKyAgICBSZW5kZXJSdWJ5UnVuKiBjcmVhdGVBbm9ueW1vdXNSdWJ5UnVuKCk7
Cit9OworCisvLyA8cnVieT4gd2hlbiB1c2VkIGFzICdkaXNwbGF5OmJsb2NrJyBvciAnZGlzcGxh
eTppbmxpbmUtYmxvY2snCitjbGFzcyBSZW5kZXJSdWJ5QXNCbG9jayA6IHB1YmxpYyBSZW5kZXJC
bG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyUnVieUFzQmxvY2soTm9kZSopOworICAgIHZpcnR1
YWwgflJlbmRlclJ1YnlBc0Jsb2NrKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUnVieSAoYmxvY2spIjsgfQorCisgICAgdmly
dHVhbCBib29sIGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBpc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkID0gMCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxl
Y3Rpb25HYXBzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgUm9vdElu
bGluZUJveCogY3JlYXRlUm9vdElubGluZUJveCgpOworCitwcml2YXRlOgorICAgIFJlbmRlclJ1
YnlSdW4qIGNyZWF0ZUFub255bW91c1J1YnlSdW4oKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJZKQorCisjZW5kaWYgLy8gUmVuZGVyUnVieV9o
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwICAgIChyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwICAgIChyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJS
dWJ5QmFzZS5oIgorCisjaWYgRU5BQkxFKFJVQlkpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVuZGVyUnVieUJhc2U6OlJlbmRlclJ1YnlCYXNlKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJC
bG9jayhub2RlKQoreworICAgIHNldElubGluZShmYWxzZSk7Cit9CisKK1JlbmRlclJ1YnlCYXNl
Ojp+UmVuZGVyUnVieUJhc2UoKQoreworfQorCitib29sIFJlbmRlclJ1YnlCYXNlOjppc0NoaWxk
QWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNoaWxkLT5pc0lubGluZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFz
ZS5oICAocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmgg
IChyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJSdWJ5QmFzZV9oCisj
ZGVmaW5lIFJlbmRlclJ1YnlCYXNlX2gKKworI2lmIEVOQUJMRShSVUJZKQorCisjaW5jbHVkZSAi
UmVuZGVyQmxvY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJSdWJ5
QmFzZSA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyUnVieUJhc2Uo
Tm9kZSopOworICAgIHZpcnR1YWwgflJlbmRlclJ1YnlCYXNlKCk7CisKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJl
bmRlclJ1YnlCYXNlIChhbm9ueW1vdXMpIiA6ICJSZW5kZXJSdWJ5QmFzZSI7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBpc1J1YnlCYXNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmly
dHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29u
c3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVC
WSkKKworI2VuZGlmIC8vIFJlbmRlclJ1YnlCYXNlX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJ1YnlSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlSdW4uY3BwIChyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVi
eVJ1bi5jcHAgKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKwor
I2luY2x1ZGUgIlJlbmRlclJ1YnlCYXNlLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieVRleHQuaCIK
KyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVuZGVyUnVieVJ1bjo6UmVuZGVyUnVieVJ1bihOb2RlKiBub2Rl
KQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sKKyAgICBzZXRSZXBsYWNlZCh0cnVlKTsKKyAg
ICBzZXRJbmxpbmUodHJ1ZSk7Cit9CisKK1JlbmRlclJ1YnlSdW46On5SZW5kZXJSdWJ5UnVuKCkK
K3sKK30KKworYm9vbCBSZW5kZXJSdWJ5UnVuOjpoYXNSdWJ5QmFzZSgpIGNvbnN0Cit7CisgICAg
Ly8gbm9ybWFsbHksIHRoZSBiYXNlIHNob3VsZCBiZSB0aGUgZmlyc3QgY2hpbGQgKHByb3ZpZGVk
IGl0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQpCisgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkgfHwg
Zmlyc3RDaGlsZCgpLT5pc1J1YnlCYXNlKCkpOworICAgIAorICAgIHJldHVybiBnZXRSdWJ5QmFz
ZSgpOworfQorCitpbnQgUmVuZGVyUnVieVJ1bjo6bnVtYmVyT2ZSdWJ5VGV4dHMoKSBjb25zdAor
eworICAgICAvLyBub3JtYWxseSwgdGhlIGZpcnN0IGNoaWxkIHNob3VsZCBiZSB0aGUgYmFzZSwg
bm90IGEgdGV4dAorICAgIEFTU0VSVCghZmlyc3RDaGlsZCgpIHx8IGZpcnN0Q2hpbGQoKS0+aXNS
dWJ5QmFzZSgpKTsKKworICAgIGludCBuID0gMDsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7
CisgICAgICAgIGlmIChjaGlsZC0+aXNSdWJ5VGV4dCgpKQorICAgICAgICAgICAgKytuOworICAg
IH0KKyAgICByZXR1cm4gbjsKK30KKworaW50IFJlbmRlclJ1YnlSdW46OmJhc2VsaW5lUG9zaXRp
b24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK3sKKyAgICBSZW5k
ZXJSdWJ5QmFzZSogcmIgPSBnZXRSdWJ5QmFzZSgpOworICAgIC8vIEZJWE1FOiBzaG91bGQgd2Ug
cGFzcyAnaXNSb290TGluZUJveCcgYmVsb3csIG9yIGp1c3QgJ2ZhbHNlJz8KKyAgICByZXR1cm4g
cmIgPyByYi0+eSgpICsgcmItPmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBpc1Jvb3RMaW5l
Qm94KSA6IC0xOworfQorCitSZW5kZXJCbG9jayogUmVuZGVyUnVieVJ1bjo6Zmlyc3RMaW5lQmxv
Y2soKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit2b2lkIFJlbmRlclJ1YnlSdW46OnVw
ZGF0ZUZpcnN0TGV0dGVyKCkKK3sKK30KKworYm9vbCBSZW5kZXJSdWJ5UnVuOjppc0NoaWxkQWxs
b3dlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNoaWxkLT5pc1J1YnlCYXNlKCkKKyAgICAgICAgfHwgY2hpbGQtPmlzUnVieVRleHQoKQor
ICAgICAgICB8fCBjaGlsZC0+aXNJbmxpbmUoKTsKK30KKwordm9pZCBSZW5kZXJSdWJ5UnVuOjph
ZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQor
eworICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgaXNBZnRlckNvbnRlbnQobGFzdENoaWxkKCkpKQor
ICAgICAgICBiZWZvcmVDaGlsZCA9IGxhc3RDaGlsZCgpOworICAgIAorICAgIC8vIFJlbmRlclJ1
YnlUZXh0CisgICAgaWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkpIHsKKyAgICAgICAgUmVuZGVyQmxv
Y2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gUmVuZGVyUnVieUJhc2UKKyAgICBpZiAoY2hpbGQtPmlzUnVieUJhc2UoKSkgewor
ICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBwbGFpbiB0ZXh0IG9yIG90aGVyIGlubGluZSBlbGVt
ZW50cyAtPiBhcHBlbmQgdG8gcHJldmlvdXMgUmVuZGVyUnVieUJhc2UgaWYgZXhpc3RlbnQsIG90
aGVyd2lzZSBjcmVhdGUgYW5vbnltb3VzIFJlbmRlclJ1YnlCYXNlCisgICAgUmVuZGVyT2JqZWN0
KiBwcmV2ID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBs
YXN0Q2hpbGQoKTsKKyAgICBpZiAocHJldiAmJiBwcmV2LT5pc1J1YnlCYXNlKCkpIHsKKyAgICAg
ICAgcHJldi0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJl
bmRlck9iamVjdCogcmIgPSBjcmVhdGVBbm9ueW1vdXNSdWJ5QmFzZSgpOworICAgIGFkZENoaWxk
KHJiLCBiZWZvcmVDaGlsZCk7CisgICAgcmItPmFkZENoaWxkKGNoaWxkKTsKK30KKworUmVuZGVy
Qm94KiBSZW5kZXJSdWJ5UnVuOjpmaXJzdENoaWxkQm94SW5MYXlvdXRPcmRlcigpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGhhc1J1YnlCYXNlKCkpOworCisgICAgLy8gZmlyc3QgbGF5b3V0IGFsbCAn
QkVGT1JFJyB0ZXh0cywgaW4gcmV2ZXJzZSBvcmRlcgorICAgIGZvciAoUmVuZGVyQm94KiBjaGls
ZCA9IGxhc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5n
Qm94KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkgJiYgZWZmZWN0aXZlUnVi
eVBvc2l0aW9uKGNoaWxkKSA9PSBSUF9CRUZPUkUpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7
CisgICAgfQorCisgICAgLy8gaWYgdGhlcmUgYXJlIG5vICdCRUZPUkUnIHRleHRzLCBzdGFydCB3
aXRoIHRoZSBiYXNlIAorICAgIC8vICh0aGlzIHNob3VsZG4ndCByZXR1cm4gTlVMTCAtIGlmIGl0
IGRvZXMgaXQganVzdCBtZWFucyB0aGF0IHdlIGFsc28gZGlzcmVnYXJkIGFsbCAnQUZURVInIHRl
eHRzKQorICAgIHJldHVybiBnZXRSdWJ5QmFzZSgpOworfQorCitSZW5kZXJCb3gqIFJlbmRlclJ1
YnlSdW46Om5leHRDaGlsZEJveEluTGF5b3V0T3JkZXIoUmVuZGVyQm94KiBjaGlsZCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaGFzUnVieUJhc2UoKSk7CisKKyAgICAvLyBpZiB0aGUgY3VycmVudCBj
aGlsZCBpcyBhICdCRUZPUkUnIHRleHQsIHNlYXJjaCBmb3Igb3RoZXIgQkVGT1JFIHRleHRzIGlu
IHJldmVyc2Ugb3JkZXIKKyAgICAvLyBOb3RlOiB0aGVyZSBzaG91bGQgb25seSBiZSAxIHN1Y2gg
dGV4dCBwZXIgc2UsIGJ1dCBldmVuIGluIHdlbGwtZm9ybWVkIEhUTUwvQ1NTLCB0aGUgZGVzaWdu
ZXIgY291bGQgCisgICAgLy8gaGF2ZSBleHBsaWNpdGVseSBzZXQgJ3J1YnktcG9zaXRpb246IGJl
Zm9yZScgZm9yIGFsbCB0ZXh0cyAob25jZSB3ZSBzdXBwb3J0IHJ1YnktcG9zaXRpb24pCisgICAg
aWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkgJiYgZWZmZWN0aXZlUnVieVBvc2l0aW9uKGNoaWxkKSA9
PSBSUF9CRUZPUkUpIHsKKyAgICAgICAgZm9yIChjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxp
bmdCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZ0JveCgpKSB7Cisg
ICAgICAgICAgICBpZiAoY2hpbGQtPmlzUnVieVRleHQoKSAmJiBlZmZlY3RpdmVSdWJ5UG9zaXRp
b24oY2hpbGQpID09IFJQX0JFRk9SRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBubyBvdGhlciAnQkVGT1JFJyB0ZXh0cyBmb3VuZCwgY29u
dGludWUgd2l0aCB0aGUgYmFzZSBjb250YWluZXIKKyAgICAgICAgLy8gKHRoaXMgc2hvdWxkbid0
IHJldHVybiBOVUxMIC0gaWYgaXQgZG9lcyBpdCBqdXN0IG1lYW5zIHRoYXQgd2UgYWxzbyBkaXNy
ZWdhcmQgYWxsICdBRlRFUicgdGV4dHMpCisgICAgICAgIHJldHVybiBnZXRSdWJ5QmFzZSgpOwor
ICAgIH0KKworICAgIC8vIGlmIHdlIGp1c3QgaGFkIGEgcnVieSBiYXNlLCB0aGVuIGZvciBkZWZl
bnNlLWRlcHRoIHB1cnBvc2VzLCBsb29rIGZvciBvdGhlciBiYXNlcyBqdXN0IHRvIGJlIHN1cmUK
KyAgICBpZiAoY2hpbGQtPmlzUnVieUJhc2UoKSkgeworICAgICAgICBmb3IgKGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0Jv
eCgpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzUnVieUJhc2UoKSkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7ICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW4sIHRoZSAybmQg
YmFzZSBzaG91bGQgaGF2ZSBmb3JtZWQgYSBuZXcgUmVuZGVyUnVieVJ1bgorICAgICAgICAgICAg
ICAgIHJldHVybiBjaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IGlmIHRoZXJlIGFyZSBubyBzcHVyaW91cyBhZGRpdGlvbmFsIGJhc2VzLCByZXR1cm4gdGhlIGZp
cnN0IEFGVEVSIHRleHQKKyAgICAgICAgZm9yIChjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgICAgIGlmIChj
aGlsZC0+aXNSdWJ5VGV4dCgpICYmIGVmZmVjdGl2ZVJ1YnlQb3NpdGlvbihjaGlsZCkgPT0gUlBf
QUZURVIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHdpdGgg
dGhlIG5leHQgJ0FGVEVSJyB0ZXh0CisgICAgLy8gTm90ZTogdGhlcmUgc2hvdWxkIG9ubHkgYmUg
MSBzdWNoIHRleHQgcGVyIHNlLCBidXQgZXZlbiBpbiB3ZWxsLWZvcm1lZCBIVE1ML0NTUywgdGhl
IGRlc2lnbmVyIGNvdWxkIAorICAgIC8vIGhhdmUgZXhwbGljaXRlbHkgc2V0ICdydWJ5LXBvc2l0
aW9uOiBhZnRlcicgZm9yIGFsbCB0ZXh0cyAob25jZSB3ZSBzdXBwb3J0IHJ1YnktcG9zaXRpb24p
CisgICAgQVNTRVJUKGNoaWxkLT5pc1J1YnlUZXh0KCkgJiYgZWZmZWN0aXZlUnVieVBvc2l0aW9u
KGNoaWxkKSA9PSBSUF9BRlRFUik7CisgICAgZm9yIChjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
Z0JveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAg
ICBpZiAoY2hpbGQtPmlzUnVieVRleHQoKSAmJiBlZmZlY3RpdmVSdWJ5UG9zaXRpb24oY2hpbGQp
ID09IFJQX0FGVEVSKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgIH0KKworICAgIHJl
dHVybiBOVUxMOworfQorCitFUnVieVBvc2l0aW9uIFJlbmRlclJ1YnlSdW46OmVmZmVjdGl2ZVJ1
YnlQb3NpdGlvbihSZW5kZXJPYmplY3QqIGNoaWxkKSBjb25zdAoreworICAgIEFTU0VSVChjaGls
ZC0+aXNSdWJ5VGV4dCgpKTsKKyAgICAvLyBydWJ5LXBvc2l0aW9uIENTUyBwcm9wZXJ0eSBub3Qg
aW1wbGVtZW50ZWQuCisgICAgLy8gc2ltcGx5IHBvc2l0aW9uIHRoZSBmaXJzdCA8cnQ+IGluIEJF
Rk9SRSBwb3NpdGlvbiwgdGhlIDJuZCBpbiBBRlRFUiBwb3NpdGlvbgorICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBzaWJsaW5nID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmct
PmlzUnVieVRleHQoKSAmJiBlZmZlY3RpdmVSdWJ5UG9zaXRpb24oc2libGluZykgPT0gUlBfQkVG
T1JFKQorICAgICAgICAgICAgcmV0dXJuIFJQX0FGVEVSOworICAgIH0KKyAgICByZXR1cm4gUlBf
QkVGT1JFOworfQorCitSZW5kZXJSdWJ5QmFzZSogUmVuZGVyUnVieVJ1bjo6Z2V0UnVieUJhc2Uo
KSBjb25zdAoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxk
LT5pc1J1YnlCYXNlKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyUnVi
eUJhc2UqPihjaGlsZCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitSZW5kZXJSdWJ5
VGV4dCogUmVuZGVyUnVieVJ1bjo6Z2V0Rmlyc3RSdWJ5VGV4dCgpIGNvbnN0Cit7CisgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzUnVieVRleHQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJSdWJ5VGV4dCo+KGNoaWxkKTsKKyAg
ICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1JlbmRlclJ1YnlUZXh0KiBSZW5kZXJSdWJ5UnVu
OjpnZXRMYXN0UnVieVRleHQoKSBjb25zdAoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1J1YnlUZXh0KCkpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyUnVieVRleHQqPihjaGlsZCk7CisgICAgfQorICAgIHJldHVybiBO
VUxMOworfQorCitSZW5kZXJSdWJ5QmFzZSogUmVuZGVyUnVieVJ1bjo6Y3JlYXRlQW5vbnltb3Vz
UnVieUJhc2UoKQoreworICAgIFJlbmRlclJ1YnlCYXNlKiByYiA9IG5ldyAocmVuZGVyQXJlbmEo
KSkgUmVuZGVyUnVieUJhc2UoZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgKi8pOworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbmV3
U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KEJM
T0NLKTsKKyAgICBuZXdTdHlsZS0+c2V0VGV4dEFsaWduKENFTlRFUik7IC8vIEZJWE1FOiB1c2Ug
V0VCS0lUX0NFTlRFUj8KKyAgICByYi0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKKyAg
ICByZXR1cm4gcmI7Cit9CisKK1JlbmRlclJ1YnlUZXh0KiBSZW5kZXJSdWJ5UnVuOjpjcmVhdGVB
bm9ueW1vdXNSdWJ5VGV4dCgpCit7CisgICAgUmVuZGVyUnVieVRleHQqIHJ0ID0gbmV3IChyZW5k
ZXJBcmVuYSgpKSBSZW5kZXJSdWJ5VGV4dChkb2N1bWVudCgpIC8qIGFub255bW91cyAqLyk7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsK
KyAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CisgICAgbmV3U3R5bGUtPnNldERp
c3BsYXkoQkxPQ0spOworICAgIG5ld1N0eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsgLy8gRklY
TUU6IHRlbXBvcmFyeSBzb2x1dGlvbiAtIG5lZWQgRElTVFJJQlVURV9MRVRURVJTL1NQQUNFUwor
ICAgIHJ0LT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOworICAgIHJldHVybiBydDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFJVQlkpCisKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmggICAocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCAgIChyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBSZW5kZXJSdWJ5UnVuX2gKKyNkZWZpbmUgUmVuZGVyUnVieVJ1bl9oCisKKyNpZiBF
TkFCTEUoUlVCWSkKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVuZGVyUnVieUJhc2U7CitjbGFzcyBSZW5kZXJSdWJ5VGV4dDsKKwor
Ly8gUmVuZGVyUnVieVJ1biBhcmUgJ2lubGluZS1ibG9jay90YWJsZScgbGlrZSBvYmplY3RzLGFu
ZCB3cmFwIGEgc2luZ2xlIHBhaXJpbmcgb2YgYSBydWJ5IGJhc2Ugd2l0aCBpdHMgcnVieSB0ZXh0
KHMpLgorLy8gU2VlIFJlbmRlclJ1YnkuaCBmb3IgZnVydGhlciBjb21tZW50cyBvbiB0aGUgc3Ry
dWN0dXJlCisKK2NsYXNzIFJlbmRlclJ1YnlSdW4gOiBwdWJsaWMgUmVuZGVyQmxvY2sgeworcHVi
bGljOgorICAgIFJlbmRlclJ1YnlSdW4oTm9kZSopOworICAgIHZpcnR1YWwgflJlbmRlclJ1YnlS
dW4oKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJSZW5kZXJSdWJ5UnVuIChhbm9ueW1vdXMpIjsgfQorCisgICAgdmlydHVhbCBib29sIGlz
UnVieVJ1bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmxp
bmVCbG9ja09ySW5saW5lVGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29s
IGhhc1J1YnlCYXNlKCkgY29uc3Q7CisgICAgaW50ICBudW1iZXJPZlJ1YnlUZXh0cygpIGNvbnN0
OworCisgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCog
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKKworICAgIHZpcnR1YWwgaW50
IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZh
bHNlKSBjb25zdDsKKworICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIFJlbmRlclJ1YnlCYXNlKiBnZXRSdWJ5QmFzZSgpIGNvbnN0OworICAgIFJlbmRl
clJ1YnlUZXh0KiBnZXRGaXJzdFJ1YnlUZXh0KCkgY29uc3Q7CisgICAgUmVuZGVyUnVieVRleHQq
IGdldExhc3RSdWJ5VGV4dCgpIGNvbnN0OworICAgIAorICAgIEVSdWJ5UG9zaXRpb24gZWZmZWN0
aXZlUnVieVBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hpbGQpIGNvbnN0OworICAgIAorcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgUmVuZGVyQm94KiBmaXJzdENoaWxkQm94SW5MYXlvdXRPcmRlcigp
IGNvbnN0OyAgICAgICAgCisgICAgdmlydHVhbCBSZW5kZXJCb3gqIG5leHRDaGlsZEJveEluTGF5
b3V0T3JkZXIoUmVuZGVyQm94KiBjaGlsZEJveCkgY29uc3Q7IAorCitwcml2YXRlOgorICAgIFJl
bmRlclJ1YnlCYXNlKiBjcmVhdGVBbm9ueW1vdXNSdWJ5QmFzZSgpOworICAgIFJlbmRlclJ1YnlU
ZXh0KiBjcmVhdGVBbm9ueW1vdXNSdWJ5VGV4dCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFJVQlkpCisKKyNlbmRpZiAvLyBSZW5kZXJSdWJ5UnVu
X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5jcHAgICAgKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5jcHAgICAgKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRl
clJ1YnlUZXh0LmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZW5kZXJSdWJ5VGV4dDo6UmVuZGVyUnVieVRleHQoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRl
ckJsb2NrKG5vZGUpCit7Cit9CisKK1JlbmRlclJ1YnlUZXh0Ojp+UmVuZGVyUnVieVRleHQoKQor
eworfQorCitib29sIFJlbmRlclJ1YnlUZXh0Ojppc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3Qq
IGNoaWxkLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoaWxkLT5pc0lubGlu
ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVC
WSkKKworCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmggIChyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaCAgKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2pl
Y3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFJlbmRlclJ1YnlUZXh0X2gKKyNkZWZpbmUgUmVuZGVyUnVieVRl
eHRfaAorCisjaWYgRU5BQkxFKFJVQlkpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclJ1YnlUZXh0IDogcHVibGljIFJlbmRl
ckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJSdWJ5VGV4dChOb2RlKik7CisgICAgdmlydHVh
bCB+UmVuZGVyUnVieVRleHQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJSdWJ5VGV4dCI7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBpc1J1YnlUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29s
IGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2Vu
ZGlmIC8vIFJlbmRlclJ1YnlUZXh0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCAocmV2
aXNpb24gNDU3ODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oICh3b3JraW5n
IGNvcHkpCkBAIC03OCwxMiArNzgsMTUgQEAgcHVibGljOgogICAgIC8vIFJlbmRlclRoZW1lTWFj
LmNwcCBmb3IgTWFjIE9TIFguCiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHJldHVybiB0aGUgdGhl
bWUncyBleHRyYSBzdHlsZSBzaGVldHMgcnVsZXMsIHRvIGxldCBlYWNoIHBsYXRmb3JtCi0gICAg
Ly8gYWRqdXN0IHRoZSBkZWZhdWx0IENTUyBydWxlcyBpbiBodG1sLmNzcywgcXVpcmtzLmNzcywg
b3IgbWVkaWFDb250cm9scy5jc3MKKyAgICAvLyBhZGp1c3QgdGhlIGRlZmF1bHQgQ1NTIHJ1bGVz
IGluIGh0bWwuY3NzLCBxdWlya3MuY3NzLCBtZWRpYUNvbnRyb2xzLmNzcywgb3IgcnVieS5jc3MK
ICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKSB7IHJl
dHVybiBTdHJpbmcoKTsgfQogI2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBl
eHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CiAjZW5k
aWYKKyNpZiBFTkFCTEUoUlVCWSkKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVJ1YnlTdHlsZVNo
ZWV0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CisjZW5kaWYKIAogICAgIC8vIEEgbWV0aG9kIHRv
IG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlz
IHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAvLyBwb3NpdGlvbiBjYW5ub3Qg
YmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQg
cmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1J1
YnlJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5
SW5saW5lRmxvd0JveC5jcHAgKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5
SW5saW5lRmxvd0JveC5jcHAgKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJ1YnlJbmxpbmVGbG93Qm94LmgiCisKKyNpZiBFTkFC
TEUoUlVCWSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CisKK1J1YnlJbmxpbmVGbG93Qm94OjpSdWJ5SW5saW5lRmxvd0JveChSZW5kZXJPYmplY3QqIG9i
aikKKyAgICA6IElubGluZUZsb3dCb3gob2JqKQorICAgICwgbV9jYWNoZWRIZWlnaHQoMCkKKyAg
ICAsIG1fY2FjaGVkQmFzZWxpbmUoMCkKK3sKKyAgICBzZXRIYXNWaXJ0dWFsSGVpZ2h0KCk7Cit9
CisKK2ludCBSdWJ5SW5saW5lRmxvd0JveDo6dmlydHVhbEhlaWdodCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fY2FjaGVkSGVpZ2h0IDw9IDApCisgICAgICAgIGNvbXB1dGVIZWlnaHRBbmRCYXNlbGlu
ZSgpOworCisgICAgcmV0dXJuIG1fY2FjaGVkSGVpZ2h0OworfQorCitpbnQgUnVieUlubGluZUZs
b3dCb3g6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCkgY29uc3QKK3sKKyAgICBpZiAobV9jYWNoZWRC
YXNlbGluZSA8PSAwKQorICAgICAgICBjb21wdXRlSGVpZ2h0QW5kQmFzZWxpbmUoKTsKKworICAg
IHJldHVybiBtX2NhY2hlZEJhc2VsaW5lOworfQorCit2b2lkIFJ1YnlJbmxpbmVGbG93Qm94Ojpj
b21wdXRlSGVpZ2h0QW5kQmFzZWxpbmUoKSBjb25zdAoreworICAgIGludCBtYXhBc2NlbnQgPSAw
OworICAgIGludCBtYXhEZXNjZW50ID0gMDsKKworICAgIGZvciAoSW5saW5lQm94KiBydW4gPSBm
aXJzdENoaWxkKCk7IHJ1bjsgcnVuID0gcnVuLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaW50
IHJ1bkhlaWdodCA9IHJ1bi0+aGVpZ2h0KCk7CisgICAgICAgIGludCBydW5CYXNlbGluZSA9IHJ1
bi0+YmFzZWxpbmVQb3NpdGlvbihmYWxzZSk7CisgICAgICAgIGludCB5ID0gcnVuLT55KCk7Cisg
ICAgICAgIGludCBhc2NlbnQgPSB5ICsgcnVuQmFzZWxpbmU7CisgICAgICAgIGludCBkZXNjZW50
ID0gcnVuSGVpZ2h0IC0gcnVuQmFzZWxpbmU7CisgICAgICAgIG1heEFzY2VudCA9IG1heChtYXhB
c2NlbnQsIGFzY2VudCk7CisgICAgICAgIG1heERlc2NlbnQgPSBtYXgobWF4RGVzY2VudCwgZGVz
Y2VudCk7CisgICAgfQorICAgIAorICAgIG1fY2FjaGVkQmFzZWxpbmUgPSBtYXhBc2NlbnQgKyBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKKyAgICBtX2NhY2hlZEhlaWdodCA9IG1fY2FjaGVk
QmFzZWxpbmUgKyBtYXhEZXNjZW50ICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCk7
CisgICAgQVNTRVJUKG1fY2FjaGVkQmFzZWxpbmUgPj0gMCk7CisgICAgQVNTRVJUKG1fY2FjaGVk
SGVpZ2h0ID49IDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoUlVCWSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1J1YnlJbmxpbmVGbG93Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUnVieUlubGluZUZsb3dCb3guaCAgIChy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUnVieUlubGluZUZsb3dCb3guaCAgIChy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSdWJ5SW5saW5lRmxvd0JveF9oCisj
ZGVmaW5lIFJ1YnlJbmxpbmVGbG93Qm94X2gKKworI2lmIEVOQUJMRShSVUJZKQorCisjaW5jbHVk
ZSAiSW5saW5lRmxvd0JveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJ1YnlJ
bmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUZsb3dCb3ggeworcHVibGljOgorICAgIFJ1YnlJ
bmxpbmVGbG93Qm94KFJlbmRlck9iamVjdCogb2JqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1J1
YnkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVp
Z2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIC8qaXNS
b290TGluZUJveCovKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgLypp
c1Jvb3RMaW5lQm94Ki8pIGNvbnN0IHsgcmV0dXJuIGhlaWdodCgpOyB9CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRCYXNlbGluZSgpIGNvbnN0OyAvLyBvcGVyYXRlcyBv
biBtdXRhYmxlIG1lbWJlcnMgb25seQorCitwcml2YXRlOgorICAgIG11dGFibGUgaW50IG1fY2Fj
aGVkSGVpZ2h0OworICAgIG11dGFibGUgaW50IG1fY2FjaGVkQmFzZWxpbmU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8v
IFJ1YnlJbmxpbmVGbG93Qm94X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1J1YnlSb290SW5s
aW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5Um9vdElubGlu
ZUJveC5jcHAgKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SdWJ5Um9vdElubGlu
ZUJveC5jcHAgKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJ1YnlSb290SW5saW5lQm94LmgiCisKKyNpZiBFTkFCTEUoUlVCWSkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSdWJ5Um9vdElubGluZUJveDo6UnVieVJvb3RJbmxp
bmVCb3goUmVuZGVyT2JqZWN0KiBvYmopCisgICA6IFJvb3RJbmxpbmVCb3gob2JqKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1J1YnlSb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUnVieVJvb3RJbmxpbmVCb3guaCAgIChyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUnVieVJvb3RJbmxpbmVCb3guaCAgIChyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBSdWJ5Um9vdElubGluZUJveF9oCisjZGVmaW5lIFJ1YnlSb290SW5s
aW5lQm94X2gKKworI2lmIEVOQUJMRShSVUJZKQorCisjaW5jbHVkZSAiUm9vdElubGluZUJveC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJ1YnlSb290SW5saW5lQm94IDogcHVi
bGljIFJvb3RJbmxpbmVCb3ggeworcHVibGljOgorICAgIFJ1YnlSb290SW5saW5lQm94KFJlbmRl
ck9iamVjdCogb2JqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoUlVCWSkKKworI2VuZGlmIC8vIFJ1YnlSb290SW5saW5lQm94X2gKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaCAgKHJldmlzaW9uIDQ1
NzgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaCAg
KHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTUgQEAgZW51bSBFVHJhbnNmb3JtU3R5bGUz
RCB7CiBlbnVtIEVCYWNrZmFjZVZpc2liaWxpdHkgewogICAgIEJhY2tmYWNlVmlzaWJpbGl0eVZp
c2libGUsIEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbgogfTsKKyAgICAKKyNpZiBFTkFCTEUoUlVC
WSkKK2VudW0gRVJ1YnlQb3NpdGlvbiB7CisvLyAgUlBfQVVUTywgLy8gPC0gc2VlIGh0dHA6Ly93
d3cudzMub3JnL1N0eWxlL0NTUy9UcmFja2VyL2lzc3Vlcy8xMDcKKyAgICBSUF9CRUZPUkUsCisg
ICAgUlBfQUZURVIsCisvLyAgUlBfUklHSFQKK307CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCg==
</data>
<flag name="review"
          id="17184"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34043</attachid>
            <date>2009-08-04 01:06:19 -0700</date>
            <delta_ts>2009-08-17 21:24:00 -0700</delta_ts>
            <desc>patch: new ruby implementation (reordering of renderers)</desc>
            <filename>rubynew.patch</filename>
            <type>text/plain</type>
            <size>57313</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njc0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE5IEBACisyMDA5LTA4LTAzICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWlu
ZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBCdWcgMzc0OSAtICBYSFRNTCAxLjEgUnVieSBBbm5vdGF0aW9uCisgICAgICAgIEJV
RzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NDkKKworICAgICAg
ICBUaGlzIGlzIGEgZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgcnVieSByZW5kZXJpbmcgYWNjb3Jk
aW5nIHRvIHRoZSBIVE1MNSBzcGVjLgorICAgICAgICAoc2Vjb25kIGltcGxlbWVudGF0aW9uIHVz
aW5nIHJlb3JkZXJpbmcgb2YgdGhlIGNoaWxkcmVuIGluIHRoZSByZW5kZXIKKyAgICAgICAgdHJl
ZSwgYXMgZGlzY3Vzc2VkIHdpdGggRGF2ZSBIeWF0dC4pCisKKyAgICAgICAgUnVieSByZW5kZXJl
cnMgYXJlIGNyZWF0ZWQgYnkgbG9va2luZyBhdCB0aGUgSFRNTCBlbGVtZW50J3MgbmFtZSwKKyAg
ICAgICAgQ1NTMyAnZGlzcGxheScgcHJvcGVydHkgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkIChu
b3IgaXMgYW55dGhpbmcgZWxzZSBmcm9tIENTUzMpLgorCisgICAgICAgIFRoZSByZW5kZXIgb2Jq
ZWN0IG1vZGVsIGxvb2tzIGFzIGZvbGxvd3M6CisKKyAgICAgICAgMSBSZW5kZXJSdWJ5IG9iamVj
dCwgY29ycmVzcG9uZGluZyB0byB0aGUgd2hvbGUgPHJ1Ynk+IEhUTUwgZWxlbWVudAorICAgICAg
ICAgICAgICAxKyBSZW5kZXJSdWJ5UnVuIChhbm9ueW1vdXMpCisgICAgICAgICAgICAgICAgMCBv
ciAxIFJlbmRlclJ1YnlUZXh0IC0gc2h1ZmZsZWQgdG8gdGhlIGZyb250IGluIG9yZGVyIHRvIHJl
LXVzZSBleGlzdGluZyBibG9jayBsYXlvdXRpbmcKKyAgICAgICAgICAgICAgICAgICAgMC1uIGlu
bGluZSBvYmplY3QocykKKyAgICAgICAgICAgICAgICAwIG9yIDEgUmVuZGVyUnVieUJhc2UgLSBj
b250YWlucyB0aGUgaW5saW5lIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBydWJ5IGJhc2UKKyAg
ICAgICAgICAgICAgICAgICAgMS1uIGlubGluZSBvYmplY3QocykKKworICAgICAgICBUZXN0czog
ZmFzdC9ydWJ5L3J1YnktZW1wdHktcnQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1
YnktbGVuZ3RoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXJ1bi1icmVhay5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieS1ydW5zLXNwYW5zLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXJ1bnMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9y
dWJ5L3J1Ynktc2ltcGxlLXJwLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXNp
bXBsZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieS10cmFpbGluZy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1pbnNlcnQtcnQuaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9ydWJ5L3J1YnlET00taW5zZXJ0LXRleHQxLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvcnVieS9ydWJ5RE9NLWluc2VydC10ZXh0Mi5odG1sCisgICAgICAgICAgICAgICBmYXN0
L3J1YnkvcnVieURPTS1pbnNlcnQtdGV4dDMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5
L3J1YnlET00tcmVtb3ZlLXJ0MS5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURP
TS1yZW1vdmUtcnQyLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5RE9NLXJlbW92
ZS10ZXh0MS5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1yZW1vdmUtdGV4
dDIuaHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZTogYWRkIHN1cHBvcnQgZm9y
IHRoZSBydWJ5LmNzcyBzdHlsZXNoZWV0CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZCBu
ZXcgc291cmNlIGZpbGVzIAorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogYWRkIG5ldyBzb3VyY2Ug
ZmlsZXMKKyAgICAgICAgKiBXZWJDb3JlLnBybzogYWRkIG5ldyBzb3VyY2UgZmlsZXMKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IGFkZCBuZXcgc291cmNlIGZp
bGVzCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOiAKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6IHN1cHBvcnQgZm9yIGV4dHJh
IHJ1Ynkgc3R5bGVzaGVldAorICAgICAgICAqIGNzcy9ydWJ5LmNzczogQWRkZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjptb3ZlQ2hpbGRUbyk6IG1ha2UgdGhpcyBhIG1lbWJlciBmdW5jdGlvbiAod2FzIHN0YXRp
Y2FsbHkgZGVjbGFyZWQgaW4gLmNwcCkKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2su
aDogaGVhZGVyIGRlY2xhcmF0aW9ucyBmb3IgbW92ZUNoaWxkVG8oKQorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpj
cmVhdGVPYmplY3QpOiBpbnN0YW50aWF0ZSBydWJ5IHJlbmRlcmVycywgY29kZSBzaG9ydGVuaW5n
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6aXNBZnRlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0Ojppc1J1YnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1J1YnlC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSdWJ5UnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSdWJ5VGV4dCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclJ1YnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldExhc3RSdWJ5
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSdWJ5UnVuUGFyZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6UmVuZGVyUnVieUFzSW5saW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6flJlbmRlclJ1YnlBc0lubGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OmlzQ2hpbGRBbGxvd2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSdWJ5QXNCbG9jazo6UmVuZGVyUnVieUFzQmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUnVieUFzQmxvY2s6On5SZW5kZXJSdWJ5QXNCbG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6aXNDaGlsZEFsbG93ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJ1YnlBc0Jsb2NrOjpyZW1vdmVDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1
YnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OnJlbmRl
ck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjppc1J1YnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6OnJlbmRlck5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6OmlzUnVieSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
dWJ5QmFzZTo6UmVuZGVyUnVieUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJh
c2U6On5SZW5kZXJSdWJ5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6
aXNDaGlsZEFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6OnNwbGl0
VG9MZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjptZXJnZUZyb21MZWZ0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSdWJ5QmFzZTo6aXNSdWJ5QmFzZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJ1YnlSdW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OlJl
bmRlclJ1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6flJlbmRlclJ1
YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aGFzUnVieVRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aGFzUnVieUJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSdWJ5UnVuOjpnZXRSdWJ5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVu
OjpnZXRSdWJ5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpnZXRPckNy
ZWF0ZVJ1YnlCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmZpcnN0TGlu
ZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnVwZGF0ZUZpcnN0TGV0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmlzQ2hpbGRBbGxvd2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmFkZENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJ1YnlSdW46OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclJ1YnlSdW46OmNyZWF0ZVJ1YnlCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1
YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJS
dWJ5UnVuLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6cmVuZGVy
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjppc1J1YnlSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUnVieVRleHQ6OlJlbmRlclJ1YnlUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJ1YnlUZXh0Ojp+UmVuZGVyUnVieVRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUnVieVRleHQ6OmlzQ2hpbGRBbGxvd2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUnVieVRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5VGV4
dDo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5VGV4dDo6aXNSdWJ5
VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6ZXh0cmFSdWJ5U3R5bGVTaGVldCk6CisKIDIwMDktMDgtMDQgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiA0Njc0NCkKKysrIFdlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNTI5LDYgKzUyOSwxMCBA
QCBYUGF0aEdyYW1tYXIuY3BwIDogeG1sL1hQYXRoR3JhbW1hci55ICQoCiAKIFVTRVJfQUdFTlRf
U1RZTEVfU0hFRVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3MgJChXZWJDb3JlKS9jc3MvcXVp
cmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3MgJChXZWJDb3JlKS9jc3MvdGhl
bWVXaW4uY3NzICQoV2ViQ29yZSkvY3NzL3RoZW1lV2luUXVpcmtzLmNzcyAKIAoraWZlcSAoJChm
aW5kc3RyaW5nIEVOQUJMRV9SVUJZLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9SVUJZKQor
ICAgIFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTIDo9ICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMp
ICQoV2ViQ29yZSkvY3NzL3J1YnkuY3NzIAorZW5kaWYKKwogaWZlcSAoJChmaW5kc3RyaW5nIEVO
QUJMRV9TVkcsJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1NWRykKICAgICBVU0VSX0FHRU5U
X1NUWUxFX1NIRUVUUyA6PSAkKFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTKSAkKFdlYkNvcmUpL2Nz
cy9zdmcuY3NzIAogZW5kaWYKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY3NDQpCisrKyBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjI5LDggKzIyMjksMTUgQEAgZW5k
aWYgIyBFTkQgRU5BQkxFX1ZJREVPCiAjIC0tLS0KIGlmIEVOQUJMRV9SVUJZCiAKLUhUTUxfRkVB
VFVSRVMgKz0gRU5BQkxFX1JVQlk9MQotd2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJMRV9SVUJZ
PTEKK3dlYmNvcmVfc291cmNlcyArPSBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
LmNwcCBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmggXAorICAgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwIFwKKyAgIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmggXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAgXAor
ICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oIFwKKyAgIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlUZXh0LmNwcCBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
VGV4dC5oCiAKIGVuZGlmICMgRU5EIEVOQUJMRV9SVUJZCiAKQEAgLTMxOTMsNiArMzIwMCwxMyBA
QCBVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9IFwKIAkkKFdlYkNvcmUpL2Nzcy93bWwuY3NzIFwK
IAkkKFdlYkNvcmUpL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwogCitpZiBFTkFCTEVfUlVCWQorIyBO
b3RlOiBydWJ5LmNzcyBzZXRzIDxycD4gZGlzcGxheTpub25lLCB3aGljaCB3ZSBkb24ndCB3YW50
IGlmIHJ1YnkgaXNuJ3QsIGluIGZhY3QsIGVuYWJsZWQKK1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRT
ICs9IFwKKyAgICQoV2ViQ29yZSkvY3NzL3J1YnkuY3NzCitlbmRpZiAjIEVORCBFTkFCTEVfUlVC
WQorICAgCisKICMgbmV3LXN0eWxlIEphdmFTY3JpcHQgYmluZGluZ3MKIFNDUklQVFNfQklORElO
R1MgPSBcCiAJJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gXApA
QCAtMzMzMyw2ICszMzQ3LDEzIEBAIHdlYmNvcmVfZGlzdCArPSBcCiAJV2ViQ29yZS94bWwveG1s
YXR0cnMuaW4gXAogCVdlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CiAKK2lmIEVOQUJMRV9SVUJZ
CisjIE5vdGU6IHJ1YnkuY3NzIHNldHMgPHJwPiBkaXNwbGF5Om5vbmUsIHdoaWNoIHdlIGRvbid0
IHdhbnQgaWYgcnVieSBpc24ndCwgaW4gZmFjdCwgZW5hYmxlZAord2ViY29yZV9kaXN0ICs9IFwK
KyAgIFdlYkNvcmUvY3NzL3J1YnkuY3NzCitlbmRpZiAjIEVORCBFTkFCTEVfUlVCWQorICAgCisK
ICMgSW5zdGFsbGluZyB3ZWIgaW5zcGVjdG9yIGZpbGVzCiB3ZWJpbnNwZWN0b3JkaXIgPSAke2Rh
dGFkaXJ9L3dlYmtpdC0xLjAvd2ViaW5zcGVjdG9yCiBkaXN0X3dlYmluc3BlY3Rvcl9EQVRBID0g
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHJldmlzaW9uIDQ2NzQ0KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTI4MTUsNiArMjgxNSwxNCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5j
cHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmgnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclJ1YnkuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmgnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNw
cCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJTVkdCbG9jay5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ2NzQ0KQorKysgV2ViQ29yZS9XZWJDb3JlLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMjQ2NCw2ICsyNDY0LDE3IEBAIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9WSURFTz0xKSB7CiAKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1JVQlk9
MSkgeworICAgU1RZTEVTSEVFVFNfRU1CRUQgKz0gXAorICAgICAgICQkUFdEL2Nzcy9ydWJ5LmNz
cworCisgICAgU09VUkNFUyArPSBcCisgICAgICAgIHJlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBc
CisgICAgICAgIHJlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAgXAorICAgICAgICByZW5kZXJp
bmcvUmVuZGVyUnVieVJ1bi5jcHAgXAorICAgICAgICByZW5kZXJpbmcvUmVuZGVyUnVieVRleHQu
Y3BwCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0xKSB7CiAgICAgRkVBVFVS
RV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hQQVRIPTEKIApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ2NzQ0KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE5Miw2ICsxOTIsMTUgQEAKIAkJMTQ4QUZEQTYwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlv
bkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovOyB9
OwogCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTkzQkUzMEIyRjJC
MUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQkxNDk5M0JFNjBCMkYy
QjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXND
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMTRBNTM3MDYxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBNTM2RkUxMDI3RUZDODAw
MjhCNUFCIC8qIFJlbmRlclJ1YnkuY3BwICovOyB9OworCQkxNEE1MzcwNzEwMjdFRkM4MDAyOEI1
QUIgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTRBNTM2RkYxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuaCAqLzsgfTsK
KwkJMTRBNTM3MDgxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUzNzAwMTAyN0VGQzgw
MDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5jcHAgKi87IH07CisJCTE0QTUzNzA5MTAyN0VGQzgw
MDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRBNTM3MDExMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlC
YXNlLmggKi87IH07CisJCTE0QTUzNzBBMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVu
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUz
NzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCAqLzsgfTsKKwkJMTRBNTM3
MEIxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUzNzAzMTAyN0VGQzgwMDI4QjVBQiAvKiBS
ZW5kZXJSdWJ5UnVuLmggKi87IH07CisJCTE0QTUzNzBDMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5k
ZXJSdWJ5VGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEE1MzcwNDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieVRleHQuY3BwICovOyB9
OworCQkxNEE1MzcwRDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieVRleHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUzNzA1MTAyN0VGQzgw
MDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5oICovOyB9OworCQkxNEE1MzcwRjEwMjdFRkYwMDAy
OEI1QUIgLyogcnVieS5jc3MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0QTUzNzBFMTAyN0VGRjAwMDI4QjVBQiAvKiBydWJ5LmNzcyAqLzsgfTsKIAkJ
MTRDOUE1RUEwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAv
KiBTZXR0aW5ncy5jcHAgKi87IH07CiAJCTE0Q0Y3OEE0MDlGNThDQkYwMEVCMzY2NSAvKiBKU0NT
U1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0Q0Y3OEEzMDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCAqLzsgfTsKIAkJMTRD
Rjc4QTYwOUY1OENEODAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEE1MDlGNThDRDgwMEVCMzY2NSAvKiBK
U0NTU1ZhbHVlLmggKi87IH07CkBAIC01MTI5LDYgKzUxMzgsMTUgQEAKIAkJMTQ4QUZEQTQwQUY1
ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb2N1c0NvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDk5M0JFNDBCMkYyQjFD
MDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTRBNTM2RkUxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0QTUzNkZGMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1YnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTRBNTM3MDAxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBNTM3MDExMDI3RUZDODAw
MjhCNUFCIC8qIFJlbmRlclJ1YnlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclJ1YnlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTUz
NzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNEE1MzcwMzEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieVJ1bi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJSdWJ5UnVuLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTUzNzA0MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5k
ZXJSdWJ5VGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJSdWJ5VGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTUzNzA1MTAy
N0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJSdWJ5VGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxNEE1MzcwRTEwMjdFRkYwMDAyOEI1QUIgLyogcnVieS5jc3MgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNz
czsgcGF0aCA9IHJ1YnkuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEM5QTVF
OTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNldHRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTRDRjc4NzEwOUY1ODdDQTAwRUIzNjY1IC8qIENTU1ZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gQ1NTVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NENGNzhBMzA5RjU4Q0JGMDBFQjM2NjUgLyogSlNDU1NWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDMyNCw2ICsxNDM0Miw3IEBACiAJCQkJQkM3NERBMzYxMDEzRjNGNzAw
Nzk4N0FEIC8qIFJHQkNvbG9yLmNwcCAqLywKIAkJCQlCQzc0REEzNTEwMTNGM0Y3MDA3OTg3QUQg
LyogUkdCQ29sb3IuaCAqLywKIAkJCQk4NThDMzhFRjBBQThGREQxMDBCMTg3QTQgLyogUkdCQ29s
b3IuaWRsICovLAorCQkJCTE0QTUzNzBFMTAyN0VGRjAwMDI4QjVBQiAvKiBydWJ5LmNzcyAqLywK
IAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUuY3BwICovLAogCQkJ
CUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oICovLAogCQkJCUE4MEU3
MzRDMEExOTlDNzcwMDdGQjhDNSAvKiBTdHlsZUJhc2UuY3BwICovLApAQCAtMTQ0NjgsNiArMTQ0
ODcsMTQgQEAKIAkJCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQu
aCAqLywKIAkJCQlCQ0E4NDZENDBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5jcHAg
Ki8sCiAJCQkJQkNBODQ2RDUwREM2N0EzNTAwMjZDMzA5IC8qIFJlbmRlclJlcGxpY2EuaCAqLywK
KwkJCQkxNEE1MzZGRTEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieS5jcHAgKi8sCisJCQkJ
MTRBNTM2RkYxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuaCAqLywKKwkJCQkxNEE1Mzcw
MDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieUJhc2UuY3BwICovLAorCQkJCTE0QTUzNzAx
MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oICovLAorCQkJCTE0QTUzNzAyMTAy
N0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCAqLywKKwkJCQkxNEE1MzcwMzEwMjdF
RkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieVJ1bi5oICovLAorCQkJCTE0QTUzNzA0MTAyN0VGQzgw
MDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi8sCisJCQkJMTRBNTM3MDUxMDI3RUZDODAw
MjhCNUFCIC8qIFJlbmRlclJ1YnlUZXh0LmggKi8sCiAJCQkJQkMzQkU5OTAwRTlDMUM3QzAwODM1
NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgKi8sCiAJCQkJQkMzQkU5OTEwRTlDMUM3QzAwODM1
NTg4IC8qIFJlbmRlclNjcm9sbGJhci5oICovLAogCQkJCUJDM0JFOUFBMEU5QzI0MjAwMDgzNTU4
OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCAqLywKQEAgLTE3MDg0LDYgKzE3MTExLDEwIEBA
CiAJCQkJNDFBM0Q1OEYxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0EyNDU4N0MxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3Rv
ckRPTUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEg
LyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRBNTM3MDcxMDI3
RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QTUzNzA5
MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MTRBNTM3MEIxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICov
LAorCQkJCTE0QTUzNzBEMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0xNzE5OCw2ICsxNzIyOSw3IEBACiAJCQkJNDE2MkE0NTIxMDExNDVBRTAw
REZGM0VEIC8qIERlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsIGluIFJlc291cmNlcyAqLywKIAkJ
CQkyRUNGN0FFMzEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5pZGwgaW4gUmVzb3VyY2Vz
ICovLAogCQkJCTdBNzRFQ0I3MTAxODM5OUEwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmlk
bCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJMTRBNTM3MEYxMDI3RUZGMDAwMjhCNUFCIC8qIHJ1Ynku
Y3NzIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5MTI5LDYgKzE5MTYxLDEwIEBACiAJCQkJNDFBM0Q1
OEUxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QTI0NTg3QjEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUZDNEMxMDI1REVEODAwNTlDREJBIC8qIEFjY2Vz
c2liaWxpdHlTbGlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBNTM3MDYxMDI3RUZDODAw
MjhCNUFCIC8qIFJlbmRlclJ1YnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBNTM3MDgxMDI3
RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0
QTUzNzBBMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTE0QTUzNzBDMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA0Njc0
NCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3Yg
PGFwQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExNDksNiArMTE1MCwxNyBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
UlVCWSkKKyAgICBzdGF0aWMgYm9vbCBsb2FkZWRSdWJ5U3R5bGVTaGVldDsKKyAgICBpZiAoIWxv
YWRlZFJ1YnlTdHlsZVNoZWV0ICYmIChlLT5oYXNUYWdOYW1lKHJ1YnlUYWcpIHx8IGUtPmhhc1Rh
Z05hbWUocnBUYWcpIHx8IGUtPmhhc1RhZ05hbWUocnRUYWcpKSkgeworICAgICAgICBsb2FkZWRS
dWJ5U3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgIFN0cmluZyBydWJ5UnVsZXMgPSBTdHJpbmco
cnVieVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihydWJ5VXNlckFnZW50U3R5bGVTaGVldCkp
ICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5leHRyYVJ1YnlTdHlsZVNoZWV0KCk7Cisg
ICAgICAgIENTU1N0eWxlU2hlZXQqIHJ1YnlTaGVldCA9IHBhcnNlVUFTaGVldChydWJ5UnVsZXMp
OworICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHJ1YnlTaGVldCwgc2Ny
ZWVuRXZhbCgpKTsKKyAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0
KHJ1YnlTaGVldCwgcHJpbnRFdmFsKCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgaW50IGZpcnN0
VUFSdWxlID0gLTEsIGxhc3RVQVJ1bGUgPSAtMTsKICAgICBpbnQgZmlyc3RVc2VyUnVsZSA9IC0x
LCBsYXN0VXNlclJ1bGUgPSAtMTsKICAgICBpbnQgZmlyc3RBdXRob3JSdWxlID0gLTEsIGxhc3RB
dXRob3JSdWxlID0gLTE7CkluZGV4OiBXZWJDb3JlL2Nzcy9ydWJ5LmNzcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9ydWJ5LmNzcwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL3J1Ynku
Y3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKy8qIHJ1YnkgSFRNTCBlbGVtZW50cyAqLwor
CitydWJ5ID4gcnQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTogNjAlOyAg
ICAgICAgIC8qIG1ha2Ugc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gNTAlIGZvciBiZXR0ZXIgcmVhZGFi
aWxpdHkgKi8KKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK3J1YnkgPiBycCB7CisgICAg
ZGlzcGxheTogbm9uZTsKK30KKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gNDY3NDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwNCw2ICs0MDQsMTkgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6
OmNyZWF0ZUFuZEFwcAogICAgIG1fbGluZUJveGVzLmFwcGVuZExpbmVCb3gocm9vdEJveCk7CiAg
ICAgcmV0dXJuIHJvb3RCb3g7CiB9CisgICAgCit2b2lkIFJlbmRlckJsb2NrOjptb3ZlQ2hpbGRU
byhSZW5kZXJPYmplY3QqIHRvLCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHRvQ2hpbGRMaXN0LCBS
ZW5kZXJPYmplY3QqIGNoaWxkKQoreworICAgIEFTU0VSVCh0aGlzID09IGNoaWxkLT5wYXJlbnQo
KSk7CisgICAgdG9DaGlsZExpc3QtPmFwcGVuZENoaWxkTm9kZSh0bywgY2hpbGRyZW4oKS0+cmVt
b3ZlQ2hpbGROb2RlKHRoaXMsIGNoaWxkLCBmYWxzZSksIGZhbHNlKTsKK30KKwordm9pZCBSZW5k
ZXJCbG9jazo6bW92ZUNoaWxkVG8oUmVuZGVyT2JqZWN0KiB0bywgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0KiB0b0NoaWxkTGlzdCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyT2JqZWN0
KiBjaGlsZCkKK3sKKyAgICBBU1NFUlQodGhpcyA9PSBjaGlsZC0+cGFyZW50KCkpOworICAgIEFT
U0VSVCghYmVmb3JlQ2hpbGQgfHwgdG8gPT0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKKyAgICB0
b0NoaWxkTGlzdC0+aW5zZXJ0Q2hpbGROb2RlKHRvLCBjaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5v
ZGUodGhpcywgY2hpbGQsIGZhbHNlKSwgYmVmb3JlQ2hpbGQsIGZhbHNlKTsKK30KIAogdm9pZCBS
ZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKFJlbmRlck9iamVjdCAqaW5zZXJ0aW9u
UG9pbnQpCiB7ICAgIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA0Njc0
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOSw2ICsxMTksOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRl
ck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKKyAgICB2b2lkIG1vdmVD
aGlsZFRvKFJlbmRlck9iamVjdCogdG8sIFJlbmRlck9iamVjdENoaWxkTGlzdCogdG9DaGlsZExp
c3QsIFJlbmRlck9iamVjdCogY2hpbGQpOworICAgIHZvaWQgbW92ZUNoaWxkVG8oUmVuZGVyT2Jq
ZWN0KiB0bywgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB0b0NoaWxkTGlzdCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCwgUmVuZGVyT2JqZWN0KiBjaGlsZCk7CisKICAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cyk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDQ2NzQ0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMCBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNCBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUxLDYgKzUyLDExIEBACiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCisj
aWYgRU5BQkxFKFJVQlkpCisjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgorI2luY2x1ZGUgIlJlbmRl
clJ1YnlUZXh0LmgiCisjZW5kaWYKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNlbmRpZgpAQCAtMTAxLDU2ICsx
MDcsNTIgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNyZWF0ZU9iamVjdAogICAgICAg
ICByZXR1cm4gaW1hZ2U7CiAgICAgfQogCi0gICAgUmVuZGVyT2JqZWN0KiBvID0gMDsKKyNpZiBF
TkFCTEUoUlVCWSkKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShydWJ5VGFnKSkgeworICAgICAg
ICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkUpCisgICAgICAgICAgICByZXR1cm4gbmV3
IChhcmVuYSkgUmVuZGVyUnVieUFzSW5saW5lKG5vZGUpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUnVieUFzQmxvY2sobm9kZSk7CisgICAgfQor
ICAgIC8vIHRyZWF0IDxydD4gYXMgcnVieSB0ZXh0IE9OTFkgaWYgaXQgc3RpbGwgaGFzIGl0cyBk
ZWZhdWx0IHRyZWF0bWVudCBvZiBibG9jaworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKHJ0VGFn
KSAmJiBzdHlsZS0+ZGlzcGxheSgpID09IEJMT0NLKQorICAgICAgICByZXR1cm4gbmV3IChhcmVu
YSkgUmVuZGVyUnVieVRleHQobm9kZSk7IAorI2VuZGlmCiAKICAgICBzd2l0Y2ggKHN0eWxlLT5k
aXNwbGF5KCkpIHsKICAgICAgICAgY2FzZSBOT05FOgotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2FzZSBJTkxJTkU6Ci0gICAgICAgICAgICBvID0g
bmV3IChhcmVuYSkgUmVuZGVySW5saW5lKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW5saW5lKG5vZGUpOwogICAgICAgICBj
YXNlIEJMT0NLOgotICAgICAgICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlckJsb2NrKG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSU5MSU5FX0JMT0NLOgotICAgICAg
ICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlckJsb2NrKG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTElTVF9JVEVNOgotICAgICAgICAgICAgbyA9IG5ldyAoYXJlbmEp
IFJlbmRlckxpc3RJdGVtKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
UlVOX0lOOgogICAgICAgICBjYXNlIENPTVBBQ1Q6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVu
YSkgUmVuZGVyQmxvY2sobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhub2RlKTsKKyAgICAgICAgY2FzZSBMSVNUX0lU
RU06CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyTGlzdEl0ZW0obm9kZSk7
CiAgICAgICAgIGNhc2UgVEFCTEU6CiAgICAgICAgIGNhc2UgSU5MSU5FX1RBQkxFOgotICAgICAg
ICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlKG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGFibGUobm9kZSk7CiAg
ICAgICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQOgogICAgICAgICBjYXNlIFRBQkxFX0hFQURFUl9H
Uk9VUDoKICAgICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6Ci0gICAgICAgICAgICBvID0g
bmV3IChhcmVuYSkgUmVuZGVyVGFibGVTZWN0aW9uKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVTZWN0aW9uKG5vZGUp
OwogICAgICAgICBjYXNlIFRBQkxFX1JPVzoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBS
ZW5kZXJUYWJsZVJvdyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlUm93KG5vZGUpOwogICAgICAgICBjYXNlIFRBQkxF
X0NPTFVNTl9HUk9VUDoKICAgICAgICAgY2FzZSBUQUJMRV9DT0xVTU46Ci0gICAgICAgICAgICBv
ID0gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVDb2wobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZUNvbChub2RlKTsKICAg
ICAgICAgY2FzZSBUQUJMRV9DRUxMOgotICAgICAgICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRl
clRhYmxlQ2VsbChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlQ2VsbChub2RlKTsKICAgICAgICAgY2FzZSBUQUJMRV9D
QVBUSU9OOgotICAgICAgICAgICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlckJsb2NrKG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVy
QmxvY2sobm9kZSk7CiAgICAgICAgIGNhc2UgQk9YOgogICAgICAgICBjYXNlIElOTElORV9CT1g6
Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVuYSkgUmVuZGVyRmxleGlibGVCb3gobm9kZSk7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJG
bGV4aWJsZUJveChub2RlKTsKICAgICB9CiAKLSAgICByZXR1cm4gbzsKKyAgICByZXR1cm4gMDsK
IH0KIAogI2lmbmRlZiBOREVCVUcgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2
aXNpb24gNDY3NDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNCBBbGxhbiBTYW5kZmVs
ZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4NSw2ICsyODYsOSBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzSFRNTE1hcnF1ZWUoKSBjb25zdDsKIAorICAgIGlubGluZSBib29sIGlzQWZ0ZXJD
b250ZW50KCkgY29uc3Q7CisgICAgc3RhdGljIGlubGluZSBib29sIGlzQWZ0ZXJDb250ZW50KGNv
bnN0IFJlbmRlck9iamVjdCogb2JqKSB7IHJldHVybiBvYmogJiYgb2JqLT5pc0FmdGVyQ29udGVu
dCgpOyB9CisKICAgICBib29sIGNoaWxkcmVuSW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZHJlbklubGluZTsgfQogICAgIHZvaWQgc2V0Q2hpbGRyZW5JbmxpbmUoYm9vbCBiID0gdHJ1ZSkg
eyBtX2NoaWxkcmVuSW5saW5lID0gYjsgfQogICAgIGJvb2wgaGFzQ29sdW1ucygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQ29sdW1uczsgfQpAQCAtMjkyLDYgKzI5NiwxMyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBjZWxsV2lkdGhDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsV2lkdGhDaGFuZ2Vk
OyB9CiAgICAgdm9pZCBzZXRDZWxsV2lkdGhDaGFuZ2VkKGJvb2wgYiA9IHRydWUpIHsgbV9jZWxs
V2lkdGhDaGFuZ2VkID0gYjsgfQogCisjaWYgRU5BQkxFKFJVQlkpCisgICAgdmlydHVhbCBib29s
IGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUnVi
eUJhc2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlS
dW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlUZXh0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAg
ICAvLyBGSVhNRTogVW50aWwgYWxsIFNWRyByZW5kZXJzIGNhbiBiZSBzdWJjbGFzc2VzIG9mIFJl
bmRlclNWR01vZGVsT2JqZWN0IHdlIGhhdmUKICAgICAvLyB0byBhZGQgU1ZHIHJlbmRlcmVyIG1l
dGhvZHMgdG8gUmVuZGVyT2JqZWN0IHdpdGggYW4gQVNTRVJUX05PVF9SRUFDSEVEKCkgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbi4KQEAgLTg1OCw2ICs4NjksMTYgQEAgaW5saW5lIGJvb2wgUmVuZGVy
T2JqZWN0Ojpkb2N1bWVudEJlaW5nRAogICAgIHJldHVybiAhZG9jdW1lbnQoKS0+cmVuZGVyZXIo
KTsKIH0KIAoraW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0FmdGVyQ29udGVudCgpIGNvbnN0
Cit7CisgICAgaWYgKHN0eWxlKCktPnN0eWxlVHlwZSgpICE9IEFGVEVSKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIHRoZWlyIG93biBzdHlsZXMs
IHNvIGlnbm9yZSB0aGUgc3R5bGUgb24gYSB0ZXh0IG5vZGUuCisgICAgaWYgKGlzVGV4dCgpICYm
ICFpc0JSKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
aW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXROZWVkc0xheW91dChib29sIGIsIGJvb2wgbWFy
a1BhcmVudHMpCiB7CiAgICAgYm9vbCBhbHJlYWR5TmVlZGVkTGF5b3V0ID0gbV9uZWVkc0xheW91
dDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5LmgiCisKKyNpZiBF
TkFCTEUoUlVCWSkKKworI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLz09PSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgdG8gYXZvaWQgZXhjZXNz
aXZlIGNvZGUgZHVwbGljYXRpb24gPT09CisKK3N0YXRpYyBSZW5kZXJSdWJ5UnVuKiBnZXRMYXN0
UnVieVJ1bihjb25zdCBSZW5kZXJPYmplY3QqIHJ1YnkpCit7CisgICAgUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHJ1YnktPmxhc3RDaGlsZCgpOworICAgIGlmIChjaGlsZCAmJiBydWJ5LT5pc0FmdGVy
Q29udGVudChjaGlsZCkpCisgICAgICAgIGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygp
OworICAgIEFTU0VSVCghY2hpbGQgfHwgY2hpbGQtPmlzUnVieVJ1bigpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1bio+KGNoaWxkKTsKK30KKworc3RhdGljIGlubGluZSBS
ZW5kZXJSdWJ5UnVuKiBmaW5kUnVieVJ1blBhcmVudChSZW5kZXJPYmplY3QqIGNoaWxkKQorewor
ICAgIHdoaWxlIChjaGlsZCAmJiAhY2hpbGQtPmlzUnVieVJ1bigpKQorICAgICAgICBjaGlsZCA9
IGNoaWxkLT5wYXJlbnQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1bio+
KGNoaWxkKTsKK30KKworLy89PT0gcnVieSBhcyBpbmxpbmUgb2JqZWN0ID09PQorCitSZW5kZXJS
dWJ5QXNJbmxpbmU6OlJlbmRlclJ1YnlBc0lubGluZShOb2RlKiBub2RlKQorICAgIDogUmVuZGVy
SW5saW5lKG5vZGUpCit7Cit9CisKK1JlbmRlclJ1YnlBc0lubGluZTo6flJlbmRlclJ1YnlBc0lu
bGluZSgpCit7Cit9CisKK2Jvb2wgUmVuZGVyUnVieUFzSW5saW5lOjppc0NoaWxkQWxsb3dlZChS
ZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGNo
aWxkLT5pc1J1YnlUZXh0KCkKKyAgICAgICAgfHwgY2hpbGQtPmlzUnVieVJ1bigpCisgICAgICAg
IHx8IGNoaWxkLT5pc0lubGluZSgpOworfQorCit2b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sK
KyAgICAvLyBOb3RlOiAnOmFmdGVyJyBjb250ZW50IGlzIGhhbmRsZWQgaW1wbGljaXRlbHkgYmVs
b3cKKworICAgIC8vIGlmIGNoaWxkIGlzIGEgcnVieSBydW4sIGp1c3QgYWRkIGl0IG5vcm1hbGx5
CisgICAgaWYgKGNoaWxkLT5pc1J1YnlSdW4oKSkgeworICAgICAgICBSZW5kZXJJbmxpbmU6OmFk
ZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzQWZ0ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgeworICAg
ICAgICAvLyBpbnNlcnQgY2hpbGQgaW50byBydW4KKyAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGls
ZC0+aXNSdWJ5UnVuKCkpOworICAgICAgICBSZW5kZXJSdWJ5UnVuKiBydW4gPSBmaW5kUnVieVJ1
blBhcmVudChiZWZvcmVDaGlsZCk7CisgICAgICAgIEFTU0VSVChydW4pOyAvLyBiZWZvcmVDaGls
ZCBzaG91bGQgYWx3YXlzIGhhdmUgYSBydW4gYXMgcGFyZW50CisgICAgICAgIGlmIChydW4pIHsK
KyAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZmFsc2UpOyAvLyBiZWZvcmVD
aGlsZCBzaG91bGQgYWx3YXlzIGhhdmUgYSBydW4gYXMgcGFyZW50IQorICAgICAgICAvLyBFbWVy
Z2VuY3kgZmFsbGJhY2s6IGZhbGwgdGhyb3VnaCBhbmQganVzdCBhcHBlbmQuCisgICAgfQorCisg
ICAgLy8gSWYgdGhlIG5ldyBjaGlsZCB3b3VsZCBiZSBhcHBlbmRlZCwgdHJ5IHRvIGFkZCB0aGUg
Y2hpbGQgdG8gdGhlIHByZXZpb3VzIHJ1bgorICAgIC8vIGlmIHBvc3NpYmxlLCBvciBjcmVhdGUg
YSBuZXcgcnVuIG90aGVyd2lzZS4KKyAgICAvLyAoVGhlIFJlbmRlclJ1YnlSdW4gb2JqZWN0IHdp
bGwgaGFuZGxlIHRoZSBkZXRhaWxzKQorICAgIFJlbmRlclJ1YnlSdW4qIGxhc3RSdW4gPSBnZXRM
YXN0UnVieVJ1bih0aGlzKTsKKyAgICBpZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRl
eHQoKSkgeworICAgICAgICBsYXN0UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVi
eVJ1bih0aGlzKTsKKyAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChsYXN0UnVuKTsKKyAg
ICB9CisgICAgbGFzdFJ1bi0+YWRkQ2hpbGQoY2hpbGQpOworfQorCit2b2lkIFJlbmRlclJ1YnlB
c0lubGluZTo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAgICAvLyBJZiB0
aGUgY2hpbGQncyBwYXJlbnQgaXMgKnRoaXMsIGkuZS4gYSBydWJ5IHJ1biBvciAnOmFmdGVyJyBj
b250ZW50LAorICAgIC8vIGp1c3QgdXNlIHRoZSBub3JtYWwgcmVtb3ZlIG1ldGhvZC4KKyAgICBp
ZiAoY2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKKyAgICAgICAgQVNTRVJUKGNoaWxkLT5pc1J1
YnlSdW4oKSB8fCBjaGlsZC0+aXNBZnRlckNvbnRlbnQoKSk7CisgICAgICAgIFJlbmRlcklubGlu
ZTo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
RmluZCB0aGUgY29udGFpbmluZyBydW4KKyAgICBSZW5kZXJSdWJ5UnVuKiBydW4gPSBmaW5kUnVi
eVJ1blBhcmVudChjaGlsZCk7CisgICAgQVNTRVJUKHJ1bik7CisgICAgcnVuLT5yZW1vdmVDaGls
ZChjaGlsZCk7Cit9CisKKworLy89PT0gcnVieSBhcyBibG9jayBvYmplY3QgPT09CisKK1JlbmRl
clJ1YnlBc0Jsb2NrOjpSZW5kZXJSdWJ5QXNCbG9jayhOb2RlKiBub2RlKQorICAgIDogUmVuZGVy
QmxvY2sobm9kZSkKK3sKK30KKworUmVuZGVyUnVieUFzQmxvY2s6On5SZW5kZXJSdWJ5QXNCbG9j
aygpCit7Cit9CisKK2Jvb2wgUmVuZGVyUnVieUFzQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKFJlbmRl
ck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hpbGQt
PmlzUnVieVRleHQoKQorICAgICAgICB8fCBjaGlsZC0+aXNSdWJ5UnVuKCkKKyAgICAgICAgfHwg
Y2hpbGQtPmlzSW5saW5lKCk7Cit9CisKK3ZvaWQgUmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxk
KFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAg
Ly8gTm90ZTogJzphZnRlcicgY29udGVudCBpcyBoYW5kbGVkIGltcGxpY2l0ZWx5IGJlbG93CisK
KyAgICAvLyBpZiBjaGlsZCBpcyBhIHJ1YnkgcnVuLCBqdXN0IGFkZCBpdCBub3JtYWxseQorICAg
IGlmIChjaGlsZC0+aXNSdWJ5UnVuKCkpIHsKKyAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxk
KGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YmVmb3JlQ2hpbGQgJiYgIWlzQWZ0ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgeworICAgICAgICAv
LyBpbnNlcnQgY2hpbGQgaW50byBydW4KKyAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZC0+aXNS
dWJ5UnVuKCkpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJ1biA9IGJlZm9yZUNoaWxkOworICAg
ICAgICB3aGlsZSAocnVuICYmICFydW4tPmlzUnVieVJ1bigpKQorICAgICAgICAgICAgcnVuID0g
cnVuLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHJ1bikgeworICAgICAgICAgICAgcnVuLT5hZGRD
aGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChmYWxzZSk7IC8vIGJlZm9yZUNoaWxkIHNob3VsZCBhbHdheXMgaGF2
ZSBhIHJ1biBhcyBwYXJlbnQhCisgICAgICAgIC8vIEVtZXJnZW5jeSBmYWxsYmFjazogZmFsbCB0
aHJvdWdoIGFuZCBqdXN0IGFwcGVuZC4KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbmV3IGNoaWxk
IHdvdWxkIGJlIGFwcGVuZGVkLCB0cnkgdG8gYWRkIHRoZSBjaGlsZCB0byB0aGUgcHJldmlvdXMg
cnVuCisgICAgLy8gaWYgcG9zc2libGUsIG9yIGNyZWF0ZSBhIG5ldyBydW4gb3RoZXJ3aXNlLgor
ICAgIC8vIChUaGUgUmVuZGVyUnVieVJ1biBvYmplY3Qgd2lsbCBoYW5kbGUgdGhlIGRldGFpbHMp
CisgICAgUmVuZGVyUnVieVJ1biogbGFzdFJ1biA9IGdldExhc3RSdWJ5UnVuKHRoaXMpOworICAg
IGlmICghbGFzdFJ1biB8fCBsYXN0UnVuLT5oYXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIGxhc3RS
dW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKHRoaXMpOworICAgICAgICBS
ZW5kZXJCbG9jazo6YWRkQ2hpbGQobGFzdFJ1bik7CisgICAgfQorICAgIGxhc3RSdW4tPmFkZENo
aWxkKGNoaWxkKTsKK30KKwordm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6cmVtb3ZlQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAgICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMgKnRo
aXMsIGp1c3QgdXNlIHRoZSBub3JtYWwgcmVtb3ZlIG1ldGhvZC4KKyAgICBpZiAoY2hpbGQtPnBh
cmVudCgpID09IHRoaXMpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIG9ubHkgZHVy
aW5nIGRlc3RydWN0aW9uIG9mIHRoZSB3aG9sZSBydWJ5IGVsZW1lbnQsIHRob3VnaC4KKyAgICAg
ICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEZpbmQgdGhlIGNvbnRhaW5pbmcgcnVuCisgICAgUmVuZGVyUnVieVJ1biog
cnVuID0gZmluZFJ1YnlSdW5QYXJlbnQoY2hpbGQpOworICAgIEFTU0VSVChydW4pOworICAgIHJ1
bi0+cmVtb3ZlQ2hpbGQoY2hpbGQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVi
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJv
amVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyUnVieV9oCisjZGVmaW5lIFJlbmRlclJ1YnlfaAor
CisjaWYgRU5BQkxFKFJVQlkpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZvbGxvd2luZyB0
aGUgSFRNTCA1IHNwZWMsIHRoZSBib3ggb2JqZWN0IG1vZGVsIGZvciBhIDxydWJ5PiBlbGVtZW50
IGFsbG93cyBzZXZlcmFsIHJ1bnMgb2YgcnVieQorLy8gYmFzZXMgd2l0aCB0aGVpciByZXNwZWN0
aXZlIHJ1YnkgdGV4dHMgbG9va3MgYXMgZm9sbG93czoKKy8vCisvLyAxIFJlbmRlclJ1Ynkgb2Jq
ZWN0LCBjb3JyZXNwb25kaW5nIHRvIHRoZSB3aG9sZSA8cnVieT4gSFRNTCBlbGVtZW50CisvLyAg
ICAgIDErIFJlbmRlclJ1YnlSdW4gKGFub255bW91cykKKy8vICAgICAgICAgIDAgb3IgMSBSZW5k
ZXJSdWJ5VGV4dCAtIHNodWZmbGVkIHRvIHRoZSBmcm9udCBpbiBvcmRlciB0byByZS11c2UgZXhp
c3RpbmcgYmxvY2sgbGF5b3V0aW5nCisvLyAgICAgICAgICAgICAgMC1uIGlubGluZSBvYmplY3Qo
cykKKy8vICAgICAgICAgIDAgb3IgMSBSZW5kZXJSdWJ5QmFzZSAtIGNvbnRhaW5zIHRoZSBpbmxp
bmUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIHJ1YnkgYmFzZQorLy8gICAgICAgICAgICAgIDEt
biBpbmxpbmUgb2JqZWN0KHMpCisvLworLy8gTm90ZTogPHJwPiBlbGVtZW50cyBhcmUgZGVmaW5l
ZCBhcyBoYXZpbmcgJ2Rpc3BsYXk6bm9uZScgYW5kIHRodXMgbm9ybWFsbHkgYXJlIG5vdCBhc3Np
Z25lZCBhIHJlbmRlcmVyLgorCisvLyA8cnVieT4gd2hlbiB1c2VkIGFzICdkaXNwbGF5OmlubGlu
ZScKK2NsYXNzIFJlbmRlclJ1YnlBc0lubGluZSA6IHB1YmxpYyBSZW5kZXJJbmxpbmUgeworcHVi
bGljOgorICAgIFJlbmRlclJ1YnlBc0lubGluZShOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVy
UnVieUFzSW5saW5lKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyUnVieSAoaW5saW5lKSI7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBpc1J1YnkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXND
aGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3Qq
IGNoaWxkKTsKK307CisKKy8vIDxydWJ5PiB3aGVuIHVzZWQgYXMgJ2Rpc3BsYXk6YmxvY2snIG9y
ICdkaXNwbGF5OmlubGluZS1ibG9jaycKK2NsYXNzIFJlbmRlclJ1YnlBc0Jsb2NrIDogcHVibGlj
IFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJSdWJ5QXNCbG9jayhOb2RlKik7Cisg
ICAgdmlydHVhbCB+UmVuZGVyUnVieUFzQmxvY2soKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJSdWJ5IChibG9jaykiOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNSdWJ5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8vIFJlbmRlclJ1YnlfaApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKKwor
I2lmIEVOQUJMRShSVUJZKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclJ1YnlCYXNl
OjpSZW5kZXJSdWJ5QmFzZShOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sK
KyAgICBzZXRJbmxpbmUoZmFsc2UpOworfQorCitSZW5kZXJSdWJ5QmFzZTo6flJlbmRlclJ1YnlC
YXNlKCkKK3sKK30KKworYm9vbCBSZW5kZXJSdWJ5QmFzZTo6aXNDaGlsZEFsbG93ZWQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5bGUqKSBjb25zdAoreworICAgIHJldHVybiBjaGlsZC0+
aXNJbmxpbmUoKTsKK30KKwordm9pZCBSZW5kZXJSdWJ5QmFzZTo6c3BsaXRUb0xlZnQoUmVuZGVy
QmxvY2sqIGxlZnRCYXNlLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIC8vIFRo
aXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgY2hpbGRyZW4gdGhhdCBhcmUgYmVmb3JlICghKSBiZWZv
cmVDaGlsZAorICAgIC8vIGFuZCBhcHBlbmRzIHRoZW0gdG8gbGVmdEJhc2UuCisgICAgQVNTRVJU
KGxlZnRCYXNlKTsKKworICAgIC8vIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IGJlZm9yZUNoaWxkIChp
ZiBzZXQpIGlzIGluZGVlZCBhIGRpcmVjdCBjaGlsZCBvZiB0aGlzLgorICAgIC8vIEZhbGxiYWNr
OiBjbGltYiB1cCB0aGUgdHJlZSB0byBtYWtlIHN1cmUuIFRoaXMgbWF5IHJlc3VsdCBpbiBzb21l
d2hhdCBpbmNvcnJlY3QgcmVuZGVyaW5nLgorICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBoYXBwZW4/
IElzIHRoZXJlIGEgYmV0dGVyL21vcmUgY29ycmVjdCB3YXkgdG8gc29sdmUgdGhpcz8KKyAgICBB
U1NFUlQoIWJlZm9yZUNoaWxkIHx8IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKyAg
ICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCisg
ICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOworCisgICAgUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAoY2hpbGQgIT0gYmVmb3Jl
Q2hpbGQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgbW92ZUNoaWxkVG8obGVmdEJhc2UsIGxlZnRCYXNlLT5jaGlsZHJl
bigpLCBjaGlsZCk7CisgICAgICAgIGNoaWxkID0gbmV4dENoaWxkOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJSdWJ5QmFzZTo6bWVyZ2VGcm9tTGVmdChSZW5kZXJCbG9jayogbGVmdEJhc2UpCit7
CisgICAgLy8gVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBjaGlsZHJlbiBvZiBsZWZ0QmFzZSBh
bmQgcHJlcGVuZHMgKCEpIHRoZW0gdG8gdGhpcy4KKyAgICBBU1NFUlQobGVmdEJhc2UpOworCisg
ICAgUmVuZGVyT2JqZWN0KiBmaXJzdFBvcyA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gbGVmdEJhc2UtPmxhc3RDaGlsZCgpOworICAgIHdoaWxlIChjaGlsZCkgewor
ICAgICAgICBsZWZ0QmFzZS0+bW92ZUNoaWxkVG8odGhpcywgY2hpbGRyZW4oKSwgZmlyc3RQb3Ms
IGNoaWxkKTsKKyAgICAgICAgZmlyc3RQb3MgPSBjaGlsZDsKKyAgICAgICAgY2hpbGQgPSBsZWZ0
QmFzZS0+bGFzdENoaWxkKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFz
ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyUnVieUJhc2VfaAorI2Rl
ZmluZSBSZW5kZXJSdWJ5QmFzZV9oCisKKyNpZiBFTkFCTEUoUlVCWSkKKworI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyUnVieUJh
c2UgOiBwdWJsaWMgUmVuZGVyQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlclJ1YnlCYXNlKE5v
ZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJSdWJ5QmFzZSgpOworCisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclJ1YnlCYXNlIChhbm9u
eW1vdXMpIjsgfQorCisgICAgdmlydHVhbCBib29sIGlzUnVieUJhc2UoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZvaWQgc3BsaXRUb0xlZnQoUmVuZGVyQmxv
Y2sqIGxlZnRCYXNlLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIG1lcmdl
RnJvbUxlZnQoUmVuZGVyQmxvY2sqIGxlZnRCYXNlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJZKQorCisjZW5kaWYgLy8gUmVuZGVyUnVieUJh
c2VfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclJ1YnlS
dW4uaCIKKworI2lmIEVOQUJMRShSVUJZKQorCisjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIK
KyNpbmNsdWRlICJSZW5kZXJSdWJ5VGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJSdWJ5
UnVuOjpSZW5kZXJSdWJ5UnVuKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJCbG9jayhub2RlKQor
eworICAgIHNldFJlcGxhY2VkKHRydWUpOworICAgIHNldElubGluZSh0cnVlKTsKK30KKworUmVu
ZGVyUnVieVJ1bjo6flJlbmRlclJ1YnlSdW4oKQoreworfQorCitpbmxpbmUgYm9vbCBSZW5kZXJS
dWJ5UnVuOjpoYXNSdWJ5VGV4dCgpIGNvbnN0Cit7CisgICAgLy8gVGhlIG9ubHkgcGxhY2Ugd2hl
cmUgYSBydWJ5IHRleHQgY2FuIGJlIGlzIGluIHRoZSBmaXJzdCBwb3NpdGlvbgorICAgIC8vIE5v
dGU6IEFzIGFub255bW91cyBibG9ja3MsIHJ1YnkgcnVucyBkbyBub3QgaGF2ZSAnOmJlZm9yZScg
b3IgJzphZnRlcicgY29udGVudCB0aGVtc2VsdmVzLgorICAgIHJldHVybiBmaXJzdENoaWxkKCkg
JiYgZmlyc3RDaGlsZCgpLT5pc1J1YnlUZXh0KCk7Cit9CisKK2lubGluZSBib29sIFJlbmRlclJ1
YnlSdW46Omhhc1J1YnlCYXNlKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgb25seSBwbGFjZSB3aGVy
ZSBhIHJ1YnkgYmFzZSBjYW4gYmUgaXMgaW4gdGhlIGxhc3QgcG9zaXRpb24KKyAgICAvLyBOb3Rl
OiBBcyBhbm9ueW1vdXMgYmxvY2tzLCBydWJ5IHJ1bnMgZG8gbm90IGhhdmUgJzpiZWZvcmUnIG9y
ICc6YWZ0ZXInIGNvbnRlbnQgdGhlbXNlbHZlcy4KKyAgICByZXR1cm4gbGFzdENoaWxkKCkgJiYg
bGFzdENoaWxkKCktPmlzUnVieUJhc2UoKTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyUnVieVJ1
bjo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFoYXNSdWJ5VGV4dCgpICYmICFoYXNS
dWJ5QmFzZSgpOworfQorCitpbmxpbmUgUmVuZGVyUnVieVRleHQqIFJlbmRlclJ1YnlSdW46Omdl
dFJ1YnlUZXh0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGls
ZCgpOworICAgIHJldHVybiBjaGlsZCAmJiBjaGlsZC0+aXNSdWJ5VGV4dCgpID8gc3RhdGljX2Nh
c3Q8UmVuZGVyUnVieVRleHQqPihjaGlsZCkgOiAwOworfQorCitpbmxpbmUgUmVuZGVyUnVieUJh
c2UqIFJlbmRlclJ1YnlSdW46OmdldFJ1YnlCYXNlKCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gbGFzdENoaWxkKCk7CisgICAgcmV0dXJuIGNoaWxkICYmIGNoaWxkLT5pc1J1
YnlCYXNlKCkgPyBzdGF0aWNfY2FzdDxSZW5kZXJSdWJ5QmFzZSo+KGNoaWxkKSA6IDA7Cit9CisK
K1JlbmRlclJ1YnlCYXNlKiBSZW5kZXJSdWJ5UnVuOjpnZXRPckNyZWF0ZVJ1YnlCYXNlKCkKK3sK
KyAgICBSZW5kZXJSdWJ5QmFzZSogYmFzZSA9IGdldFJ1YnlCYXNlKCk7CisgICAgaWYgKCFiYXNl
KSB7CisgICAgICAgIGJhc2UgPSBjcmVhdGVSdWJ5QmFzZSgpOworICAgICAgICBSZW5kZXJCbG9j
azo6YWRkQ2hpbGQoYmFzZSk7CisgICAgfQorICAgIHJldHVybiBiYXNlOworfQorCitSZW5kZXJC
bG9jayogUmVuZGVyUnVieVJ1bjo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAoreworICAgIHJldHVy
biAwOworfQorCit2b2lkIFJlbmRlclJ1YnlSdW46OnVwZGF0ZUZpcnN0TGV0dGVyKCkKK3sKK30K
KworYm9vbCBSZW5kZXJSdWJ5UnVuOjppc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoaWxkLT5pc1J1YnlUZXh0KCkg
fHwgY2hpbGQtPmlzSW5saW5lKCk7Cit9CisKK3ZvaWQgUmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBB
U1NFUlQoY2hpbGQpOworCisgICAgLy8gSWYgY2hpbGQgaXMgYSBydWJ5IHRleHQKKyAgICBpZiAo
Y2hpbGQtPmlzUnVieVRleHQoKSkgeworICAgICAgICBpZiAoIWJlZm9yZUNoaWxkKSB7CisgICAg
ICAgICAgICAvLyBSZW5kZXJSdWJ5IGhhcyBhbHJlYWR5IGFzY2VydGFpbmVkIHRoYXQgd2UgY2Fu
IGFkZCB0aGUgY2hpbGQgaGVyZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGFzUnVieVRleHQoKSk7
CisgICAgICAgICAgICAvLyBwcmVwZW5kIHJ1YnkgdGV4dHMgYXMgZmlyc3QgY2hpbGQKKyAgICAg
ICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChjaGlsZCwgZmlyc3RDaGlsZCgpKTsKKyAgICAg
ICAgfSAgZWxzZSBpZiAoYmVmb3JlQ2hpbGQtPmlzUnVieVRleHQoKSkgeworICAgICAgICAgICAg
Ly8gTmV3IHRleHQgaXMgaW5zZXJ0ZWQganVzdCBiZWZvcmUgYW5vdGhlci4KKyAgICAgICAgICAg
IC8vIEluIHRoaXMgY2FzZSB0aGUgbmV3IHRleHQgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZSBvbGQg
b25lLCBhbmQKKyAgICAgICAgICAgIC8vIHRoZSBvbGQgdGV4dCBnb2VzIGludG8gYSBuZXcgcnVu
IHRoYXQgaXMgaW5zZXJ0ZWQgYXMgbmV4dCBzaWJsaW5nLgorICAgICAgICAgICAgQVNTRVJUKGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCog
cnVieSA9IHBhcmVudCgpOworICAgICAgICAgICAgQVNTRVJUKHJ1YnktPmlzUnVieSgpKTsKKyAg
ICAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1Ynkp
OworICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQobmV3UnVuLCBuZXh0U2libGluZygpKTsKKyAg
ICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHJ1YnkgdGV4dCBhbmQgbW92ZSB0aGUgb2xkIG9uZSB0
byB0aGUgbmV3IHJ1bgorICAgICAgICAgICAgLy8gTm90ZTogRG9pbmcgaXQgaW4gdGhpcyBvcmRl
ciBhbmQgbm90IHVzaW5nIFJlbmRlclJ1YnlSdW4ncyBtZXRob2RzLAorICAgICAgICAgICAgLy8g
aW4gb3JkZXIgdG8gYXZvaWQgYXV0b21hdGljIHJlbW92YWwgb2YgdGhlIHJ1YnkgcnVuIGluIGNh
c2UgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgIC8vIG90aGVyIGNoaWxkIGJlc2lkZXMgdGhlIG9s
ZCBydWJ5IHRleHQuCisgICAgICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoY2hpbGQsIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChiZWZvcmVD
aGlsZCk7CisgICAgICAgICAgICBuZXdSdW4tPmFkZENoaWxkKGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNSdWJ5QmFzZSgpKTsgLy8gT3RoZXJ3
aXNlIGJlZm9yZUNoaWxkIHdvdWxkIGJlIGJvcmtlZC4KKyAgICAgICAgICAgIC8vIEluc2VydGlv
biBiZWZvcmUgYSBydWJ5IGJhc2Ugb2JqZWN0LgorICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNl
IHdlIG5lZWQgaW5zZXJ0IGEgbmV3IHJ1biBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIGFuZCBzcGxp
dCB0aGUgYmFzZS4KKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcnVieSA9IHBhcmVudCgpOwor
ICAgICAgICAgICAgUmVuZGVyUnVieVJ1biogbmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihy
dWJ5KTsKKyAgICAgICAgICAgIHJ1YnktPmFkZENoaWxkKG5ld1J1biwgdGhpcyk7CisgICAgICAg
ICAgICBuZXdSdW4tPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIGdldE9yQ3JlYXRlUnVi
eUJhc2UoKS0+c3BsaXRUb0xlZnQobmV3UnVuLT5nZXRPckNyZWF0ZVJ1YnlCYXNlKCksIGJlZm9y
ZUNoaWxkKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGNoaWxkIGlzIG5v
dCBhIHRleHQgLT4gaW5zZXJ0IGl0IGludG8gdGhlIGJhc2UKKyAgICAgICAgLy8gKGFwcGVuZCBp
dCBpbnN0ZWFkIGlmIGJlZm9yZUNoaWxkIGlzIHRoZSBydWJ5IHRleHQpCisgICAgICAgIGlmIChi
ZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgpKQorICAgICAgICAgICAgYmVm
b3JlQ2hpbGQgPSAwOworICAgICAgICBnZXRPckNyZWF0ZVJ1YnlCYXNlKCktPmFkZENoaWxkKGNo
aWxkLCBiZWZvcmVDaGlsZCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlclJ1YnlSdW46OnJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCogY2hpbGQpCit7CisgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEg
cnVieSB0ZXh0LCB0aGVuIG1lcmdlIHRoZSBydWJ5IGJhc2Ugd2l0aCB0aGUgYmFzZSBvZgorICAg
IC8vIHRoZSByaWdodCBzaWJsaW5nIHJ1biwgaWYgcG9zc2libGUuCisgICAgaWYgKCFkb2N1bWVu
dEJlaW5nRGVzdHJveWVkKCkgJiYgY2hpbGQtPmlzUnVieVRleHQoKSkgeworICAgICAgICBSZW5k
ZXJSdWJ5QmFzZSogcnVieUJhc2UgPSBnZXRSdWJ5QmFzZSgpOworICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJpZ2h0TmVpZ2hib3VyID0gbmV4dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKHJ1YnlCYXNl
ICYmIHJpZ2h0TmVpZ2hib3VyICYmIHJpZ2h0TmVpZ2hib3VyLT5pc1J1YnlSdW4oKSkgeworICAg
ICAgICAgICAgLy8gUnVieSBydW4gd2l0aG91dCBhIGJhc2UgY2FuIGhhcHBlbiBvbmx5IGF0IHRo
ZSBmaXJzdCBydW4uCisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1
bio+KHJpZ2h0TmVpZ2hib3VyKS0+aGFzUnVieUJhc2UoKSk7CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJSdWJ5UnVuKj4ocmlnaHROZWlnaGJvdXIpLT5nZXRPckNyZWF0ZVJ1YnlCYXNl
KCktPm1lcmdlRnJvbUxlZnQocnVieUJhc2UpOworICAgICAgICAgICAgLy8gVGhlIG5vdyBlbXB0
eSBydWJ5IGJhc2Ugd2lsbCBiZSByZW1vdmVkIGJlbG93LgorICAgICAgICB9CisgICAgfQorCisg
ICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKGNoaWxkKTsKKworICAgIGlmICghZG9jdW1lbnRC
ZWluZ0Rlc3Ryb3llZCgpKSB7CisgICAgICAgIC8vIENoZWNrIGlmIG91ciBiYXNlIChpZiBhbnkp
IGlzIG5vdyBlbXB0eS4gSWYgc28sIGRlc3Ryb3kgaXQuCisgICAgICAgIFJlbmRlckJsb2NrKiBy
dWJ5QmFzZSA9IGdldFJ1YnlCYXNlKCk7CisgICAgICAgIGlmIChydWJ5QmFzZSAmJiAhcnVieUJh
c2UtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxk
KHJ1YnlCYXNlKTsKKyAgICAgICAgICAgIHJ1YnlCYXNlLT5kZWxldGVMaW5lQm94VHJlZSgpOwor
ICAgICAgICAgICAgcnVieUJhc2UtPmRlc3Ryb3koKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IElmIGFueSBvZiB0aGUgYWJvdmUgbGVhdmVzIHRoZSBydW4gZW1wdHksIGRlc3Ryb3kgaXQgYXMg
d2VsbAorICAgICAgICBpZiAoaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBwYXJlbnQoKS0+cmVt
b3ZlQ2hpbGQodGhpcyk7CisgICAgICAgICAgICBkZWxldGVMaW5lQm94VHJlZSgpOworICAgICAg
ICAgICAgZGVzdHJveSgpOworICAgICAgICB9CisgICAgfQorfQorCitSZW5kZXJSdWJ5QmFzZSog
UmVuZGVyUnVieVJ1bjo6Y3JlYXRlUnVieUJhc2UoKSBjb25zdAoreworICAgIFJlbmRlclJ1YnlC
YXNlKiByYiA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyUnVieUJhc2UoZG9jdW1lbnQoKSAv
KiBhbm9ueW1vdXMgKi8pOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOwor
ICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKKyAgICBuZXdTdHlsZS0+c2V0VGV4dEFs
aWduKENFTlRFUik7IC8vIEZJWE1FOiB1c2UgV0VCS0lUX0NFTlRFUj8KKyAgICByYi0+c2V0U3R5
bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gcmI7Cit9CisKK1JlbmRlclJ1YnlS
dW4qIFJlbmRlclJ1YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0
KiBwYXJlbnRSdWJ5KQoreworICAgIEFTU0VSVChwYXJlbnRSdWJ5ICYmIHBhcmVudFJ1YnktPmlz
UnVieSgpKTsKKyAgICBSZW5kZXJSdWJ5UnVuKiByciA9IG5ldyAocGFyZW50UnVieS0+cmVuZGVy
QXJlbmEoKSkgUmVuZGVyUnVieVJ1bihwYXJlbnRSdWJ5LT5kb2N1bWVudCgpIC8qIGFub255bW91
cyAqLyk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKKyAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50UnVieS0+c3R5bGUoKSk7
CisgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsKKyAgICByci0+c2V0U3R5
bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gcnI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJZKQorCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUnVieVJ1bi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieVJ1bi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgorICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJSdWJ5
UnVuX2gKKyNkZWZpbmUgUmVuZGVyUnVieVJ1bl9oCisKKyNpZiBFTkFCTEUoUlVCWSkKKworI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVu
ZGVyUnVieUJhc2U7CitjbGFzcyBSZW5kZXJSdWJ5VGV4dDsKKworLy8gUmVuZGVyUnVieVJ1biBh
cmUgJ2lubGluZS1ibG9jay90YWJsZScgbGlrZSBvYmplY3RzLGFuZCB3cmFwIGEgc2luZ2xlIHBh
aXJpbmcgb2YgYSBydWJ5IGJhc2Ugd2l0aCBpdHMgcnVieSB0ZXh0KHMpLgorLy8gU2VlIFJlbmRl
clJ1YnkuaCBmb3IgZnVydGhlciBjb21tZW50cyBvbiB0aGUgc3RydWN0dXJlCisKK2NsYXNzIFJl
bmRlclJ1YnlSdW4gOiBwdWJsaWMgUmVuZGVyQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlclJ1
YnlSdW4oTm9kZSopOworICAgIHZpcnR1YWwgflJlbmRlclJ1YnlSdW4oKTsKKworICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJSdWJ5UnVu
IChhbm9ueW1vdXMpIjsgfQorCisgICAgdmlydHVhbCBib29sIGlzUnVieVJ1bigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVCbG9ja09ySW5saW5lVGFi
bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGhhc1J1YnlUZXh0KCkgY29u
c3Q7CisgICAgYm9vbCBoYXNSdWJ5QmFzZSgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0OworICAgIFJlbmRlclJ1YnlUZXh0KiBnZXRSdWJ5VGV4dCgpIGNvbnN0OworICAgIFJlbmRl
clJ1YnlCYXNlKiBnZXRSdWJ5QmFzZSgpIGNvbnN0OworICAgIFJlbmRlclJ1YnlCYXNlKiBnZXRP
ckNyZWF0ZVJ1YnlCYXNlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKTsKKworICAg
IHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyUnVieVJ1biog
c3RhdGljQ3JlYXRlUnVieVJ1bihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudFJ1YnkpOworCitw
cm90ZWN0ZWQ6CisgICAgUmVuZGVyUnVieUJhc2UqIGNyZWF0ZVJ1YnlCYXNlKCkgY29uc3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwor
I2VuZGlmIC8vIFJlbmRlclJ1YnlSdW5faApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlU
ZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVuZGVyUnVieVRleHQuaCIKKworI2lmIEVOQUJMRShSVUJZKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclJ1YnlUZXh0OjpSZW5kZXJSdWJ5VGV4dChOb2RlKiBu
b2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sKK30KKworUmVuZGVyUnVieVRleHQ6On5S
ZW5kZXJSdWJ5VGV4dCgpCit7Cit9CisKK2Jvb2wgUmVuZGVyUnVieVRleHQ6OmlzQ2hpbGRBbGxv
d2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1
cm4gY2hpbGQtPmlzSW5saW5lKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShSVUJZKQorCisKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnlUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclJ1YnlUZXh0X2gKKyNkZWZp
bmUgUmVuZGVyUnVieVRleHRfaAorCisjaWYgRU5BQkxFKFJVQlkpCisKKyNpbmNsdWRlICJSZW5k
ZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclJ1YnlUZXh0
IDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJSdWJ5VGV4dChOb2Rl
Kik7CisgICAgdmlydHVhbCB+UmVuZGVyUnVieVRleHQoKTsKKworICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJSdWJ5VGV4dCI7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxl
KikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoUlVCWSkKKworI2VuZGlmIC8vIFJlbmRlclJ1YnlUZXh0X2gKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuaAkocmV2aXNpb24gNDY3NDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMiArNzgsMTUgQEAgcHVibGljOgogICAgIC8v
IFJlbmRlclRoZW1lTWFjLmNwcCBmb3IgTWFjIE9TIFguCiAKICAgICAvLyBUaGVzZSBtZXRob2Rz
IHJldHVybiB0aGUgdGhlbWUncyBleHRyYSBzdHlsZSBzaGVldHMgcnVsZXMsIHRvIGxldCBlYWNo
IHBsYXRmb3JtCi0gICAgLy8gYWRqdXN0IHRoZSBkZWZhdWx0IENTUyBydWxlcyBpbiBodG1sLmNz
cywgcXVpcmtzLmNzcywgb3IgbWVkaWFDb250cm9scy5jc3MKKyAgICAvLyBhZGp1c3QgdGhlIGRl
ZmF1bHQgQ1NTIHJ1bGVzIGluIGh0bWwuY3NzLCBxdWlya3MuY3NzLCBtZWRpYUNvbnRyb2xzLmNz
cywgb3IgcnVieS5jc3MKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0
KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0
eWxlU2hlZXQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogI2lmIEVOQUJMRShWSURFTykKICAgICB2
aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3Ry
aW5nKCk7IH07CiAjZW5kaWYKKyNpZiBFTkFCTEUoUlVCWSkKKyAgICB2aXJ0dWFsIFN0cmluZyBl
eHRyYVJ1YnlTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CisjZW5kaWYKIAogICAg
IC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYi
IGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAvLyBw
b3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVudC4g
Q2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKSW5kZXg6IFdlYktp
dFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQ2NzQ5KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDgtMDMgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyAzNzQ5IC0gIFhIVE1MIDEuMSBSdWJ5IEFubm90YXRpb24KKyAgICAgICAgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzQ5KQorCisgICAgICAgIEZp
cnN0IHJ1ZGltZW50YXJ5IGltcGxlbWVudGF0aW9uIG9mIEhUTUw1IHJ1YnkgcmVuZGVyaW5nIHN1
cHBvcnQuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogYWRkZWQgbmV3IGZpbGVz
CisKIDIwMDktMDgtMDMgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CShyZXZpc2lvbiA0Njc0NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0CSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAg
ICB7IG9wdGlvbiA9PiAic2hhcmVkLXdvcmtlcnMiLCBkZXNjID0+ICJUb2dnbGUgU2hhcmVkV29y
a2VycyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NIQVJFRF9XT1JLRVJTIiwg
ZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHNoYXJlZFdvcmtlcnNTdXBwb3J0IH0sCiAKKyAgICB7
IG9wdGlvbiA9PiAicnVieSIsIGRlc2MgPT4gIlRvZ2dsZSBIVE1MNSBSdWJ5IHN1cHBvcnQiLAor
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfUlVCWSIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRy
dWJ5U3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBT
Vkcgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEs
IHZhbHVlID0+IFwkc3ZnU3VwcG9ydCB9LAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34045</attachid>
            <date>2009-08-04 01:08:20 -0700</date>
            <delta_ts>2009-11-06 11:28:55 -0800</delta_ts>
            <desc>patch: layout tests for new ruby implementation</desc>
            <filename>rubynew_layouttests.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64"></data>
<flag name="commit-queue"
          id="18214"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35011</attachid>
            <date>2009-08-17 21:24:00 -0700</date>
            <delta_ts>2009-08-17 21:26:59 -0700</delta_ts>
            <desc>patch: new ruby implementation (reordering of renderers)</desc>
            <filename>rubynew.patch</filename>
            <type>text/plain</type>
            <size>55146</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzQwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE5IEBACisyMDA5LTA4LTE3ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWlu
ZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBCdWcgMzc0OSAtICBYSFRNTCAxLjEgUnVieSBBbm5vdGF0aW9uCisgICAgICAgICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0OSkKKworICAgICAgICBG
aXJzdCBydWRpbWVudGFyeSBpbXBsZW1lbnRhdGlvbiBvZiBIVE1MNSBydWJ5IHJlbmRlcmluZyBz
dXBwb3J0LgorICAgICAgICAoQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byByZS1hcnJhbmdpbmcg
cmVuZGVyIGNoaWxkcmVuIG9mIGEgUmVuZGVyQmxvY2sgd2l0aGluIDxydWJ5PjoKKyAgICAgICAg
VGhlIFJlbmRlckJsb2NrIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDxydD4gdGxlbWVudCBpcyBpbnNl
cnRlZCBhcyBGSVJTVCBjaGlsZCBvZiB0aGUgCisgICAgICAgIGNvbnRhaW5pbmcgUmVuZGVyUnVi
eVJ1bi4pCisKKyAgICAgICAgRm9sbG93aW5nIHRoZSBIVE1MIDUgc3BlYywgdGhlIGJveCBvYmpl
Y3QgbW9kZWwgZm9yIGEgPHJ1Ynk+IGVsZW1lbnQgYWxsb3dzIHNldmVyYWwgcnVucyBvZiBydWJ5
CisgICAgICAgIGJhc2VzIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBydWJ5IHRleHRzIGxvb2tzIGFz
IGZvbGxvd3M6CisKKyAgICAgICAgMSBSZW5kZXJSdWJ5IG9iamVjdCwgY29ycmVzcG9uZGluZyB0
byB0aGUgd2hvbGUgPHJ1Ynk+IEhUTUwgZWxlbWVudAorICAgICAgICAgICAgIDErIFJlbmRlclJ1
YnlSdW4gKGFub255bW91cykKKyAgICAgICAgICAgICAgICAgMCBvciAxIFJlbmRlclJ1YnlUZXh0
IC0gc2h1ZmZsZWQgdG8gdGhlIGZyb250IGluIG9yZGVyIHRvIHJlLXVzZSBleGlzdGluZyBibG9j
ayBsYXlvdXRpbmcKKyAgICAgICAgICAgICAgICAgICAgIDAtbiBpbmxpbmUgb2JqZWN0KHMpCisg
ICAgICAgICAgICAgICAgIDAgb3IgMSBSZW5kZXJSdWJ5QmFzZSAtIGNvbnRhaW5zIHRoZSBpbmxp
bmUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIHJ1YnkgYmFzZQorICAgICAgICAgICAgICAgICAg
ICAxLW4gaW5saW5lIG9iamVjdChzKQorCisgICAgICAgIE5vdGU6IDxycD4gZWxlbWVudHMgYXJl
IGRlZmluZWQgYXMgaGF2aW5nICdkaXNwbGF5Om5vbmUnIGFuZCB0aHVzIG5vcm1hbGx5IGFyZSBu
b3QgYXNzaWduZWQgYSByZW5kZXJlci4KKworICAgICAgICBUZXN0czogZmFzdC9ydWJ5L3J1Ynkt
ZW1wdHktcnQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1YnktbGVuZ3RoLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXJ1bi1icmVhay5odG1sCisgICAgICAgICAg
ICAgICBmYXN0L3J1YnkvcnVieS1ydW5zLXNwYW5zLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
cnVieS9ydWJ5LXJ1bnMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1Ynktc2ltcGxl
LXJwLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXNpbXBsZS5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L3J1YnkvcnVieS10cmFpbGluZy5odG1sCisgICAgICAgICAgICAgICBm
YXN0L3J1YnkvcnVieURPTS1pbnNlcnQtcnQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5
L3J1YnlET00taW5zZXJ0LXRleHQxLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5
RE9NLWluc2VydC10ZXh0Mi5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1p
bnNlcnQtdGV4dDMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1YnlET00tcmVtb3Zl
LXJ0MS5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1yZW1vdmUtcnQyLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5RE9NLXJlbW92ZS10ZXh0MS5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1yZW1vdmUtdGV4dDIuaHRtbAorCisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxl
Rm9yRWxlbWVudCk6CisgICAgICAgICogY3NzL3J1YnkuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Om1vdmVDaGlsZFRvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y3JlYXRlT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUnVieSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUnVieUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1J1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpp
c1J1YnlUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6bGFzdFJ1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFJ1
YnlSdW5QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjpSZW5k
ZXJSdWJ5QXNJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjp+
UmVuZGVyUnVieUFzSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGlu
ZTo6aXNDaGlsZEFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5l
OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OnJlbW92
ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjpSZW5kZXJSdWJ5
QXNCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6flJlbmRlclJ1
YnlBc0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjppc0NoaWxk
QWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6OnJlbW92ZUNoaWxkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJ1YnlBc0lubGluZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSdWJ5QXNJbmxpbmU6OmlzUnVieSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNC
bG9jazo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6
aXNSdWJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpSZW5kZXJSdWJ5QmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6flJlbmRlclJ1YnlCYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjppc0NoaWxkQWxsb3dlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5QmFzZTo6c3BsaXRUb0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUnVieUJhc2U6Om1lcmdlRnJvbUxlZnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJS
dWJ5QmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpyZW5k
ZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjppc1J1YnlCYXNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6UmVuZGVyUnVieVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSdWJ5UnVuOjp+UmVuZGVyUnVieVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSdWJ5UnVuOjpoYXNSdWJ5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVu
OjpoYXNSdWJ5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnJ1YnlUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnJ1YnlCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclJ1YnlSdW46OnJ1YnlCYXNlU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5
UnVuOjpmaXJzdExpbmVCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjp1
cGRhdGVGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjppc0No
aWxkQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpjcmVhdGVSdWJ5QmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUnVieVJ1bi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1
YnlSdW46OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aXNS
dWJ5UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmlzSW5saW5lQmxvY2tP
cklubGluZVRhYmxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlUZXh0OjpSZW5kZXJSdWJ5VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5VGV4dDo6flJlbmRlclJ1YnlUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlUZXh0Ojppc0NoaWxkQWxsb3dlZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUnVieVRleHQ6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVi
eVRleHQ6OmlzUnVieVRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmV4dHJhUnVieVN0eWxlU2hlZXQpOgorCiAy
MDA5LTA4LTE3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biA0NzQwMykKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtNTM2LDYgKzUzNiwxMCBAQCBYUGF0aEdyYW1tYXIuY3BwIDogeG1sL1hQYXRoR3JhbW1hci55
ICQoCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3Mg
JChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3Mg
JChXZWJDb3JlKS9jc3MvdGhlbWVXaW4uY3NzICQoV2ViQ29yZSkvY3NzL3RoZW1lV2luUXVpcmtz
LmNzcyAKIAoraWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9SVUJZLCQoRkVBVFVSRV9ERUZJTkVT
KSksIEVOQUJMRV9SVUJZKQorICAgIFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTIDo9ICQoVVNFUl9B
R0VOVF9TVFlMRV9TSEVFVFMpICQoV2ViQ29yZSkvY3NzL3J1YnkuY3NzIAorZW5kaWYKKwogaWZl
cSAoJChmaW5kc3RyaW5nIEVOQUJMRV9TVkcsJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1NW
RykKICAgICBVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA6PSAkKFVTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTKSAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIAogZW5kaWYKSW5kZXg6IFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24g
NDc0MDMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYw
LDggKzIyNjAsMTUgQEAgZW5kaWYgIyBFTkQgRU5BQkxFX1ZJREVPCiAjIC0tLS0KIGlmIEVOQUJM
RV9SVUJZCiAKLUhUTUxfRkVBVFVSRVMgKz0gRU5BQkxFX1JVQlk9MQotd2ViY29yZV9jcHBmbGFn
cyArPSAtREVOQUJMRV9SVUJZPTEKK3dlYmNvcmVfc291cmNlcyArPSBcCisgICBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
LmggXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwIFwKKyAgIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmggXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUnVieVJ1bi5jcHAgXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oIFwK
KyAgIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcCBcCisgICBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oCiAKIGVuZGlmICMgRU5EIEVOQUJMRV9SVUJZCiAKQEAg
LTMyNjEsNiArMzI2OCwxMyBAQCBVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9IFwKIAkkKFdlYkNv
cmUpL2Nzcy93bWwuY3NzIFwKIAkkKFdlYkNvcmUpL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwogCitp
ZiBFTkFCTEVfUlVCWQorIyBOb3RlOiBydWJ5LmNzcyBzZXRzIDxycD4gZGlzcGxheTpub25lLCB3
aGljaCB3ZSBkb24ndCB3YW50IGlmIHJ1YnkgaXNuJ3QsIGluIGZhY3QsIGVuYWJsZWQKK1VTRVJf
QUdFTlRfU1RZTEVfU0hFRVRTICs9IFwKKyAgICQoV2ViQ29yZSkvY3NzL3J1YnkuY3NzCitlbmRp
ZiAjIEVORCBFTkFCTEVfUlVCWQorICAgCisKICMgbmV3LXN0eWxlIEphdmFTY3JpcHQgYmluZGlu
Z3MKIFNDUklQVFNfQklORElOR1MgPSBcCiAJJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3IucG0gXApAQCAtMzQwNCw2ICszNDE4LDEzIEBAIHdlYmNvcmVfZGlzdCArPSBc
CiAJV2ViQ29yZS94bWwveG1sYXR0cnMuaW4gXAogCVdlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55
CiAKK2lmIEVOQUJMRV9SVUJZCisjIE5vdGU6IHJ1YnkuY3NzIHNldHMgPHJwPiBkaXNwbGF5Om5v
bmUsIHdoaWNoIHdlIGRvbid0IHdhbnQgaWYgcnVieSBpc24ndCwgaW4gZmFjdCwgZW5hYmxlZAor
d2ViY29yZV9kaXN0ICs9IFwKKyAgIFdlYkNvcmUvY3NzL3J1YnkuY3NzCitlbmRpZiAjIEVORCBF
TkFCTEVfUlVCWQorICAgCisKICMgSW5zdGFsbGluZyB3ZWIgaW5zcGVjdG9yIGZpbGVzCiB3ZWJp
bnNwZWN0b3JkaXIgPSAke2RhdGFkaXJ9L3dlYmtpdC0xLjAvd2ViaW5zcGVjdG9yCiBkaXN0X3dl
Ymluc3BlY3Rvcl9EQVRBID0gXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ3NDAzKQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI4MjIsNiArMjgyMiwxNCBAQAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyUmVwbGljYS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSZXBs
aWNhLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnkuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNl
LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlclJ1YnlUZXh0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlU
ZXh0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ3NDAzKQorKysg
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjYzMiw2ICsyNjMyLDE3IEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKIH0KIAorY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1JVQlk9MSkgeworICAgU1RZTEVTSEVFVFNfRU1CRUQgKz0gXAorICAgICAg
ICQkUFdEL2Nzcy9ydWJ5LmNzcworCisgICAgU09VUkNFUyArPSBcCisgICAgICAgIHJlbmRlcmlu
Zy9SZW5kZXJSdWJ5LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAg
XAorICAgICAgICByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAgXAorICAgICAgICByZW5kZXJp
bmcvUmVuZGVyUnVieVRleHQuY3BwCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFU
SD0xKSB7CiAgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hQQVRIPTEK
IApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDQ3NDAzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTUgQEAKIAkJMTQ4QUZEQTYwQUY1ODM2MDAw
OENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlv
bkhhbmRsZXJzLm1tICovOyB9OwogCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXND
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICovOyB9
OwogCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFNDBCMkYyQjFD
MDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRBNTM3MDYxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRl
clJ1YnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRBNTM2RkUxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuY3BwICovOyB9OworCQkxNEE1
MzcwNzEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBNTM2RkYxMDI3RUZDODAwMjhCNUFCIC8qIFJl
bmRlclJ1YnkuaCAqLzsgfTsKKwkJMTRBNTM3MDgxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1
YnlCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QTUzNzAwMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5jcHAgKi87IH07CisJ
CTE0QTUzNzA5MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBNTM3MDExMDI3RUZDODAwMjhC
NUFCIC8qIFJlbmRlclJ1YnlCYXNlLmggKi87IH07CisJCTE0QTUzNzBBMTAyN0VGQzgwMDI4QjVB
QiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0QTUzNzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNw
cCAqLzsgfTsKKwkJMTRBNTM3MEIxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlSdW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUzNzAzMTAy
N0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmggKi87IH07CisJCTE0QTUzNzBDMTAyN0VG
QzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEE1MzcwNDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVy
UnVieVRleHQuY3BwICovOyB9OworCQkxNEE1MzcwRDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVy
UnVieVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QTUzNzA1MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5oICovOyB9OworCQkx
NEE1MzcwRjEwMjdFRkYwMDAyOEI1QUIgLyogcnVieS5jc3MgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUzNzBFMTAyN0VGRjAwMDI4QjVBQiAvKiBy
dWJ5LmNzcyAqLzsgfTsKIAkJMTRDOUE1RUEwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzlBNUU5
MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi87IH07CiAJCTE0Q0Y3OEE0MDlGNThD
QkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEEzMDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVl
LmNwcCAqLzsgfTsKIAkJMTRDRjc4QTYwOUY1OENEODAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEE1MDlG
NThDRDgwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmggKi87IH07CkBAIC01MTc0LDYgKzUxODMsMTUg
QEAKIAkJMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5
N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTRBNTM2RkUxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1Ynku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTUzNkZGMTAyN0VGQzgwMDI4QjVBQiAv
KiBSZW5kZXJSdWJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1
YnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBNTM3MDAxMDI3RUZDODAwMjhC
NUFCIC8qIFJlbmRlclJ1YnlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclJ1YnlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTRBNTM3MDExMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1YnlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0QTUzNzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlSdW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEE1MzcwMzEwMjdFRkM4MDAyOEI1QUIg
LyogUmVuZGVyUnVieVJ1bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJSdWJ5UnVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTUzNzA0MTAyN0VG
QzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJSdWJ5VGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTE0QTUzNzA1MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJSdWJ5VGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEE1MzcwRTEwMjdFRkYwMDAyOEI1QUIgLyogcnVieS5jc3Mg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IHJ1YnkuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNldHRpbmdzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDRjc4NzEwOUY1ODdDQTAwRUIzNjY1IC8qIENTU1ZhbHVl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NTVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNENGNzhBMzA5RjU4Q0JGMDBFQjM2NjUgLyogSlNDU1NWYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUwNCw2ICsxNDUyMiw3IEBACiAJCQkJ
QkM3NERBMzYxMDEzRjNGNzAwNzk4N0FEIC8qIFJHQkNvbG9yLmNwcCAqLywKIAkJCQlCQzc0REEz
NTEwMTNGM0Y3MDA3OTg3QUQgLyogUkdCQ29sb3IuaCAqLywKIAkJCQk4NThDMzhFRjBBQThGREQx
MDBCMTg3QTQgLyogUkdCQ29sb3IuaWRsICovLAorCQkJCTE0QTUzNzBFMTAyN0VGRjAwMDI4QjVB
QiAvKiBydWJ5LmNzcyAqLywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93
VmFsdWUuY3BwICovLAogCQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1
ZS5oICovLAogCQkJCUE4MEU3MzRDMEExOTlDNzcwMDdGQjhDNSAvKiBTdHlsZUJhc2UuY3BwICov
LApAQCAtMTQ2NDgsNiArMTQ2NjcsMTQgQEAKIAkJCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjgg
LyogUmVuZGVyUmVwbGFjZWQuaCAqLywKIAkJCQlCQ0E4NDZENDBEQzY3QTM1MDAyNkMzMDkgLyog
UmVuZGVyUmVwbGljYS5jcHAgKi8sCiAJCQkJQkNBODQ2RDUwREM2N0EzNTAwMjZDMzA5IC8qIFJl
bmRlclJlcGxpY2EuaCAqLywKKwkJCQkxNEE1MzZGRTEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVy
UnVieS5jcHAgKi8sCisJCQkJMTRBNTM2RkYxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1Ynku
aCAqLywKKwkJCQkxNEE1MzcwMDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieUJhc2UuY3Bw
ICovLAorCQkJCTE0QTUzNzAxMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oICov
LAorCQkJCTE0QTUzNzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCAqLywK
KwkJCQkxNEE1MzcwMzEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieVJ1bi5oICovLAorCQkJ
CTE0QTUzNzA0MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi8sCisJCQkJ
MTRBNTM3MDUxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlUZXh0LmggKi8sCiAJCQkJQkMz
QkU5OTAwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgKi8sCiAJCQkJQkMz
QkU5OTEwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5oICovLAogCQkJCUJDM0JF
OUFBMEU5QzI0MjAwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCAqLywKQEAgLTE3
Mjg1LDYgKzE3MzEyLDEwIEBACiAJCQkJNDE2RTI5QTYxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtl
clJlcG9ydGluZ1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUMxMTIzQzEwMkI2QzQ2MDAw
OTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MTRBNTM3MDcxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTE0QTUzNzA5MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRBNTM3MEIxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlSdW4uaCBp
biBIZWFkZXJzICovLAorCQkJCTE0QTUzNzBEMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5
VGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzM5MCw2ICsxNzQyMSw3IEBACiAJCQkJNDk0ODRG
QzYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uaWRsIGluIFJlc291cmNlcyAqLywK
IAkJCQk0OTQ4NEZDOTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGl4ZWxBcnJheS5pZGwgaW4g
UmVzb3VyY2VzICovLAogCQkJCTQ5NDg0RkNDMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkxNEE1MzcwRjEwMjdFRkYw
MDAyOEI1QUIgLyogcnVieS5jc3MgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTkzNDgsNiArMTkzODAs
MTAgQEAKIAkJCQk5MzkyMjYyRDEwMzIxMDdCMDA2RTdENUQgLyogSlNIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyMjYyRjEwMzIxMDg0MDA2RTdENUQg
LyogSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNUMxMTIzQjEw
MkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxNEE1MzcwNjEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxNEE1MzcwODEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBNTM3MEExMDI3RUZDODAwMjhCNUFCIC8qIFJl
bmRlclJ1YnlSdW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBNTM3MEMxMDI3RUZDODAwMjhC
NUFCIC8qIFJlbmRlclJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDQ3NDAzKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE1
Miw2ICsxMTUzLDE3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IK
ICAgICB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShSVUJZKQorICAgIHN0YXRpYyBib29sIGxvYWRl
ZFJ1YnlTdHlsZVNoZWV0OworICAgIGlmICghbG9hZGVkUnVieVN0eWxlU2hlZXQgJiYgKGUtPmhh
c1RhZ05hbWUocnVieVRhZykgfHwgZS0+aGFzVGFnTmFtZShycFRhZykgfHwgZS0+aGFzVGFnTmFt
ZShydFRhZykpKSB7CisgICAgICAgIGxvYWRlZFJ1YnlTdHlsZVNoZWV0ID0gdHJ1ZTsKKyAgICAg
ICAgU3RyaW5nIHJ1YnlSdWxlcyA9IFN0cmluZyhydWJ5VXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHJ1YnlVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPmV4dHJhUnVieVN0eWxlU2hlZXQoKTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCogcnVieVNo
ZWV0ID0gcGFyc2VVQVNoZWV0KHJ1YnlSdWxlcyk7CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQocnVieVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0
UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocnVieVNoZWV0LCBwcmludEV2YWwoKSk7Cisg
ICAgfQorI2VuZGlmCisKICAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwgbGFzdFVBUnVsZSA9IC0x
OwogICAgIGludCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVsZSA9IC0xOwogICAgIGlu
dCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKSW5kZXg6IFdlYkNv
cmUvY3NzL3J1YnkuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL3J1YnkuY3NzCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9jc3MvcnVieS5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworLyogcnVieSBIVE1MIGVsZW1lbnRzICovCisKK3J1YnkgPiBydCB7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgZm9udC1zaXplOiA2MCU7ICAgICAgICAgLyogbWFrZSBzbGlnaHRseSBsYXJn
ZXIgdGhhbiA1MCUgZm9yIGJldHRlciByZWFkYWJpbGl0eSAqLworICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKK30KKworcnVieSA+IHJwIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0NzQwMykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDYgKzQwNCwxOSBA
QCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5kQXBwCiAgICAgbV9saW5lQm94
ZXMuYXBwZW5kTGluZUJveChyb290Qm94KTsKICAgICByZXR1cm4gcm9vdEJveDsKIH0KKyAgICAK
K3ZvaWQgUmVuZGVyQmxvY2s6Om1vdmVDaGlsZFRvKFJlbmRlck9iamVjdCogdG8sIFJlbmRlck9i
amVjdENoaWxkTGlzdCogdG9DaGlsZExpc3QsIFJlbmRlck9iamVjdCogY2hpbGQpCit7CisgICAg
QVNTRVJUKHRoaXMgPT0gY2hpbGQtPnBhcmVudCgpKTsKKyAgICB0b0NoaWxkTGlzdC0+YXBwZW5k
Q2hpbGROb2RlKHRvLCBjaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUodGhpcywgY2hpbGQsIGZh
bHNlKSwgZmFsc2UpOworfQorCit2b2lkIFJlbmRlckJsb2NrOjptb3ZlQ2hpbGRUbyhSZW5kZXJP
YmplY3QqIHRvLCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHRvQ2hpbGRMaXN0LCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJPYmplY3QqIGNoaWxkKQoreworICAgIEFTU0VSVCh0aGlz
ID09IGNoaWxkLT5wYXJlbnQoKSk7CisgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCB0byA9PSBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkpOworICAgIHRvQ2hpbGRMaXN0LT5pbnNlcnRDaGlsZE5vZGUo
dG8sIGNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBjaGlsZCwgZmFsc2UpLCBiZWZv
cmVDaGlsZCwgZmFsc2UpOworfQogCiB2b2lkIFJlbmRlckJsb2NrOjptYWtlQ2hpbGRyZW5Ob25J
bmxpbmUoUmVuZGVyT2JqZWN0ICppbnNlcnRpb25Qb2ludCkKIHsgICAgCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDQ3NDAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZWN0Kik7CiAKKyAgICB2b2lkIG1vdmVDaGlsZFRvKFJlbmRlck9iamVjdCogdG8sIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogdG9DaGlsZExpc3QsIFJlbmRlck9iamVjdCogY2hpbGQpOworICAg
IHZvaWQgbW92ZUNoaWxkVG8oUmVuZGVyT2JqZWN0KiB0bywgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
KiB0b0NoaWxkTGlzdCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyT2JqZWN0KiBj
aGlsZCk7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbik7CiAKICAgICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDQ3NDAzKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2
ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBj
YXJld29sZi5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01Miw2ICs1MywxMSBAQAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
IAorI2lmIEVOQUJMRShSVUJZKQorI2luY2x1ZGUgIlJlbmRlclJ1YnkuaCIKKyNpbmNsdWRlICJS
ZW5kZXJSdWJ5VGV4dC5oIgorI2VuZGlmCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjZW5kaWYKQEAgLTEwMiw0
NiArMTA4LDQ0IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QKICAg
ICAgICAgcmV0dXJuIGltYWdlOwogICAgIH0KIAotICAgIFJlbmRlck9iamVjdCogbyA9IDA7Cisj
aWYgRU5BQkxFKFJVQlkpCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUocnVieVRhZykpIHsKKyAg
ICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FKQorICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYXJlbmEpIFJlbmRlclJ1YnlBc0lubGluZShub2RlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclJ1YnlBc0Jsb2NrKG5vZGUpOworICAg
IH0KKyAgICAvLyB0cmVhdCA8cnQ+IGFzIHJ1YnkgdGV4dCBPTkxZIGlmIGl0IHN0aWxsIGhhcyBp
dHMgZGVmYXVsdCB0cmVhdG1lbnQgb2YgYmxvY2sKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShy
dFRhZykgJiYgc3R5bGUtPmRpc3BsYXkoKSA9PSBCTE9DSykKKyAgICAgICAgcmV0dXJuIG5ldyAo
YXJlbmEpIFJlbmRlclJ1YnlUZXh0KG5vZGUpOyAKKyNlbmRpZgogCiAgICAgc3dpdGNoIChzdHls
ZS0+ZGlzcGxheSgpKSB7CiAgICAgICAgIGNhc2UgTk9ORToKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgSU5MSU5FOgotICAgICAgICAgICAg
byA9IG5ldyAoYXJlbmEpIFJlbmRlcklubGluZShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklubGluZShub2RlKTsKICAgICAg
ICAgY2FzZSBCTE9DSzoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElOTElORV9CTE9DSzoKLSAg
ICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIExJU1RfSVRFTToKLSAgICAgICAgICAgIG8gPSBuZXcgKGFy
ZW5hKSBSZW5kZXJMaXN0SXRlbShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJVTl9JTjoKICAgICAgICAgY2FzZSBDT01QQUNUOgotICAgICAgICAgICAgbyA9IG5ldyAo
YXJlbmEpIFJlbmRlckJsb2NrKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyQmxvY2sobm9kZSk7CisgICAgICAgIGNhc2UgTElT
VF9JVEVNOgorICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckxpc3RJdGVtKG5v
ZGUpOwogICAgICAgICBjYXNlIFRBQkxFOgogICAgICAgICBjYXNlIElOTElORV9UQUJMRToKLSAg
ICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZShub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlKG5vZGUp
OwogICAgICAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoKICAgICAgICAgY2FzZSBUQUJMRV9IRUFE
RVJfR1JPVVA6CiAgICAgICAgIGNhc2UgVEFCTEVfRk9PVEVSX0dST1VQOgotICAgICAgICAgICAg
byA9IG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlU2VjdGlvbihub2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlU2VjdGlvbihu
b2RlKTsKICAgICAgICAgY2FzZSBUQUJMRV9ST1c6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVu
YSkgUmVuZGVyVGFibGVSb3cobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZVJvdyhub2RlKTsKICAgICAgICAgY2FzZSBU
QUJMRV9DT0xVTU5fR1JPVVA6CiAgICAgICAgIGNhc2UgVEFCTEVfQ09MVU1OOgotICAgICAgICAg
ICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlQ29sKG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVDb2wobm9kZSk7
CiAgICAgICAgIGNhc2UgVEFCTEVfQ0VMTDoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBS
ZW5kZXJUYWJsZUNlbGwobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZUNlbGwobm9kZSk7CiAgICAgICAgIGNhc2UgVEFC
TEVfQ0FQVElPTjoKICNpZiBFTkFCTEUoV0NTUykKICAgICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0
aW9uIDE3LjEgb2YgdGhlIHNwZWMgV0FQLTIzOS1XQ1NTLTIwMDExMDI2LWEucGRmLCAKQEAgLTE0
OSwxNSArMTUzLDEzIEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QK
ICAgICAgICAgLy8gcHJpbmNpcGFsIGJsb2NrIGJveCAoW0NTUzJdIHNlY3Rpb24gOS4yLjEpLgog
ICAgICAgICBjYXNlIFdBUF9NQVJRVUVFOgogI2VuZGlmCi0gICAgICAgICAgICBvID0gbmV3IChh
cmVuYSkgUmVuZGVyQmxvY2sobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhub2RlKTsKICAgICAgICAgY2FzZSBCT1g6
CiAgICAgICAgIGNhc2UgSU5MSU5FX0JPWDoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBS
ZW5kZXJGbGV4aWJsZUJveChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckZsZXhpYmxlQm94KG5vZGUpOwogICAgIH0KIAotICAg
IHJldHVybiBvOworICAgIHJldHVybiAwOwogfQogCiAjaWZuZGVmIE5ERUJVRyAKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA0NzQwMykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDA0IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjk1
LDYgKzI5NiwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjZWxsV2lkdGhDaGFuZ2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9jZWxsV2lkdGhDaGFuZ2VkOyB9CiAgICAgdm9pZCBzZXRDZWxsV2lkdGhDaGFu
Z2VkKGJvb2wgYiA9IHRydWUpIHsgbV9jZWxsV2lkdGhDaGFuZ2VkID0gYjsgfQogCisjaWYgRU5B
QkxFKFJVQlkpCisgICAgdmlydHVhbCBib29sIGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzUnVieUJhc2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlSdW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBGSVhNRTogVW50aWwgYWxsIFNWRyByZW5k
ZXJzIGNhbiBiZSBzdWJjbGFzc2VzIG9mIFJlbmRlclNWR01vZGVsT2JqZWN0IHdlIGhhdmUKICAg
ICAvLyB0byBhZGQgU1ZHIHJlbmRlcmVyIG1ldGhvZHMgdG8gUmVuZGVyT2JqZWN0IHdpdGggYW4g
QVNTRVJUX05PVF9SRUFDSEVEKCkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUnVieS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5LmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKwor
I2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLz09
PSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgdG8gYXZvaWQgZXhjZXNzaXZlIGNvZGUgZHVwbGlj
YXRpb24gPT09CisKK3N0YXRpYyBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVieVJ1bihjb25zdCBSZW5k
ZXJPYmplY3QqIHJ1YnkpCit7CisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RD
aGlsZCgpOworICAgIGlmIChjaGlsZCAmJiBydWJ5LT5pc0FmdGVyQ29udGVudChjaGlsZCkpCisg
ICAgICAgIGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOworICAgIEFTU0VSVCghY2hp
bGQgfHwgY2hpbGQtPmlzUnVieVJ1bigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
UnVieVJ1bio+KGNoaWxkKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJSdWJ5UnVuKiBmaW5k
UnVieVJ1blBhcmVudChSZW5kZXJPYmplY3QqIGNoaWxkKQoreworICAgIHdoaWxlIChjaGlsZCAm
JiAhY2hpbGQtPmlzUnVieVJ1bigpKQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5wYXJlbnQoKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1bio+KGNoaWxkKTsKK30KKworLy89
PT0gcnVieSBhcyBpbmxpbmUgb2JqZWN0ID09PQorCitSZW5kZXJSdWJ5QXNJbmxpbmU6OlJlbmRl
clJ1YnlBc0lubGluZShOb2RlKiBub2RlKQorICAgIDogUmVuZGVySW5saW5lKG5vZGUpCit7Cit9
CisKK1JlbmRlclJ1YnlBc0lubGluZTo6flJlbmRlclJ1YnlBc0lubGluZSgpCit7Cit9CisKK2Jv
b2wgUmVuZGVyUnVieUFzSW5saW5lOjppc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoaWxkLT5pc1J1YnlUZXh0KCkK
KyAgICAgICAgfHwgY2hpbGQtPmlzUnVieVJ1bigpCisgICAgICAgIHx8IGNoaWxkLT5pc0lubGlu
ZSgpOworfQorCit2b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICAvLyBOb3RlOiAnOmFm
dGVyJyBjb250ZW50IGlzIGhhbmRsZWQgaW1wbGljaXRlbHkgYmVsb3cKKworICAgIC8vIGlmIGNo
aWxkIGlzIGEgcnVieSBydW4sIGp1c3QgYWRkIGl0IG5vcm1hbGx5CisgICAgaWYgKGNoaWxkLT5p
c1J1YnlSdW4oKSkgeworICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGNoaWxkLCBiZWZv
cmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmVmb3JlQ2hpbGQg
JiYgIWlzQWZ0ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgeworICAgICAgICAvLyBpbnNlcnQgY2hp
bGQgaW50byBydW4KKyAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZC0+aXNSdWJ5UnVuKCkpOwor
ICAgICAgICBSZW5kZXJSdWJ5UnVuKiBydW4gPSBmaW5kUnVieVJ1blBhcmVudChiZWZvcmVDaGls
ZCk7CisgICAgICAgIEFTU0VSVChydW4pOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlzIGhh
dmUgYSBydW4gYXMgcGFyZW50CisgICAgICAgIGlmIChydW4pIHsKKyAgICAgICAgICAgIHJ1bi0+
YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBBU1NFUlQoZmFsc2UpOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlz
IGhhdmUgYSBydW4gYXMgcGFyZW50IQorICAgICAgICAvLyBFbWVyZ2VuY3kgZmFsbGJhY2s6IGZh
bGwgdGhyb3VnaCBhbmQganVzdCBhcHBlbmQuCisgICAgfQorCisgICAgLy8gSWYgdGhlIG5ldyBj
aGlsZCB3b3VsZCBiZSBhcHBlbmRlZCwgdHJ5IHRvIGFkZCB0aGUgY2hpbGQgdG8gdGhlIHByZXZp
b3VzIHJ1bgorICAgIC8vIGlmIHBvc3NpYmxlLCBvciBjcmVhdGUgYSBuZXcgcnVuIG90aGVyd2lz
ZS4KKyAgICAvLyAoVGhlIFJlbmRlclJ1YnlSdW4gb2JqZWN0IHdpbGwgaGFuZGxlIHRoZSBkZXRh
aWxzKQorICAgIFJlbmRlclJ1YnlSdW4qIGxhc3RSdW4gPSBsYXN0UnVieVJ1bih0aGlzKTsKKyAg
ICBpZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRleHQoKSkgeworICAgICAgICBsYXN0
UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0aGlzKTsKKyAgICAgICAg
UmVuZGVySW5saW5lOjphZGRDaGlsZChsYXN0UnVuKTsKKyAgICB9CisgICAgbGFzdFJ1bi0+YWRk
Q2hpbGQoY2hpbGQpOworfQorCit2b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6cmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAgICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMg
KnRoaXMsIGkuZS4gYSBydWJ5IHJ1biBvciAnOmFmdGVyJyBjb250ZW50LAorICAgIC8vIGp1c3Qg
dXNlIHRoZSBub3JtYWwgcmVtb3ZlIG1ldGhvZC4KKyAgICBpZiAoY2hpbGQtPnBhcmVudCgpID09
IHRoaXMpIHsKKyAgICAgICAgQVNTRVJUKGNoaWxkLT5pc1J1YnlSdW4oKSB8fCBjaGlsZC0+aXNB
ZnRlckNvbnRlbnQoKSk7CisgICAgICAgIFJlbmRlcklubGluZTo6cmVtb3ZlQ2hpbGQoY2hpbGQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmluZCB0aGUgY29udGFpbmluZyBy
dW4KKyAgICBSZW5kZXJSdWJ5UnVuKiBydW4gPSBmaW5kUnVieVJ1blBhcmVudChjaGlsZCk7Cisg
ICAgQVNTRVJUKHJ1bik7CisgICAgcnVuLT5yZW1vdmVDaGlsZChjaGlsZCk7Cit9CisKKworLy89
PT0gcnVieSBhcyBibG9jayBvYmplY3QgPT09CisKK1JlbmRlclJ1YnlBc0Jsb2NrOjpSZW5kZXJS
dWJ5QXNCbG9jayhOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sKK30KKwor
UmVuZGVyUnVieUFzQmxvY2s6On5SZW5kZXJSdWJ5QXNCbG9jaygpCit7Cit9CisKK2Jvb2wgUmVu
ZGVyUnVieUFzQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRl
clN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hpbGQtPmlzUnVieVRleHQoKQorICAgICAg
ICB8fCBjaGlsZC0+aXNSdWJ5UnVuKCkKKyAgICAgICAgfHwgY2hpbGQtPmlzSW5saW5lKCk7Cit9
CisKK3ZvaWQgUmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgLy8gTm90ZTogJzphZnRlcicgY29u
dGVudCBpcyBoYW5kbGVkIGltcGxpY2l0ZWx5IGJlbG93CisKKyAgICAvLyBpZiBjaGlsZCBpcyBh
IHJ1YnkgcnVuLCBqdXN0IGFkZCBpdCBub3JtYWxseQorICAgIGlmIChjaGlsZC0+aXNSdWJ5UnVu
KCkpIHsKKyAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzQWZ0
ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgeworICAgICAgICAvLyBpbnNlcnQgY2hpbGQgaW50byBy
dW4KKyAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZC0+aXNSdWJ5UnVuKCkpOworICAgICAgICBS
ZW5kZXJPYmplY3QqIHJ1biA9IGJlZm9yZUNoaWxkOworICAgICAgICB3aGlsZSAocnVuICYmICFy
dW4tPmlzUnVieVJ1bigpKQorICAgICAgICAgICAgcnVuID0gcnVuLT5wYXJlbnQoKTsKKyAgICAg
ICAgaWYgKHJ1bikgeworICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hp
bGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChmYWxz
ZSk7IC8vIGJlZm9yZUNoaWxkIHNob3VsZCBhbHdheXMgaGF2ZSBhIHJ1biBhcyBwYXJlbnQhCisg
ICAgICAgIC8vIEVtZXJnZW5jeSBmYWxsYmFjazogZmFsbCB0aHJvdWdoIGFuZCBqdXN0IGFwcGVu
ZC4KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbmV3IGNoaWxkIHdvdWxkIGJlIGFwcGVuZGVkLCB0
cnkgdG8gYWRkIHRoZSBjaGlsZCB0byB0aGUgcHJldmlvdXMgcnVuCisgICAgLy8gaWYgcG9zc2li
bGUsIG9yIGNyZWF0ZSBhIG5ldyBydW4gb3RoZXJ3aXNlLgorICAgIC8vIChUaGUgUmVuZGVyUnVi
eVJ1biBvYmplY3Qgd2lsbCBoYW5kbGUgdGhlIGRldGFpbHMpCisgICAgUmVuZGVyUnVieVJ1biog
bGFzdFJ1biA9IGxhc3RSdWJ5UnVuKHRoaXMpOworICAgIGlmICghbGFzdFJ1biB8fCBsYXN0UnVu
LT5oYXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIGxhc3RSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0
aWNDcmVhdGVSdWJ5UnVuKHRoaXMpOworICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQobGFz
dFJ1bik7CisgICAgfQorICAgIGxhc3RSdW4tPmFkZENoaWxkKGNoaWxkKTsKK30KKwordm9pZCBS
ZW5kZXJSdWJ5QXNCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAg
ICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMgKnRoaXMsIGp1c3QgdXNlIHRoZSBub3JtYWwg
cmVtb3ZlIG1ldGhvZC4KKyAgICBpZiAoY2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKKyAgICAg
ICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIG9ubHkgZHVyaW5nIGRlc3RydWN0aW9uIG9mIHRoZSB3
aG9sZSBydWJ5IGVsZW1lbnQsIHRob3VnaC4KKyAgICAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNo
aWxkKGNoaWxkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNv
bnRhaW5pbmcgcnVuCisgICAgUmVuZGVyUnVieVJ1biogcnVuID0gZmluZFJ1YnlSdW5QYXJlbnQo
Y2hpbGQpOworICAgIEFTU0VSVChydW4pOworICAgIHJ1bi0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVu
ZGVyUnVieV9oCisjZGVmaW5lIFJlbmRlclJ1YnlfaAorCisjaWYgRU5BQkxFKFJVQlkpCisKKyNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIEZvbGxvd2luZyB0aGUgSFRNTCA1IHNwZWMsIHRoZSBib3gg
b2JqZWN0IG1vZGVsIGZvciBhIDxydWJ5PiBlbGVtZW50IGFsbG93cyBzZXZlcmFsIHJ1bnMgb2Yg
cnVieQorLy8gYmFzZXMgd2l0aCB0aGVpciByZXNwZWN0aXZlIHJ1YnkgdGV4dHMgbG9va3MgYXMg
Zm9sbG93czoKKy8vCisvLyAxIFJlbmRlclJ1Ynkgb2JqZWN0LCBjb3JyZXNwb25kaW5nIHRvIHRo
ZSB3aG9sZSA8cnVieT4gSFRNTCBlbGVtZW50CisvLyAgICAgIDErIFJlbmRlclJ1YnlSdW4gKGFu
b255bW91cykKKy8vICAgICAgICAgIDAgb3IgMSBSZW5kZXJSdWJ5VGV4dCAtIHNodWZmbGVkIHRv
IHRoZSBmcm9udCBpbiBvcmRlciB0byByZS11c2UgZXhpc3RpbmcgYmxvY2sgbGF5b3V0aW5nCisv
LyAgICAgICAgICAgICAgMC1uIGlubGluZSBvYmplY3QocykKKy8vICAgICAgICAgIDAgb3IgMSBS
ZW5kZXJSdWJ5QmFzZSAtIGNvbnRhaW5zIHRoZSBpbmxpbmUgb2JqZWN0cyB0aGF0IG1ha2UgdXAg
dGhlIHJ1YnkgYmFzZQorLy8gICAgICAgICAgICAgIDEtbiBpbmxpbmUgb2JqZWN0KHMpCisvLwor
Ly8gTm90ZTogPHJwPiBlbGVtZW50cyBhcmUgZGVmaW5lZCBhcyBoYXZpbmcgJ2Rpc3BsYXk6bm9u
ZScgYW5kIHRodXMgbm9ybWFsbHkgYXJlIG5vdCBhc3NpZ25lZCBhIHJlbmRlcmVyLgorCisvLyA8
cnVieT4gd2hlbiB1c2VkIGFzICdkaXNwbGF5OmlubGluZScKK2NsYXNzIFJlbmRlclJ1YnlBc0lu
bGluZSA6IHB1YmxpYyBSZW5kZXJJbmxpbmUgeworcHVibGljOgorICAgIFJlbmRlclJ1YnlBc0lu
bGluZShOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVyUnVieUFzSW5saW5lKCk7CisKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUnVi
eSAoaW5saW5lKSI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKTsKK307CisKKy8vIDxydWJ5
PiB3aGVuIHVzZWQgYXMgJ2Rpc3BsYXk6YmxvY2snIG9yICdkaXNwbGF5OmlubGluZS1ibG9jaycK
K2NsYXNzIFJlbmRlclJ1YnlBc0Jsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoK
KyAgICBSZW5kZXJSdWJ5QXNCbG9jayhOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVyUnVieUFz
QmxvY2soKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJSdWJ5IChibG9jaykiOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSdWJ5
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxv
d2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkK
KworI2VuZGlmIC8vIFJlbmRlclJ1YnlfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlC
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKKworI2lmIEVOQUJMRShSVUJZKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclJ1YnlCYXNlOjpSZW5kZXJSdWJ5QmFzZShOb2RlKiBu
b2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sKKyAgICBzZXRJbmxpbmUoZmFsc2UpOwor
fQorCitSZW5kZXJSdWJ5QmFzZTo6flJlbmRlclJ1YnlCYXNlKCkKK3sKK30KKworYm9vbCBSZW5k
ZXJSdWJ5QmFzZTo6aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5
bGUqKSBjb25zdAoreworICAgIHJldHVybiBjaGlsZC0+aXNJbmxpbmUoKTsKK30KKwordm9pZCBS
ZW5kZXJSdWJ5QmFzZTo6c3BsaXRUb0xlZnQoUmVuZGVyQmxvY2sqIGxlZnRCYXNlLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwg
Y2hpbGRyZW4gdGhhdCBhcmUgYmVmb3JlICghKSBiZWZvcmVDaGlsZAorICAgIC8vIGFuZCBhcHBl
bmRzIHRoZW0gdG8gbGVmdEJhc2UuCisgICAgQVNTRVJUKGxlZnRCYXNlKTsKKworICAgIC8vIEZp
cnN0IG1ha2Ugc3VyZSB0aGF0IGJlZm9yZUNoaWxkIChpZiBzZXQpIGlzIGluZGVlZCBhIGRpcmVj
dCBjaGlsZCBvZiB0aGlzLgorICAgIC8vIEZhbGxiYWNrOiBjbGltYiB1cCB0aGUgdHJlZSB0byBt
YWtlIHN1cmUuIFRoaXMgbWF5IHJlc3VsdCBpbiBzb21ld2hhdCBpbmNvcnJlY3QgcmVuZGVyaW5n
LgorICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBoYXBwZW4/IElzIHRoZXJlIGEgYmV0dGVyL21vcmUg
Y29ycmVjdCB3YXkgdG8gc29sdmUgdGhpcz8KKyAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKyAgICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCisgICAgICAgIGJlZm9yZUNoaWxkID0gYmVm
b3JlQ2hpbGQtPnBhcmVudCgpOworCisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKKyAgICB3aGlsZSAoY2hpbGQgIT0gYmVmb3JlQ2hpbGQpIHsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbW92ZUNo
aWxkVG8obGVmdEJhc2UsIGxlZnRCYXNlLT5jaGlsZHJlbigpLCBjaGlsZCk7CisgICAgICAgIGNo
aWxkID0gbmV4dENoaWxkOworICAgIH0KK30KKwordm9pZCBSZW5kZXJSdWJ5QmFzZTo6bWVyZ2VG
cm9tTGVmdChSZW5kZXJCbG9jayogbGVmdEJhc2UpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBy
ZW1vdmVzIGFsbCBjaGlsZHJlbiBvZiBsZWZ0QmFzZSBhbmQgcHJlcGVuZHMgKCEpIHRoZW0gdG8g
dGhpcy4KKyAgICBBU1NFUlQobGVmdEJhc2UpOworCisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdFBv
cyA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gbGVmdEJhc2UtPmxh
c3RDaGlsZCgpOworICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICBsZWZ0QmFzZS0+bW92ZUNo
aWxkVG8odGhpcywgY2hpbGRyZW4oKSwgZmlyc3RQb3MsIGNoaWxkKTsKKyAgICAgICAgZmlyc3RQ
b3MgPSBjaGlsZDsKKyAgICAgICAgY2hpbGQgPSBsZWZ0QmFzZS0+bGFzdENoaWxkKCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkK
KwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgUmVuZGVyUnVieUJhc2VfaAorI2RlZmluZSBSZW5kZXJSdWJ5QmFzZV9oCisK
KyNpZiBFTkFCTEUoUlVCWSkKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyUnVieUJhc2UgOiBwdWJsaWMgUmVuZGVyQmxvY2sg
eworcHVibGljOgorICAgIFJlbmRlclJ1YnlCYXNlKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5k
ZXJSdWJ5QmFzZSgpOworCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3QgeyByZXR1cm4gIlJlbmRlclJ1YnlCYXNlIChhbm9ueW1vdXMpIjsgfQorCisgICAgdmlydHVh
bCBib29sIGlzUnVieUJhc2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsK
KworICAgIHZvaWQgc3BsaXRUb0xlZnQoUmVuZGVyQmxvY2sqIGxlZnRCYXNlLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIG1lcmdlRnJvbUxlZnQoUmVuZGVyQmxvY2sqIGxl
ZnRCYXNlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShSVUJZKQorCisjZW5kaWYgLy8gUmVuZGVyUnVieUJhc2VfaApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUnVieVJ1bi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5UnVuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKKworI2lmIEVOQUJMRShSVUJZ
KQorCisjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5VGV4
dC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJSdWJ5UnVuOjpSZW5kZXJSdWJ5UnVuKE5vZGUq
IG5vZGUpCisgICAgOiBSZW5kZXJCbG9jayhub2RlKQoreworICAgIHNldFJlcGxhY2VkKHRydWUp
OworICAgIHNldElubGluZSh0cnVlKTsKK30KKworUmVuZGVyUnVieVJ1bjo6flJlbmRlclJ1YnlS
dW4oKQoreworfQorCitpbmxpbmUgYm9vbCBSZW5kZXJSdWJ5UnVuOjpoYXNSdWJ5VGV4dCgpIGNv
bnN0Cit7CisgICAgLy8gVGhlIG9ubHkgcGxhY2Ugd2hlcmUgYSBydWJ5IHRleHQgY2FuIGJlIGlz
IGluIHRoZSBmaXJzdCBwb3NpdGlvbgorICAgIC8vIE5vdGU6IEFzIGFub255bW91cyBibG9ja3Ms
IHJ1YnkgcnVucyBkbyBub3QgaGF2ZSAnOmJlZm9yZScgb3IgJzphZnRlcicgY29udGVudCB0aGVt
c2VsdmVzLgorICAgIHJldHVybiBmaXJzdENoaWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5pc1J1YnlU
ZXh0KCk7Cit9CisKK2lubGluZSBib29sIFJlbmRlclJ1YnlSdW46Omhhc1J1YnlCYXNlKCkgY29u
c3QKK3sKKyAgICAvLyBUaGUgb25seSBwbGFjZSB3aGVyZSBhIHJ1YnkgYmFzZSBjYW4gYmUgaXMg
aW4gdGhlIGxhc3QgcG9zaXRpb24KKyAgICAvLyBOb3RlOiBBcyBhbm9ueW1vdXMgYmxvY2tzLCBy
dWJ5IHJ1bnMgZG8gbm90IGhhdmUgJzpiZWZvcmUnIG9yICc6YWZ0ZXInIGNvbnRlbnQgdGhlbXNl
bHZlcy4KKyAgICByZXR1cm4gbGFzdENoaWxkKCkgJiYgbGFzdENoaWxkKCktPmlzUnVieUJhc2Uo
KTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyUnVieVJ1bjo6aXNFbXB0eSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFoYXNSdWJ5VGV4dCgpICYmICFoYXNSdWJ5QmFzZSgpOworfQorCitpbmxpbmUg
UmVuZGVyUnVieVRleHQqIFJlbmRlclJ1YnlSdW46OnJ1YnlUZXh0KCkgY29uc3QKK3sKKyAgICBS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOworICAgIHJldHVybiBjaGlsZCAmJiBj
aGlsZC0+aXNSdWJ5VGV4dCgpID8gc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVRleHQqPihjaGlsZCkg
OiAwOworfQorCitpbmxpbmUgUmVuZGVyUnVieUJhc2UqIFJlbmRlclJ1YnlSdW46OnJ1YnlCYXNl
KCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7CisgICAg
cmV0dXJuIGNoaWxkICYmIGNoaWxkLT5pc1J1YnlCYXNlKCkgPyBzdGF0aWNfY2FzdDxSZW5kZXJS
dWJ5QmFzZSo+KGNoaWxkKSA6IDA7Cit9CisKK1JlbmRlclJ1YnlCYXNlKiBSZW5kZXJSdWJ5UnVu
OjpydWJ5QmFzZVNhZmUoKQoreworICAgIFJlbmRlclJ1YnlCYXNlKiBiYXNlID0gcnVieUJhc2Uo
KTsKKyAgICBpZiAoIWJhc2UpIHsKKyAgICAgICAgYmFzZSA9IGNyZWF0ZVJ1YnlCYXNlKCk7Cisg
ICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChiYXNlKTsKKyAgICB9CisgICAgcmV0dXJuIGJh
c2U7Cit9CisKK1JlbmRlckJsb2NrKiBSZW5kZXJSdWJ5UnVuOjpmaXJzdExpbmVCbG9jaygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVyUnVieVJ1bjo6dXBkYXRlRmly
c3RMZXR0ZXIoKQoreworfQorCitib29sIFJlbmRlclJ1YnlSdW46OmlzQ2hpbGRBbGxvd2VkKFJl
bmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hp
bGQtPmlzUnVieVRleHQoKSB8fCBjaGlsZC0+aXNJbmxpbmUoKTsKK30KKwordm9pZCBSZW5kZXJS
dWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQoreworICAgIEFTU0VSVChjaGlsZCk7CisKKyAgICAvLyBJZiBjaGlsZCBpcyBhIHJ1
YnkgdGV4dAorICAgIGlmIChjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIGlmICghYmVm
b3JlQ2hpbGQpIHsKKyAgICAgICAgICAgIC8vIFJlbmRlclJ1YnkgaGFzIGFscmVhZHkgYXNjZXJ0
YWluZWQgdGhhdCB3ZSBjYW4gYWRkIHRoZSBjaGlsZCBoZXJlLgorICAgICAgICAgICAgQVNTRVJU
KCFoYXNSdWJ5VGV4dCgpKTsKKyAgICAgICAgICAgIC8vIHByZXBlbmQgcnVieSB0ZXh0cyBhcyBm
aXJzdCBjaGlsZAorICAgICAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBmaXJz
dENoaWxkKCkpOworICAgICAgICB9ICBlbHNlIGlmIChiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgp
KSB7CisgICAgICAgICAgICAvLyBOZXcgdGV4dCBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSBhbm90
aGVyLgorICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBuZXcgdGV4dCB0YWtlcyB0aGUg
cGxhY2Ugb2YgdGhlIG9sZCBvbmUsIGFuZAorICAgICAgICAgICAgLy8gdGhlIG9sZCB0ZXh0IGdv
ZXMgaW50byBhIG5ldyBydW4gdGhhdCBpcyBpbnNlcnRlZCBhcyBuZXh0IHNpYmxpbmcuCisgICAg
ICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOworICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBydWJ5ID0gcGFyZW50KCk7CisgICAgICAgICAgICBBU1NFUlQocnVi
eS0+aXNSdWJ5KCkpOworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIG5ld1J1biA9IHN0YXRpY0Ny
ZWF0ZVJ1YnlSdW4ocnVieSk7CisgICAgICAgICAgICBydWJ5LT5hZGRDaGlsZChuZXdSdW4sIG5l
eHRTaWJsaW5nKCkpOworICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgcnVieSB0ZXh0IGFuZCBt
b3ZlIHRoZSBvbGQgb25lIHRvIHRoZSBuZXcgcnVuCisgICAgICAgICAgICAvLyBOb3RlOiBEb2lu
ZyBpdCBpbiB0aGlzIG9yZGVyIGFuZCBub3QgdXNpbmcgUmVuZGVyUnVieVJ1bidzIG1ldGhvZHMs
CisgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBhdXRvbWF0aWMgcmVtb3ZhbCBvZiB0
aGUgcnVieSBydW4gaW4gY2FzZSB0aGVyZSBpcyBubworICAgICAgICAgICAgLy8gb3RoZXIgY2hp
bGQgYmVzaWRlcyB0aGUgb2xkIHJ1YnkgdGV4dC4KKyAgICAgICAgICAgIFJlbmRlckJsb2NrOjph
ZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnJl
bW92ZUNoaWxkKGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIG5ld1J1bi0+YWRkQ2hpbGQoYmVm
b3JlQ2hpbGQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGhhc1J1YnlC
YXNlKCkpOyAvLyBPdGhlcndpc2UgYmVmb3JlQ2hpbGQgd291bGQgYmUgYm9ya2VkLgorICAgICAg
ICAgICAgLy8gSW5zZXJ0aW9uIGJlZm9yZSBhIHJ1YnkgYmFzZSBvYmplY3QuCisgICAgICAgICAg
ICAvLyBJbiB0aGlzIGNhc2Ugd2UgbmVlZCBpbnNlcnQgYSBuZXcgcnVuIGJlZm9yZSB0aGUgY3Vy
cmVudCBvbmUgYW5kIHNwbGl0IHRoZSBiYXNlLgorICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
dWJ5ID0gcGFyZW50KCk7CisgICAgICAgICAgICBSZW5kZXJSdWJ5UnVuKiBuZXdSdW4gPSBzdGF0
aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOworICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQobmV3UnVu
LCB0aGlzKTsKKyAgICAgICAgICAgIG5ld1J1bi0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAg
ICAgcnVieUJhc2VTYWZlKCktPnNwbGl0VG9MZWZ0KG5ld1J1bi0+cnVieUJhc2VTYWZlKCksIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGNoaWxkIGlz
IG5vdCBhIHRleHQgLT4gaW5zZXJ0IGl0IGludG8gdGhlIGJhc2UKKyAgICAgICAgLy8gKGFwcGVu
ZCBpdCBpbnN0ZWFkIGlmIGJlZm9yZUNoaWxkIGlzIHRoZSBydWJ5IHRleHQpCisgICAgICAgIGlm
IChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgpKQorICAgICAgICAgICAg
YmVmb3JlQ2hpbGQgPSAwOworICAgICAgICBydWJ5QmFzZVNhZmUoKS0+YWRkQ2hpbGQoY2hpbGQs
IGJlZm9yZUNoaWxkKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyUnVieVJ1bjo6cmVtb3ZlQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBydWJ5
IHRleHQsIHRoZW4gbWVyZ2UgdGhlIHJ1YnkgYmFzZSB3aXRoIHRoZSBiYXNlIG9mCisgICAgLy8g
dGhlIHJpZ2h0IHNpYmxpbmcgcnVuLCBpZiBwb3NzaWJsZS4KKyAgICBpZiAoIWRvY3VtZW50QmVp
bmdEZXN0cm95ZWQoKSAmJiBjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIFJlbmRlclJ1
YnlCYXNlKiBiYXNlID0gcnVieUJhc2UoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByaWdodE5l
aWdoYm91ciA9IG5leHRTaWJsaW5nKCk7CisgICAgICAgIGlmIChiYXNlICYmIHJpZ2h0TmVpZ2hi
b3VyICYmIHJpZ2h0TmVpZ2hib3VyLT5pc1J1YnlSdW4oKSkgeworICAgICAgICAgICAgLy8gUnVi
eSBydW4gd2l0aG91dCBhIGJhc2UgY2FuIGhhcHBlbiBvbmx5IGF0IHRoZSBmaXJzdCBydW4uCisg
ICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1bio+KHJpZ2h0TmVpZ2hi
b3VyKS0+aGFzUnVieUJhc2UoKSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJSdWJ5
UnVuKj4ocmlnaHROZWlnaGJvdXIpLT5ydWJ5QmFzZVNhZmUoKS0+bWVyZ2VGcm9tTGVmdChiYXNl
KTsKKyAgICAgICAgICAgIC8vIFRoZSBub3cgZW1wdHkgcnVieSBiYXNlIHdpbGwgYmUgcmVtb3Zl
ZCBiZWxvdy4KKyAgICAgICAgfQorICAgIH0KKworICAgIFJlbmRlckJsb2NrOjpyZW1vdmVDaGls
ZChjaGlsZCk7CisKKyAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgeworICAgICAg
ICAvLyBDaGVjayBpZiBvdXIgYmFzZSAoaWYgYW55KSBpcyBub3cgZW1wdHkuIElmIHNvLCBkZXN0
cm95IGl0LgorICAgICAgICBSZW5kZXJCbG9jayogYmFzZSA9IHJ1YnlCYXNlKCk7CisgICAgICAg
IGlmIChiYXNlICYmICFiYXNlLT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJs
b2NrOjpyZW1vdmVDaGlsZChiYXNlKTsKKyAgICAgICAgICAgIGJhc2UtPmRlbGV0ZUxpbmVCb3hU
cmVlKCk7CisgICAgICAgICAgICBiYXNlLT5kZXN0cm95KCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiBhbnkgb2YgdGhlIGFib3ZlIGxlYXZlcyB0aGUgcnVuIGVtcHR5LCBkZXN0cm95IGl0
IGFzIHdlbGwKKyAgICAgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICAgICAgcGFyZW50KCkt
PnJlbW92ZUNoaWxkKHRoaXMpOworICAgICAgICAgICAgZGVsZXRlTGluZUJveFRyZWUoKTsKKyAg
ICAgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVuZGVyUnVieUJh
c2UqIFJlbmRlclJ1YnlSdW46OmNyZWF0ZVJ1YnlCYXNlKCkgY29uc3QKK3sKKyAgICBSZW5kZXJS
dWJ5QmFzZSogcmIgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclJ1YnlCYXNlKGRvY3VtZW50
KCkgLyogYW5vbnltb3VzICovKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgp
KTsKKyAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CisgICAgbmV3U3R5bGUtPnNldFRl
eHRBbGlnbihDRU5URVIpOyAvLyBGSVhNRTogdXNlIFdFQktJVF9DRU5URVI/CisgICAgcmItPnNl
dFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJiOworfQorCitSZW5kZXJS
dWJ5UnVuKiBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9i
amVjdCogcGFyZW50UnVieSkKK3sKKyAgICBBU1NFUlQocGFyZW50UnVieSAmJiBwYXJlbnRSdWJ5
LT5pc1J1YnkoKSk7CisgICAgUmVuZGVyUnVieVJ1biogcnIgPSBuZXcgKHBhcmVudFJ1YnktPnJl
bmRlckFyZW5hKCkpIFJlbmRlclJ1YnlSdW4ocGFyZW50UnVieS0+ZG9jdW1lbnQoKSAvKiBhbm9u
eW1vdXMgKi8pOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFJ1YnktPnN0eWxl
KCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CisgICAgcnItPnNl
dFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJyOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlSdW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVy
UnVieVJ1bl9oCisjZGVmaW5lIFJlbmRlclJ1YnlSdW5faAorCisjaWYgRU5BQkxFKFJVQlkpCisK
KyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlbmRlclJ1YnlCYXNlOworY2xhc3MgUmVuZGVyUnVieVRleHQ7CisKKy8vIFJlbmRlclJ1YnlS
dW4gYXJlICdpbmxpbmUtYmxvY2svdGFibGUnIGxpa2Ugb2JqZWN0cyxhbmQgd3JhcCBhIHNpbmds
ZSBwYWlyaW5nIG9mIGEgcnVieSBiYXNlIHdpdGggaXRzIHJ1YnkgdGV4dChzKS4KKy8vIFNlZSBS
ZW5kZXJSdWJ5LmggZm9yIGZ1cnRoZXIgY29tbWVudHMgb24gdGhlIHN0cnVjdHVyZQorCitjbGFz
cyBSZW5kZXJSdWJ5UnVuIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5k
ZXJSdWJ5UnVuKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJSdWJ5UnVuKCk7CisKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUnVi
eVJ1biAoYW5vbnltb3VzKSI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlSdW4oKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5saW5lQmxvY2tPcklubGlu
ZVRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBoYXNSdWJ5VGV4dCgp
IGNvbnN0OworICAgIGJvb2wgaGFzUnVieUJhc2UoKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdDsKKyAgICBSZW5kZXJSdWJ5VGV4dCogcnVieVRleHQoKSBjb25zdDsKKyAgICBSZW5k
ZXJSdWJ5QmFzZSogcnVieUJhc2UoKSBjb25zdDsKKyAgICBSZW5kZXJSdWJ5QmFzZSogcnVieUJh
c2VTYWZlKCk7IC8vIGNyZWF0ZXMgdGhlIGJhc2UgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKTsKKworICAgIHZpcnR1YWwgUmVuZGVyQmxv
Y2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0
TGV0dGVyKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyUnVieVJ1biogc3RhdGljQ3JlYXRlUnVieVJ1
bihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudFJ1YnkpOworCitwcm90ZWN0ZWQ6CisgICAgUmVu
ZGVyUnVieUJhc2UqIGNyZWF0ZVJ1YnlCYXNlKCkgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8vIFJlbmRlclJ1
YnlSdW5faApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
UnVieVRleHQuaCIKKworI2lmIEVOQUJMRShSVUJZKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlbmRlclJ1YnlUZXh0OjpSZW5kZXJSdWJ5VGV4dChOb2RlKiBub2RlKQorICAgIDogUmVuZGVy
QmxvY2sobm9kZSkKK3sKK30KKworUmVuZGVyUnVieVRleHQ6On5SZW5kZXJSdWJ5VGV4dCgpCit7
Cit9CisKK2Jvb2wgUmVuZGVyUnVieVRleHQ6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCog
Y2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hpbGQtPmlzSW5saW5l
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJZ
KQorCisKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3Qu
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFJlbmRlclJ1YnlUZXh0X2gKKyNkZWZpbmUgUmVuZGVyUnVieVRleHRf
aAorCisjaWYgRU5BQkxFKFJVQlkpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclJ1YnlUZXh0IDogcHVibGljIFJlbmRlckJs
b2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJSdWJ5VGV4dChOb2RlKik7CisgICAgdmlydHVhbCB+
UmVuZGVyUnVieVRleHQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJSdWJ5VGV4dCI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c1J1YnlUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGlz
Q2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlm
IC8vIFJlbmRlclJ1YnlUZXh0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNp
b24gNDc0MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OCwxMiArNzgsMTUgQEAgcHVibGljOgogICAgIC8vIFJlbmRlclRoZW1lTWFjLmNw
cCBmb3IgTWFjIE9TIFguCiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHJldHVybiB0aGUgdGhlbWUn
cyBleHRyYSBzdHlsZSBzaGVldHMgcnVsZXMsIHRvIGxldCBlYWNoIHBsYXRmb3JtCi0gICAgLy8g
YWRqdXN0IHRoZSBkZWZhdWx0IENTUyBydWxlcyBpbiBodG1sLmNzcywgcXVpcmtzLmNzcywgb3Ig
bWVkaWFDb250cm9scy5jc3MKKyAgICAvLyBhZGp1c3QgdGhlIGRlZmF1bHQgQ1NTIHJ1bGVzIGlu
IGh0bWwuY3NzLCBxdWlya3MuY3NzLCBtZWRpYUNvbnRyb2xzLmNzcywgb3IgcnVieS5jc3MKICAg
ICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5n
KCk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKSB7IHJldHVy
biBTdHJpbmcoKTsgfQogI2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBleHRy
YU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CiAjZW5kaWYK
KyNpZiBFTkFCTEUoUlVCWSkKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVJ1YnlTdHlsZVNoZWV0
KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CisjZW5kaWYKIAogICAgIC8vIEEgbWV0aG9kIHRvIG9i
dGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdp
bGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUg
ZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFk
aW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35012</attachid>
            <date>2009-08-17 21:26:59 -0700</date>
            <delta_ts>2009-10-19 23:39:07 -0700</delta_ts>
            <desc>patch: new ruby implementation (reordering of renderers)</desc>
            <filename>rubynew.patch</filename>
            <type>text/plain</type>
            <size>55146</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzQwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE5IEBACisyMDA5LTA4LTE3ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWlu
ZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBCdWcgMzc0OSAtICBYSFRNTCAxLjEgUnVieSBBbm5vdGF0aW9uCisgICAgICAgICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0OSkKKworICAgICAgICBG
aXJzdCBydWRpbWVudGFyeSBpbXBsZW1lbnRhdGlvbiBvZiBIVE1MNSBydWJ5IHJlbmRlcmluZyBz
dXBwb3J0LgorICAgICAgICAoQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byByZS1hcnJhbmdpbmcg
cmVuZGVyIGNoaWxkcmVuIG9mIGEgUmVuZGVyQmxvY2sgd2l0aGluIDxydWJ5PjoKKyAgICAgICAg
VGhlIFJlbmRlckJsb2NrIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDxydD4gdGxlbWVudCBpcyBpbnNl
cnRlZCBhcyBGSVJTVCBjaGlsZCBvZiB0aGUgCisgICAgICAgIGNvbnRhaW5pbmcgUmVuZGVyUnVi
eVJ1bi4pCisKKyAgICAgICAgRm9sbG93aW5nIHRoZSBIVE1MIDUgc3BlYywgdGhlIGJveCBvYmpl
Y3QgbW9kZWwgZm9yIGEgPHJ1Ynk+IGVsZW1lbnQgYWxsb3dzIHNldmVyYWwgcnVucyBvZiBydWJ5
CisgICAgICAgIGJhc2VzIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBydWJ5IHRleHRzIGxvb2tzIGFz
IGZvbGxvd3M6CisKKyAgICAgICAgMSBSZW5kZXJSdWJ5IG9iamVjdCwgY29ycmVzcG9uZGluZyB0
byB0aGUgd2hvbGUgPHJ1Ynk+IEhUTUwgZWxlbWVudAorICAgICAgICAgICAgIDErIFJlbmRlclJ1
YnlSdW4gKGFub255bW91cykKKyAgICAgICAgICAgICAgICAgMCBvciAxIFJlbmRlclJ1YnlUZXh0
IC0gc2h1ZmZsZWQgdG8gdGhlIGZyb250IGluIG9yZGVyIHRvIHJlLXVzZSBleGlzdGluZyBibG9j
ayBsYXlvdXRpbmcKKyAgICAgICAgICAgICAgICAgICAgIDAtbiBpbmxpbmUgb2JqZWN0KHMpCisg
ICAgICAgICAgICAgICAgIDAgb3IgMSBSZW5kZXJSdWJ5QmFzZSAtIGNvbnRhaW5zIHRoZSBpbmxp
bmUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIHJ1YnkgYmFzZQorICAgICAgICAgICAgICAgICAg
ICAxLW4gaW5saW5lIG9iamVjdChzKQorCisgICAgICAgIE5vdGU6IDxycD4gZWxlbWVudHMgYXJl
IGRlZmluZWQgYXMgaGF2aW5nICdkaXNwbGF5Om5vbmUnIGFuZCB0aHVzIG5vcm1hbGx5IGFyZSBu
b3QgYXNzaWduZWQgYSByZW5kZXJlci4KKworICAgICAgICBUZXN0czogZmFzdC9ydWJ5L3J1Ynkt
ZW1wdHktcnQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1YnktbGVuZ3RoLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXJ1bi1icmVhay5odG1sCisgICAgICAgICAg
ICAgICBmYXN0L3J1YnkvcnVieS1ydW5zLXNwYW5zLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
cnVieS9ydWJ5LXJ1bnMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1Ynktc2ltcGxl
LXJwLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5LXNpbXBsZS5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L3J1YnkvcnVieS10cmFpbGluZy5odG1sCisgICAgICAgICAgICAgICBm
YXN0L3J1YnkvcnVieURPTS1pbnNlcnQtcnQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5
L3J1YnlET00taW5zZXJ0LXRleHQxLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5
RE9NLWluc2VydC10ZXh0Mi5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1p
bnNlcnQtdGV4dDMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ydWJ5L3J1YnlET00tcmVtb3Zl
LXJ0MS5odG1sCisgICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1yZW1vdmUtcnQyLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvcnVieS9ydWJ5RE9NLXJlbW92ZS10ZXh0MS5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3J1YnkvcnVieURPTS1yZW1vdmUtdGV4dDIuaHRtbAorCisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxl
Rm9yRWxlbWVudCk6CisgICAgICAgICogY3NzL3J1YnkuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Om1vdmVDaGlsZFRvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y3JlYXRlT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUnVieSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUnVieUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1J1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpp
c1J1YnlUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6bGFzdFJ1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFJ1
YnlSdW5QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjpSZW5k
ZXJSdWJ5QXNJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjp+
UmVuZGVyUnVieUFzSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGlu
ZTo6aXNDaGlsZEFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5l
OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OnJlbW92
ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjpSZW5kZXJSdWJ5
QXNCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6flJlbmRlclJ1
YnlBc0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlBc0Jsb2NrOjppc0NoaWxk
QWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzQmxvY2s6OnJlbW92ZUNoaWxkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJ1YnlBc0lubGluZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSdWJ5QXNJbmxpbmU6OmlzUnVieSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNC
bG9jazo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNCbG9jazo6
aXNSdWJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpSZW5kZXJSdWJ5QmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6flJlbmRlclJ1YnlCYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjppc0NoaWxkQWxsb3dlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5QmFzZTo6c3BsaXRUb0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUnVieUJhc2U6Om1lcmdlRnJvbUxlZnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJS
dWJ5QmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjpyZW5k
ZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjppc1J1YnlCYXNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6UmVuZGVyUnVieVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSdWJ5UnVuOjp+UmVuZGVyUnVieVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSdWJ5UnVuOjpoYXNSdWJ5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVu
OjpoYXNSdWJ5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnJ1YnlUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnJ1YnlCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclJ1YnlSdW46OnJ1YnlCYXNlU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5
UnVuOjpmaXJzdExpbmVCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjp1
cGRhdGVGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjppc0No
aWxkQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpjcmVhdGVSdWJ5QmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUnVieVJ1bi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1
YnlSdW46OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6aXNS
dWJ5UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OmlzSW5saW5lQmxvY2tP
cklubGluZVRhYmxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlUZXh0OjpSZW5kZXJSdWJ5VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5VGV4dDo6flJlbmRlclJ1YnlUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlUZXh0Ojppc0NoaWxkQWxsb3dlZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUnVieVRleHQ6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVi
eVRleHQ6OmlzUnVieVRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmV4dHJhUnVieVN0eWxlU2hlZXQpOgorCiAy
MDA5LTA4LTE3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biA0NzQwMykKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtNTM2LDYgKzUzNiwxMCBAQCBYUGF0aEdyYW1tYXIuY3BwIDogeG1sL1hQYXRoR3JhbW1hci55
ICQoCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTID0gJChXZWJDb3JlKS9jc3MvaHRtbC5jc3Mg
JChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3Mg
JChXZWJDb3JlKS9jc3MvdGhlbWVXaW4uY3NzICQoV2ViQ29yZSkvY3NzL3RoZW1lV2luUXVpcmtz
LmNzcyAKIAoraWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9SVUJZLCQoRkVBVFVSRV9ERUZJTkVT
KSksIEVOQUJMRV9SVUJZKQorICAgIFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTIDo9ICQoVVNFUl9B
R0VOVF9TVFlMRV9TSEVFVFMpICQoV2ViQ29yZSkvY3NzL3J1YnkuY3NzIAorZW5kaWYKKwogaWZl
cSAoJChmaW5kc3RyaW5nIEVOQUJMRV9TVkcsJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1NW
RykKICAgICBVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA6PSAkKFVTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTKSAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIAogZW5kaWYKSW5kZXg6IFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24g
NDc0MDMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYw
LDggKzIyNjAsMTUgQEAgZW5kaWYgIyBFTkQgRU5BQkxFX1ZJREVPCiAjIC0tLS0KIGlmIEVOQUJM
RV9SVUJZCiAKLUhUTUxfRkVBVFVSRVMgKz0gRU5BQkxFX1JVQlk9MQotd2ViY29yZV9jcHBmbGFn
cyArPSAtREVOQUJMRV9SVUJZPTEKK3dlYmNvcmVfc291cmNlcyArPSBcCisgICBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5LmNwcCBcCisgICBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
LmggXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwIFwKKyAgIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmggXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUnVieVJ1bi5jcHAgXAorICAgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oIFwK
KyAgIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcCBcCisgICBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oCiAKIGVuZGlmICMgRU5EIEVOQUJMRV9SVUJZCiAKQEAg
LTMyNjEsNiArMzI2OCwxMyBAQCBVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9IFwKIAkkKFdlYkNv
cmUpL2Nzcy93bWwuY3NzIFwKIAkkKFdlYkNvcmUpL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwogCitp
ZiBFTkFCTEVfUlVCWQorIyBOb3RlOiBydWJ5LmNzcyBzZXRzIDxycD4gZGlzcGxheTpub25lLCB3
aGljaCB3ZSBkb24ndCB3YW50IGlmIHJ1YnkgaXNuJ3QsIGluIGZhY3QsIGVuYWJsZWQKK1VTRVJf
QUdFTlRfU1RZTEVfU0hFRVRTICs9IFwKKyAgICQoV2ViQ29yZSkvY3NzL3J1YnkuY3NzCitlbmRp
ZiAjIEVORCBFTkFCTEVfUlVCWQorICAgCisKICMgbmV3LXN0eWxlIEphdmFTY3JpcHQgYmluZGlu
Z3MKIFNDUklQVFNfQklORElOR1MgPSBcCiAJJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3IucG0gXApAQCAtMzQwNCw2ICszNDE4LDEzIEBAIHdlYmNvcmVfZGlzdCArPSBc
CiAJV2ViQ29yZS94bWwveG1sYXR0cnMuaW4gXAogCVdlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55
CiAKK2lmIEVOQUJMRV9SVUJZCisjIE5vdGU6IHJ1YnkuY3NzIHNldHMgPHJwPiBkaXNwbGF5Om5v
bmUsIHdoaWNoIHdlIGRvbid0IHdhbnQgaWYgcnVieSBpc24ndCwgaW4gZmFjdCwgZW5hYmxlZAor
d2ViY29yZV9kaXN0ICs9IFwKKyAgIFdlYkNvcmUvY3NzL3J1YnkuY3NzCitlbmRpZiAjIEVORCBF
TkFCTEVfUlVCWQorICAgCisKICMgSW5zdGFsbGluZyB3ZWIgaW5zcGVjdG9yIGZpbGVzCiB3ZWJp
bnNwZWN0b3JkaXIgPSAke2RhdGFkaXJ9L3dlYmtpdC0xLjAvd2ViaW5zcGVjdG9yCiBkaXN0X3dl
Ymluc3BlY3Rvcl9EQVRBID0gXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ3NDAzKQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI4MjIsNiArMjgyMiwxNCBAQAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyUmVwbGljYS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSZXBs
aWNhLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnkuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclJ1YnlCYXNlLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNl
LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlclJ1YnlUZXh0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclJ1YnlU
ZXh0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ3NDAzKQorKysg
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjYzMiw2ICsyNjMyLDE3IEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKIH0KIAorY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1JVQlk9MSkgeworICAgU1RZTEVTSEVFVFNfRU1CRUQgKz0gXAorICAgICAg
ICQkUFdEL2Nzcy9ydWJ5LmNzcworCisgICAgU09VUkNFUyArPSBcCisgICAgICAgIHJlbmRlcmlu
Zy9SZW5kZXJSdWJ5LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAg
XAorICAgICAgICByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAgXAorICAgICAgICByZW5kZXJp
bmcvUmVuZGVyUnVieVRleHQuY3BwCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFU
SD0xKSB7CiAgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hQQVRIPTEK
IApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDQ3NDAzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTUgQEAKIAkJMTQ4QUZEQTYwQUY1ODM2MDAw
OENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlv
bkhhbmRsZXJzLm1tICovOyB9OwogCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXND
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICovOyB9
OwogCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFNDBCMkYyQjFD
MDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRBNTM3MDYxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRl
clJ1YnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRBNTM2RkUxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuY3BwICovOyB9OworCQkxNEE1
MzcwNzEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBNTM2RkYxMDI3RUZDODAwMjhCNUFCIC8qIFJl
bmRlclJ1YnkuaCAqLzsgfTsKKwkJMTRBNTM3MDgxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1
YnlCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QTUzNzAwMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5jcHAgKi87IH07CisJ
CTE0QTUzNzA5MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBNTM3MDExMDI3RUZDODAwMjhC
NUFCIC8qIFJlbmRlclJ1YnlCYXNlLmggKi87IH07CisJCTE0QTUzNzBBMTAyN0VGQzgwMDI4QjVB
QiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0QTUzNzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNw
cCAqLzsgfTsKKwkJMTRBNTM3MEIxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlSdW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUzNzAzMTAy
N0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmggKi87IH07CisJCTE0QTUzNzBDMTAyN0VG
QzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEE1MzcwNDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVy
UnVieVRleHQuY3BwICovOyB9OworCQkxNEE1MzcwRDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVy
UnVieVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QTUzNzA1MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5oICovOyB9OworCQkx
NEE1MzcwRjEwMjdFRkYwMDAyOEI1QUIgLyogcnVieS5jc3MgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTUzNzBFMTAyN0VGRjAwMDI4QjVBQiAvKiBy
dWJ5LmNzcyAqLzsgfTsKIAkJMTRDOUE1RUEwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzlBNUU5
MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi87IH07CiAJCTE0Q0Y3OEE0MDlGNThD
QkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEEzMDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVl
LmNwcCAqLzsgfTsKIAkJMTRDRjc4QTYwOUY1OENEODAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEE1MDlG
NThDRDgwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmggKi87IH07CkBAIC01MTc0LDYgKzUxODMsMTUg
QEAKIAkJMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRsZXJz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5
N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTRBNTM2RkUxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1Ynku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTUzNkZGMTAyN0VGQzgwMDI4QjVBQiAv
KiBSZW5kZXJSdWJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1
YnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBNTM3MDAxMDI3RUZDODAwMjhC
NUFCIC8qIFJlbmRlclJ1YnlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclJ1YnlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTRBNTM3MDExMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1YnlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0QTUzNzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlSdW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEE1MzcwMzEwMjdFRkM4MDAyOEI1QUIg
LyogUmVuZGVyUnVieVJ1bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJSdWJ5UnVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTUzNzA0MTAyN0VG
QzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJSdWJ5VGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTE0QTUzNzA1MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJSdWJ5VGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEE1MzcwRTEwMjdFRkYwMDAyOEI1QUIgLyogcnVieS5jc3Mg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IHJ1YnkuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNldHRpbmdzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDRjc4NzEwOUY1ODdDQTAwRUIzNjY1IC8qIENTU1ZhbHVl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NTVmFsdWUuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNENGNzhBMzA5RjU4Q0JGMDBFQjM2NjUgLyogSlNDU1NWYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUwNCw2ICsxNDUyMiw3IEBACiAJCQkJ
QkM3NERBMzYxMDEzRjNGNzAwNzk4N0FEIC8qIFJHQkNvbG9yLmNwcCAqLywKIAkJCQlCQzc0REEz
NTEwMTNGM0Y3MDA3OTg3QUQgLyogUkdCQ29sb3IuaCAqLywKIAkJCQk4NThDMzhFRjBBQThGREQx
MDBCMTg3QTQgLyogUkdCQ29sb3IuaWRsICovLAorCQkJCTE0QTUzNzBFMTAyN0VGRjAwMDI4QjVB
QiAvKiBydWJ5LmNzcyAqLywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93
VmFsdWUuY3BwICovLAogCQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1
ZS5oICovLAogCQkJCUE4MEU3MzRDMEExOTlDNzcwMDdGQjhDNSAvKiBTdHlsZUJhc2UuY3BwICov
LApAQCAtMTQ2NDgsNiArMTQ2NjcsMTQgQEAKIAkJCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjgg
LyogUmVuZGVyUmVwbGFjZWQuaCAqLywKIAkJCQlCQ0E4NDZENDBEQzY3QTM1MDAyNkMzMDkgLyog
UmVuZGVyUmVwbGljYS5jcHAgKi8sCiAJCQkJQkNBODQ2RDUwREM2N0EzNTAwMjZDMzA5IC8qIFJl
bmRlclJlcGxpY2EuaCAqLywKKwkJCQkxNEE1MzZGRTEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVy
UnVieS5jcHAgKi8sCisJCQkJMTRBNTM2RkYxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1Ynku
aCAqLywKKwkJCQkxNEE1MzcwMDEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieUJhc2UuY3Bw
ICovLAorCQkJCTE0QTUzNzAxMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oICov
LAorCQkJCTE0QTUzNzAyMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5UnVuLmNwcCAqLywK
KwkJCQkxNEE1MzcwMzEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieVJ1bi5oICovLAorCQkJ
CTE0QTUzNzA0MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5VGV4dC5jcHAgKi8sCisJCQkJ
MTRBNTM3MDUxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlUZXh0LmggKi8sCiAJCQkJQkMz
QkU5OTAwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgKi8sCiAJCQkJQkMz
QkU5OTEwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5oICovLAogCQkJCUJDM0JF
OUFBMEU5QzI0MjAwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCAqLywKQEAgLTE3
Mjg1LDYgKzE3MzEyLDEwIEBACiAJCQkJNDE2RTI5QTYxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtl
clJlcG9ydGluZ1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUMxMTIzQzEwMkI2QzQ2MDAw
OTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MTRBNTM3MDcxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTE0QTUzNzA5MTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5QmFzZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRBNTM3MEIxMDI3RUZDODAwMjhCNUFCIC8qIFJlbmRlclJ1YnlSdW4uaCBp
biBIZWFkZXJzICovLAorCQkJCTE0QTUzNzBEMTAyN0VGQzgwMDI4QjVBQiAvKiBSZW5kZXJSdWJ5
VGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzM5MCw2ICsxNzQyMSw3IEBACiAJCQkJNDk0ODRG
QzYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uaWRsIGluIFJlc291cmNlcyAqLywK
IAkJCQk0OTQ4NEZDOTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGl4ZWxBcnJheS5pZGwgaW4g
UmVzb3VyY2VzICovLAogCQkJCTQ5NDg0RkNDMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkxNEE1MzcwRjEwMjdFRkYw
MDAyOEI1QUIgLyogcnVieS5jc3MgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTkzNDgsNiArMTkzODAs
MTAgQEAKIAkJCQk5MzkyMjYyRDEwMzIxMDdCMDA2RTdENUQgLyogSlNIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyMjYyRjEwMzIxMDg0MDA2RTdENUQg
LyogSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNUMxMTIzQjEw
MkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxNEE1MzcwNjEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxNEE1MzcwODEwMjdFRkM4MDAyOEI1QUIgLyogUmVuZGVyUnVieUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBNTM3MEExMDI3RUZDODAwMjhCNUFCIC8qIFJl
bmRlclJ1YnlSdW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBNTM3MEMxMDI3RUZDODAwMjhC
NUFCIC8qIFJlbmRlclJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDQ3NDAzKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE1
Miw2ICsxMTUzLDE3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IK
ICAgICB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShSVUJZKQorICAgIHN0YXRpYyBib29sIGxvYWRl
ZFJ1YnlTdHlsZVNoZWV0OworICAgIGlmICghbG9hZGVkUnVieVN0eWxlU2hlZXQgJiYgKGUtPmhh
c1RhZ05hbWUocnVieVRhZykgfHwgZS0+aGFzVGFnTmFtZShycFRhZykgfHwgZS0+aGFzVGFnTmFt
ZShydFRhZykpKSB7CisgICAgICAgIGxvYWRlZFJ1YnlTdHlsZVNoZWV0ID0gdHJ1ZTsKKyAgICAg
ICAgU3RyaW5nIHJ1YnlSdWxlcyA9IFN0cmluZyhydWJ5VXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHJ1YnlVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPmV4dHJhUnVieVN0eWxlU2hlZXQoKTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCogcnVieVNo
ZWV0ID0gcGFyc2VVQVNoZWV0KHJ1YnlSdWxlcyk7CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQocnVieVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBkZWZhdWx0
UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocnVieVNoZWV0LCBwcmludEV2YWwoKSk7Cisg
ICAgfQorI2VuZGlmCisKICAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwgbGFzdFVBUnVsZSA9IC0x
OwogICAgIGludCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVsZSA9IC0xOwogICAgIGlu
dCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKSW5kZXg6IFdlYkNv
cmUvY3NzL3J1YnkuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL3J1YnkuY3NzCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9jc3MvcnVieS5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworLyogcnVieSBIVE1MIGVsZW1lbnRzICovCisKK3J1YnkgPiBydCB7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgZm9udC1zaXplOiA2MCU7ICAgICAgICAgLyogbWFrZSBzbGlnaHRseSBsYXJn
ZXIgdGhhbiA1MCUgZm9yIGJldHRlciByZWFkYWJpbGl0eSAqLworICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKK30KKworcnVieSA+IHJwIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0NzQwMykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDYgKzQwNCwxOSBA
QCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5kQXBwCiAgICAgbV9saW5lQm94
ZXMuYXBwZW5kTGluZUJveChyb290Qm94KTsKICAgICByZXR1cm4gcm9vdEJveDsKIH0KKyAgICAK
K3ZvaWQgUmVuZGVyQmxvY2s6Om1vdmVDaGlsZFRvKFJlbmRlck9iamVjdCogdG8sIFJlbmRlck9i
amVjdENoaWxkTGlzdCogdG9DaGlsZExpc3QsIFJlbmRlck9iamVjdCogY2hpbGQpCit7CisgICAg
QVNTRVJUKHRoaXMgPT0gY2hpbGQtPnBhcmVudCgpKTsKKyAgICB0b0NoaWxkTGlzdC0+YXBwZW5k
Q2hpbGROb2RlKHRvLCBjaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUodGhpcywgY2hpbGQsIGZh
bHNlKSwgZmFsc2UpOworfQorCit2b2lkIFJlbmRlckJsb2NrOjptb3ZlQ2hpbGRUbyhSZW5kZXJP
YmplY3QqIHRvLCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHRvQ2hpbGRMaXN0LCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJPYmplY3QqIGNoaWxkKQoreworICAgIEFTU0VSVCh0aGlz
ID09IGNoaWxkLT5wYXJlbnQoKSk7CisgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCB0byA9PSBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkpOworICAgIHRvQ2hpbGRMaXN0LT5pbnNlcnRDaGlsZE5vZGUo
dG8sIGNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBjaGlsZCwgZmFsc2UpLCBiZWZv
cmVDaGlsZCwgZmFsc2UpOworfQogCiB2b2lkIFJlbmRlckJsb2NrOjptYWtlQ2hpbGRyZW5Ob25J
bmxpbmUoUmVuZGVyT2JqZWN0ICppbnNlcnRpb25Qb2ludCkKIHsgICAgCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDQ3NDAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZWN0Kik7CiAKKyAgICB2b2lkIG1vdmVDaGlsZFRvKFJlbmRlck9iamVjdCogdG8sIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogdG9DaGlsZExpc3QsIFJlbmRlck9iamVjdCogY2hpbGQpOworICAg
IHZvaWQgbW92ZUNoaWxkVG8oUmVuZGVyT2JqZWN0KiB0bywgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
KiB0b0NoaWxkTGlzdCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyT2JqZWN0KiBj
aGlsZCk7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbik7CiAKICAgICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDQ3NDAzKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2
ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBj
YXJld29sZi5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01Miw2ICs1MywxMSBAQAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
IAorI2lmIEVOQUJMRShSVUJZKQorI2luY2x1ZGUgIlJlbmRlclJ1YnkuaCIKKyNpbmNsdWRlICJS
ZW5kZXJSdWJ5VGV4dC5oIgorI2VuZGlmCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjZW5kaWYKQEAgLTEwMiw0
NiArMTA4LDQ0IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QKICAg
ICAgICAgcmV0dXJuIGltYWdlOwogICAgIH0KIAotICAgIFJlbmRlck9iamVjdCogbyA9IDA7Cisj
aWYgRU5BQkxFKFJVQlkpCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUocnVieVRhZykpIHsKKyAg
ICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FKQorICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYXJlbmEpIFJlbmRlclJ1YnlBc0lubGluZShub2RlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclJ1YnlBc0Jsb2NrKG5vZGUpOworICAg
IH0KKyAgICAvLyB0cmVhdCA8cnQ+IGFzIHJ1YnkgdGV4dCBPTkxZIGlmIGl0IHN0aWxsIGhhcyBp
dHMgZGVmYXVsdCB0cmVhdG1lbnQgb2YgYmxvY2sKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShy
dFRhZykgJiYgc3R5bGUtPmRpc3BsYXkoKSA9PSBCTE9DSykKKyAgICAgICAgcmV0dXJuIG5ldyAo
YXJlbmEpIFJlbmRlclJ1YnlUZXh0KG5vZGUpOyAKKyNlbmRpZgogCiAgICAgc3dpdGNoIChzdHls
ZS0+ZGlzcGxheSgpKSB7CiAgICAgICAgIGNhc2UgTk9ORToKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgSU5MSU5FOgotICAgICAgICAgICAg
byA9IG5ldyAoYXJlbmEpIFJlbmRlcklubGluZShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlcklubGluZShub2RlKTsKICAgICAg
ICAgY2FzZSBCTE9DSzoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElOTElORV9CTE9DSzoKLSAg
ICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIExJU1RfSVRFTToKLSAgICAgICAgICAgIG8gPSBuZXcgKGFy
ZW5hKSBSZW5kZXJMaXN0SXRlbShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJVTl9JTjoKICAgICAgICAgY2FzZSBDT01QQUNUOgotICAgICAgICAgICAgbyA9IG5ldyAo
YXJlbmEpIFJlbmRlckJsb2NrKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyQmxvY2sobm9kZSk7CisgICAgICAgIGNhc2UgTElT
VF9JVEVNOgorICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckxpc3RJdGVtKG5v
ZGUpOwogICAgICAgICBjYXNlIFRBQkxFOgogICAgICAgICBjYXNlIElOTElORV9UQUJMRToKLSAg
ICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZShub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlKG5vZGUp
OwogICAgICAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoKICAgICAgICAgY2FzZSBUQUJMRV9IRUFE
RVJfR1JPVVA6CiAgICAgICAgIGNhc2UgVEFCTEVfRk9PVEVSX0dST1VQOgotICAgICAgICAgICAg
byA9IG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlU2VjdGlvbihub2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlU2VjdGlvbihu
b2RlKTsKICAgICAgICAgY2FzZSBUQUJMRV9ST1c6Ci0gICAgICAgICAgICBvID0gbmV3IChhcmVu
YSkgUmVuZGVyVGFibGVSb3cobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZVJvdyhub2RlKTsKICAgICAgICAgY2FzZSBU
QUJMRV9DT0xVTU5fR1JPVVA6CiAgICAgICAgIGNhc2UgVEFCTEVfQ09MVU1OOgotICAgICAgICAg
ICAgbyA9IG5ldyAoYXJlbmEpIFJlbmRlclRhYmxlQ29sKG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGFibGVDb2wobm9kZSk7
CiAgICAgICAgIGNhc2UgVEFCTEVfQ0VMTDoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBS
ZW5kZXJUYWJsZUNlbGwobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUYWJsZUNlbGwobm9kZSk7CiAgICAgICAgIGNhc2UgVEFC
TEVfQ0FQVElPTjoKICNpZiBFTkFCTEUoV0NTUykKICAgICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0
aW9uIDE3LjEgb2YgdGhlIHNwZWMgV0FQLTIzOS1XQ1NTLTIwMDExMDI2LWEucGRmLCAKQEAgLTE0
OSwxNSArMTUzLDEzIEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QK
ICAgICAgICAgLy8gcHJpbmNpcGFsIGJsb2NrIGJveCAoW0NTUzJdIHNlY3Rpb24gOS4yLjEpLgog
ICAgICAgICBjYXNlIFdBUF9NQVJRVUVFOgogI2VuZGlmCi0gICAgICAgICAgICBvID0gbmV3IChh
cmVuYSkgUmVuZGVyQmxvY2sobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCbG9jayhub2RlKTsKICAgICAgICAgY2FzZSBCT1g6
CiAgICAgICAgIGNhc2UgSU5MSU5FX0JPWDoKLSAgICAgICAgICAgIG8gPSBuZXcgKGFyZW5hKSBS
ZW5kZXJGbGV4aWJsZUJveChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckZsZXhpYmxlQm94KG5vZGUpOwogICAgIH0KIAotICAg
IHJldHVybiBvOworICAgIHJldHVybiAwOwogfQogCiAjaWZuZGVmIE5ERUJVRyAKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA0NzQwMykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDA0IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjk1
LDYgKzI5NiwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjZWxsV2lkdGhDaGFuZ2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9jZWxsV2lkdGhDaGFuZ2VkOyB9CiAgICAgdm9pZCBzZXRDZWxsV2lkdGhDaGFu
Z2VkKGJvb2wgYiA9IHRydWUpIHsgbV9jZWxsV2lkdGhDaGFuZ2VkID0gYjsgfQogCisjaWYgRU5B
QkxFKFJVQlkpCisgICAgdmlydHVhbCBib29sIGlzUnVieSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzUnVieUJhc2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlSdW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBGSVhNRTogVW50aWwgYWxsIFNWRyByZW5k
ZXJzIGNhbiBiZSBzdWJjbGFzc2VzIG9mIFJlbmRlclNWR01vZGVsT2JqZWN0IHdlIGhhdmUKICAg
ICAvLyB0byBhZGQgU1ZHIHJlbmRlcmVyIG1ldGhvZHMgdG8gUmVuZGVyT2JqZWN0IHdpdGggYW4g
QVNTRVJUX05PVF9SRUFDSEVEKCkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUnVieS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5LmgiCisKKyNpZiBFTkFCTEUoUlVCWSkKKwor
I2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLz09
PSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgdG8gYXZvaWQgZXhjZXNzaXZlIGNvZGUgZHVwbGlj
YXRpb24gPT09CisKK3N0YXRpYyBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVieVJ1bihjb25zdCBSZW5k
ZXJPYmplY3QqIHJ1YnkpCit7CisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RD
aGlsZCgpOworICAgIGlmIChjaGlsZCAmJiBydWJ5LT5pc0FmdGVyQ29udGVudChjaGlsZCkpCisg
ICAgICAgIGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOworICAgIEFTU0VSVCghY2hp
bGQgfHwgY2hpbGQtPmlzUnVieVJ1bigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
UnVieVJ1bio+KGNoaWxkKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJSdWJ5UnVuKiBmaW5k
UnVieVJ1blBhcmVudChSZW5kZXJPYmplY3QqIGNoaWxkKQoreworICAgIHdoaWxlIChjaGlsZCAm
JiAhY2hpbGQtPmlzUnVieVJ1bigpKQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5wYXJlbnQoKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1bio+KGNoaWxkKTsKK30KKworLy89
PT0gcnVieSBhcyBpbmxpbmUgb2JqZWN0ID09PQorCitSZW5kZXJSdWJ5QXNJbmxpbmU6OlJlbmRl
clJ1YnlBc0lubGluZShOb2RlKiBub2RlKQorICAgIDogUmVuZGVySW5saW5lKG5vZGUpCit7Cit9
CisKK1JlbmRlclJ1YnlBc0lubGluZTo6flJlbmRlclJ1YnlBc0lubGluZSgpCit7Cit9CisKK2Jv
b2wgUmVuZGVyUnVieUFzSW5saW5lOjppc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoaWxkLT5pc1J1YnlUZXh0KCkK
KyAgICAgICAgfHwgY2hpbGQtPmlzUnVieVJ1bigpCisgICAgICAgIHx8IGNoaWxkLT5pc0lubGlu
ZSgpOworfQorCit2b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICAvLyBOb3RlOiAnOmFm
dGVyJyBjb250ZW50IGlzIGhhbmRsZWQgaW1wbGljaXRlbHkgYmVsb3cKKworICAgIC8vIGlmIGNo
aWxkIGlzIGEgcnVieSBydW4sIGp1c3QgYWRkIGl0IG5vcm1hbGx5CisgICAgaWYgKGNoaWxkLT5p
c1J1YnlSdW4oKSkgeworICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGNoaWxkLCBiZWZv
cmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmVmb3JlQ2hpbGQg
JiYgIWlzQWZ0ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgeworICAgICAgICAvLyBpbnNlcnQgY2hp
bGQgaW50byBydW4KKyAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZC0+aXNSdWJ5UnVuKCkpOwor
ICAgICAgICBSZW5kZXJSdWJ5UnVuKiBydW4gPSBmaW5kUnVieVJ1blBhcmVudChiZWZvcmVDaGls
ZCk7CisgICAgICAgIEFTU0VSVChydW4pOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlzIGhh
dmUgYSBydW4gYXMgcGFyZW50CisgICAgICAgIGlmIChydW4pIHsKKyAgICAgICAgICAgIHJ1bi0+
YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBBU1NFUlQoZmFsc2UpOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlz
IGhhdmUgYSBydW4gYXMgcGFyZW50IQorICAgICAgICAvLyBFbWVyZ2VuY3kgZmFsbGJhY2s6IGZh
bGwgdGhyb3VnaCBhbmQganVzdCBhcHBlbmQuCisgICAgfQorCisgICAgLy8gSWYgdGhlIG5ldyBj
aGlsZCB3b3VsZCBiZSBhcHBlbmRlZCwgdHJ5IHRvIGFkZCB0aGUgY2hpbGQgdG8gdGhlIHByZXZp
b3VzIHJ1bgorICAgIC8vIGlmIHBvc3NpYmxlLCBvciBjcmVhdGUgYSBuZXcgcnVuIG90aGVyd2lz
ZS4KKyAgICAvLyAoVGhlIFJlbmRlclJ1YnlSdW4gb2JqZWN0IHdpbGwgaGFuZGxlIHRoZSBkZXRh
aWxzKQorICAgIFJlbmRlclJ1YnlSdW4qIGxhc3RSdW4gPSBsYXN0UnVieVJ1bih0aGlzKTsKKyAg
ICBpZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRleHQoKSkgeworICAgICAgICBsYXN0
UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0aGlzKTsKKyAgICAgICAg
UmVuZGVySW5saW5lOjphZGRDaGlsZChsYXN0UnVuKTsKKyAgICB9CisgICAgbGFzdFJ1bi0+YWRk
Q2hpbGQoY2hpbGQpOworfQorCit2b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6cmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAgICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMg
KnRoaXMsIGkuZS4gYSBydWJ5IHJ1biBvciAnOmFmdGVyJyBjb250ZW50LAorICAgIC8vIGp1c3Qg
dXNlIHRoZSBub3JtYWwgcmVtb3ZlIG1ldGhvZC4KKyAgICBpZiAoY2hpbGQtPnBhcmVudCgpID09
IHRoaXMpIHsKKyAgICAgICAgQVNTRVJUKGNoaWxkLT5pc1J1YnlSdW4oKSB8fCBjaGlsZC0+aXNB
ZnRlckNvbnRlbnQoKSk7CisgICAgICAgIFJlbmRlcklubGluZTo6cmVtb3ZlQ2hpbGQoY2hpbGQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmluZCB0aGUgY29udGFpbmluZyBy
dW4KKyAgICBSZW5kZXJSdWJ5UnVuKiBydW4gPSBmaW5kUnVieVJ1blBhcmVudChjaGlsZCk7Cisg
ICAgQVNTRVJUKHJ1bik7CisgICAgcnVuLT5yZW1vdmVDaGlsZChjaGlsZCk7Cit9CisKKworLy89
PT0gcnVieSBhcyBibG9jayBvYmplY3QgPT09CisKK1JlbmRlclJ1YnlBc0Jsb2NrOjpSZW5kZXJS
dWJ5QXNCbG9jayhOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sKK30KKwor
UmVuZGVyUnVieUFzQmxvY2s6On5SZW5kZXJSdWJ5QXNCbG9jaygpCit7Cit9CisKK2Jvb2wgUmVu
ZGVyUnVieUFzQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRl
clN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hpbGQtPmlzUnVieVRleHQoKQorICAgICAg
ICB8fCBjaGlsZC0+aXNSdWJ5UnVuKCkKKyAgICAgICAgfHwgY2hpbGQtPmlzSW5saW5lKCk7Cit9
CisKK3ZvaWQgUmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgLy8gTm90ZTogJzphZnRlcicgY29u
dGVudCBpcyBoYW5kbGVkIGltcGxpY2l0ZWx5IGJlbG93CisKKyAgICAvLyBpZiBjaGlsZCBpcyBh
IHJ1YnkgcnVuLCBqdXN0IGFkZCBpdCBub3JtYWxseQorICAgIGlmIChjaGlsZC0+aXNSdWJ5UnVu
KCkpIHsKKyAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzQWZ0
ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgeworICAgICAgICAvLyBpbnNlcnQgY2hpbGQgaW50byBy
dW4KKyAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZC0+aXNSdWJ5UnVuKCkpOworICAgICAgICBS
ZW5kZXJPYmplY3QqIHJ1biA9IGJlZm9yZUNoaWxkOworICAgICAgICB3aGlsZSAocnVuICYmICFy
dW4tPmlzUnVieVJ1bigpKQorICAgICAgICAgICAgcnVuID0gcnVuLT5wYXJlbnQoKTsKKyAgICAg
ICAgaWYgKHJ1bikgeworICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hp
bGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChmYWxz
ZSk7IC8vIGJlZm9yZUNoaWxkIHNob3VsZCBhbHdheXMgaGF2ZSBhIHJ1biBhcyBwYXJlbnQhCisg
ICAgICAgIC8vIEVtZXJnZW5jeSBmYWxsYmFjazogZmFsbCB0aHJvdWdoIGFuZCBqdXN0IGFwcGVu
ZC4KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbmV3IGNoaWxkIHdvdWxkIGJlIGFwcGVuZGVkLCB0
cnkgdG8gYWRkIHRoZSBjaGlsZCB0byB0aGUgcHJldmlvdXMgcnVuCisgICAgLy8gaWYgcG9zc2li
bGUsIG9yIGNyZWF0ZSBhIG5ldyBydW4gb3RoZXJ3aXNlLgorICAgIC8vIChUaGUgUmVuZGVyUnVi
eVJ1biBvYmplY3Qgd2lsbCBoYW5kbGUgdGhlIGRldGFpbHMpCisgICAgUmVuZGVyUnVieVJ1biog
bGFzdFJ1biA9IGxhc3RSdWJ5UnVuKHRoaXMpOworICAgIGlmICghbGFzdFJ1biB8fCBsYXN0UnVu
LT5oYXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIGxhc3RSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0
aWNDcmVhdGVSdWJ5UnVuKHRoaXMpOworICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQobGFz
dFJ1bik7CisgICAgfQorICAgIGxhc3RSdW4tPmFkZENoaWxkKGNoaWxkKTsKK30KKwordm9pZCBS
ZW5kZXJSdWJ5QXNCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAg
ICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMgKnRoaXMsIGp1c3QgdXNlIHRoZSBub3JtYWwg
cmVtb3ZlIG1ldGhvZC4KKyAgICBpZiAoY2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKKyAgICAg
ICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIG9ubHkgZHVyaW5nIGRlc3RydWN0aW9uIG9mIHRoZSB3
aG9sZSBydWJ5IGVsZW1lbnQsIHRob3VnaC4KKyAgICAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNo
aWxkKGNoaWxkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNv
bnRhaW5pbmcgcnVuCisgICAgUmVuZGVyUnVieVJ1biogcnVuID0gZmluZFJ1YnlSdW5QYXJlbnQo
Y2hpbGQpOworICAgIEFTU0VSVChydW4pOworICAgIHJ1bi0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVu
ZGVyUnVieV9oCisjZGVmaW5lIFJlbmRlclJ1YnlfaAorCisjaWYgRU5BQkxFKFJVQlkpCisKKyNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIEZvbGxvd2luZyB0aGUgSFRNTCA1IHNwZWMsIHRoZSBib3gg
b2JqZWN0IG1vZGVsIGZvciBhIDxydWJ5PiBlbGVtZW50IGFsbG93cyBzZXZlcmFsIHJ1bnMgb2Yg
cnVieQorLy8gYmFzZXMgd2l0aCB0aGVpciByZXNwZWN0aXZlIHJ1YnkgdGV4dHMgbG9va3MgYXMg
Zm9sbG93czoKKy8vCisvLyAxIFJlbmRlclJ1Ynkgb2JqZWN0LCBjb3JyZXNwb25kaW5nIHRvIHRo
ZSB3aG9sZSA8cnVieT4gSFRNTCBlbGVtZW50CisvLyAgICAgIDErIFJlbmRlclJ1YnlSdW4gKGFu
b255bW91cykKKy8vICAgICAgICAgIDAgb3IgMSBSZW5kZXJSdWJ5VGV4dCAtIHNodWZmbGVkIHRv
IHRoZSBmcm9udCBpbiBvcmRlciB0byByZS11c2UgZXhpc3RpbmcgYmxvY2sgbGF5b3V0aW5nCisv
LyAgICAgICAgICAgICAgMC1uIGlubGluZSBvYmplY3QocykKKy8vICAgICAgICAgIDAgb3IgMSBS
ZW5kZXJSdWJ5QmFzZSAtIGNvbnRhaW5zIHRoZSBpbmxpbmUgb2JqZWN0cyB0aGF0IG1ha2UgdXAg
dGhlIHJ1YnkgYmFzZQorLy8gICAgICAgICAgICAgIDEtbiBpbmxpbmUgb2JqZWN0KHMpCisvLwor
Ly8gTm90ZTogPHJwPiBlbGVtZW50cyBhcmUgZGVmaW5lZCBhcyBoYXZpbmcgJ2Rpc3BsYXk6bm9u
ZScgYW5kIHRodXMgbm9ybWFsbHkgYXJlIG5vdCBhc3NpZ25lZCBhIHJlbmRlcmVyLgorCisvLyA8
cnVieT4gd2hlbiB1c2VkIGFzICdkaXNwbGF5OmlubGluZScKK2NsYXNzIFJlbmRlclJ1YnlBc0lu
bGluZSA6IHB1YmxpYyBSZW5kZXJJbmxpbmUgeworcHVibGljOgorICAgIFJlbmRlclJ1YnlBc0lu
bGluZShOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVyUnVieUFzSW5saW5lKCk7CisKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUnVi
eSAoaW5saW5lKSI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKTsKK307CisKKy8vIDxydWJ5
PiB3aGVuIHVzZWQgYXMgJ2Rpc3BsYXk6YmxvY2snIG9yICdkaXNwbGF5OmlubGluZS1ibG9jaycK
K2NsYXNzIFJlbmRlclJ1YnlBc0Jsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoK
KyAgICBSZW5kZXJSdWJ5QXNCbG9jayhOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVyUnVieUFz
QmxvY2soKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJSdWJ5IChibG9jaykiOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSdWJ5
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxv
d2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkK
KworI2VuZGlmIC8vIFJlbmRlclJ1YnlfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlC
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKKworI2lmIEVOQUJMRShSVUJZKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclJ1YnlCYXNlOjpSZW5kZXJSdWJ5QmFzZShOb2RlKiBu
b2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKK3sKKyAgICBzZXRJbmxpbmUoZmFsc2UpOwor
fQorCitSZW5kZXJSdWJ5QmFzZTo6flJlbmRlclJ1YnlCYXNlKCkKK3sKK30KKworYm9vbCBSZW5k
ZXJSdWJ5QmFzZTo6aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5
bGUqKSBjb25zdAoreworICAgIHJldHVybiBjaGlsZC0+aXNJbmxpbmUoKTsKK30KKwordm9pZCBS
ZW5kZXJSdWJ5QmFzZTo6c3BsaXRUb0xlZnQoUmVuZGVyQmxvY2sqIGxlZnRCYXNlLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwg
Y2hpbGRyZW4gdGhhdCBhcmUgYmVmb3JlICghKSBiZWZvcmVDaGlsZAorICAgIC8vIGFuZCBhcHBl
bmRzIHRoZW0gdG8gbGVmdEJhc2UuCisgICAgQVNTRVJUKGxlZnRCYXNlKTsKKworICAgIC8vIEZp
cnN0IG1ha2Ugc3VyZSB0aGF0IGJlZm9yZUNoaWxkIChpZiBzZXQpIGlzIGluZGVlZCBhIGRpcmVj
dCBjaGlsZCBvZiB0aGlzLgorICAgIC8vIEZhbGxiYWNrOiBjbGltYiB1cCB0aGUgdHJlZSB0byBt
YWtlIHN1cmUuIFRoaXMgbWF5IHJlc3VsdCBpbiBzb21ld2hhdCBpbmNvcnJlY3QgcmVuZGVyaW5n
LgorICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBoYXBwZW4/IElzIHRoZXJlIGEgYmV0dGVyL21vcmUg
Y29ycmVjdCB3YXkgdG8gc29sdmUgdGhpcz8KKyAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKyAgICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCisgICAgICAgIGJlZm9yZUNoaWxkID0gYmVm
b3JlQ2hpbGQtPnBhcmVudCgpOworCisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKKyAgICB3aGlsZSAoY2hpbGQgIT0gYmVmb3JlQ2hpbGQpIHsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbW92ZUNo
aWxkVG8obGVmdEJhc2UsIGxlZnRCYXNlLT5jaGlsZHJlbigpLCBjaGlsZCk7CisgICAgICAgIGNo
aWxkID0gbmV4dENoaWxkOworICAgIH0KK30KKwordm9pZCBSZW5kZXJSdWJ5QmFzZTo6bWVyZ2VG
cm9tTGVmdChSZW5kZXJCbG9jayogbGVmdEJhc2UpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBy
ZW1vdmVzIGFsbCBjaGlsZHJlbiBvZiBsZWZ0QmFzZSBhbmQgcHJlcGVuZHMgKCEpIHRoZW0gdG8g
dGhpcy4KKyAgICBBU1NFUlQobGVmdEJhc2UpOworCisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdFBv
cyA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gbGVmdEJhc2UtPmxh
c3RDaGlsZCgpOworICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICBsZWZ0QmFzZS0+bW92ZUNo
aWxkVG8odGhpcywgY2hpbGRyZW4oKSwgZmlyc3RQb3MsIGNoaWxkKTsKKyAgICAgICAgZmlyc3RQ
b3MgPSBjaGlsZDsKKyAgICAgICAgY2hpbGQgPSBsZWZ0QmFzZS0+bGFzdENoaWxkKCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkK
KwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgUmVuZGVyUnVieUJhc2VfaAorI2RlZmluZSBSZW5kZXJSdWJ5QmFzZV9oCisK
KyNpZiBFTkFCTEUoUlVCWSkKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyUnVieUJhc2UgOiBwdWJsaWMgUmVuZGVyQmxvY2sg
eworcHVibGljOgorICAgIFJlbmRlclJ1YnlCYXNlKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5k
ZXJSdWJ5QmFzZSgpOworCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3QgeyByZXR1cm4gIlJlbmRlclJ1YnlCYXNlIChhbm9ueW1vdXMpIjsgfQorCisgICAgdmlydHVh
bCBib29sIGlzUnVieUJhc2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsK
KworICAgIHZvaWQgc3BsaXRUb0xlZnQoUmVuZGVyQmxvY2sqIGxlZnRCYXNlLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIG1lcmdlRnJvbUxlZnQoUmVuZGVyQmxvY2sqIGxl
ZnRCYXNlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShSVUJZKQorCisjZW5kaWYgLy8gUmVuZGVyUnVieUJhc2VfaApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUnVieVJ1bi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5UnVuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKKworI2lmIEVOQUJMRShSVUJZ
KQorCisjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKKyNpbmNsdWRlICJSZW5kZXJSdWJ5VGV4
dC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJSdWJ5UnVuOjpSZW5kZXJSdWJ5UnVuKE5vZGUq
IG5vZGUpCisgICAgOiBSZW5kZXJCbG9jayhub2RlKQoreworICAgIHNldFJlcGxhY2VkKHRydWUp
OworICAgIHNldElubGluZSh0cnVlKTsKK30KKworUmVuZGVyUnVieVJ1bjo6flJlbmRlclJ1YnlS
dW4oKQoreworfQorCitpbmxpbmUgYm9vbCBSZW5kZXJSdWJ5UnVuOjpoYXNSdWJ5VGV4dCgpIGNv
bnN0Cit7CisgICAgLy8gVGhlIG9ubHkgcGxhY2Ugd2hlcmUgYSBydWJ5IHRleHQgY2FuIGJlIGlz
IGluIHRoZSBmaXJzdCBwb3NpdGlvbgorICAgIC8vIE5vdGU6IEFzIGFub255bW91cyBibG9ja3Ms
IHJ1YnkgcnVucyBkbyBub3QgaGF2ZSAnOmJlZm9yZScgb3IgJzphZnRlcicgY29udGVudCB0aGVt
c2VsdmVzLgorICAgIHJldHVybiBmaXJzdENoaWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5pc1J1YnlU
ZXh0KCk7Cit9CisKK2lubGluZSBib29sIFJlbmRlclJ1YnlSdW46Omhhc1J1YnlCYXNlKCkgY29u
c3QKK3sKKyAgICAvLyBUaGUgb25seSBwbGFjZSB3aGVyZSBhIHJ1YnkgYmFzZSBjYW4gYmUgaXMg
aW4gdGhlIGxhc3QgcG9zaXRpb24KKyAgICAvLyBOb3RlOiBBcyBhbm9ueW1vdXMgYmxvY2tzLCBy
dWJ5IHJ1bnMgZG8gbm90IGhhdmUgJzpiZWZvcmUnIG9yICc6YWZ0ZXInIGNvbnRlbnQgdGhlbXNl
bHZlcy4KKyAgICByZXR1cm4gbGFzdENoaWxkKCkgJiYgbGFzdENoaWxkKCktPmlzUnVieUJhc2Uo
KTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyUnVieVJ1bjo6aXNFbXB0eSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFoYXNSdWJ5VGV4dCgpICYmICFoYXNSdWJ5QmFzZSgpOworfQorCitpbmxpbmUg
UmVuZGVyUnVieVRleHQqIFJlbmRlclJ1YnlSdW46OnJ1YnlUZXh0KCkgY29uc3QKK3sKKyAgICBS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOworICAgIHJldHVybiBjaGlsZCAmJiBj
aGlsZC0+aXNSdWJ5VGV4dCgpID8gc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVRleHQqPihjaGlsZCkg
OiAwOworfQorCitpbmxpbmUgUmVuZGVyUnVieUJhc2UqIFJlbmRlclJ1YnlSdW46OnJ1YnlCYXNl
KCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7CisgICAg
cmV0dXJuIGNoaWxkICYmIGNoaWxkLT5pc1J1YnlCYXNlKCkgPyBzdGF0aWNfY2FzdDxSZW5kZXJS
dWJ5QmFzZSo+KGNoaWxkKSA6IDA7Cit9CisKK1JlbmRlclJ1YnlCYXNlKiBSZW5kZXJSdWJ5UnVu
OjpydWJ5QmFzZVNhZmUoKQoreworICAgIFJlbmRlclJ1YnlCYXNlKiBiYXNlID0gcnVieUJhc2Uo
KTsKKyAgICBpZiAoIWJhc2UpIHsKKyAgICAgICAgYmFzZSA9IGNyZWF0ZVJ1YnlCYXNlKCk7Cisg
ICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChiYXNlKTsKKyAgICB9CisgICAgcmV0dXJuIGJh
c2U7Cit9CisKK1JlbmRlckJsb2NrKiBSZW5kZXJSdWJ5UnVuOjpmaXJzdExpbmVCbG9jaygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVyUnVieVJ1bjo6dXBkYXRlRmly
c3RMZXR0ZXIoKQoreworfQorCitib29sIFJlbmRlclJ1YnlSdW46OmlzQ2hpbGRBbGxvd2VkKFJl
bmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hp
bGQtPmlzUnVieVRleHQoKSB8fCBjaGlsZC0+aXNJbmxpbmUoKTsKK30KKwordm9pZCBSZW5kZXJS
dWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQoreworICAgIEFTU0VSVChjaGlsZCk7CisKKyAgICAvLyBJZiBjaGlsZCBpcyBhIHJ1
YnkgdGV4dAorICAgIGlmIChjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIGlmICghYmVm
b3JlQ2hpbGQpIHsKKyAgICAgICAgICAgIC8vIFJlbmRlclJ1YnkgaGFzIGFscmVhZHkgYXNjZXJ0
YWluZWQgdGhhdCB3ZSBjYW4gYWRkIHRoZSBjaGlsZCBoZXJlLgorICAgICAgICAgICAgQVNTRVJU
KCFoYXNSdWJ5VGV4dCgpKTsKKyAgICAgICAgICAgIC8vIHByZXBlbmQgcnVieSB0ZXh0cyBhcyBm
aXJzdCBjaGlsZAorICAgICAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBmaXJz
dENoaWxkKCkpOworICAgICAgICB9ICBlbHNlIGlmIChiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgp
KSB7CisgICAgICAgICAgICAvLyBOZXcgdGV4dCBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSBhbm90
aGVyLgorICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBuZXcgdGV4dCB0YWtlcyB0aGUg
cGxhY2Ugb2YgdGhlIG9sZCBvbmUsIGFuZAorICAgICAgICAgICAgLy8gdGhlIG9sZCB0ZXh0IGdv
ZXMgaW50byBhIG5ldyBydW4gdGhhdCBpcyBpbnNlcnRlZCBhcyBuZXh0IHNpYmxpbmcuCisgICAg
ICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOworICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBydWJ5ID0gcGFyZW50KCk7CisgICAgICAgICAgICBBU1NFUlQocnVi
eS0+aXNSdWJ5KCkpOworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIG5ld1J1biA9IHN0YXRpY0Ny
ZWF0ZVJ1YnlSdW4ocnVieSk7CisgICAgICAgICAgICBydWJ5LT5hZGRDaGlsZChuZXdSdW4sIG5l
eHRTaWJsaW5nKCkpOworICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgcnVieSB0ZXh0IGFuZCBt
b3ZlIHRoZSBvbGQgb25lIHRvIHRoZSBuZXcgcnVuCisgICAgICAgICAgICAvLyBOb3RlOiBEb2lu
ZyBpdCBpbiB0aGlzIG9yZGVyIGFuZCBub3QgdXNpbmcgUmVuZGVyUnVieVJ1bidzIG1ldGhvZHMs
CisgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBhdXRvbWF0aWMgcmVtb3ZhbCBvZiB0
aGUgcnVieSBydW4gaW4gY2FzZSB0aGVyZSBpcyBubworICAgICAgICAgICAgLy8gb3RoZXIgY2hp
bGQgYmVzaWRlcyB0aGUgb2xkIHJ1YnkgdGV4dC4KKyAgICAgICAgICAgIFJlbmRlckJsb2NrOjph
ZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnJl
bW92ZUNoaWxkKGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIG5ld1J1bi0+YWRkQ2hpbGQoYmVm
b3JlQ2hpbGQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGhhc1J1YnlC
YXNlKCkpOyAvLyBPdGhlcndpc2UgYmVmb3JlQ2hpbGQgd291bGQgYmUgYm9ya2VkLgorICAgICAg
ICAgICAgLy8gSW5zZXJ0aW9uIGJlZm9yZSBhIHJ1YnkgYmFzZSBvYmplY3QuCisgICAgICAgICAg
ICAvLyBJbiB0aGlzIGNhc2Ugd2UgbmVlZCBpbnNlcnQgYSBuZXcgcnVuIGJlZm9yZSB0aGUgY3Vy
cmVudCBvbmUgYW5kIHNwbGl0IHRoZSBiYXNlLgorICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
dWJ5ID0gcGFyZW50KCk7CisgICAgICAgICAgICBSZW5kZXJSdWJ5UnVuKiBuZXdSdW4gPSBzdGF0
aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOworICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQobmV3UnVu
LCB0aGlzKTsKKyAgICAgICAgICAgIG5ld1J1bi0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAg
ICAgcnVieUJhc2VTYWZlKCktPnNwbGl0VG9MZWZ0KG5ld1J1bi0+cnVieUJhc2VTYWZlKCksIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGNoaWxkIGlz
IG5vdCBhIHRleHQgLT4gaW5zZXJ0IGl0IGludG8gdGhlIGJhc2UKKyAgICAgICAgLy8gKGFwcGVu
ZCBpdCBpbnN0ZWFkIGlmIGJlZm9yZUNoaWxkIGlzIHRoZSBydWJ5IHRleHQpCisgICAgICAgIGlm
IChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgpKQorICAgICAgICAgICAg
YmVmb3JlQ2hpbGQgPSAwOworICAgICAgICBydWJ5QmFzZVNhZmUoKS0+YWRkQ2hpbGQoY2hpbGQs
IGJlZm9yZUNoaWxkKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyUnVieVJ1bjo6cmVtb3ZlQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBydWJ5
IHRleHQsIHRoZW4gbWVyZ2UgdGhlIHJ1YnkgYmFzZSB3aXRoIHRoZSBiYXNlIG9mCisgICAgLy8g
dGhlIHJpZ2h0IHNpYmxpbmcgcnVuLCBpZiBwb3NzaWJsZS4KKyAgICBpZiAoIWRvY3VtZW50QmVp
bmdEZXN0cm95ZWQoKSAmJiBjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7CisgICAgICAgIFJlbmRlclJ1
YnlCYXNlKiBiYXNlID0gcnVieUJhc2UoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByaWdodE5l
aWdoYm91ciA9IG5leHRTaWJsaW5nKCk7CisgICAgICAgIGlmIChiYXNlICYmIHJpZ2h0TmVpZ2hi
b3VyICYmIHJpZ2h0TmVpZ2hib3VyLT5pc1J1YnlSdW4oKSkgeworICAgICAgICAgICAgLy8gUnVi
eSBydW4gd2l0aG91dCBhIGJhc2UgY2FuIGhhcHBlbiBvbmx5IGF0IHRoZSBmaXJzdCBydW4uCisg
ICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1bio+KHJpZ2h0TmVpZ2hi
b3VyKS0+aGFzUnVieUJhc2UoKSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJSdWJ5
UnVuKj4ocmlnaHROZWlnaGJvdXIpLT5ydWJ5QmFzZVNhZmUoKS0+bWVyZ2VGcm9tTGVmdChiYXNl
KTsKKyAgICAgICAgICAgIC8vIFRoZSBub3cgZW1wdHkgcnVieSBiYXNlIHdpbGwgYmUgcmVtb3Zl
ZCBiZWxvdy4KKyAgICAgICAgfQorICAgIH0KKworICAgIFJlbmRlckJsb2NrOjpyZW1vdmVDaGls
ZChjaGlsZCk7CisKKyAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgeworICAgICAg
ICAvLyBDaGVjayBpZiBvdXIgYmFzZSAoaWYgYW55KSBpcyBub3cgZW1wdHkuIElmIHNvLCBkZXN0
cm95IGl0LgorICAgICAgICBSZW5kZXJCbG9jayogYmFzZSA9IHJ1YnlCYXNlKCk7CisgICAgICAg
IGlmIChiYXNlICYmICFiYXNlLT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJs
b2NrOjpyZW1vdmVDaGlsZChiYXNlKTsKKyAgICAgICAgICAgIGJhc2UtPmRlbGV0ZUxpbmVCb3hU
cmVlKCk7CisgICAgICAgICAgICBiYXNlLT5kZXN0cm95KCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiBhbnkgb2YgdGhlIGFib3ZlIGxlYXZlcyB0aGUgcnVuIGVtcHR5LCBkZXN0cm95IGl0
IGFzIHdlbGwKKyAgICAgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICAgICAgcGFyZW50KCkt
PnJlbW92ZUNoaWxkKHRoaXMpOworICAgICAgICAgICAgZGVsZXRlTGluZUJveFRyZWUoKTsKKyAg
ICAgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVuZGVyUnVieUJh
c2UqIFJlbmRlclJ1YnlSdW46OmNyZWF0ZVJ1YnlCYXNlKCkgY29uc3QKK3sKKyAgICBSZW5kZXJS
dWJ5QmFzZSogcmIgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclJ1YnlCYXNlKGRvY3VtZW50
KCkgLyogYW5vbnltb3VzICovKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgp
KTsKKyAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CisgICAgbmV3U3R5bGUtPnNldFRl
eHRBbGlnbihDRU5URVIpOyAvLyBGSVhNRTogdXNlIFdFQktJVF9DRU5URVI/CisgICAgcmItPnNl
dFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJiOworfQorCitSZW5kZXJS
dWJ5UnVuKiBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9i
amVjdCogcGFyZW50UnVieSkKK3sKKyAgICBBU1NFUlQocGFyZW50UnVieSAmJiBwYXJlbnRSdWJ5
LT5pc1J1YnkoKSk7CisgICAgUmVuZGVyUnVieVJ1biogcnIgPSBuZXcgKHBhcmVudFJ1YnktPnJl
bmRlckFyZW5hKCkpIFJlbmRlclJ1YnlSdW4ocGFyZW50UnVieS0+ZG9jdW1lbnQoKSAvKiBhbm9u
eW1vdXMgKi8pOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFJ1YnktPnN0eWxl
KCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CisgICAgcnItPnNl
dFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJyOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlSdW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVy
UnVieVJ1bl9oCisjZGVmaW5lIFJlbmRlclJ1YnlSdW5faAorCisjaWYgRU5BQkxFKFJVQlkpCisK
KyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlbmRlclJ1YnlCYXNlOworY2xhc3MgUmVuZGVyUnVieVRleHQ7CisKKy8vIFJlbmRlclJ1YnlS
dW4gYXJlICdpbmxpbmUtYmxvY2svdGFibGUnIGxpa2Ugb2JqZWN0cyxhbmQgd3JhcCBhIHNpbmds
ZSBwYWlyaW5nIG9mIGEgcnVieSBiYXNlIHdpdGggaXRzIHJ1YnkgdGV4dChzKS4KKy8vIFNlZSBS
ZW5kZXJSdWJ5LmggZm9yIGZ1cnRoZXIgY29tbWVudHMgb24gdGhlIHN0cnVjdHVyZQorCitjbGFz
cyBSZW5kZXJSdWJ5UnVuIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5k
ZXJSdWJ5UnVuKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJSdWJ5UnVuKCk7CisKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUnVi
eVJ1biAoYW5vbnltb3VzKSI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlSdW4oKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5saW5lQmxvY2tPcklubGlu
ZVRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBoYXNSdWJ5VGV4dCgp
IGNvbnN0OworICAgIGJvb2wgaGFzUnVieUJhc2UoKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdDsKKyAgICBSZW5kZXJSdWJ5VGV4dCogcnVieVRleHQoKSBjb25zdDsKKyAgICBSZW5k
ZXJSdWJ5QmFzZSogcnVieUJhc2UoKSBjb25zdDsKKyAgICBSZW5kZXJSdWJ5QmFzZSogcnVieUJh
c2VTYWZlKCk7IC8vIGNyZWF0ZXMgdGhlIGJhc2UgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKTsKKworICAgIHZpcnR1YWwgUmVuZGVyQmxv
Y2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0
TGV0dGVyKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyUnVieVJ1biogc3RhdGljQ3JlYXRlUnVieVJ1
bihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudFJ1YnkpOworCitwcm90ZWN0ZWQ6CisgICAgUmVu
ZGVyUnVieUJhc2UqIGNyZWF0ZVJ1YnlCYXNlKCkgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlmIC8vIFJlbmRlclJ1
YnlSdW5faApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
UnVieVRleHQuaCIKKworI2lmIEVOQUJMRShSVUJZKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlbmRlclJ1YnlUZXh0OjpSZW5kZXJSdWJ5VGV4dChOb2RlKiBub2RlKQorICAgIDogUmVuZGVy
QmxvY2sobm9kZSkKK3sKK30KKworUmVuZGVyUnVieVRleHQ6On5SZW5kZXJSdWJ5VGV4dCgpCit7
Cit9CisKK2Jvb2wgUmVuZGVyUnVieVRleHQ6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCog
Y2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gY2hpbGQtPmlzSW5saW5l
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShSVUJZ
KQorCisKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3Qu
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFJlbmRlclJ1YnlUZXh0X2gKKyNkZWZpbmUgUmVuZGVyUnVieVRleHRf
aAorCisjaWYgRU5BQkxFKFJVQlkpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclJ1YnlUZXh0IDogcHVibGljIFJlbmRlckJs
b2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJSdWJ5VGV4dChOb2RlKik7CisgICAgdmlydHVhbCB+
UmVuZGVyUnVieVRleHQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJSdWJ5VGV4dCI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c1J1YnlUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGlz
Q2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCWSkKKworI2VuZGlm
IC8vIFJlbmRlclJ1YnlUZXh0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNp
b24gNDc0MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OCwxMiArNzgsMTUgQEAgcHVibGljOgogICAgIC8vIFJlbmRlclRoZW1lTWFjLmNw
cCBmb3IgTWFjIE9TIFguCiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHJldHVybiB0aGUgdGhlbWUn
cyBleHRyYSBzdHlsZSBzaGVldHMgcnVsZXMsIHRvIGxldCBlYWNoIHBsYXRmb3JtCi0gICAgLy8g
YWRqdXN0IHRoZSBkZWZhdWx0IENTUyBydWxlcyBpbiBodG1sLmNzcywgcXVpcmtzLmNzcywgb3Ig
bWVkaWFDb250cm9scy5jc3MKKyAgICAvLyBhZGp1c3QgdGhlIGRlZmF1bHQgQ1NTIHJ1bGVzIGlu
IGh0bWwuY3NzLCBxdWlya3MuY3NzLCBtZWRpYUNvbnRyb2xzLmNzcywgb3IgcnVieS5jc3MKICAg
ICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5n
KCk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKSB7IHJldHVy
biBTdHJpbmcoKTsgfQogI2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBleHRy
YU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CiAjZW5kaWYK
KyNpZiBFTkFCTEUoUlVCWSkKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVJ1YnlTdHlsZVNoZWV0
KCkgeyByZXR1cm4gU3RyaW5nKCk7IH07CisjZW5kaWYKIAogICAgIC8vIEEgbWV0aG9kIHRvIG9i
dGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdp
bGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKICAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUg
ZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFk
aW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>41482</attachid>
            <date>2009-10-19 23:39:07 -0700</date>
            <delta_ts>2009-10-20 02:23:43 -0700</delta_ts>
            <desc>dummy file to disable obsolete patch files</desc>
            <filename>about</filename>
            <type>text/plain</type>
            <size>117</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiI+PGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0
bWw+
</data>
<flag name="review"
          id="22889"
          type_id="1"
          status="-"
          setter="rolandsteiner"
    />
    <flag name="commit-queue"
          id="22890"
          type_id="3"
          status="-"
          setter="rolandsteiner"
    />
          </attachment>
      

    </bug>

</bugzilla>