<?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>98913</bug_id>
          
          <creation_ts>2012-10-10 08:49:35 -0700</creation_ts>
          <short_desc>Change transformation precision from double to float</short_desc>
          <delta_ts>2012-10-19 04:51:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gabor Rapcsanyi">rgabor</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarrin</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>kbr</cc>
    
    <cc>leviw</cc>
    
    <cc>peter+ews</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>738992</commentid>
    <comment_count>0</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2012-10-10 08:49:35 -0700</bug_when>
    <thetext>I created this bug to discuss do we really need the double precision here. If not we should change it back to float or make a typedef or something. I would like to do that because there are some functions here which could be optimized with ARM SIMD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739015</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-10 09:20:13 -0700</bug_when>
    <thetext>It used to be floats and was converted to doubles. Did you go through the file history?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739161</commentid>
    <comment_count>2</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2012-10-10 11:29:24 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; It used to be floats and was converted to doubles. Did you go through the file history?

There were a lot of file renaming and code moving etc but yes I checked the history of some files, but I still don&apos;t see when it changes to double from float.
You mentioned in your mail this bug (https://bugs.webkit.org/show_bug.cgi?id=6868) which I checked as well but when I watched the patch closer I still saw double parameters which were there before it.
So I tracked back the AffineTransform.h to see when it started using double but I&apos;ve just found this:
http://trac.webkit.org/browser/trunk/WebCore/kwq/KWQWMatrix.h?annotate=blame&amp;rev=9585
Which works with doubles.

I also checked the history of TransformationMatrix.h and I found this:
http://trac.webkit.org/browser/trunk/WebCore/rendering/style/RenderStyle.h?annotate=blame&amp;rev=34535
It contains the MatrixTransformOperation class which is still using double parameters.

So I&apos;m a little bit confused when we started using doubles for the transformations and why. But to make it clear I would like to change all doubles in Source/WebCore/platform/graphics/transforms to float or maybe it would be better to a typedef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739551</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-10-10 20:27:13 -0700</bug_when>
    <thetext>One thing we should be careful of is propagation of rounding errors.  For WebKit&apos;s purposes, it may not matter as the various floating point operations eventually convert into whole pixel values, but I have seen cases in scientific computing where the vagaries of floating point/double conversion lead to difficult to debug problems.

If we aren&apos;t doing much math where floating point values are being raised to large powers, or trigonometric functions results are being chained together there may be little downside.

I guess the layout tests will show whether this change has any correctness implications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739553</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-10 20:33:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; One thing we should be careful of is propagation of rounding errors.  For WebKit&apos;s purposes, it may not matter as the various floating point operations eventually convert into whole pixel values, but I have seen cases in scientific computing where the vagaries of floating point/double conversion lead to difficult to debug problems.
&gt; 
&gt; If we aren&apos;t doing much math where floating point values are being raised to large powers, or trigonometric functions results are being chained together there may be little downside.

There are certainly cases where rounding errors would be compounded; we map points and rects through accumulated transforms for hit testing etc, and it&apos;s not hard to create content (like almost edge-on layers) where rounding matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739760</commentid>
    <comment_count>5</comment_count>
      <attachid>168180</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2012-10-11 02:48:06 -0700</bug_when>
    <thetext>Created attachment 168180
Draft

I made a draft patch to see what needs to be changed with the new precision and I tried it on Qt port.
Surprisingly there are just 47 fails mostly SVG tests. And these fails are because of -0.0 and 0.0 difference or just one or two pixel differences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740088</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 10:10:55 -0700</bug_when>
    <thetext>Attachment 168180 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/wtf/Platform.h&apos;, u&apos;Source/WebCo...&quot; exit_code: 1
Source/WebCore/platform/graphics/transforms/ScaleTransformOperation.cpp:36:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/ScaleTransformOperation.cpp:37:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:64:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:64:  The parameter name &quot;c&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:64:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:64:  The parameter name &quot;f&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:70:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:70:  The parameter name &quot;c&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:70:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/AffineTransform.h:70:  The parameter name &quot;f&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:76:  SMALL_NUMBER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp:266:  l is incorrectly named. Don&apos;t use the single letter &apos;l&apos; as an identifier name.  [readability/naming] [4]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:82:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:83:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:103:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/transforms/TransformationMatrix.h:253:  The parameter name &quot;p&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 19 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740136</commentid>
    <comment_count>7</comment_count>
      <attachid>168180</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 10:52:57 -0700</bug_when>
    <thetext>Comment on attachment 168180
Draft

Attachment 168180 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14258639</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740140</commentid>
    <comment_count>8</comment_count>
      <attachid>168180</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-11 10:57:06 -0700</bug_when>
    <thetext>Comment on attachment 168180
Draft

Attachment 168180 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14258638</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740156</commentid>
    <comment_count>9</comment_count>
      <attachid>168180</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-11 11:36:15 -0700</bug_when>
    <thetext>Comment on attachment 168180
Draft

Attachment 168180 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14264040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740160</commentid>
    <comment_count>10</comment_count>
      <attachid>168180</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-11 11:55:01 -0700</bug_when>
    <thetext>Comment on attachment 168180
Draft

Attachment 168180 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14256619</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740745</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-12 02:21:31 -0700</bug_when>
    <thetext>I strongly suggest against a typedef.

We&apos;ve made this mistake in Qt, we introduced a &quot;qreal&quot; type that was typedef&apos;ed to double on &quot;desktop&quot; platforms and &quot;float&quot; on &quot;embedded&quot;/&quot;mobile&quot; platforms (ARM based mostly). I&apos;m saying it was a mistake because the introduced inconsistency brought in many issues.

We&apos;ve had a thread on the Qt development mailing list a while ago about trying to get rid of the typedef. The thread starts here:

http://lists.qt-project.org/pipermail/development/2012-February/002015.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742089</commentid>
    <comment_count>12</comment_count>
      <attachid>168725</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2012-10-15 08:54:00 -0700</bug_when>
    <thetext>Created attachment 168725
transform.html

Performance test for transformations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742091</commentid>
    <comment_count>13</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2012-10-15 08:55:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I strongly suggest against a typedef.
&gt; 
&gt; We&apos;ve made this mistake in Qt, we introduced a &quot;qreal&quot; type that was typedef&apos;ed to double on &quot;desktop&quot; platforms and &quot;float&quot; on &quot;embedded&quot;/&quot;mobile&quot; platforms (ARM based mostly). I&apos;m saying it was a mistake because the introduced inconsistency brought in many issues.
&gt; 
&gt; We&apos;ve had a thread on the Qt development mailing list a while ago about trying to get rid of the typedef. The thread starts here:
&gt; 
&gt; http://lists.qt-project.org/pipermail/development/2012-February/002015.html

Ok, I&apos;ve read this thread and now I see 2 solutions, (a) is to make template classes as somebody suggested on the Qt mailing list and (b) is that change everything to floats in transformations.

I think the first thing what we should discuss is where we really need the double precision. So if there is a part of WebKit which really needs this extra precision then we shouldn&apos;t chose (b).

The other thing is that your system APIs (Darin said OS X as well) using doubles so the conversions may take the time save of floats.
Memory usage is another important thing and I would like to do some measures to see the benefit of floats.

I uploaded a test (transform.html) which I wrote to see the performance gain of floats. It&apos;s using css transformations on small rectangles. The bottleneck was of course the matrix multiplication in transformations, but unfortunately I didn&apos;t see any performance differences between the doubles or floats. 

I want to do some memory measurements as well. I hope I would see more differences there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742139</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-15 10:16:01 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=168725) [details]
&gt; transform.html
&gt; 
&gt; Performance test for transformations.

Profiling this shows that it spends 12% of its time in cssText(), and about 1.5% in TransformationMatrix::multiply(), on desktop at least. So multiply() is far from being the bottleneck. dtoa() takes more time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745217</commentid>
    <comment_count>15</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2012-10-18 06:38:15 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; Created an attachment (id=168725) [details] [details]
&gt; &gt; transform.html
&gt; &gt; 
&gt; &gt; Performance test for transformations.
&gt; 
&gt; Profiling this shows that it spends 12% of its time in cssText(), and about 1.5% in TransformationMatrix::multiply(), on desktop at least. So multiply() is far from being the bottleneck. dtoa() takes more time.

Well I did some more investigation in this area.
I measured the speed and memory gain with this transform.html on a Pandaboard.

As I wrote above there was no big speed differences between the float and double types even on this specific test. I changed the matrix multiplication to NEON code to see the improvement but it wasn&apos;t too much.

Speed test:
Double: ~6.03 fps
Float:  ~6.32 fps
NEON:   ~6.6 fps

I also did some memory measurements on this test with Smaps.

libWebCore memory usage:
Float: 14 540 kB
Double:14 580 kB
Difference: 40 kB save

Heap usage:
Float: 59 352 kB
Double:59 792 kB
Difference: 440 kb save

Sum memory usage:
Float: 95 864 kB
Double:96 368 kB
Difference: 504 kb save

As we can see the memory difference is not too much.

Summarize all of these results I think changing to float the doubles is not worth. There weren&apos;t too much performance gain even with the neonized matrix multiplication on a specific test. It would only worth because of the memory savings but it&apos;s not too much either.

So I&apos;ll close this bug with wontfix if there are no objections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745370</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-10-18 10:40:51 -0700</bug_when>
    <thetext>&gt; So I&apos;ll close this bug with wontfix if there are no objections.

Sounds good to me.

Something you may wanna do is check if the compiler uses VFP vector and mixed-mode operations. They take the same time per operations but at least it takes fewer opcodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746220</commentid>
    <comment_count>17</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2012-10-19 04:51:20 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; So I&apos;ll close this bug with wontfix if there are no objections.
&gt; 
&gt; Sounds good to me.
&gt; 
&gt; Something you may wanna do is check if the compiler uses VFP vector and mixed-mode operations. They take the same time per operations but at least it takes fewer opcodes.

I tried it with VFP and it was 6.38 fps so a little bit faster.
Now I&apos;m closing the bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168180</attachid>
            <date>2012-10-11 02:48:06 -0700</date>
            <delta_ts>2012-10-11 11:55:01 -0700</delta_ts>
            <desc>Draft</desc>
            <filename>0001-Draft.patch</filename>
            <type>text/plain</type>
            <size>80082</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">RnJvbSA5ZDZhMDFlZTA5MjZlNDQ4ZDQ4N2I1OGE3MGYxYjdhMDIzOGE5M2Y2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYXBjc2FueWkgR2Fib3IgPHJnYWJvckBjdXRlNC5pbmYudS1z
emVnZWQuaHU+CkRhdGU6IFRodSwgMTEgT2N0IDIwMTIgMDk6NDM6MzggKzAyMDAKU3ViamVjdDog
W1BBVENIXSBEcmFmdAoKLS0tCiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgIDQgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmxvYXRDb252
ZXJzaW9uLmggICAgICAgICAgfCAgICA2ICsKIC4uLi9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0
aW9uVXRpbGl0aWVzLmggICAgICAgIHwgICAgNSArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcCAgICB8ICAgMTMgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwICAgICB8ICAgIDUgKwogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmggICAgICAgfCAgICAyICsKIC4uLi9ncmFw
aGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAgICAgICAgIHwgICA3MCArKysrLS0t
LQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmggfCAg
IDcwICsrKystLS0tCiAuLi4vdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5o
ICAgICAgICB8ICAgIDIgKy0KIC4uLi90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcCAgICAgIHwgICAgMiArLQogLi4uL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24uaCAgICAgICAgfCAgICAyICstCiAuLi4vdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwICAgICAgICB8ICAgIDIgKy0KIC4uLi9ncmFwaGljcy90cmFuc2Zvcm1z
L01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIHwgICAxOCArLQogLi4uL3RyYW5zZm9ybXMvUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICAgfCAgICA4ICstCiAuLi4vdHJhbnNmb3Jt
cy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oICAgICB8ICAgIDIgKy0KIC4uLi90cmFu
c2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgICAgICAgIHwgICAxNCArLQogLi4u
L2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggfCAgIDI0ICsr
LS0KIC4uLi90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAgICAgICAgIHwg
ICAxNCArLQogLi4uL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCAgfCAgIDIwICstCiAuLi4vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0
aW9uLmNwcCB8ICAgIDggKy0KIC4uLi9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1P
cGVyYXRpb24uaCAgIHwgICAxNCArLQogLi4uL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
T3BlcmF0aW9uLmggICAgICAgfCAgICAyICstCiAuLi4vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1PcGVyYXRpb25zLmNwcCAgICB8ICAgIDYgKy0KIC4uLi9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybU9wZXJhdGlvbnMuaCAgICAgIHwgICAgNiArLQogLi4uL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwICAgfCAgMjA2ICsrKysrKysrKystLS0tLS0t
LS0tCiAuLi4vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oICAgICB8
ICAxNjAgKysrKysrKystLS0tLS0tLQogLi4uL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcCAgICAgfCAgICAyICstCiAuLi4vdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCAgICAgICB8ICAgIDggKy0KIDI5IGZpbGVzIGNoYW5nZWQsIDM2MyBp
bnNlcnRpb25zKCspLCAzMzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggNjkyZjhhNi4u
M2YwN2E2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC0xMTg2LDQgKzExODYsOCBAQAogI2VuZGlmCiAjZW5k
aWYKIAorCit0eXBlZGVmIGZsb2F0IEZsb2F0UHJlY2lzaW9uOworCisKICNlbmRpZiAvKiBXVEZf
UGxhdGZvcm1faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmxvYXRD
b252ZXJzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GbG9hdENvbnZlcnNpb24uaApp
bmRleCBmYjc2ODMzLi40ZTg3YmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GbG9hdENvbnZlcnNpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GbG9hdENv
bnZlcnNpb24uaApAQCAtNDQsNiArNDQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CiAgICAgfQogCisgICAgdGVtcGxh
dGU8PgorICAgIGlubGluZSBmbG9hdCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZsb2F0IG51bWJl
cikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCiAjaWYgVVNFKENHKQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgQ0dGbG9hdCBuYXJyb3dQcmVjaXNpb25Ub0NH
RmxvYXQoVCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24v
QW5pbWF0aW9uVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24v
QW5pbWF0aW9uVXRpbGl0aWVzLmgKaW5kZXggMWIwZmUzZS4uYWU1MjgxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMu
aApAQCAtNTIsNiArNTIsMTEgQEAgaW5saW5lIGZsb2F0IGJsZW5kKGZsb2F0IGZyb20sIGZsb2F0
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9t
ICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CiB9CiAKK2lubGluZSBGbG9hdFByZWNpc2lvbiBi
bGVuZChGbG9hdFByZWNpc2lvbiBmcm9tLCBGbG9hdFByZWNpc2lvbiB0bywgRmxvYXRQcmVjaXNp
b24gcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNz
OworfQorCiBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgYmxlbmQoRnJhY3Rpb25hbExheW91
dFVuaXQgZnJvbSwgRnJhY3Rpb25hbExheW91dFVuaXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsg
IAogICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKaW5kZXggZDNjY2M4MC4u
OTExNGQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5jcHAKQEAgLTc1LDE1ICs3NSwxNSBAQCB2b2lkIEZsb2F0UG9pbnQ6Om1vdmVCeShjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHBvaW50KQogCiBGbG9hdFBvaW50IEZsb2F0UG9pbnQ6
Om1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgY29uc3QK
IHsKLSAgICBkb3VibGUgbmV3WCwgbmV3WTsKLSAgICB0cmFuc2Zvcm0ubWFwKHN0YXRpY19jYXN0
PGRvdWJsZT4obV94KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3kpLCBuZXdYLCBuZXdZKTsKKyAg
ICBGbG9hdFByZWNpc2lvbiBuZXdYLCBuZXdZOworICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nh
c3Q8RmxvYXRQcmVjaXNpb24+KG1feCksIHN0YXRpY19jYXN0PEZsb2F0UHJlY2lzaW9uPihtX3kp
LCBuZXdYLCBuZXdZKTsKICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uKG5ld1gsIG5ld1kpOwog
fQogCiBGbG9hdFBvaW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSBjb25zdAogewotICAgIGRvdWJsZSBuZXdYLCBuZXdZ
OwotICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3gpLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1feSksIG5ld1gsIG5ld1kpOworICAgIEZsb2F0UHJlY2lzaW9uIG5ld1gsIG5l
d1k7CisgICAgdHJhbnNmb3JtLm1hcChzdGF0aWNfY2FzdDxGbG9hdFByZWNpc2lvbj4obV94KSwg
c3RhdGljX2Nhc3Q8RmxvYXRQcmVjaXNpb24+KG1feSksIG5ld1gsIG5ld1kpOwogICAgIHJldHVy
biBuYXJyb3dQcmVjaXNpb24obmV3WCwgbmV3WSk7CiB9CiAKQEAgLTkyLDYgKzkyLDExIEBAIEZs
b2F0UG9pbnQgRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSkK
ICAgICByZXR1cm4gRmxvYXRQb2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHkpKTsKIH0KIAorRmxvYXRQb2ludCBGbG9hdFBvaW50OjpuYXJyb3dQ
cmVjaXNpb24oZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICByZXR1cm4gRmxvYXRQb2ludCh4LCB5
KTsKK30KKwogZmxvYXQgZmluZFNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQmIGMpCiB7CiAgICAgaWYgKHAyLngoKSA9PSBwMS54KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKaW5kZXggNThkYjZi
YS4uMTk3YTE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaApAQCAtODIsNiArODIsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEZsb2F0UG9pbnQg
emVybygpIHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQogCiAgICAgc3RhdGljIEZsb2F0UG9pbnQg
bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSk7CisgICAgLy8gbmVlZGVkIHdoZW4g
dGhlIHBvcnQgaXMgdXNpbmcgZmxvYXRzIGluIHRyYW5zZm9ybWF0aW9ucworICAgIHN0YXRpYyBG
bG9hdFBvaW50IG5hcnJvd1ByZWNpc2lvbihmbG9hdCB4LCBmbG9hdCB5KTsKIAogICAgIGZsb2F0
IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4g
bV95OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFNpemUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNw
cAppbmRleCAyYjYyYTlkLi5mMDRiNjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKQEAgLTY1LDQgKzY1LDkgQEAgRmxvYXRTaXplIEZsb2F0
U2l6ZTo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKICAgICBy
ZXR1cm4gRmxvYXRTaXplKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGhlaWdodCkpOwogfQogCitGbG9hdFNpemUgRmxvYXRTaXplOjpuYXJyb3dQ
cmVjaXNpb24oZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3sKKyAgICByZXR1cm4gRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0U2l6ZS5oCmluZGV4IDJjOWNjMTguLjhjNjY2MjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCkBAIC03MCw2ICs3MCw4IEBAIHB1
YmxpYzoKICAgICBGbG9hdFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmKTsKIAogICAg
IHN0YXRpYyBGbG9hdFNpemUgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhl
aWdodCk7CisgICAgLy8gbmVlZGVkIHdoZW4gdGhlIHBvcnQgaXMgdXNpbmcgZmxvYXRzIGluIHRy
YW5zZm9ybWF0aW9ucworICAgIHN0YXRpYyBGbG9hdFNpemUgbmFycm93UHJlY2lzaW9uKGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQpOwogCiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9CiAgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvQWZmaW5lVHJhbnNmb3JtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAppbmRleCA0MTMxY2E0Li5iMzI0ZmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCkBAIC00MSw3ICs0MSw3IEBAIEFmZmluZVRy
YW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKCkKICAgICBzZXRNYXRyaXgoMSwgMCwgMCwgMSwgMCwg
MCk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKGRvdWJsZSBhLCBkb3Vi
bGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCitBZmZpbmVUcmFu
c2Zvcm06OkFmZmluZVRyYW5zZm9ybShGbG9hdFByZWNpc2lvbiBhLCBGbG9hdFByZWNpc2lvbiBi
LCBGbG9hdFByZWNpc2lvbiBjLCBGbG9hdFByZWNpc2lvbiBkLCBGbG9hdFByZWNpc2lvbiBlLCBG
bG9hdFByZWNpc2lvbiBmKQogewogICAgIHNldE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKTsKIH0K
QEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBBZmZpbmVUcmFuc2Zvcm06Om1ha2VJZGVudGl0eSgpCiAg
ICAgc2V0TWF0cml4KDEsIDAsIDAsIDEsIDAsIDApOwogfQogCi12b2lkIEFmZmluZVRyYW5zZm9y
bTo6c2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3Vi
bGUgZSwgZG91YmxlIGYpCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4KEZsb2F0UHJl
Y2lzaW9uIGEsIEZsb2F0UHJlY2lzaW9uIGIsIEZsb2F0UHJlY2lzaW9uIGMsIEZsb2F0UHJlY2lz
aW9uIGQsIEZsb2F0UHJlY2lzaW9uIGUsIEZsb2F0UHJlY2lzaW9uIGYpCiB7CiAgICAgbV90cmFu
c2Zvcm1bMF0gPSBhOwogICAgIG1fdHJhbnNmb3JtWzFdID0gYjsKQEAgLTY4LDE3ICs2OCwxNyBA
QCBib29sIEFmZmluZVRyYW5zZm9ybTo6aXNJZGVudGl0eSgpIGNvbnN0CiAgICAgICAgICAmJiBt
X3RyYW5zZm9ybVs0XSA9PSAwICYmIG1fdHJhbnNmb3JtWzVdID09IDApOwogfQogCi1kb3VibGUg
QWZmaW5lVHJhbnNmb3JtOjp4U2NhbGUoKSBjb25zdAorRmxvYXRQcmVjaXNpb24gQWZmaW5lVHJh
bnNmb3JtOjp4U2NhbGUoKSBjb25zdAogewogICAgIHJldHVybiBzcXJ0KG1fdHJhbnNmb3JtWzBd
ICogbV90cmFuc2Zvcm1bMF0gKyBtX3RyYW5zZm9ybVsxXSAqIG1fdHJhbnNmb3JtWzFdKTsKIH0K
IAotZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6eVNjYWxlKCkgY29uc3QKK0Zsb2F0UHJlY2lzaW9u
IEFmZmluZVRyYW5zZm9ybTo6eVNjYWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3FydChtX3Ry
YW5zZm9ybVsyXSAqIG1fdHJhbnNmb3JtWzJdICsgbV90cmFuc2Zvcm1bM10gKiBtX3RyYW5zZm9y
bVszXSk7CiB9CiAKLWRvdWJsZSBBZmZpbmVUcmFuc2Zvcm06OmRldCgpIGNvbnN0CitGbG9hdFBy
ZWNpc2lvbiBBZmZpbmVUcmFuc2Zvcm06OmRldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdHJh
bnNmb3JtWzBdICogbV90cmFuc2Zvcm1bM10gLSBtX3RyYW5zZm9ybVsxXSAqIG1fdHJhbnNmb3Jt
WzJdOwogfQpAQCAtOTAsNyArOTAsNyBAQCBib29sIEFmZmluZVRyYW5zZm9ybTo6aXNJbnZlcnRp
YmxlKCkgY29uc3QKIAogQWZmaW5lVHJhbnNmb3JtIEFmZmluZVRyYW5zZm9ybTo6aW52ZXJzZSgp
IGNvbnN0CiB7Ci0gICAgZG91YmxlIGRldGVybWluYW50ID0gZGV0KCk7CisgICAgRmxvYXRQcmVj
aXNpb24gZGV0ZXJtaW5hbnQgPSBkZXQoKTsKICAgICBpZiAoZGV0ZXJtaW5hbnQgPT0gMC4wKQog
ICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiAKQEAgLTEzMSwyNCArMTMxLDI0IEBA
IEFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjptdWx0aXBseShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotQWZmaW5lVHJhbnNmb3Jt
JiBBZmZpbmVUcmFuc2Zvcm06OnJvdGF0ZShkb3VibGUgYSkKK0FmZmluZVRyYW5zZm9ybSYgQWZm
aW5lVHJhbnNmb3JtOjpyb3RhdGUoRmxvYXRQcmVjaXNpb24gYSkKIHsKICAgICAvLyBhbmdsZSBp
cyBpbiBkZWdyZWUuIFN3aXRjaCB0byByYWRpYW4KICAgICBhID0gZGVnMnJhZChhKTsKLSAgICBk
b3VibGUgY29zQW5nbGUgPSBjb3MoYSk7Ci0gICAgZG91YmxlIHNpbkFuZ2xlID0gc2luKGEpOwor
ICAgIEZsb2F0UHJlY2lzaW9uIGNvc0FuZ2xlID0gY29zKGEpOworICAgIEZsb2F0UHJlY2lzaW9u
IHNpbkFuZ2xlID0gc2luKGEpOwogICAgIEFmZmluZVRyYW5zZm9ybSByb3QoY29zQW5nbGUsIHNp
bkFuZ2xlLCAtc2luQW5nbGUsIGNvc0FuZ2xlLCAwLCAwKTsKIAogICAgIG11bHRpcGx5KHJvdCk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9y
bTo6c2NhbGUoZG91YmxlIHMpCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2Nh
bGUoRmxvYXRQcmVjaXNpb24gcykKIHsKICAgICByZXR1cm4gc2NhbGUocywgcyk7CiB9CiAKLUFm
ZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBz
eSkKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2FsZShGbG9hdFByZWNpc2lv
biBzeCwgRmxvYXRQcmVjaXNpb24gc3kpCiB7CiAgICAgbV90cmFuc2Zvcm1bMF0gKj0gc3g7CiAg
ICAgbV90cmFuc2Zvcm1bMV0gKj0gc3g7CkBAIC0xNTgsNyArMTU4LDcgQEAgQWZmaW5lVHJhbnNm
b3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKGRvdWJsZSBzeCwgZG91YmxlIHN5KQogfQogCiAv
LyAqdGhpcyA9ICp0aGlzICogdHJhbnNsYXRpb24KLUFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJh
bnNmb3JtOjp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCitBZmZpbmVUcmFuc2Zvcm0m
IEFmZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRlKEZsb2F0UHJlY2lzaW9uIHR4LCBGbG9hdFByZWNp
c2lvbiB0eSkKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewogICAgICAg
ICBtX3RyYW5zZm9ybVs0XSArPSB0eDsKQEAgLTE3MSwxMiArMTcxLDEyIEBAIEFmZmluZVRyYW5z
Zm9ybSYgQWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6
c2NhbGVOb25Vbmlmb3JtKGRvdWJsZSBzeCwgZG91YmxlIHN5KQorQWZmaW5lVHJhbnNmb3JtJiBB
ZmZpbmVUcmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9ybShGbG9hdFByZWNpc2lvbiBzeCwgRmxvYXRQ
cmVjaXNpb24gc3kpCiB7CiAgICAgcmV0dXJuIHNjYWxlKHN4LCBzeSk7CiB9CiAKLUFmZmluZVRy
YW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKGRvdWJsZSB4LCBkb3Vi
bGUgeSkKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9y
KEZsb2F0UHJlY2lzaW9uIHgsIEZsb2F0UHJlY2lzaW9uIHkpCiB7CiAgICAgcmV0dXJuIHJvdGF0
ZShyYWQyZGVnKGF0YW4yKHksIHgpKSk7CiB9CkBAIC0xOTEsMTAgKzE5MSwxMCBAQCBBZmZpbmVU
cmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6ZmxpcFkoKQogICAgIHJldHVybiBzY2FsZSgxLCAt
MSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzaGVhcihkb3VibGUg
c3gsIGRvdWJsZSBzeSkKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzaGVhcihG
bG9hdFByZWNpc2lvbiBzeCwgRmxvYXRQcmVjaXNpb24gc3kpCiB7Ci0gICAgZG91YmxlIGEgPSBt
X3RyYW5zZm9ybVswXTsKLSAgICBkb3VibGUgYiA9IG1fdHJhbnNmb3JtWzFdOworICAgIEZsb2F0
UHJlY2lzaW9uIGEgPSBtX3RyYW5zZm9ybVswXTsKKyAgICBGbG9hdFByZWNpc2lvbiBiID0gbV90
cmFuc2Zvcm1bMV07CiAKICAgICBtX3RyYW5zZm9ybVswXSArPSBzeSAqIG1fdHJhbnNmb3JtWzJd
OwogICAgIG1fdHJhbnNmb3JtWzFdICs9IHN5ICogbV90cmFuc2Zvcm1bM107CkBAIC0yMDQsMTcg
KzIwNCwxNyBAQCBBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2hlYXIoZG91Ymxl
IHN4LCBkb3VibGUgc3kpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0m
IEFmZmluZVRyYW5zZm9ybTo6c2tldyhkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZKQorQWZm
aW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNrZXcoRmxvYXRQcmVjaXNpb24gYW5nbGVY
LCBGbG9hdFByZWNpc2lvbiBhbmdsZVkpCiB7CiAgICAgcmV0dXJuIHNoZWFyKHRhbihkZWcycmFk
KGFuZ2xlWCkpLCB0YW4oZGVnMnJhZChhbmdsZVkpKSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSYg
QWZmaW5lVHJhbnNmb3JtOjpza2V3WChkb3VibGUgYW5nbGUpCitBZmZpbmVUcmFuc2Zvcm0mIEFm
ZmluZVRyYW5zZm9ybTo6c2tld1goRmxvYXRQcmVjaXNpb24gYW5nbGUpCiB7CiAgICAgcmV0dXJu
IHNoZWFyKHRhbihkZWcycmFkKGFuZ2xlKSksIDApOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0mIEFm
ZmluZVRyYW5zZm9ybTo6c2tld1koZG91YmxlIGFuZ2xlKQorQWZmaW5lVHJhbnNmb3JtJiBBZmZp
bmVUcmFuc2Zvcm06OnNrZXdZKEZsb2F0UHJlY2lzaW9uIGFuZ2xlKQogewogICAgIHJldHVybiBz
aGVhcigwLCB0YW4oZGVnMnJhZChhbmdsZSkpKTsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCBBZmZp
bmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXZvaWQgQWZm
aW5lVHJhbnNmb3JtOjptYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUmIHgyLCBkb3VibGUm
IHkyKSBjb25zdAordm9pZCBBZmZpbmVUcmFuc2Zvcm06Om1hcChGbG9hdFByZWNpc2lvbiB4LCBG
bG9hdFByZWNpc2lvbiB5LCBGbG9hdFByZWNpc2lvbiYgeDIsIEZsb2F0UHJlY2lzaW9uJiB5Mikg
Y29uc3QKIHsKICAgICB4MiA9IChtX3RyYW5zZm9ybVswXSAqIHggKyBtX3RyYW5zZm9ybVsyXSAq
IHkgKyBtX3RyYW5zZm9ybVs0XSk7CiAgICAgeTIgPSAobV90cmFuc2Zvcm1bMV0gKiB4ICsgbV90
cmFuc2Zvcm1bM10gKiB5ICsgbV90cmFuc2Zvcm1bNV0pOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHZv
aWQgQWZmaW5lVHJhbnNmb3JtOjptYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUmIHgyLCBk
b3VibGUmIHkyKSBjb25zdAogCiBJbnRQb2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBkb3VibGUgeDIsIHkyOworICAgIEZs
b2F0UHJlY2lzaW9uIHgyLCB5MjsKICAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksIHgyLCB5
Mik7CiAgICAgCiAgICAgLy8gUm91bmQgdGhlIHBvaW50LgpAQCAtMjQ0LDI2ICsyNDQsMjYgQEAg
SW50UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0CiAKIEZsb2F0UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBkb3VibGUgeDIsIHkyOworICAgIEZsb2F0UHJl
Y2lzaW9uIHgyLCB5MjsKICAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksIHgyLCB5Mik7CiAK
LSAgICByZXR1cm4gRmxvYXRQb2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgyKSwgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCh5MikpOworICAgIHJldHVybiBGbG9hdFBvaW50KHgyLCB5Mik7CiB9
CiAKIEludFNpemUgQWZmaW5lVHJhbnNmb3JtOjptYXBTaXplKGNvbnN0IEludFNpemUmIHNpemUp
IGNvbnN0CiB7Ci0gICAgZG91YmxlIHdpZHRoMiA9IHNpemUud2lkdGgoKSAqIHhTY2FsZSgpOwot
ICAgIGRvdWJsZSBoZWlnaHQyID0gc2l6ZS5oZWlnaHQoKSAqIHlTY2FsZSgpOworICAgIEZsb2F0
UHJlY2lzaW9uIHdpZHRoMiA9IHNpemUud2lkdGgoKSAqIHhTY2FsZSgpOworICAgIEZsb2F0UHJl
Y2lzaW9uIGhlaWdodDIgPSBzaXplLmhlaWdodCgpICogeVNjYWxlKCk7CiAKICAgICByZXR1cm4g
SW50U2l6ZShscm91bmQod2lkdGgyKSwgbHJvdW5kKGhlaWdodDIpKTsKIH0KIAogRmxvYXRTaXpl
IEFmZmluZVRyYW5zZm9ybTo6bWFwU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0CiB7
Ci0gICAgZG91YmxlIHdpZHRoMiA9IHNpemUud2lkdGgoKSAqIHhTY2FsZSgpOwotICAgIGRvdWJs
ZSBoZWlnaHQyID0gc2l6ZS5oZWlnaHQoKSAqIHlTY2FsZSgpOworICAgIEZsb2F0UHJlY2lzaW9u
IHdpZHRoMiA9IHNpemUud2lkdGgoKSAqIHhTY2FsZSgpOworICAgIEZsb2F0UHJlY2lzaW9uIGhl
aWdodDIgPSBzaXplLmhlaWdodCgpICogeVNjYWxlKCk7CiAKLSAgICByZXR1cm4gRmxvYXRTaXpl
KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgyKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCho
ZWlnaHQyKSk7CisgICAgcmV0dXJuIEZsb2F0U2l6ZSh3aWR0aDIsIGhlaWdodDIpOwogfQogCiBJ
bnRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0KSBjb25z
dApAQCAtMjc1LDcgKzI3NSw3IEBAIEZsb2F0UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGlmIChpc0lkZW50aXR5T3JUcmFu
c2xhdGlvbigpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBtYXBwZWRSZWN0KHJlY3QpOwotICAgICAg
ICBtYXBwZWRSZWN0Lm1vdmUobmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3RyYW5zZm9ybVs0XSks
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90cmFuc2Zvcm1bNV0pKTsKKyAgICAgICAgbWFwcGVk
UmVjdC5tb3ZlKG1fdHJhbnNmb3JtWzRdLCBtX3RyYW5zZm9ybVs1XSk7CiAgICAgICAgIHJldHVy
biBtYXBwZWRSZWN0OwogICAgIH0KIApAQCAtMjkxLDcgKzI5MSw3IEBAIEZsb2F0UXVhZCBBZmZp
bmVUcmFuc2Zvcm06Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25zdAogewogICAgIGlm
IChpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKSB7CiAgICAgICAgIEZsb2F0UXVhZCBtYXBwZWRR
dWFkKHEpOwotICAgICAgICBtYXBwZWRRdWFkLm1vdmUobmFycm93UHJlY2lzaW9uVG9GbG9hdCht
X3RyYW5zZm9ybVs0XSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90cmFuc2Zvcm1bNV0pKTsK
KyAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKG1fdHJhbnNmb3JtWzRdLCBtX3RyYW5zZm9ybVs1XSk7
CiAgICAgICAgIHJldHVybiBtYXBwZWRRdWFkOwogICAgIH0KIApAQCAtMzAzLDcgKzMwMyw3IEBA
IEZsb2F0UXVhZCBBZmZpbmVUcmFuc2Zvcm06Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBj
b25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWZmaW5lVHJhbnNmb3JtOjpibGVu
ZChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZyb20sIGRvdWJsZSBwcm9ncmVzcykKK3ZvaWQgQWZm
aW5lVHJhbnNmb3JtOjpibGVuZChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZyb20sIEZsb2F0UHJl
Y2lzaW9uIHByb2dyZXNzKQogewogICAgIERlY29tcG9zZWRUeXBlIHNyQSwgc3JCOwogCkBAIC0z
NTIsOCArMzUyLDggQEAgYm9vbCBBZmZpbmVUcmFuc2Zvcm06OmRlY29tcG9zZShEZWNvbXBvc2Vk
VHlwZSYgZGVjb21wKSBjb25zdAogICAgIEFmZmluZVRyYW5zZm9ybSBtKCp0aGlzKTsKICAgICAK
ICAgICAvLyBDb21wdXRlIHNjYWxpbmcgZmFjdG9ycwotICAgIGRvdWJsZSBzeCA9IHhTY2FsZSgp
OwotICAgIGRvdWJsZSBzeSA9IHlTY2FsZSgpOworICAgIEZsb2F0UHJlY2lzaW9uIHN4ID0geFNj
YWxlKCk7CisgICAgRmxvYXRQcmVjaXNpb24gc3kgPSB5U2NhbGUoKTsKICAgICAKICAgICAvLyBD
b21wdXRlIGNyb3NzIHByb2R1Y3Qgb2YgdHJhbnNmb3JtZWQgdW5pdCB2ZWN0b3JzLiBJZiBuZWdh
dGl2ZSwKICAgICAvLyBvbmUgYXhpcyB3YXMgZmxpcHBlZC4KQEAgLTM2OSw3ICszNjksNyBAQCBi
b29sIEFmZmluZVRyYW5zZm9ybTo6ZGVjb21wb3NlKERlY29tcG9zZWRUeXBlJiBkZWNvbXApIGNv
bnN0CiAgICAgbS5zY2FsZSgxIC8gc3gsIDEgLyBzeSk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSBy
b3RhdGlvbgotICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4yKG0uYigpLCBtLmEoKSk7CisgICAgRmxv
YXRQcmVjaXNpb24gYW5nbGUgPSBhdGFuMihtLmIoKSwgbS5hKCkpOwogICAgIAogICAgIC8vIFJl
bW92ZSByb3RhdGlvbiBmcm9tIG1hdHJpeAogICAgIG0ucm90YXRlKHJhZDJkZWcoLWFuZ2xlKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAppbmRleCA3ZDgzZjU5Li42MGIzNmQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRy
YW5zZm9ybS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvQWZmaW5lVHJhbnNmb3JtLmgKQEAgLTU4LDE4ICs1OCwxOCBAQCBjbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybSB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBkb3VibGUgVHJhbnNmb3JtWzZdOworICAg
IHR5cGVkZWYgRmxvYXRQcmVjaXNpb24gVHJhbnNmb3JtWzZdOwogCiAgICAgQWZmaW5lVHJhbnNm
b3JtKCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMs
IGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworICAgIEFmZmluZVRyYW5zZm9ybShGbG9h
dFByZWNpc2lvbiBhLCBGbG9hdFByZWNpc2lvbiBiLCBGbG9hdFByZWNpc2lvbiBjLCBGbG9hdFBy
ZWNpc2lvbiBkLCBGbG9hdFByZWNpc2lvbiBlLCBGbG9hdFByZWNpc2lvbiBmKTsKIAogI2lmIFVT
RShDRykKICAgICBBZmZpbmVUcmFuc2Zvcm0oY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mKTsKICNl
bmRpZgogCi0gICAgdm9pZCBzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywg
ZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7CisgICAgdm9pZCBzZXRNYXRyaXgoRmxvYXRQ
cmVjaXNpb24gYSwgRmxvYXRQcmVjaXNpb24gYiwgRmxvYXRQcmVjaXNpb24gYywgRmxvYXRQcmVj
aXNpb24gZCwgRmxvYXRQcmVjaXNpb24gZSwgRmxvYXRQcmVjaXNpb24gZik7CiAKLSAgICB2b2lk
IG1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSYgeDIsIGRvdWJsZSYgeTIpIGNvbnN0Owor
ICAgIHZvaWQgbWFwKEZsb2F0UHJlY2lzaW9uIHgsIEZsb2F0UHJlY2lzaW9uIHksIEZsb2F0UHJl
Y2lzaW9uJiB4MiwgRmxvYXRQcmVjaXNpb24mIHkyKSBjb25zdDsKIAogICAgIC8vIFJvdW5kcyB0
aGUgbWFwcGVkIHBvaW50IHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCiAgICAgSW50UG9p
bnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKQEAgLTg5LDQzICs4OSw0MyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsKIAotICAgIGRvdWJsZSBhKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bMF07IH0KLSAgICB2b2lkIHNldEEoZG91YmxlIGEp
IHsgbV90cmFuc2Zvcm1bMF0gPSBhOyB9Ci0gICAgZG91YmxlIGIoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zZm9ybVsxXTsgfQotICAgIHZvaWQgc2V0Qihkb3VibGUgYikgeyBtX3RyYW5zZm9ybVsx
XSA9IGI7IH0KLSAgICBkb3VibGUgYygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzJdOyB9
Ci0gICAgdm9pZCBzZXRDKGRvdWJsZSBjKSB7IG1fdHJhbnNmb3JtWzJdID0gYzsgfQotICAgIGRv
dWJsZSBkKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bM107IH0KLSAgICB2b2lkIHNldEQo
ZG91YmxlIGQpIHsgbV90cmFuc2Zvcm1bM10gPSBkOyB9Ci0gICAgZG91YmxlIGUoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybVs0XTsgfQotICAgIHZvaWQgc2V0RShkb3VibGUgZSkgeyBtX3Ry
YW5zZm9ybVs0XSA9IGU7IH0KLSAgICBkb3VibGUgZigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNm
b3JtWzVdOyB9Ci0gICAgdm9pZCBzZXRGKGRvdWJsZSBmKSB7IG1fdHJhbnNmb3JtWzVdID0gZjsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIGEoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVswXTsg
fQorICAgIHZvaWQgc2V0QShGbG9hdFByZWNpc2lvbiBhKSB7IG1fdHJhbnNmb3JtWzBdID0gYTsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIGIoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVsxXTsg
fQorICAgIHZvaWQgc2V0QihGbG9hdFByZWNpc2lvbiBiKSB7IG1fdHJhbnNmb3JtWzFdID0gYjsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIGMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVsyXTsg
fQorICAgIHZvaWQgc2V0QyhGbG9hdFByZWNpc2lvbiBjKSB7IG1fdHJhbnNmb3JtWzJdID0gYzsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIGQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVszXTsg
fQorICAgIHZvaWQgc2V0RChGbG9hdFByZWNpc2lvbiBkKSB7IG1fdHJhbnNmb3JtWzNdID0gZDsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIGUoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVs0XTsg
fQorICAgIHZvaWQgc2V0RShGbG9hdFByZWNpc2lvbiBlKSB7IG1fdHJhbnNmb3JtWzRdID0gZTsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIGYoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVs1XTsg
fQorICAgIHZvaWQgc2V0RihGbG9hdFByZWNpc2lvbiBmKSB7IG1fdHJhbnNmb3JtWzVdID0gZjsg
fQogCiAgICAgdm9pZCBtYWtlSWRlbnRpdHkoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSYgbXVs
dGlwbHkoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcik7Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
JiBzY2FsZShkb3VibGUpOyAKLSAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxlKGRvdWJsZSBzeCwg
ZG91YmxlIHN5KTsgCi0gICAgQWZmaW5lVHJhbnNmb3JtJiBzY2FsZU5vblVuaWZvcm0oZG91Ymxl
IHN4LCBkb3VibGUgc3kpOwotICAgIEFmZmluZVRyYW5zZm9ybSYgcm90YXRlKGRvdWJsZSBkKTsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZUZyb21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5
KTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSk7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtJiBzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSk7CisgICAg
QWZmaW5lVHJhbnNmb3JtJiBzY2FsZShGbG9hdFByZWNpc2lvbik7IAorICAgIEFmZmluZVRyYW5z
Zm9ybSYgc2NhbGUoRmxvYXRQcmVjaXNpb24gc3gsIEZsb2F0UHJlY2lzaW9uIHN5KTsgCisgICAg
QWZmaW5lVHJhbnNmb3JtJiBzY2FsZU5vblVuaWZvcm0oRmxvYXRQcmVjaXNpb24gc3gsIEZsb2F0
UHJlY2lzaW9uIHN5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZShGbG9hdFByZWNpc2lv
biBkKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZUZyb21WZWN0b3IoRmxvYXRQcmVjaXNp
b24geCwgRmxvYXRQcmVjaXNpb24geSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2xhdGUo
RmxvYXRQcmVjaXNpb24gdHgsIEZsb2F0UHJlY2lzaW9uIHR5KTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0mIHNoZWFyKEZsb2F0UHJlY2lzaW9uIHN4LCBGbG9hdFByZWNpc2lvbiBzeSk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtJiBmbGlwWCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSYgZmxpcFkoKTsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXcoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSk7Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3WChkb3VibGUgYW5nbGUpOwotICAgIEFmZmluZVRyYW5z
Zm9ybSYgc2tld1koZG91YmxlIGFuZ2xlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXcoRmxv
YXRQcmVjaXNpb24gYW5nbGVYLCBGbG9hdFByZWNpc2lvbiBhbmdsZVkpOworICAgIEFmZmluZVRy
YW5zZm9ybSYgc2tld1goRmxvYXRQcmVjaXNpb24gYW5nbGUpOworICAgIEFmZmluZVRyYW5zZm9y
bSYgc2tld1koRmxvYXRQcmVjaXNpb24gYW5nbGUpOwogCi0gICAgZG91YmxlIHhTY2FsZSgpIGNv
bnN0OwotICAgIGRvdWJsZSB5U2NhbGUoKSBjb25zdDsKKyAgICBGbG9hdFByZWNpc2lvbiB4U2Nh
bGUoKSBjb25zdDsKKyAgICBGbG9hdFByZWNpc2lvbiB5U2NhbGUoKSBjb25zdDsKIAotICAgIGRv
dWJsZSBkZXQoKSBjb25zdDsKKyAgICBGbG9hdFByZWNpc2lvbiBkZXQoKSBjb25zdDsKICAgICBi
b29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0OwogICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnNlKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91
YmxlIHByb2dyZXNzKTsKKyAgICB2b2lkIGJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJv
bSwgRmxvYXRQcmVjaXNpb24gcHJvZ3Jlc3MpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIGNvbnN0OwogCkBAIC0xODQsMTcgKzE4NCwxNyBAQCBw
dWJsaWM6CiAgICAgb3BlcmF0b3Igd3hHcmFwaGljc01hdHJpeCgpIGNvbnN0OwogI2VuZGlmCiAK
LSAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uKGRvdWJsZSB4LCBkb3VibGUg
eSkKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uKEZsb2F0UHJlY2lzaW9u
IHgsIEZsb2F0UHJlY2lzaW9uIHkpCiAgICAgewogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKDEsIDAsIDAsIDEsIHgsIHkpOwogICAgIH0KICAgICAKICAgICAvLyBkZWNvbXBvc2UgdGhl
IG1hdHJpeCBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMKICAgICB0eXBlZGVmIHN0cnVjdCB7Ci0g
ICAgICAgIGRvdWJsZSBzY2FsZVgsIHNjYWxlWTsKLSAgICAgICAgZG91YmxlIGFuZ2xlOwotICAg
ICAgICBkb3VibGUgcmVtYWluZGVyQSwgcmVtYWluZGVyQiwgcmVtYWluZGVyQywgcmVtYWluZGVy
RDsKLSAgICAgICAgZG91YmxlIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVk7CisgICAgICAgIEZsb2F0
UHJlY2lzaW9uIHNjYWxlWCwgc2NhbGVZOworICAgICAgICBGbG9hdFByZWNpc2lvbiBhbmdsZTsK
KyAgICAgICAgRmxvYXRQcmVjaXNpb24gcmVtYWluZGVyQSwgcmVtYWluZGVyQiwgcmVtYWluZGVy
QywgcmVtYWluZGVyRDsKKyAgICAgICAgRmxvYXRQcmVjaXNpb24gdHJhbnNsYXRlWCwgdHJhbnNs
YXRlWTsKICAgICB9IERlY29tcG9zZWRUeXBlOwogICAgIAogICAgIGJvb2wgZGVjb21wb3NlKERl
Y29tcG9zZWRUeXBlJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKaW5kZXggZTNlY2NjMS4uNmM2YWYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJh
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtNTEsNyArNTEsNyBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRy
YW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiwgZG91Ymxl
LCBib29sID0gZmFsc2UpCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiwgRmxvYXRQcmVjaXNpb24sIGJvb2wg
PSBmYWxzZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggZTM2NjIxMy4uMjNl
NjQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKK1Bhc3NSZWZQdHI8VHJhbnNmb3JtT3Bl
cmF0aW9uPiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBGbG9hdFByZWNpc2lvbiBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRl
bnRpdHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAg
ICAgICByZXR1cm4gdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb24uaAppbmRleCBiMDU3N2E2Li4zMzkxYTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9uKiBmcm9tLCBGbG9hdFByZWNpc2lvbiBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkg
PSBmYWxzZSk7CiAgICAgCiAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggMDVlZmVlMC4uODg5Y2M4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMjgsNyArMjgsNyBAQCB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8
VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9J
ZGVudGl0eSkKK1Bhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgRmxvYXRQcmVj
aXNpb24gcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQogewogICAgIGlmIChmcm9tICYm
ICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCA0NWY5ZWE3Li45Y2JiN2Yw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTMyLDcg
KzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYSwgZG91
YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKEZsb2F0UHJlY2lz
aW9uIGEsIEZsb2F0UHJlY2lzaW9uIGIsIEZsb2F0UHJlY2lzaW9uIGMsIEZsb2F0UHJlY2lzaW9u
IGQsIEZsb2F0UHJlY2lzaW9uIGUsIEZsb2F0UHJlY2lzaW9uIGYpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihhLCBiLCBjLCBkLCBl
LCBmKSk7CiAgICAgfQpAQCAtNjYsOSArNjYsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Ms
IGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxU
cmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwg
RmxvYXRQcmVjaXNpb24gcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwog
ICAgIAotICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgYSwgZG91YmxlIGIsIGRv
dWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQorICAgIE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbihGbG9hdFByZWNpc2lvbiBhLCBGbG9hdFByZWNpc2lvbiBiLCBGbG9hdFByZWNp
c2lvbiBjLCBGbG9hdFByZWNpc2lvbiBkLCBGbG9hdFByZWNpc2lvbiBlLCBGbG9hdFByZWNpc2lv
biBmKQogICAgICAgICA6IG1fYShhKQogICAgICAgICAsIG1fYihiKQogICAgICAgICAsIG1fYyhj
KQpAQCAtODgsMTIgKzg4LDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KICAgICAKLSAgICBk
b3VibGUgbV9hOwotICAgIGRvdWJsZSBtX2I7Ci0gICAgZG91YmxlIG1fYzsKLSAgICBkb3VibGUg
bV9kOwotICAgIGRvdWJsZSBtX2U7Ci0gICAgZG91YmxlIG1fZjsKKyAgICBGbG9hdFByZWNpc2lv
biBtX2E7CisgICAgRmxvYXRQcmVjaXNpb24gbV9iOworICAgIEZsb2F0UHJlY2lzaW9uIG1fYzsK
KyAgICBGbG9hdFByZWNpc2lvbiBtX2Q7CisgICAgRmxvYXRQcmVjaXNpb24gbV9lOworICAgIEZs
b2F0UHJlY2lzaW9uIG1fZjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggZTg0
MjI5Mi4uNmEzYjg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAKQEAgLTMzLDE0ICszMywxNCBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9u
PiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQorUGFz
c1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
OjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIEZsb2F0UHJlY2lzaW9uIHBy
b2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+
aXNTYW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIAogICAgIGlmIChi
bGVuZFRvSWRlbnRpdHkpIHsKLSAgICAgICAgZG91YmxlIHAgPSBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG1fcCwgMSk7Ci0gICAgICAgIHAgPSBXZWJDb3JlOjpibGVuZChwLCAxLjAsIHByb2dyZXNzKTsg
Ly8gRklYTUU6IHRoaXMgc2VlbXMgd3JvbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MjcwMAorICAgICAgICBGbG9hdFByZWNpc2lvbiBwID0gZmxvYXRWYWx1ZUZv
ckxlbmd0aChtX3AsIDEpOworICAgICAgICBwID0gV2ViQ29yZTo6YmxlbmQocCwgc3RhdGljX2Nh
c3Q8RmxvYXRQcmVjaXNpb24+KDEuMCksIHByb2dyZXNzKTsgLy8gRklYTUU6IHRoaXMgc2VlbXMg
d3JvbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjcwMAogICAg
ICAgICByZXR1cm4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
Y2xhbXBUb1Bvc2l0aXZlSW50ZWdlcihwKSwgRml4ZWQpKTsKICAgICB9CiAgICAgCkBAIC01Nyw3
ICs1Nyw3IEBAIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBQZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmCiAgICAgdG9ULmRlY29tcG9zZShkZWNv
bXApOwogCiAgICAgaWYgKGRlY29tcC5wZXJzcGVjdGl2ZVopIHsKLSAgICAgICAgZG91YmxlIHZh
bCA9IC0xLjAgLyBkZWNvbXAucGVyc3BlY3RpdmVaOworICAgICAgICBGbG9hdFByZWNpc2lvbiB2
YWwgPSAtMS4wIC8gZGVjb21wLnBlcnNwZWN0aXZlWjsKICAgICAgICAgcmV0dXJuIFBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKGNsYW1wVG9Qb3NpdGl2ZUludGVn
ZXIodmFsKSwgRml4ZWQpKTsKICAgICB9CiAgICAgcmV0dXJuIFBlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMzczMGQ0Mi4uMzc3MjU5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Q
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaApA
QCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lk
ZW50aXR5ID0gZmFsc2UpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRp
b24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgRmxvYXRQcmVjaXNpb24g
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwogCiAgICAgUGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb24oY29uc3QgTGVuZ3RoJiBwKQogICAgICAgICA6IG1fcChwKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9S
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCmluZGV4IDhjNGZh
ZDYuLjE5ZWY3OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAKQEAgLTMwLDcgKzMwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIGZyb20sIEZsb2F0UHJlY2lzaW9uIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVu
dGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAgICAg
ICAgIHJldHVybiB0aGlzOwpAQCAtNDQsNyArNDQsNyBAQCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cAogICAgIGlmICghZnJvbU9wIHx8IChmcm9tT3AtPm1feCA9PSAwICYmIGZyb21PcC0+bV95ID09
IDAgJiYgZnJvbU9wLT5tX3ogPT0gMSkgfHwgCiAgICAgICAgICAgICAgICAgICAgKGZyb21PcC0+
bV94ID09IDAgJiYgZnJvbU9wLT5tX3kgPT0gMSAmJiBmcm9tT3AtPm1feiA9PSAwKSB8fCAKICAg
ICAgICAgICAgICAgICAgICAoZnJvbU9wLT5tX3ggPT0gMSAmJiBmcm9tT3AtPm1feSA9PSAwICYm
IGZyb21PcC0+bV96ID09IDApKSB7Ci0gICAgICAgIGRvdWJsZSBmcm9tQW5nbGUgPSBmcm9tT3Ag
PyBmcm9tT3AtPm1fYW5nbGUgOiAwOworICAgICAgICBGbG9hdFByZWNpc2lvbiBmcm9tQW5nbGUg
PSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGUgOiAwOwogICAgICAgICByZXR1cm4gUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbU9wID8gZnJvbU9wLT5tX3ggOiBtX3gsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbU9wID8gZnJv
bU9wLT5tX3kgOiBtX3ksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJvbU9wID8gZnJvbU9wLT5tX3ogOiBtX3osIApAQCAtNzQsMTEgKzc0LDExIEBA
IFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wCiAgICAgdG9ULmRlY29tcG9zZShkZWNvbXApOwogICAg
IAogICAgIC8vIENvbnZlcnQgdGhhdCB0byBBeGlzL0FuZ2xlIGZvcm0KLSAgICBkb3VibGUgeCA9
IC1kZWNvbXAucXVhdGVybmlvblg7Ci0gICAgZG91YmxlIHkgPSAtZGVjb21wLnF1YXRlcm5pb25Z
OwotICAgIGRvdWJsZSB6ID0gLWRlY29tcC5xdWF0ZXJuaW9uWjsKLSAgICBkb3VibGUgbGVuZ3Ro
ID0gc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopOwotICAgIGRvdWJsZSBhbmdsZSA9IDA7Cisg
ICAgRmxvYXRQcmVjaXNpb24geCA9IC1kZWNvbXAucXVhdGVybmlvblg7CisgICAgRmxvYXRQcmVj
aXNpb24geSA9IC1kZWNvbXAucXVhdGVybmlvblk7CisgICAgRmxvYXRQcmVjaXNpb24geiA9IC1k
ZWNvbXAucXVhdGVybmlvblo7CisgICAgRmxvYXRQcmVjaXNpb24gbGVuZ3RoID0gc3FydCh4ICog
eCArIHkgKiB5ICsgeiAqIHopOworICAgIEZsb2F0UHJlY2lzaW9uIGFuZ2xlID0gMDsKICAgICAK
ICAgICBpZiAobGVuZ3RoID4gMC4wMDAwMSkgewogICAgICAgICB4IC89IGxlbmd0aDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IDBkNDk1YzUuLjM0ZmRm
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMzEs
MjAgKzMxLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIGFu
Z2xlLCBPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Um90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoRmxvYXRQcmVjaXNpb24gYW5nbGUsIE9wZXJhdGlvblR5
cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uKDAsIDAsIDEsIGFuZ2xlLCB0eXBlKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xlLCBPcGVyYXRpb25UeXBlIHR5cGUpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoRmxvYXRQ
cmVjaXNpb24geCwgRmxvYXRQcmVjaXNpb24geSwgRmxvYXRQcmVjaXNpb24geiwgRmxvYXRQcmVj
aXNpb24gYW5nbGUsIE9wZXJhdGlvblR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKHgsIHksIHosIGFuZ2xlLCB0eXBl
KSk7CiAgICAgfQogCi0gICAgZG91YmxlIHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBk
b3VibGUgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotICAgIGRvdWJsZSB6KCkgY29uc3QgeyBy
ZXR1cm4gbV96OyB9Ci0gICAgZG91YmxlIGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBGbG9h
dFByZWNpc2lvbiB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisgICAgRmxvYXRQcmVjaXNpb24g
eigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQorICAgIEZsb2F0UHJlY2lzaW9uIGFuZ2xlKCkgY29u
c3QgeyByZXR1cm4gbV9hbmdsZTsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0lk
ZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZSA9PSAwOyB9CkBAIC02Niw5ICs2Niw5IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBGbG9hdFByZWNpc2lvbiBwcm9ncmVzcywgYm9vbCBi
bGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7CiAKLSAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24o
ZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xlLCBPcGVyYXRpb25UeXBl
IHR5cGUpCisgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKEZsb2F0UHJlY2lzaW9uIHgsIEZs
b2F0UHJlY2lzaW9uIHksIEZsb2F0UHJlY2lzaW9uIHosIEZsb2F0UHJlY2lzaW9uIGFuZ2xlLCBP
cGVyYXRpb25UeXBlIHR5cGUpCiAgICAgICAgIDogbV94KHgpCiAgICAgICAgICwgbV95KHkpCiAg
ICAgICAgICwgbV96KHopCkBAIC03OCwxMCArNzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gUk9UQVRFX1ggfHwgdHlwZSA9PSBST1RBVEVfWSB8fCB0eXBlID09IFJPVEFU
RV9aIHx8IHR5cGUgPT0gUk9UQVRFXzNEKTsKICAgICB9CiAKLSAgICBkb3VibGUgbV94OwotICAg
IGRvdWJsZSBtX3k7Ci0gICAgZG91YmxlIG1fejsKLSAgICBkb3VibGUgbV9hbmdsZTsKKyAgICBG
bG9hdFByZWNpc2lvbiBtX3g7CisgICAgRmxvYXRQcmVjaXNpb24gbV95OworICAgIEZsb2F0UHJl
Y2lzaW9uIG1fejsKKyAgICBGbG9hdFByZWNpc2lvbiBtX2FuZ2xlOwogICAgIE9wZXJhdGlvblR5
cGUgbV90eXBlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
LmNwcAppbmRleCBlODgwNmYyLi4zM2VlNmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMjYsMjAgKzI2LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
biogZnJvbSwgRmxvYXRQcmVjaXNpb24gcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQog
ewogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJu
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV94LCAxLjAs
IHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQobV95LCAxLjAsIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV96LCAxLjAsIHBy
b2dyZXNzKSwgbV90eXBlKTsKKyAgICAgICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV94LCBzdGF0aWNfY2FzdDxGbG9hdFByZWNpc2lvbj4o
MS4wKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJDb3JlOjpibGVuZChtX3ksIHN0YXRpY19jYXN0PEZsb2F0UHJlY2lzaW9uPigx
LjApLCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkNvcmU6OmJsZW5kKG1feiwgc3RhdGljX2Nhc3Q8RmxvYXRQcmVjaXNpb24+KDEu
MCksIHByb2dyZXNzKSwgbV90eXBlKTsKICAgICAKICAgICBjb25zdCBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24qPihmcm9tKTsKLSAgICBkb3VibGUgZnJvbVggPSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6IDEu
MDsKLSAgICBkb3VibGUgZnJvbVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1feSA6IDEuMDsKLSAgICBk
b3VibGUgZnJvbVogPSBmcm9tT3AgPyBmcm9tT3AtPm1feiA6IDEuMDsKKyAgICBGbG9hdFByZWNp
c2lvbiBmcm9tWCA9IGZyb21PcCA/IGZyb21PcC0+bV94IDogMS4wOworICAgIEZsb2F0UHJlY2lz
aW9uIGZyb21ZID0gZnJvbU9wID8gZnJvbU9wLT5tX3kgOiAxLjA7CisgICAgRmxvYXRQcmVjaXNp
b24gZnJvbVogPSBmcm9tT3AgPyBmcm9tT3AtPm1feiA6IDEuMDsKICAgICByZXR1cm4gU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tWCwgbV94LCBwcm9n
cmVzcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVksIG1feSwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21aLCBtX3osIHByb2dyZXNzKSwg
bV90eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCA3
MzQzZDA5Li42NjRlNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bi5oCkBAIC0zMSwxOSArMzEsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUo
ZG91YmxlIHN4LCBkb3VibGUgc3ksIE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKEZsb2F0UHJlY2lzaW9uIHN4
LCBGbG9hdFByZWNpc2lvbiBzeSwgT3BlcmF0aW9uVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwgc3ksIDEsIHR5
cGUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbj4gY3JlYXRlKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBkb3VibGUgc3osIE9wZXJhdGlvblR5
cGUgdHlwZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4g
Y3JlYXRlKEZsb2F0UHJlY2lzaW9uIHN4LCBGbG9hdFByZWNpc2lvbiBzeSwgRmxvYXRQcmVjaXNp
b24gc3osIE9wZXJhdGlvblR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oc3gsIHN5LCBzeiwgdHlwZSkpOwogICAgIH0K
IAotICAgIGRvdWJsZSB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgZG91YmxlIHkoKSBj
b25zdCB7IHJldHVybiBtX3k7IH0KLSAgICBkb3VibGUgeigpIGNvbnN0IHsgcmV0dXJuIG1fejsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBGbG9h
dFByZWNpc2lvbiB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisgICAgRmxvYXRQcmVjaXNpb24g
eigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV94ID09IDEgJiYgIG1feSA9PSAxICYmICBtX3og
PT0gMTsgfQpAQCAtNjUsOSArNjUsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wg
YmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgRmxvYXRQ
cmVjaXNpb24gcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwogCi0gICAg
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oZG91YmxlIHN4LCBkb3VibGUgc3ksIGRvdWJsZSBzeiwg
T3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKEZsb2F0UHJl
Y2lzaW9uIHN4LCBGbG9hdFByZWNpc2lvbiBzeSwgRmxvYXRQcmVjaXNpb24gc3osIE9wZXJhdGlv
blR5cGUgdHlwZSkKICAgICAgICAgOiBtX3goc3gpCiAgICAgICAgICwgbV95KHN5KQogICAgICAg
ICAsIG1feihzeikKQEAgLTc2LDkgKzc2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gU0NBTEVfWCB8fCB0eXBlID09IFNDQUxFX1kgfHwgdHlwZSA9PSBTQ0FMRV9aIHx8IHR5
cGUgPT0gU0NBTEUgfHwgdHlwZSA9PSBTQ0FMRV8zRCk7CiAgICAgfQogICAgICAgICAKLSAgICBk
b3VibGUgbV94OwotICAgIGRvdWJsZSBtX3k7Ci0gICAgZG91YmxlIG1fejsKKyAgICBGbG9hdFBy
ZWNpc2lvbiBtX3g7CisgICAgRmxvYXRQcmVjaXNpb24gbV95OworICAgIEZsb2F0UHJlY2lzaW9u
IG1fejsKICAgICBPcGVyYXRpb25UeXBlIG1fdHlwZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Nr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCmluZGV4IGQ5MmQ4OTUuLmNmNThmNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMjYsMTcgKzI2LDE3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiog
ZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKK1Bhc3NSZWZQdHI8
VHJhbnNmb3JtT3BlcmF0aW9uPiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIEZsb2F0UHJlY2lzaW9uIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhp
cykpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIAogICAgIGlmIChibGVuZFRvSWRlbnRpdHkp
Ci0gICAgICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6
YmxlbmQobV9hbmdsZVgsIDAuMCwgcHJvZ3Jlc3MpLCBXZWJDb3JlOjpibGVuZChtX2FuZ2xlWSwg
MC4wLCBwcm9ncmVzcyksIG1fdHlwZSk7CisgICAgICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV9hbmdsZVgsIHN0YXRpY19jYXN0PEZsb2F0
UHJlY2lzaW9uPigwLjApLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5kKG1fYW5nbGVZLCBzdGF0
aWNfY2FzdDxGbG9hdFByZWNpc2lvbj4oMC4wKSwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogICAgIAog
ICAgIGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNv
bnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKLSAgICBkb3VibGUgZnJvbUFuZ2xl
WCA9IGZyb21PcCA/IGZyb21PcC0+bV9hbmdsZVggOiAwOwotICAgIGRvdWJsZSBmcm9tQW5nbGVZ
ID0gZnJvbU9wID8gZnJvbU9wLT5tX2FuZ2xlWSA6IDA7CisgICAgRmxvYXRQcmVjaXNpb24gZnJv
bUFuZ2xlWCA9IGZyb21PcCA/IGZyb21PcC0+bV9hbmdsZVggOiAwOworICAgIEZsb2F0UHJlY2lz
aW9uIGZyb21BbmdsZVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGVZIDogMDsKICAgICByZXR1
cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21Bbmds
ZVgsIG1fYW5nbGVYLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5kKGZyb21BbmdsZVksIG1fYW5n
bGVZLCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKaW5kZXggZGRkZTk4Ni4uNWFkOTA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3
VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTMxLDEzICszMSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3Bl
cmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uPiBjcmVhdGUoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSwgT3BlcmF0aW9uVHlw
ZSB0eXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+IGNy
ZWF0ZShGbG9hdFByZWNpc2lvbiBhbmdsZVgsIEZsb2F0UHJlY2lzaW9uIGFuZ2xlWSwgT3BlcmF0
aW9uVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uKGFuZ2xlWCwgYW5nbGVZLCB0eXBlKSk7CiAgICAgfQogCi0gICAgZG91
YmxlIGFuZ2xlWCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGVYOyB9Ci0gICAgZG91YmxlIGFuZ2xl
WSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGVZOyB9CisgICAgRmxvYXRQcmVjaXNpb24gYW5nbGVY
KCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZVg7IH0KKyAgICBGbG9hdFByZWNpc2lvbiBhbmdsZVko
KSBjb25zdCB7IHJldHVybiBtX2FuZ2xlWTsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZVggPT0gMCAmJiBtX2FuZ2xlWSA9
PSAwOyB9CkBAIC01OCwxNyArNTgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJs
ZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29s
IGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIEZsb2F0
UHJlY2lzaW9uIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKICAgICAK
LSAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVks
IE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKEZsb2F0UHJl
Y2lzaW9uIGFuZ2xlWCwgRmxvYXRQcmVjaXNpb24gYW5nbGVZLCBPcGVyYXRpb25UeXBlIHR5cGUp
CiAgICAgICAgIDogbV9hbmdsZVgoYW5nbGVYKQogICAgICAgICAsIG1fYW5nbGVZKGFuZ2xlWSkK
ICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICB7CiAgICAgfQogICAgIAotICAgIGRvdWJsZSBt
X2FuZ2xlWDsKLSAgICBkb3VibGUgbV9hbmdsZVk7CisgICAgRmxvYXRQcmVjaXNpb24gbV9hbmds
ZVg7CisgICAgRmxvYXRQcmVjaXNpb24gbV9hbmdsZVk7CiAgICAgT3BlcmF0aW9uVHlwZSBtX3R5
cGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCAxZTdlYmIwLi44
ZjRiMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTYxLDcgKzYxLDcg
QEAgcHVibGljOgogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBib3JkZXJCb3hTaXplIHdhcyB1
c2VkIGluIHRoZSBjb21wdXRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIHZpcnR1YWwgYm9v
bCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0U2l6ZSYgYm9yZGVyQm94
U2l6ZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJh
dGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jl
c3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIEZsb2F0UHJlY2lzaW9uIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZh
bHNlKSA9IDA7CiAKICAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
T3BlcmF0aW9ucy5jcHAKaW5kZXggMGUyYTFkYi4uOTZjNThhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybU9wZXJhdGlvbnMuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgVHJhbnNmb3JtT3Bl
cmF0aW9uczo6b3BlcmF0aW9uc01hdGNoKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVy
KSBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNm
b3JtT3BlcmF0aW9uczo6YmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb25zdCBkb3VibGUmIHByb2dyZXNzKSBjb25zdAorVHJhbnNmb3Jt
T3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25z
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZsb2F0UHJlY2lzaW9uJiBw
cm9ncmVzcykgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHJlc3VsdDsKIApAQCAt
OTAsNyArOTAsNyBAQCBUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJs
ZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNmbwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeVVz
aW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBk
b3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CitUcmFuc2Zvcm1P
cGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9s
YXRpb24oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgRmxvYXRQcmVjaXNpb24gcHJv
Z3Jlc3MsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyByZXN1bHQ7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBUcmFuc2Zvcm1PcGVyYXRpb25z
IFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oY29u
c3QgVAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNm
b3JtT3BlcmF0aW9uczo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKSBjb25zdAorVHJhbnNmb3JtT3Bl
cmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBmcm9tLCBGbG9hdFByZWNpc2lvbiBwcm9ncmVzcywgY29uc3QgTGF5b3V0U2l6ZSYgc2l6
ZSkgY29uc3QKIHsKICAgICBpZiAoZnJvbSA9PSAqdGhpcykKICAgICAgICAgcmV0dXJuICp0aGlz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2Zvcm1PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAppbmRleCBiN2UwOTFiLi5hYzU2NzM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybU9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaApAQCAtNzIsOSArNzIsOSBAQCBw
dWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlvbnMuc2l6
ZSgpOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBhdChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGluZGV4IDwgbV9vcGVyYXRpb25zLnNpemUoKSA/IG1fb3BlcmF0aW9ucy5h
dChpbmRleCkuZ2V0KCkgOiAwOyB9CiAKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kQnlN
YXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3Qg
ZG91YmxlJiBwcm9ncmVzcykgY29uc3Q7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEJ5
VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20s
IGRvdWJsZSBwcm9ncmVzcywgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0OwotICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CisgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IGZyb20sIGNvbnN0IEZsb2F0UHJlY2lzaW9uJiBwcm9ncmVzcykgY29uc3Q7CisgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMmIGZyb20sIEZsb2F0UHJlY2lzaW9uIHByb2dyZXNzLCBjb25zdCBMYXlv
dXRTaXplJikgY29uc3Q7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZChjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBGbG9hdFByZWNpc2lvbiBwcm9ncmVzcywgY29uc3QgTGF5
b3V0U2l6ZSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3Jt
T3BlcmF0aW9uPiA+IG1fb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1h
dHJpeC5jcHAKaW5kZXggNDk1YjE1Zi4uNjM4NmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5jcHAKQEAgLTcwLDEwICs3MCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAvLyB8IG1fbWF0cml4WzBdWzJdIG1fbWF0cml4WzFdWzJdIG1fbWF0cml4WzJdWzJdIG1fbWF0
cml4WzNdWzJdIHwKIC8vIHwgbV9tYXRyaXhbMF1bM10gbV9tYXRyaXhbMV1bM10gbV9tYXRyaXhb
Ml1bM10gbV9tYXRyaXhbM11bM10gfAogCi10eXBlZGVmIGRvdWJsZSBWZWN0b3I0WzRdOwotdHlw
ZWRlZiBkb3VibGUgVmVjdG9yM1szXTsKK3R5cGVkZWYgRmxvYXRQcmVjaXNpb24gVmVjdG9yNFs0
XTsKK3R5cGVkZWYgRmxvYXRQcmVjaXNpb24gVmVjdG9yM1szXTsKIAotY29uc3QgZG91YmxlIFNN
QUxMX05VTUJFUiA9IDEuZS04OworY29uc3QgRmxvYXRQcmVjaXNpb24gU01BTExfTlVNQkVSID0g
MS5lLTg7CiAKIC8vIGludmVyc2Uob3JpZ2luYWxfbWF0cml4LCBpbnZlcnNlX21hdHJpeCkKIC8v
IApAQCAtODMsMTYgKzgzLDE2IEBAIGNvbnN0IGRvdWJsZSBTTUFMTF9OVU1CRVIgPSAxLmUtODsK
IC8vIEEgID0gX19fMV9fIGFkam9pbnQgQQogLy8gICAgICAgZGV0IEEKIAotLy8gIGRvdWJsZSA9
IGRldGVybWluYW50MngyKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkKQor
Ly8gIEZsb2F0UHJlY2lzaW9uID0gZGV0ZXJtaW5hbnQyeDIoRmxvYXRQcmVjaXNpb24gYSwgRmxv
YXRQcmVjaXNpb24gYiwgRmxvYXRQcmVjaXNpb24gYywgRmxvYXRQcmVjaXNpb24gZCkKIC8vICAK
IC8vICBjYWxjdWxhdGUgdGhlIGRldGVybWluYW50IG9mIGEgMngyIG1hdHJpeC4KIAotc3RhdGlj
IGRvdWJsZSBkZXRlcm1pbmFudDJ4Mihkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3Vi
bGUgZCkKK3N0YXRpYyBGbG9hdFByZWNpc2lvbiBkZXRlcm1pbmFudDJ4MihGbG9hdFByZWNpc2lv
biBhLCBGbG9hdFByZWNpc2lvbiBiLCBGbG9hdFByZWNpc2lvbiBjLCBGbG9hdFByZWNpc2lvbiBk
KQogewogICAgIHJldHVybiBhICogZCAtIGIgKiBjOwogfQogCi0vLyAgZG91YmxlID0gZGV0ZXJt
aW5hbnQzeDMoYTEsIGEyLCBhMywgYjEsIGIyLCBiMywgYzEsIGMyLCBjMykKKy8vICBGbG9hdFBy
ZWNpc2lvbiA9IGRldGVybWluYW50M3gzKGExLCBhMiwgYTMsIGIxLCBiMiwgYjMsIGMxLCBjMiwg
YzMpCiAvLyAgCiAvLyAgQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIDN4MyBtYXRyaXgK
IC8vICBpbiB0aGUgZm9ybQpAQCAtMTAxLDQxICsxMDEsNDEgQEAgc3RhdGljIGRvdWJsZSBkZXRl
cm1pbmFudDJ4Mihkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCkKIC8vICAg
ICAgfCBhMiwgIGIyLCAgYzIgfAogLy8gICAgICB8IGEzLCAgYjMsICBjMyB8CiAKLXN0YXRpYyBk
b3VibGUgZGV0ZXJtaW5hbnQzeDMoZG91YmxlIGExLCBkb3VibGUgYTIsIGRvdWJsZSBhMywgZG91
YmxlIGIxLCBkb3VibGUgYjIsIGRvdWJsZSBiMywgZG91YmxlIGMxLCBkb3VibGUgYzIsIGRvdWJs
ZSBjMykKK3N0YXRpYyBGbG9hdFByZWNpc2lvbiBkZXRlcm1pbmFudDN4MyhGbG9hdFByZWNpc2lv
biBhMSwgRmxvYXRQcmVjaXNpb24gYTIsIEZsb2F0UHJlY2lzaW9uIGEzLCBGbG9hdFByZWNpc2lv
biBiMSwgRmxvYXRQcmVjaXNpb24gYjIsIEZsb2F0UHJlY2lzaW9uIGIzLCBGbG9hdFByZWNpc2lv
biBjMSwgRmxvYXRQcmVjaXNpb24gYzIsIEZsb2F0UHJlY2lzaW9uIGMzKQogewogICAgIHJldHVy
biBhMSAqIGRldGVybWluYW50MngyKGIyLCBiMywgYzIsIGMzKQogICAgICAgICAgLSBiMSAqIGRl
dGVybWluYW50MngyKGEyLCBhMywgYzIsIGMzKQogICAgICAgICAgKyBjMSAqIGRldGVybWluYW50
MngyKGEyLCBhMywgYjIsIGIzKTsKIH0KIAotLy8gIGRvdWJsZSA9IGRldGVybWluYW50NHg0KG1h
dHJpeCkKKy8vICBGbG9hdFByZWNpc2lvbiA9IGRldGVybWluYW50NHg0KG1hdHJpeCkKIC8vICAK
IC8vICBjYWxjdWxhdGUgdGhlIGRldGVybWluYW50IG9mIGEgNHg0IG1hdHJpeC4KIAotc3RhdGlj
IGRvdWJsZSBkZXRlcm1pbmFudDR4NChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6TWF0cml4
NCYgbSkKK3N0YXRpYyBGbG9hdFByZWNpc2lvbiBkZXRlcm1pbmFudDR4NChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6TWF0cml4NCYgbSkKIHsKICAgICAvLyBBc3NpZ24gdG8gaW5kaXZpZHVh
bCB2YXJpYWJsZSBuYW1lcyB0byBhaWQgc2VsZWN0aW5nCiAgICAgLy8gY29ycmVjdCBlbGVtZW50
cwogCi0gICAgZG91YmxlIGExID0gbVswXVswXTsKLSAgICBkb3VibGUgYjEgPSBtWzBdWzFdOyAK
LSAgICBkb3VibGUgYzEgPSBtWzBdWzJdOwotICAgIGRvdWJsZSBkMSA9IG1bMF1bM107CisgICAg
RmxvYXRQcmVjaXNpb24gYTEgPSBtWzBdWzBdOworICAgIEZsb2F0UHJlY2lzaW9uIGIxID0gbVsw
XVsxXTsgCisgICAgRmxvYXRQcmVjaXNpb24gYzEgPSBtWzBdWzJdOworICAgIEZsb2F0UHJlY2lz
aW9uIGQxID0gbVswXVszXTsKIAotICAgIGRvdWJsZSBhMiA9IG1bMV1bMF07Ci0gICAgZG91Ymxl
IGIyID0gbVsxXVsxXTsgCi0gICAgZG91YmxlIGMyID0gbVsxXVsyXTsKLSAgICBkb3VibGUgZDIg
PSBtWzFdWzNdOworICAgIEZsb2F0UHJlY2lzaW9uIGEyID0gbVsxXVswXTsKKyAgICBGbG9hdFBy
ZWNpc2lvbiBiMiA9IG1bMV1bMV07IAorICAgIEZsb2F0UHJlY2lzaW9uIGMyID0gbVsxXVsyXTsK
KyAgICBGbG9hdFByZWNpc2lvbiBkMiA9IG1bMV1bM107CiAKLSAgICBkb3VibGUgYTMgPSBtWzJd
WzBdOyAKLSAgICBkb3VibGUgYjMgPSBtWzJdWzFdOwotICAgIGRvdWJsZSBjMyA9IG1bMl1bMl07
Ci0gICAgZG91YmxlIGQzID0gbVsyXVszXTsKKyAgICBGbG9hdFByZWNpc2lvbiBhMyA9IG1bMl1b
MF07IAorICAgIEZsb2F0UHJlY2lzaW9uIGIzID0gbVsyXVsxXTsKKyAgICBGbG9hdFByZWNpc2lv
biBjMyA9IG1bMl1bMl07CisgICAgRmxvYXRQcmVjaXNpb24gZDMgPSBtWzJdWzNdOwogCi0gICAg
ZG91YmxlIGE0ID0gbVszXVswXTsKLSAgICBkb3VibGUgYjQgPSBtWzNdWzFdOyAKLSAgICBkb3Vi
bGUgYzQgPSBtWzNdWzJdOwotICAgIGRvdWJsZSBkNCA9IG1bM11bM107CisgICAgRmxvYXRQcmVj
aXNpb24gYTQgPSBtWzNdWzBdOworICAgIEZsb2F0UHJlY2lzaW9uIGI0ID0gbVszXVsxXTsgCisg
ICAgRmxvYXRQcmVjaXNpb24gYzQgPSBtWzNdWzJdOworICAgIEZsb2F0UHJlY2lzaW9uIGQ0ID0g
bVszXVszXTsKIAogICAgIHJldHVybiBhMSAqIGRldGVybWluYW50M3gzKGIyLCBiMywgYjQsIGMy
LCBjMywgYzQsIGQyLCBkMywgZDQpCiAgICAgICAgICAtIGIxICogZGV0ZXJtaW5hbnQzeDMoYTIs
IGEzLCBhNCwgYzIsIGMzLCBjNCwgZDIsIGQzLCBkNCkKQEAgLTE2MywyNSArMTYzLDI1IEBAIHN0
YXRpYyB2b2lkIGFkam9pbnQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Ok1hdHJpeDQmIG1h
dHJpeCwgVHJhbnNmb3JtYXRpb25NCiB7CiAgICAgLy8gQXNzaWduIHRvIGluZGl2aWR1YWwgdmFy
aWFibGUgbmFtZXMgdG8gYWlkCiAgICAgLy8gc2VsZWN0aW5nIGNvcnJlY3QgdmFsdWVzCi0gICAg
ZG91YmxlIGExID0gbWF0cml4WzBdWzBdOwotICAgIGRvdWJsZSBiMSA9IG1hdHJpeFswXVsxXTsg
Ci0gICAgZG91YmxlIGMxID0gbWF0cml4WzBdWzJdOwotICAgIGRvdWJsZSBkMSA9IG1hdHJpeFsw
XVszXTsKLQotICAgIGRvdWJsZSBhMiA9IG1hdHJpeFsxXVswXTsKLSAgICBkb3VibGUgYjIgPSBt
YXRyaXhbMV1bMV07IAotICAgIGRvdWJsZSBjMiA9IG1hdHJpeFsxXVsyXTsKLSAgICBkb3VibGUg
ZDIgPSBtYXRyaXhbMV1bM107Ci0KLSAgICBkb3VibGUgYTMgPSBtYXRyaXhbMl1bMF07Ci0gICAg
ZG91YmxlIGIzID0gbWF0cml4WzJdWzFdOwotICAgIGRvdWJsZSBjMyA9IG1hdHJpeFsyXVsyXTsK
LSAgICBkb3VibGUgZDMgPSBtYXRyaXhbMl1bM107Ci0KLSAgICBkb3VibGUgYTQgPSBtYXRyaXhb
M11bMF07Ci0gICAgZG91YmxlIGI0ID0gbWF0cml4WzNdWzFdOyAKLSAgICBkb3VibGUgYzQgPSBt
YXRyaXhbM11bMl07Ci0gICAgZG91YmxlIGQ0ID0gbWF0cml4WzNdWzNdOworICAgIEZsb2F0UHJl
Y2lzaW9uIGExID0gbWF0cml4WzBdWzBdOworICAgIEZsb2F0UHJlY2lzaW9uIGIxID0gbWF0cml4
WzBdWzFdOyAKKyAgICBGbG9hdFByZWNpc2lvbiBjMSA9IG1hdHJpeFswXVsyXTsKKyAgICBGbG9h
dFByZWNpc2lvbiBkMSA9IG1hdHJpeFswXVszXTsKKworICAgIEZsb2F0UHJlY2lzaW9uIGEyID0g
bWF0cml4WzFdWzBdOworICAgIEZsb2F0UHJlY2lzaW9uIGIyID0gbWF0cml4WzFdWzFdOyAKKyAg
ICBGbG9hdFByZWNpc2lvbiBjMiA9IG1hdHJpeFsxXVsyXTsKKyAgICBGbG9hdFByZWNpc2lvbiBk
MiA9IG1hdHJpeFsxXVszXTsKKworICAgIEZsb2F0UHJlY2lzaW9uIGEzID0gbWF0cml4WzJdWzBd
OworICAgIEZsb2F0UHJlY2lzaW9uIGIzID0gbWF0cml4WzJdWzFdOworICAgIEZsb2F0UHJlY2lz
aW9uIGMzID0gbWF0cml4WzJdWzJdOworICAgIEZsb2F0UHJlY2lzaW9uIGQzID0gbWF0cml4WzJd
WzNdOworCisgICAgRmxvYXRQcmVjaXNpb24gYTQgPSBtYXRyaXhbM11bMF07CisgICAgRmxvYXRQ
cmVjaXNpb24gYjQgPSBtYXRyaXhbM11bMV07IAorICAgIEZsb2F0UHJlY2lzaW9uIGM0ID0gbWF0
cml4WzNdWzJdOworICAgIEZsb2F0UHJlY2lzaW9uIGQ0ID0gbWF0cml4WzNdWzNdOwogCiAgICAg
Ly8gUm93IGNvbHVtbiBsYWJlbGluZyByZXZlcnNlZCBzaW5jZSB3ZSB0cmFuc3Bvc2Ugcm93cyAm
IGNvbHVtbnMKICAgICByZXN1bHRbMF1bMF0gID0gICBkZXRlcm1pbmFudDN4MyhiMiwgYjMsIGI0
LCBjMiwgYzMsIGM0LCBkMiwgZDMsIGQ0KTsKQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgYm9v
bCBpbnZlcnNlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpNYXRyaXg0JiBtYXRyaXgsIFRy
YW5zZm9ybWF0aW9uTQogICAgIC8vIENhbGN1bGF0ZSB0aGUgNHg0IGRldGVybWluYW50CiAgICAg
Ly8gSWYgdGhlIGRldGVybWluYW50IGlzIHplcm8sIAogICAgIC8vIHRoZW4gdGhlIGludmVyc2Ug
bWF0cml4IGlzIG5vdCB1bmlxdWUuCi0gICAgZG91YmxlIGRldCA9IGRldGVybWluYW50NHg0KG1h
dHJpeCk7CisgICAgRmxvYXRQcmVjaXNpb24gZGV0ID0gZGV0ZXJtaW5hbnQ0eDQobWF0cml4KTsK
IAogICAgIGlmIChmYWJzKGRldCkgPCBTTUFMTF9OVU1CRVIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTI1NCwzMCArMjU0LDMwIEBAIHN0YXRpYyB2b2lkIHY0TXVsUG9pbnRCeU1hdHJpeChj
b25zdCBWZWN0b3I0IHAsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpNYXRyCiAgICAgICAg
ICAgICAgICAgKHBbMl0gKiBtWzJdWzNdKSArIChwWzNdICogbVszXVszXSk7CiB9CiAKLXN0YXRp
YyBkb3VibGUgdjNMZW5ndGgoVmVjdG9yMyBhKQorc3RhdGljIEZsb2F0UHJlY2lzaW9uIHYzTGVu
Z3RoKFZlY3RvcjMgYSkKIHsKICAgICByZXR1cm4gc3FydCgoYVswXSAqIGFbMF0pICsgKGFbMV0g
KiBhWzFdKSArIChhWzJdICogYVsyXSkpOwogfQogCi1zdGF0aWMgdm9pZCB2M1NjYWxlKFZlY3Rv
cjMgdiwgZG91YmxlIGRlc2lyZWRMZW5ndGgpIAorc3RhdGljIHZvaWQgdjNTY2FsZShWZWN0b3Iz
IHYsIEZsb2F0UHJlY2lzaW9uIGRlc2lyZWRMZW5ndGgpIAogewotICAgIGRvdWJsZSBsZW4gPSB2
M0xlbmd0aCh2KTsKKyAgICBGbG9hdFByZWNpc2lvbiBsZW4gPSB2M0xlbmd0aCh2KTsKICAgICBp
ZiAobGVuICE9IDApIHsKLSAgICAgICAgZG91YmxlIGwgPSBkZXNpcmVkTGVuZ3RoIC8gbGVuOwor
ICAgICAgICBGbG9hdFByZWNpc2lvbiBsID0gZGVzaXJlZExlbmd0aCAvIGxlbjsKICAgICAgICAg
dlswXSAqPSBsOwogICAgICAgICB2WzFdICo9IGw7CiAgICAgICAgIHZbMl0gKj0gbDsKICAgICB9
CiB9CiAKLXN0YXRpYyBkb3VibGUgdjNEb3QoY29uc3QgVmVjdG9yMyBhLCBjb25zdCBWZWN0b3Iz
IGIpIAorc3RhdGljIEZsb2F0UHJlY2lzaW9uIHYzRG90KGNvbnN0IFZlY3RvcjMgYSwgY29uc3Qg
VmVjdG9yMyBiKSAKIHsKICAgICByZXR1cm4gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYlsxXSkg
KyAoYVsyXSAqIGJbMl0pOwogfQogCiAvLyBNYWtlIGEgbGluZWFyIGNvbWJpbmF0aW9uIG9mIHR3
byB2ZWN0b3JzIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KIC8vIHJlc3VsdCA9IChhICogYXNjbCkg
KyAoYiAqIGJzY2wpCi1zdGF0aWMgdm9pZCB2M0NvbWJpbmUoY29uc3QgVmVjdG9yMyBhLCBjb25z
dCBWZWN0b3IzIGIsIFZlY3RvcjMgcmVzdWx0LCBkb3VibGUgYXNjbCwgZG91YmxlIGJzY2wpCitz
dGF0aWMgdm9pZCB2M0NvbWJpbmUoY29uc3QgVmVjdG9yMyBhLCBjb25zdCBWZWN0b3IzIGIsIFZl
Y3RvcjMgcmVzdWx0LCBGbG9hdFByZWNpc2lvbiBhc2NsLCBGbG9hdFByZWNpc2lvbiBic2NsKQog
ewogICAgIHJlc3VsdFswXSA9IChhc2NsICogYVswXSkgKyAoYnNjbCAqIGJbMF0pOwogICAgIHJl
c3VsdFsxXSA9IChhc2NsICogYVsxXSkgKyAoYnNjbCAqIGJbMV0pOwpAQCAtNDI3LDcgKzQyNyw3
IEBAIHN0YXRpYyBib29sIGRlY29tcG9zZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6TWF0
cml4NCYgbWF0LCBUcmFuc2Zvcm1hdGlvbk1hCiAgICAgLy8gICAgIHJldC5yb3RhdGVaID0gMDsK
ICAgICAvLyB9CiAgICAgCi0gICAgZG91YmxlIHMsIHQsIHgsIHksIHosIHc7CisgICAgRmxvYXRQ
cmVjaXNpb24gcywgdCwgeCwgeSwgeiwgdzsKIAogICAgIHQgPSByb3dbMF1bMF0gKyByb3dbMV1b
MV0gKyByb3dbMl1bMl0gKyAxLjA7CiAKQEAgLTQ2NywxMyArNDY3LDEzIEBAIHN0YXRpYyBib29s
IGRlY29tcG9zZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6TWF0cml4NCYgbWF0LCBUcmFu
c2Zvcm1hdGlvbk1hCiAKIC8vIFBlcmZvcm0gYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRp
b24gYmV0d2VlbiB0aGUgdHdvCiAvLyBwYXNzZWQgcXVhdGVybmlvbnMgd2l0aCAwIDw9IHQgPD0g
MQotc3RhdGljIHZvaWQgc2xlcnAoZG91YmxlIHFhWzRdLCBjb25zdCBkb3VibGUgcWJbNF0sIGRv
dWJsZSB0KQorc3RhdGljIHZvaWQgc2xlcnAoRmxvYXRQcmVjaXNpb24gcWFbNF0sIGNvbnN0IEZs
b2F0UHJlY2lzaW9uIHFiWzRdLCBGbG9hdFByZWNpc2lvbiB0KQogewotICAgIGRvdWJsZSBheCwg
YXksIGF6LCBhdzsKLSAgICBkb3VibGUgYngsIGJ5LCBieiwgYnc7Ci0gICAgZG91YmxlIGN4LCBj
eSwgY3osIGN3OwotICAgIGRvdWJsZSBhbmdsZTsKLSAgICBkb3VibGUgdGgsIGludnRoLCBzY2Fs
ZSwgaW52c2NhbGU7CisgICAgRmxvYXRQcmVjaXNpb24gYXgsIGF5LCBheiwgYXc7CisgICAgRmxv
YXRQcmVjaXNpb24gYngsIGJ5LCBieiwgYnc7CisgICAgRmxvYXRQcmVjaXNpb24gY3gsIGN5LCBj
eiwgY3c7CisgICAgRmxvYXRQcmVjaXNpb24gYW5nbGU7CisgICAgRmxvYXRQcmVjaXNpb24gdGgs
IGludnRoLCBzY2FsZSwgaW52c2NhbGU7CiAKICAgICBheCA9IHFhWzBdOyBheSA9IHFhWzFdOyBh
eiA9IHFhWzJdOyBhdyA9IHFhWzNdOwogICAgIGJ4ID0gcWJbMF07IGJ5ID0gcWJbMV07IGJ6ID0g
cWJbMl07IGJ3ID0gcWJbM107CkBAIC01MjAsMTIgKzUyMCwxMiBAQCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQogICAg
IHNldE1hdHJpeCh0LmEoKSwgdC5iKCksIHQuYygpLCB0LmQoKSwgdC5lKCksIHQuZigpKTsKIH0K
IAotVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZShkb3Vi
bGUgcykKK1RyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGUo
RmxvYXRQcmVjaXNpb24gcykKIHsKICAgICByZXR1cm4gc2NhbGVOb25Vbmlmb3JtKHMsIHMpOwog
fQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZUZy
b21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KQorVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5z
Zm9ybWF0aW9uTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKEZsb2F0UHJlY2lzaW9uIHgsIEZsb2F0
UHJlY2lzaW9uIHkpCiB7CiAgICAgcmV0dXJuIHJvdGF0ZShyYWQyZGVnKGF0YW4yKHksIHgpKSk7
CiB9CkBAIC01NjMsMTUgKzU2MywxNSBAQCBGbG9hdFBvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4
Ojpwcm9qZWN0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCwgYm9vbCogY2xhbXBlZAogICAgICAg
ICByZXR1cm4gRmxvYXRQb2ludCgpOwogICAgIH0KICAgICAKLSAgICBkb3VibGUgeCA9IHAueCgp
OwotICAgIGRvdWJsZSB5ID0gcC55KCk7Ci0gICAgZG91YmxlIHogPSAtKG0xMygpICogeCArIG0y
MygpICogeSArIG00MygpKSAvIG0zMygpOworICAgIEZsb2F0UHJlY2lzaW9uIHggPSBwLngoKTsK
KyAgICBGbG9hdFByZWNpc2lvbiB5ID0gcC55KCk7CisgICAgRmxvYXRQcmVjaXNpb24geiA9IC0o
bTEzKCkgKiB4ICsgbTIzKCkgKiB5ICsgbTQzKCkpIC8gbTMzKCk7CiAKICAgICAvLyBGSVhNRTog
dXNlIG11bHRWZWNNYXRyaXgoKQotICAgIGRvdWJsZSBvdXRYID0geCAqIG0xMSgpICsgeSAqIG0y
MSgpICsgeiAqIG0zMSgpICsgbTQxKCk7Ci0gICAgZG91YmxlIG91dFkgPSB4ICogbTEyKCkgKyB5
ICogbTIyKCkgKyB6ICogbTMyKCkgKyBtNDIoKTsKKyAgICBGbG9hdFByZWNpc2lvbiBvdXRYID0g
eCAqIG0xMSgpICsgeSAqIG0yMSgpICsgeiAqIG0zMSgpICsgbTQxKCk7CisgICAgRmxvYXRQcmVj
aXNpb24gb3V0WSA9IHggKiBtMTIoKSArIHkgKiBtMjIoKSArIHogKiBtMzIoKSArIG00MigpOwog
Ci0gICAgZG91YmxlIHcgPSB4ICogbTE0KCkgKyB5ICogbTI0KCkgKyB6ICogbTM0KCkgKyBtNDQo
KTsKKyAgICBGbG9hdFByZWNpc2lvbiB3ID0geCAqIG0xNCgpICsgeSAqIG0yNCgpICsgeiAqIG0z
NCgpICsgbTQ0KCk7CiAgICAgaWYgKHcgPD0gMCkgewogICAgICAgICAvLyBVc2luZyBpbnQgbWF4
IGNhdXNlcyBvdmVyZmxvdyB3aGVuIG90aGVyIGNvZGUgdXNlcyB0aGUgcHJvamVjdGVkIHBvaW50
LiBUbwogICAgICAgICAvLyByZXByZXNlbnQgaW5maW5pdHkgeWV0IHJlZHVjZSB0aGUgcmlzayBv
ZiBvdmVyZmxvdywgd2UgdXNlIGEgbGFyZ2UgYnV0CkBAIC02NDUsNyArNjQ1LDcgQEAgRmxvYXRQ
b2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkg
Y29uc3QKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkKICAgICAgICAgcmV0dXJu
IEZsb2F0UG9pbnQocC54KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMF0pLCBw
LnkoKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFszXVsxXSkpOwogCi0gICAgZG91Ymxl
IHgsIHk7CisgICAgRmxvYXRQcmVjaXNpb24geCwgeTsKICAgICBtdWx0VmVjTWF0cml4KHAueCgp
LCBwLnkoKSwgeCwgeSk7CiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOwogfQpAQCAtNjU3LDcgKzY1Nyw3IEBAIEZsb2F0
UG9pbnQzRCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludDNE
JiBwKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAueSgpICsgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzFdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
LnooKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFszXVsyXSkpOwogCi0gICAgZG91Ymxl
IHgsIHksIHo7CisgICAgRmxvYXRQcmVjaXNpb24geCwgeSwgejsKICAgICBtdWx0VmVjTWF0cml4
KHAueCgpLCBwLnkoKSwgcC56KCksIHgsIHksIHopOwogICAgIHJldHVybiBGbG9hdFBvaW50M0Qo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeSksIHN0YXRpY19jYXN0
PGZsb2F0Pih6KSk7CiB9CkBAIC03MDAsNyArNzAwLDcgQEAgRmxvYXRRdWFkIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK1RyYW5zZm9ybWF0aW9uTWF0
cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGVOb25Vbmlmb3JtKEZsb2F0UHJlY2lzaW9u
IHN4LCBGbG9hdFByZWNpc2lvbiBzeSkKIHsKICAgICBtX21hdHJpeFswXVswXSAqPSBzeDsKICAg
ICBtX21hdHJpeFswXVsxXSAqPSBzeDsKQEAgLTcxNCw3ICs3MTQsNyBAQCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gs
IGRvdWJsZSBzeQogICAgIHJldHVybiAqdGhpczsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgm
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZTNkKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBkb3Vi
bGUgc3opCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNjYWxl
M2QoRmxvYXRQcmVjaXNpb24gc3gsIEZsb2F0UHJlY2lzaW9uIHN5LCBGbG9hdFByZWNpc2lvbiBz
eikKIHsKICAgICBzY2FsZU5vblVuaWZvcm0oc3gsIHN5KTsKICAgICAKQEAgLTcyNSwxNiArNzI1
LDE2IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGUz
ZChkb3VibGUgc3gsIGRvdWJsZSBzeSwgZG91YmxlCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1U
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZTNkKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBhbmdsZSkKK1RyYW5zZm9ybWF0aW9uTWF0
cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlM2QoRmxvYXRQcmVjaXNpb24geCwgRmxv
YXRQcmVjaXNpb24geSwgRmxvYXRQcmVjaXNpb24geiwgRmxvYXRQcmVjaXNpb24gYW5nbGUpCiB7
CiAgICAgLy8gQW5nbGVzIGFyZSBpbiBkZWdyZWVzLiBTd2l0Y2ggdG8gcmFkaWFucy4KICAgICBh
bmdsZSA9IGRlZzJyYWQoYW5nbGUpOwogCi0gICAgZG91YmxlIHNpblRoZXRhID0gc2luKGFuZ2xl
KTsKLSAgICBkb3VibGUgY29zVGhldGEgPSBjb3MoYW5nbGUpOworICAgIEZsb2F0UHJlY2lzaW9u
IHNpblRoZXRhID0gc2luKGFuZ2xlKTsKKyAgICBGbG9hdFByZWNpc2lvbiBjb3NUaGV0YSA9IGNv
cyhhbmdsZSk7CiAgICAgCiAgICAgLy8gTm9ybWFsaXplIHRoZSBheGlzIG9mIHJvdGF0aW9uCi0g
ICAgZG91YmxlIGxlbmd0aCA9IHNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKKyAgICBGbG9h
dFByZWNpc2lvbiBsZW5ndGggPSBzcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CiAgICAgaWYg
KGxlbmd0aCA9PSAwKSB7CiAgICAgICAgIC8vIGJhZCB2ZWN0b3IsIGp1c3QgdXNlIHNvbWV0aGlu
ZyByZWFzb25hYmxlCiAgICAgICAgIHggPSAwOwpAQCAtNzk2LDcgKzc5Niw3IEBAIFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlM2QoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUKICAgICAgICAgLy8KICAgICAgICAgLy8gQW4gYWx0ZXJuYXRlIHJlc291
cmNlIHdpdGggdGhlIHNhbWUgbWF0cml4OiBodHRwOi8vd3d3LmZhc3RncmFwaC5jb20vbWFrZWdh
bWVzLzNkcm90YXRpb24vCiAgICAgICAgIC8vCi0gICAgICAgIGRvdWJsZSBvbmVNaW51c0Nvc1Ro
ZXRhID0gMSAtIGNvc1RoZXRhOworICAgICAgICBGbG9hdFByZWNpc2lvbiBvbmVNaW51c0Nvc1Ro
ZXRhID0gMSAtIGNvc1RoZXRhOwogICAgICAgICBtYXQubV9tYXRyaXhbMF1bMF0gPSBjb3NUaGV0
YSArIHggKiB4ICogb25lTWludXNDb3NUaGV0YTsKICAgICAgICAgbWF0Lm1fbWF0cml4WzBdWzFd
ID0geSAqIHggKiBvbmVNaW51c0Nvc1RoZXRhICsgeiAqIHNpblRoZXRhOwogICAgICAgICBtYXQu
bV9tYXRyaXhbMF1bMl0gPSB6ICogeCAqIG9uZU1pbnVzQ29zVGhldGEgLSB5ICogc2luVGhldGE7
CkBAIC04MTQsNyArODE0LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9u
TWF0cml4Ojpyb3RhdGUzZChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZQogICAgIHJldHVybiAq
dGhpczsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpy
b3RhdGUzZChkb3VibGUgcngsIGRvdWJsZSByeSwgZG91YmxlIHJ6KQorVHJhbnNmb3JtYXRpb25N
YXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpyb3RhdGUzZChGbG9hdFByZWNpc2lvbiByeCwg
RmxvYXRQcmVjaXNpb24gcnksIEZsb2F0UHJlY2lzaW9uIHJ6KQogewogICAgIC8vIEFuZ2xlcyBh
cmUgaW4gZGVncmVlcy4gU3dpdGNoIHRvIHJhZGlhbnMuCiAgICAgcnggPSBkZWcycmFkKHJ4KTsK
QEAgLTgyMyw4ICs4MjMsOCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnJvdGF0ZTNkKGRvdWJsZSByeCwgZG91YmxlIHJ5LCBkb3VibAogICAgIAogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdDsKICAgICAKLSAgICBkb3VibGUgc2luVGhldGEgPSBzaW4o
cnopOwotICAgIGRvdWJsZSBjb3NUaGV0YSA9IGNvcyhyeik7CisgICAgRmxvYXRQcmVjaXNpb24g
c2luVGhldGEgPSBzaW4ocnopOworICAgIEZsb2F0UHJlY2lzaW9uIGNvc1RoZXRhID0gY29zKHJ6
KTsKICAgICAKICAgICBtYXQubV9tYXRyaXhbMF1bMF0gPSBjb3NUaGV0YTsKICAgICBtYXQubV9t
YXRyaXhbMF1bMV0gPSBzaW5UaGV0YTsKQEAgLTg4MSw3ICs4ODEsNyBAQCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZTNkKGRvdWJsZSByeCwgZG91Ymxl
IHJ5LCBkb3VibAogICAgIHJldHVybiAqdGhpczsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgm
IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCitU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZShGbG9h
dFByZWNpc2lvbiB0eCwgRmxvYXRQcmVjaXNpb24gdHkpCiB7CiAgICAgbV9tYXRyaXhbM11bMF0g
Kz0gdHggKiBtX21hdHJpeFswXVswXSArIHR5ICogbV9tYXRyaXhbMV1bMF07CiAgICAgbV9tYXRy
aXhbM11bMV0gKz0gdHggKiBtX21hdHJpeFswXVsxXSArIHR5ICogbV9tYXRyaXhbMV1bMV07CkBA
IC04OTAsNyArODkwLDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0
cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCiAgICAgcmV0dXJuICp0aGlzOwog
fQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0
ZTNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHopCitUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZTNkKEZsb2F0UHJlY2lzaW9uIHR4LCBG
bG9hdFByZWNpc2lvbiB0eSwgRmxvYXRQcmVjaXNpb24gdHopCiB7CiAgICAgbV9tYXRyaXhbM11b
MF0gKz0gdHggKiBtX21hdHJpeFswXVswXSArIHR5ICogbV9tYXRyaXhbMV1bMF0gKyB0eiAqIG1f
bWF0cml4WzJdWzBdOwogICAgIG1fbWF0cml4WzNdWzFdICs9IHR4ICogbV9tYXRyaXhbMF1bMV0g
KyB0eSAqIG1fbWF0cml4WzFdWzFdICsgdHogKiBtX21hdHJpeFsyXVsxXTsKQEAgLTg5OSw3ICs4
OTksNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5z
bGF0ZTNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkbwogICAgIHJldHVybiAqdGhpczsKIH0KIAot
VHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGVSaWdo
dChkb3VibGUgdHgsIGRvdWJsZSB0eSkKK1RyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6dHJhbnNsYXRlUmlnaHQoRmxvYXRQcmVjaXNpb24gdHgsIEZsb2F0UHJlY2lz
aW9uIHR5KQogewogICAgIGlmICh0eCAhPSAwKSB7CiAgICAgICAgIG1fbWF0cml4WzBdWzBdICs9
ICBtX21hdHJpeFswXVszXSAqIHR4OwpAQCAtOTE4LDcgKzkxOCw3IEBAIFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlUmlnaHQoZG91YmxlIHR4LCBk
b3VibGUgdHkpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZVJpZ2h0M2QoZG91YmxlIHR4LCBkb3VibGUg
dHksIGRvdWJsZSB0eikKK1RyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6dHJhbnNsYXRlUmlnaHQzZChGbG9hdFByZWNpc2lvbiB0eCwgRmxvYXRQcmVjaXNpb24gdHks
IEZsb2F0UHJlY2lzaW9uIHR6KQogewogICAgIHRyYW5zbGF0ZVJpZ2h0KHR4LCB0eSk7CiAgICAg
aWYgKHR6ICE9IDApIHsKQEAgLTkzMSw3ICs5MzEsNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZVJpZ2h0M2QoZG91YmxlIHR4LCBkb3VibGUg
dAogICAgIHJldHVybiAqdGhpczsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9y
bWF0aW9uTWF0cml4Ojpza2V3KGRvdWJsZSBzeCwgZG91YmxlIHN5KQorVHJhbnNmb3JtYXRpb25N
YXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpza2V3KEZsb2F0UHJlY2lzaW9uIHN4LCBGbG9h
dFByZWNpc2lvbiBzeSkKIHsKICAgICAvLyBhbmdsZXMgYXJlIGluIGRlZ3JlZXMuIFN3aXRjaCB0
byByYWRpYW5zCiAgICAgc3ggPSBkZWcycmFkKHN4KTsKQEAgLTk0NSw3ICs5NDUsNyBAQCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNrZXcoZG91YmxlIHN4LCBk
b3VibGUgc3kpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmFwcGx5UGVyc3BlY3RpdmUoZG91YmxlIHApCitUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmFwcGx5UGVyc3BlY3RpdmUoRmxv
YXRQcmVjaXNpb24gcCkKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXQ7CiAgICAgaWYg
KHAgIT0gMCkKQEAgLTEwMTIsMjMgKzEwMTIsMjMgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjptdWx0aXBseShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om11bHRW
ZWNNYXRyaXgoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUmIHJlc3VsdFgsIGRvdWJsZSYgcmVz
dWx0WSkgY29uc3QKK3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om11bHRWZWNNYXRyaXgoRmxv
YXRQcmVjaXNpb24geCwgRmxvYXRQcmVjaXNpb24geSwgRmxvYXRQcmVjaXNpb24mIHJlc3VsdFgs
IEZsb2F0UHJlY2lzaW9uJiByZXN1bHRZKSBjb25zdAogewogICAgIHJlc3VsdFggPSBtX21hdHJp
eFszXVswXSArIHggKiBtX21hdHJpeFswXVswXSArIHkgKiBtX21hdHJpeFsxXVswXTsKICAgICBy
ZXN1bHRZID0gbV9tYXRyaXhbM11bMV0gKyB4ICogbV9tYXRyaXhbMF1bMV0gKyB5ICogbV9tYXRy
aXhbMV1bMV07Ci0gICAgZG91YmxlIHcgPSBtX21hdHJpeFszXVszXSArIHggKiBtX21hdHJpeFsw
XVszXSArIHkgKiBtX21hdHJpeFsxXVszXTsKKyAgICBGbG9hdFByZWNpc2lvbiB3ID0gbV9tYXRy
aXhbM11bM10gKyB4ICogbV9tYXRyaXhbMF1bM10gKyB5ICogbV9tYXRyaXhbMV1bM107CiAgICAg
aWYgKHcgIT0gMSAmJiB3ICE9IDApIHsKICAgICAgICAgcmVzdWx0WCAvPSB3OwogICAgICAgICBy
ZXN1bHRZIC89IHc7CiAgICAgfQogfQogCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0
VmVjTWF0cml4KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSYgcmVzdWx0WCwg
ZG91YmxlJiByZXN1bHRZLCBkb3VibGUmIHJlc3VsdFopIGNvbnN0Cit2b2lkIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjptdWx0VmVjTWF0cml4KEZsb2F0UHJlY2lzaW9uIHgsIEZsb2F0UHJlY2lzaW9u
IHksIEZsb2F0UHJlY2lzaW9uIHosIEZsb2F0UHJlY2lzaW9uJiByZXN1bHRYLCBGbG9hdFByZWNp
c2lvbiYgcmVzdWx0WSwgRmxvYXRQcmVjaXNpb24mIHJlc3VsdFopIGNvbnN0CiB7CiAgICAgcmVz
dWx0WCA9IG1fbWF0cml4WzNdWzBdICsgeCAqIG1fbWF0cml4WzBdWzBdICsgeSAqIG1fbWF0cml4
WzFdWzBdICsgeiAqIG1fbWF0cml4WzJdWzBdOwogICAgIHJlc3VsdFkgPSBtX21hdHJpeFszXVsx
XSArIHggKiBtX21hdHJpeFswXVsxXSArIHkgKiBtX21hdHJpeFsxXVsxXSArIHogKiBtX21hdHJp
eFsyXVsxXTsKICAgICByZXN1bHRaID0gbV9tYXRyaXhbM11bMl0gKyB4ICogbV9tYXRyaXhbMF1b
Ml0gKyB5ICogbV9tYXRyaXhbMV1bMl0gKyB6ICogbV9tYXRyaXhbMl1bMl07Ci0gICAgZG91Ymxl
IHcgPSBtX21hdHJpeFszXVszXSArIHggKiBtX21hdHJpeFswXVszXSArIHkgKiBtX21hdHJpeFsx
XVszXSArIHogKiBtX21hdHJpeFsyXVszXTsKKyAgICBGbG9hdFByZWNpc2lvbiB3ID0gbV9tYXRy
aXhbM11bM10gKyB4ICogbV9tYXRyaXhbMF1bM10gKyB5ICogbV9tYXRyaXhbMV1bM10gKyB6ICog
bV9tYXRyaXhbMl1bM107CiAgICAgaWYgKHcgIT0gMSAmJiB3ICE9IDApIHsKICAgICAgICAgcmVz
dWx0WCAvPSB3OwogICAgICAgICByZXN1bHRZIC89IHc7CkBAIC0xMDQxLDcgKzEwNDEsNyBAQCBi
b29sIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojppc0ludmVydGlibGUoKSBjb25zdAogICAgIGlmIChp
c0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGRv
dWJsZSBkZXQgPSBXZWJDb3JlOjpkZXRlcm1pbmFudDR4NChtX21hdHJpeCk7CisgICAgRmxvYXRQ
cmVjaXNpb24gZGV0ID0gV2ViQ29yZTo6ZGV0ZXJtaW5hbnQ0eDQobV9tYXRyaXgpOwogCiAgICAg
aWYgKGZhYnMoZGV0KSA8IFNNQUxMX05VTUJFUikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTA5NCwxMyArMTA5NCwxMyBAQCBBZmZpbmVUcmFuc2Zvcm0gVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnRvQWZmaW5lVHJhbnNmb3JtKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
bWF0cml4WzFdWzFdLCBtX21hdHJpeFszXVswXSwgbV9tYXRyaXhbM11bMV0pOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgYmxlbmRGbG9hdChkb3VibGUmIGZyb20sIGRvdWJsZSB0bywgZG91Ymxl
IHByb2dyZXNzKQorc3RhdGljIGlubGluZSB2b2lkIGJsZW5kRmxvYXQoRmxvYXRQcmVjaXNpb24m
IGZyb20sIEZsb2F0UHJlY2lzaW9uIHRvLCBGbG9hdFByZWNpc2lvbiBwcm9ncmVzcykKIHsKICAg
ICBpZiAoZnJvbSAhPSB0bykKICAgICAgICAgZnJvbSA9IGZyb20gKyAodG8gLSBmcm9tKSAqIHBy
b2dyZXNzOwogfQogCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpibGVuZChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKQordm9pZCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6YmxlbmQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb20sIEZsb2F0
UHJlY2lzaW9uIHByb2dyZXNzKQogewogICAgIGlmIChmcm9tLmlzSWRlbnRpdHkoKSAmJiBpc0lk
ZW50aXR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNjEsMTUgKzExNjEsMTUgQEAgdm9pZCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjb21wb3NlKGNvbnN0IERlY29tcG9zZWRUeXBlJiBkZWNv
bXApCiAgICAgdHJhbnNsYXRlM2QoKGZsb2F0KSBkZWNvbXAudHJhbnNsYXRlWCwgKGZsb2F0KSBk
ZWNvbXAudHJhbnNsYXRlWSwgKGZsb2F0KSBkZWNvbXAudHJhbnNsYXRlWik7CiAgICAgCiAgICAg
Ly8gYXBwbHkgcm90YXRpb24KLSAgICBkb3VibGUgeHggPSBkZWNvbXAucXVhdGVybmlvblggKiBk
ZWNvbXAucXVhdGVybmlvblg7Ci0gICAgZG91YmxlIHh5ID0gZGVjb21wLnF1YXRlcm5pb25YICog
ZGVjb21wLnF1YXRlcm5pb25ZOwotICAgIGRvdWJsZSB4eiA9IGRlY29tcC5xdWF0ZXJuaW9uWCAq
IGRlY29tcC5xdWF0ZXJuaW9uWjsKLSAgICBkb3VibGUgeHcgPSBkZWNvbXAucXVhdGVybmlvblgg
KiBkZWNvbXAucXVhdGVybmlvblc7Ci0gICAgZG91YmxlIHl5ID0gZGVjb21wLnF1YXRlcm5pb25Z
ICogZGVjb21wLnF1YXRlcm5pb25ZOwotICAgIGRvdWJsZSB5eiA9IGRlY29tcC5xdWF0ZXJuaW9u
WSAqIGRlY29tcC5xdWF0ZXJuaW9uWjsKLSAgICBkb3VibGUgeXcgPSBkZWNvbXAucXVhdGVybmlv
blkgKiBkZWNvbXAucXVhdGVybmlvblc7Ci0gICAgZG91YmxlIHp6ID0gZGVjb21wLnF1YXRlcm5p
b25aICogZGVjb21wLnF1YXRlcm5pb25aOwotICAgIGRvdWJsZSB6dyA9IGRlY29tcC5xdWF0ZXJu
aW9uWiAqIGRlY29tcC5xdWF0ZXJuaW9uVzsKKyAgICBGbG9hdFByZWNpc2lvbiB4eCA9IGRlY29t
cC5xdWF0ZXJuaW9uWCAqIGRlY29tcC5xdWF0ZXJuaW9uWDsKKyAgICBGbG9hdFByZWNpc2lvbiB4
eSA9IGRlY29tcC5xdWF0ZXJuaW9uWCAqIGRlY29tcC5xdWF0ZXJuaW9uWTsKKyAgICBGbG9hdFBy
ZWNpc2lvbiB4eiA9IGRlY29tcC5xdWF0ZXJuaW9uWCAqIGRlY29tcC5xdWF0ZXJuaW9uWjsKKyAg
ICBGbG9hdFByZWNpc2lvbiB4dyA9IGRlY29tcC5xdWF0ZXJuaW9uWCAqIGRlY29tcC5xdWF0ZXJu
aW9uVzsKKyAgICBGbG9hdFByZWNpc2lvbiB5eSA9IGRlY29tcC5xdWF0ZXJuaW9uWSAqIGRlY29t
cC5xdWF0ZXJuaW9uWTsKKyAgICBGbG9hdFByZWNpc2lvbiB5eiA9IGRlY29tcC5xdWF0ZXJuaW9u
WSAqIGRlY29tcC5xdWF0ZXJuaW9uWjsKKyAgICBGbG9hdFByZWNpc2lvbiB5dyA9IGRlY29tcC5x
dWF0ZXJuaW9uWSAqIGRlY29tcC5xdWF0ZXJuaW9uVzsKKyAgICBGbG9hdFByZWNpc2lvbiB6eiA9
IGRlY29tcC5xdWF0ZXJuaW9uWiAqIGRlY29tcC5xdWF0ZXJuaW9uWjsKKyAgICBGbG9hdFByZWNp
c2lvbiB6dyA9IGRlY29tcC5xdWF0ZXJuaW9uWiAqIGRlY29tcC5xdWF0ZXJuaW9uVzsKICAgICAK
ICAgICAvLyBDb25zdHJ1Y3QgYSBjb21wb3NpdGUgcm90YXRpb24gbWF0cml4IGZyb20gdGhlIHF1
YXRlcm5pb24gdmFsdWVzCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcm90YXRpb25NYXRyaXgo
MSAtIDIgKiAoeXkgKyB6eiksIDIgKiAoeHkgLSB6dyksIDIgKiAoeHogKyB5dyksIDAsIApAQCAt
MTI2MiwxNCArMTI2MiwxNCBAQCBib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojppc0JhY2tGYWNl
VmlzaWJsZSgpIGNvbnN0CiAgICAgLy8gd2UgY2FuIHNpbXBseSBjb21wdXRlIHRoZSBtMzMoKSBv
ZiB0aGUgYWRqb2ludCAoYWRqdWdhdGUpIG1hdHJpeCwgd2l0aG91dCBjb21wdXRpbmcKICAgICAv
LyB0aGUgZnVsbCBhZGpvaW50LgogCi0gICAgZG91YmxlIGRldGVybWluYW50ID0gV2ViQ29yZTo6
ZGV0ZXJtaW5hbnQ0eDQobV9tYXRyaXgpOworICAgIEZsb2F0UHJlY2lzaW9uIGRldGVybWluYW50
ID0gV2ViQ29yZTo6ZGV0ZXJtaW5hbnQ0eDQobV9tYXRyaXgpOwogCiAgICAgLy8gSWYgdGhlIG1h
dHJpeCBpcyBub3QgaW52ZXJ0aWJsZSwgdGhlbiB3ZSBhc3N1bWUgaXRzIGJhY2tmYWNlIGlzIG5v
dCB2aXNpYmxlLgogICAgIGlmIChmYWJzKGRldGVybWluYW50KSA8IFNNQUxMX05VTUJFUikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZG91YmxlIGNvZmFjdG9yMzMgPSBkZXRlcm1pbmFu
dDN4MyhtMTEoKSwgbTEyKCksIG0xNCgpLCBtMjEoKSwgbTIyKCksIG0yNCgpLCBtNDEoKSwgbTQy
KCksIG00NCgpKTsKLSAgICBkb3VibGUgekNvbXBvbmVudE9mVHJhbnNmb3JtZWROb3JtYWwgPSBj
b2ZhY3RvcjMzIC8gZGV0ZXJtaW5hbnQ7CisgICAgRmxvYXRQcmVjaXNpb24gY29mYWN0b3IzMyA9
IGRldGVybWluYW50M3gzKG0xMSgpLCBtMTIoKSwgbTE0KCksIG0yMSgpLCBtMjIoKSwgbTI0KCks
IG00MSgpLCBtNDIoKSwgbTQ0KCkpOworICAgIEZsb2F0UHJlY2lzaW9uIHpDb21wb25lbnRPZlRy
YW5zZm9ybWVkTm9ybWFsID0gY29mYWN0b3IzMyAvIGRldGVybWluYW50OwogCiAgICAgcmV0dXJu
IHpDb21wb25lbnRPZlRyYW5zZm9ybWVkTm9ybWFsIDwgMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRy
aXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaAppbmRleCA5ZWRhNzQ2Li5mZmZhN2M5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0
cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oCkBAIC03MiwxNiArNzIsMTYgQEAgY2xhc3MgRmxvYXRRdWFk
OwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXggewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIHR5cGVkZWYgZG91YmxlIE1hdHJpeDRbNF1bNF07CisgICAgdHlw
ZWRlZiBGbG9hdFByZWNpc2lvbiBNYXRyaXg0WzRdWzRdOwogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSB7IG1ha2VJZGVudGl0eSgpOyB9CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkgeyAqdGhpcyA9IHQ7IH0KLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUs
IGRvdWJsZSBmKSB7IHNldE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKTsgfQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4KGRvdWJsZSBtMTEsIGRvdWJsZSBtMTIsIGRvdWJsZSBtMTMsIGRvdWJsZSBt
MTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG0yMSwgZG91YmxlIG0yMiwgZG91
YmxlIG0yMywgZG91YmxlIG0yNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbTMx
LCBkb3VibGUgbTMyLCBkb3VibGUgbTMzLCBkb3VibGUgbTM0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBtNDEsIGRvdWJsZSBtNDIsIGRvdWJsZSBtNDMsIGRvdWJsZSBtNDQpCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoRmxvYXRQcmVjaXNpb24gYSwgRmxvYXRQcmVjaXNpb24g
YiwgRmxvYXRQcmVjaXNpb24gYywgRmxvYXRQcmVjaXNpb24gZCwgRmxvYXRQcmVjaXNpb24gZSwg
RmxvYXRQcmVjaXNpb24gZikgeyBzZXRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZik7IH0KKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChGbG9hdFByZWNpc2lvbiBtMTEsIEZsb2F0UHJlY2lzaW9uIG0x
MiwgRmxvYXRQcmVjaXNpb24gbTEzLCBGbG9hdFByZWNpc2lvbiBtMTQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgRmxvYXRQcmVjaXNpb24gbTIxLCBGbG9hdFByZWNpc2lvbiBtMjIsIEZsb2F0
UHJlY2lzaW9uIG0yMywgRmxvYXRQcmVjaXNpb24gbTI0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIEZsb2F0UHJlY2lzaW9uIG0zMSwgRmxvYXRQcmVjaXNpb24gbTMyLCBGbG9hdFByZWNpc2lv
biBtMzMsIEZsb2F0UHJlY2lzaW9uIG0zNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h
dFByZWNpc2lvbiBtNDEsIEZsb2F0UHJlY2lzaW9uIG00MiwgRmxvYXRQcmVjaXNpb24gbTQzLCBG
bG9hdFByZWNpc2lvbiBtNDQpCiAgICAgewogICAgICAgICBzZXRNYXRyaXgobTExLCBtMTIsIG0x
MywgbTE0LCBtMjEsIG0yMiwgbTIzLCBtMjQsIG0zMSwgbTMyLCBtMzMsIG0zNCwgbTQxLCBtNDIs
IG00MywgbTQ0KTsKICAgICB9CkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChjb25zdCBRTWF0cml4NHg0Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0
TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwg
ZG91YmxlIGYpCisgICAgdm9pZCBzZXRNYXRyaXgoRmxvYXRQcmVjaXNpb24gYSwgRmxvYXRQcmVj
aXNpb24gYiwgRmxvYXRQcmVjaXNpb24gYywgRmxvYXRQcmVjaXNpb24gZCwgRmxvYXRQcmVjaXNp
b24gZSwgRmxvYXRQcmVjaXNpb24gZikKICAgICB7CiAgICAgICAgIG1fbWF0cml4WzBdWzBdID0g
YTsgbV9tYXRyaXhbMF1bMV0gPSBiOyBtX21hdHJpeFswXVsyXSA9IDA7IG1fbWF0cml4WzBdWzNd
ID0gMDsgCiAgICAgICAgIG1fbWF0cml4WzFdWzBdID0gYzsgbV9tYXRyaXhbMV1bMV0gPSBkOyBt
X21hdHJpeFsxXVsyXSA9IDA7IG1fbWF0cml4WzFdWzNdID0gMDsgCkBAIC05OSwxMCArOTksMTAg
QEAgcHVibGljOgogICAgICAgICBtX21hdHJpeFszXVswXSA9IGU7IG1fbWF0cml4WzNdWzFdID0g
ZjsgbV9tYXRyaXhbM11bMl0gPSAwOyBtX21hdHJpeFszXVszXSA9IDE7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc2V0TWF0cml4KGRvdWJsZSBtMTEsIGRvdWJsZSBtMTIsIGRvdWJsZSBtMTMsIGRv
dWJsZSBtMTQsCi0gICAgICAgICAgICAgICAgICAgZG91YmxlIG0yMSwgZG91YmxlIG0yMiwgZG91
YmxlIG0yMywgZG91YmxlIG0yNCwKLSAgICAgICAgICAgICAgICAgICBkb3VibGUgbTMxLCBkb3Vi
bGUgbTMyLCBkb3VibGUgbTMzLCBkb3VibGUgbTM0LAotICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBtNDEsIGRvdWJsZSBtNDIsIGRvdWJsZSBtNDMsIGRvdWJsZSBtNDQpCisgICAgdm9pZCBzZXRN
YXRyaXgoRmxvYXRQcmVjaXNpb24gbTExLCBGbG9hdFByZWNpc2lvbiBtMTIsIEZsb2F0UHJlY2lz
aW9uIG0xMywgRmxvYXRQcmVjaXNpb24gbTE0LAorICAgICAgICAgICAgICAgICAgIEZsb2F0UHJl
Y2lzaW9uIG0yMSwgRmxvYXRQcmVjaXNpb24gbTIyLCBGbG9hdFByZWNpc2lvbiBtMjMsIEZsb2F0
UHJlY2lzaW9uIG0yNCwKKyAgICAgICAgICAgICAgICAgICBGbG9hdFByZWNpc2lvbiBtMzEsIEZs
b2F0UHJlY2lzaW9uIG0zMiwgRmxvYXRQcmVjaXNpb24gbTMzLCBGbG9hdFByZWNpc2lvbiBtMzQs
CisgICAgICAgICAgICAgICAgICAgRmxvYXRQcmVjaXNpb24gbTQxLCBGbG9hdFByZWNpc2lvbiBt
NDIsIEZsb2F0UHJlY2lzaW9uIG00MywgRmxvYXRQcmVjaXNpb24gbTQ0KQogICAgIHsKICAgICAg
ICAgbV9tYXRyaXhbMF1bMF0gPSBtMTE7IG1fbWF0cml4WzBdWzFdID0gbTEyOyBtX21hdHJpeFsw
XVsyXSA9IG0xMzsgbV9tYXRyaXhbMF1bM10gPSBtMTQ7IAogICAgICAgICBtX21hdHJpeFsxXVsw
XSA9IG0yMTsgbV9tYXRyaXhbMV1bMV0gPSBtMjI7IG1fbWF0cml4WzFdWzJdID0gbTIzOyBtX21h
dHJpeFsxXVszXSA9IG0yNDsgCkBAIC0xMzAsOCArMTMwLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgbV9tYXRyaXhbM11bMF0gPT0gMCAmJiBtX21hdHJpeFszXVsxXSA9PSAwICYmIG1fbWF0
cml4WzNdWzJdID09IDAgJiYgbV9tYXRyaXhbM11bM10gPT0gMTsKICAgICB9CiAKLSAgICAvLyBU
aGlzIGZvcm0gcHJlc2VydmVzIHRoZSBkb3VibGUgbWF0aCBmcm9tIGlucHV0IHRvIG91dHB1dAot
ICAgIHZvaWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4MiwgZG91YmxlJiB5Mikg
Y29uc3QgeyBtdWx0VmVjTWF0cml4KHgsIHksIHgyLCB5Mik7IH0KKyAgICAvLyBUaGlzIGZvcm0g
cHJlc2VydmVzIHRoZSBGbG9hdFByZWNpc2lvbiBtYXRoIGZyb20gaW5wdXQgdG8gb3V0cHV0Cisg
ICAgdm9pZCBtYXAoRmxvYXRQcmVjaXNpb24geCwgRmxvYXRQcmVjaXNpb24geSwgRmxvYXRQcmVj
aXNpb24mIHgyLCBGbG9hdFByZWNpc2lvbiYgeTIpIGNvbnN0IHsgbXVsdFZlY01hdHJpeCh4LCB5
LCB4MiwgeTIpOyB9CiAKICAgICAvLyBNYXAgYSAzRCBwb2ludCB0aHJvdWdoIHRoZSB0cmFuc2Zv
cm0sIHJldHVybmluZyBhIDNEIHBvaW50LgogICAgIEZsb2F0UG9pbnQzRCBtYXBQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmKSBjb25zdDsKQEAgLTE3MSw4NiArMTcxLDg2IEBAIHB1YmxpYzoKICAg
ICAvLyB3aGlsZSBzYW5pdGl6aW5nIHZhbHVlcyBjcmVhdGVkIHdoZW4gdGhlIHcgY29tcG9uZW50
IGlzIG5lZ2F0aXZlLgogICAgIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGNsYW1wZWRCb3VuZHNPZlBy
b2plY3RlZFF1YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CiAKLSAgICBkb3VibGUgbTExKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMF1bMF07IH0KLSAgICB2b2lkIHNldE0xMShkb3VibGUg
ZikgeyBtX21hdHJpeFswXVswXSA9IGY7IH0KLSAgICBkb3VibGUgbTEyKCkgY29uc3QgeyByZXR1
cm4gbV9tYXRyaXhbMF1bMV07IH0KLSAgICB2b2lkIHNldE0xMihkb3VibGUgZikgeyBtX21hdHJp
eFswXVsxXSA9IGY7IH0KLSAgICBkb3VibGUgbTEzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhb
MF1bMl07IH0KLSAgICB2b2lkIHNldE0xMyhkb3VibGUgZikgeyBtX21hdHJpeFswXVsyXSA9IGY7
IH0KLSAgICBkb3VibGUgbTE0KCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMF1bM107IH0KLSAg
ICB2b2lkIHNldE0xNChkb3VibGUgZikgeyBtX21hdHJpeFswXVszXSA9IGY7IH0KLSAgICBkb3Vi
bGUgbTIxKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMV1bMF07IH0KLSAgICB2b2lkIHNldE0y
MShkb3VibGUgZikgeyBtX21hdHJpeFsxXVswXSA9IGY7IH0KLSAgICBkb3VibGUgbTIyKCkgY29u
c3QgeyByZXR1cm4gbV9tYXRyaXhbMV1bMV07IH0KLSAgICB2b2lkIHNldE0yMihkb3VibGUgZikg
eyBtX21hdHJpeFsxXVsxXSA9IGY7IH0KLSAgICBkb3VibGUgbTIzKCkgY29uc3QgeyByZXR1cm4g
bV9tYXRyaXhbMV1bMl07IH0KLSAgICB2b2lkIHNldE0yMyhkb3VibGUgZikgeyBtX21hdHJpeFsx
XVsyXSA9IGY7IH0KLSAgICBkb3VibGUgbTI0KCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMV1b
M107IH0KLSAgICB2b2lkIHNldE0yNChkb3VibGUgZikgeyBtX21hdHJpeFsxXVszXSA9IGY7IH0K
LSAgICBkb3VibGUgbTMxKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bMF07IH0KLSAgICB2
b2lkIHNldE0zMShkb3VibGUgZikgeyBtX21hdHJpeFsyXVswXSA9IGY7IH0KLSAgICBkb3VibGUg
bTMyKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bMV07IH0KLSAgICB2b2lkIHNldE0zMihk
b3VibGUgZikgeyBtX21hdHJpeFsyXVsxXSA9IGY7IH0KLSAgICBkb3VibGUgbTMzKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXRyaXhbMl1bMl07IH0KLSAgICB2b2lkIHNldE0zMyhkb3VibGUgZikgeyBt
X21hdHJpeFsyXVsyXSA9IGY7IH0KLSAgICBkb3VibGUgbTM0KCkgY29uc3QgeyByZXR1cm4gbV9t
YXRyaXhbMl1bM107IH0KLSAgICB2b2lkIHNldE0zNChkb3VibGUgZikgeyBtX21hdHJpeFsyXVsz
XSA9IGY7IH0KLSAgICBkb3VibGUgbTQxKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbM11bMF07
IH0KLSAgICB2b2lkIHNldE00MShkb3VibGUgZikgeyBtX21hdHJpeFszXVswXSA9IGY7IH0KLSAg
ICBkb3VibGUgbTQyKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbM11bMV07IH0KLSAgICB2b2lk
IHNldE00Mihkb3VibGUgZikgeyBtX21hdHJpeFszXVsxXSA9IGY7IH0KLSAgICBkb3VibGUgbTQz
KCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbM11bMl07IH0KLSAgICB2b2lkIHNldE00Myhkb3Vi
bGUgZikgeyBtX21hdHJpeFszXVsyXSA9IGY7IH0KLSAgICBkb3VibGUgbTQ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRyaXhbM11bM107IH0KLSAgICB2b2lkIHNldE00NChkb3VibGUgZikgeyBtX21h
dHJpeFszXVszXSA9IGY7IH0KKyAgICBGbG9hdFByZWNpc2lvbiBtMTEoKSBjb25zdCB7IHJldHVy
biBtX21hdHJpeFswXVswXTsgfQorICAgIHZvaWQgc2V0TTExKEZsb2F0UHJlY2lzaW9uIGYpIHsg
bV9tYXRyaXhbMF1bMF0gPSBmOyB9CisgICAgRmxvYXRQcmVjaXNpb24gbTEyKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRyaXhbMF1bMV07IH0KKyAgICB2b2lkIHNldE0xMihGbG9hdFByZWNpc2lvbiBm
KSB7IG1fbWF0cml4WzBdWzFdID0gZjsgfQorICAgIEZsb2F0UHJlY2lzaW9uIG0xMygpIGNvbnN0
IHsgcmV0dXJuIG1fbWF0cml4WzBdWzJdOyB9CisgICAgdm9pZCBzZXRNMTMoRmxvYXRQcmVjaXNp
b24gZikgeyBtX21hdHJpeFswXVsyXSA9IGY7IH0KKyAgICBGbG9hdFByZWNpc2lvbiBtMTQoKSBj
b25zdCB7IHJldHVybiBtX21hdHJpeFswXVszXTsgfQorICAgIHZvaWQgc2V0TTE0KEZsb2F0UHJl
Y2lzaW9uIGYpIHsgbV9tYXRyaXhbMF1bM10gPSBmOyB9CisgICAgRmxvYXRQcmVjaXNpb24gbTIx
KCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMV1bMF07IH0KKyAgICB2b2lkIHNldE0yMShGbG9h
dFByZWNpc2lvbiBmKSB7IG1fbWF0cml4WzFdWzBdID0gZjsgfQorICAgIEZsb2F0UHJlY2lzaW9u
IG0yMigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzFdWzFdOyB9CisgICAgdm9pZCBzZXRNMjIo
RmxvYXRQcmVjaXNpb24gZikgeyBtX21hdHJpeFsxXVsxXSA9IGY7IH0KKyAgICBGbG9hdFByZWNp
c2lvbiBtMjMoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeFsxXVsyXTsgfQorICAgIHZvaWQgc2V0
TTIzKEZsb2F0UHJlY2lzaW9uIGYpIHsgbV9tYXRyaXhbMV1bMl0gPSBmOyB9CisgICAgRmxvYXRQ
cmVjaXNpb24gbTI0KCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMV1bM107IH0KKyAgICB2b2lk
IHNldE0yNChGbG9hdFByZWNpc2lvbiBmKSB7IG1fbWF0cml4WzFdWzNdID0gZjsgfQorICAgIEZs
b2F0UHJlY2lzaW9uIG0zMSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzJdWzBdOyB9CisgICAg
dm9pZCBzZXRNMzEoRmxvYXRQcmVjaXNpb24gZikgeyBtX21hdHJpeFsyXVswXSA9IGY7IH0KKyAg
ICBGbG9hdFByZWNpc2lvbiBtMzIoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeFsyXVsxXTsgfQor
ICAgIHZvaWQgc2V0TTMyKEZsb2F0UHJlY2lzaW9uIGYpIHsgbV9tYXRyaXhbMl1bMV0gPSBmOyB9
CisgICAgRmxvYXRQcmVjaXNpb24gbTMzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bMl07
IH0KKyAgICB2b2lkIHNldE0zMyhGbG9hdFByZWNpc2lvbiBmKSB7IG1fbWF0cml4WzJdWzJdID0g
ZjsgfQorICAgIEZsb2F0UHJlY2lzaW9uIG0zNCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzJd
WzNdOyB9CisgICAgdm9pZCBzZXRNMzQoRmxvYXRQcmVjaXNpb24gZikgeyBtX21hdHJpeFsyXVsz
XSA9IGY7IH0KKyAgICBGbG9hdFByZWNpc2lvbiBtNDEoKSBjb25zdCB7IHJldHVybiBtX21hdHJp
eFszXVswXTsgfQorICAgIHZvaWQgc2V0TTQxKEZsb2F0UHJlY2lzaW9uIGYpIHsgbV9tYXRyaXhb
M11bMF0gPSBmOyB9CisgICAgRmxvYXRQcmVjaXNpb24gbTQyKCkgY29uc3QgeyByZXR1cm4gbV9t
YXRyaXhbM11bMV07IH0KKyAgICB2b2lkIHNldE00MihGbG9hdFByZWNpc2lvbiBmKSB7IG1fbWF0
cml4WzNdWzFdID0gZjsgfQorICAgIEZsb2F0UHJlY2lzaW9uIG00MygpIGNvbnN0IHsgcmV0dXJu
IG1fbWF0cml4WzNdWzJdOyB9CisgICAgdm9pZCBzZXRNNDMoRmxvYXRQcmVjaXNpb24gZikgeyBt
X21hdHJpeFszXVsyXSA9IGY7IH0KKyAgICBGbG9hdFByZWNpc2lvbiBtNDQoKSBjb25zdCB7IHJl
dHVybiBtX21hdHJpeFszXVszXTsgfQorICAgIHZvaWQgc2V0TTQ0KEZsb2F0UHJlY2lzaW9uIGYp
IHsgbV9tYXRyaXhbM11bM10gPSBmOyB9CiAgICAgCi0gICAgZG91YmxlIGEoKSBjb25zdCB7IHJl
dHVybiBtX21hdHJpeFswXVswXTsgfQotICAgIHZvaWQgc2V0QShkb3VibGUgYSkgeyBtX21hdHJp
eFswXVswXSA9IGE7IH0KKyAgICBGbG9hdFByZWNpc2lvbiBhKCkgY29uc3QgeyByZXR1cm4gbV9t
YXRyaXhbMF1bMF07IH0KKyAgICB2b2lkIHNldEEoRmxvYXRQcmVjaXNpb24gYSkgeyBtX21hdHJp
eFswXVswXSA9IGE7IH0KIAotICAgIGRvdWJsZSBiKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhb
MF1bMV07IH0KLSAgICB2b2lkIHNldEIoZG91YmxlIGIpIHsgbV9tYXRyaXhbMF1bMV0gPSBiOyB9
CisgICAgRmxvYXRQcmVjaXNpb24gYigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzBdWzFdOyB9
CisgICAgdm9pZCBzZXRCKEZsb2F0UHJlY2lzaW9uIGIpIHsgbV9tYXRyaXhbMF1bMV0gPSBiOyB9
CiAKLSAgICBkb3VibGUgYygpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzFdWzBdOyB9Ci0gICAg
dm9pZCBzZXRDKGRvdWJsZSBjKSB7IG1fbWF0cml4WzFdWzBdID0gYzsgfQorICAgIEZsb2F0UHJl
Y2lzaW9uIGMoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeFsxXVswXTsgfQorICAgIHZvaWQgc2V0
QyhGbG9hdFByZWNpc2lvbiBjKSB7IG1fbWF0cml4WzFdWzBdID0gYzsgfQogCi0gICAgZG91Ymxl
IGQoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeFsxXVsxXTsgfQotICAgIHZvaWQgc2V0RChkb3Vi
bGUgZCkgeyBtX21hdHJpeFsxXVsxXSA9IGQ7IH0KKyAgICBGbG9hdFByZWNpc2lvbiBkKCkgY29u
c3QgeyByZXR1cm4gbV9tYXRyaXhbMV1bMV07IH0KKyAgICB2b2lkIHNldEQoRmxvYXRQcmVjaXNp
b24gZCkgeyBtX21hdHJpeFsxXVsxXSA9IGQ7IH0KIAotICAgIGRvdWJsZSBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRyaXhbM11bMF07IH0KLSAgICB2b2lkIHNldEUoZG91YmxlIGUpIHsgbV9tYXRy
aXhbM11bMF0gPSBlOyB9CisgICAgRmxvYXRQcmVjaXNpb24gZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF0cml4WzNdWzBdOyB9CisgICAgdm9pZCBzZXRFKEZsb2F0UHJlY2lzaW9uIGUpIHsgbV9tYXRy
aXhbM11bMF0gPSBlOyB9CiAKLSAgICBkb3VibGUgZigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4
WzNdWzFdOyB9Ci0gICAgdm9pZCBzZXRGKGRvdWJsZSBmKSB7IG1fbWF0cml4WzNdWzFdID0gZjsg
fQorICAgIEZsb2F0UHJlY2lzaW9uIGYoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeFszXVsxXTsg
fQorICAgIHZvaWQgc2V0RihGbG9hdFByZWNpc2lvbiBmKSB7IG1fbWF0cml4WzNdWzFdID0gZjsg
fQogCiAgICAgLy8gdGhpcyA9IHRoaXMgKiBtYXQKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bXVsdGlwbHkoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBzY2FsZShkb3VibGUpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY2Fs
ZU5vblVuaWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBzY2FsZTNkKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBkb3VibGUgc3opOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBzY2FsZShGbG9hdFByZWNpc2lvbik7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHNjYWxlTm9uVW5pZm9ybShGbG9hdFByZWNpc2lvbiBzeCwgRmxvYXRQcmVjaXNp
b24gc3kpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY2FsZTNkKEZsb2F0UHJlY2lzaW9u
IHN4LCBGbG9hdFByZWNpc2lvbiBzeSwgRmxvYXRQcmVjaXNpb24gc3opOwogICAgIAotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiByb3RhdGUoZG91YmxlIGQpIHsgcmV0dXJuIHJvdGF0ZTNkKDAs
IDAsIGQpOyB9Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJvdGF0ZUZyb21WZWN0b3IoZG91
YmxlIHgsIGRvdWJsZSB5KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcm90YXRlM2QoZG91
YmxlIHJ4LCBkb3VibGUgcnksIGRvdWJsZSByeik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHJvdGF0ZShGbG9hdFByZWNpc2lvbiBkKSB7IHJldHVybiByb3RhdGUzZCgwLCAwLCBkKTsgfQor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiByb3RhdGVGcm9tVmVjdG9yKEZsb2F0UHJlY2lzaW9u
IHgsIEZsb2F0UHJlY2lzaW9uIHkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiByb3RhdGUz
ZChGbG9hdFByZWNpc2lvbiByeCwgRmxvYXRQcmVjaXNpb24gcnksIEZsb2F0UHJlY2lzaW9uIHJ6
KTsKICAgICAKICAgICAvLyBUaGUgdmVjdG9yICh4LHkseikgaXMgbm9ybWFsaXplZCBpZiBpdCdz
IG5vdCBhbHJlYWR5LiBBIHZlY3RvciBvZgogICAgIC8vICgwLDAsMCkgdXNlcyBhIHZlY3RvciBv
ZiAoMCwwLDEpLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiByb3RhdGUzZChkb3VibGUgeCwg
ZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgYW5nbGUpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4JiByb3RhdGUzZChGbG9hdFByZWNpc2lvbiB4LCBGbG9hdFByZWNpc2lvbiB5LCBGbG9hdFBy
ZWNpc2lvbiB6LCBGbG9hdFByZWNpc2lvbiBhbmdsZSk7CiAgICAgCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSk7Ci0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zbGF0ZTNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHop
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2xhdGUoRmxvYXRQcmVjaXNpb24gdHgs
IEZsb2F0UHJlY2lzaW9uIHR5KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNsYXRl
M2QoRmxvYXRQcmVjaXNpb24gdHgsIEZsb2F0UHJlY2lzaW9uIHR5LCBGbG9hdFByZWNpc2lvbiB0
eik7CiAKICAgICAvLyB0cmFuc2xhdGlvbiBhZGRlZCB3aXRoIGEgcG9zdC1tdWx0aXBseQotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2xhdGVSaWdodChkb3VibGUgdHgsIGRvdWJsZSB0
eSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zbGF0ZVJpZ2h0M2QoZG91YmxlIHR4
LCBkb3VibGUgdHksIGRvdWJsZSB0eik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
bGF0ZVJpZ2h0KEZsb2F0UHJlY2lzaW9uIHR4LCBGbG9hdFByZWNpc2lvbiB0eSk7CisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zbGF0ZVJpZ2h0M2QoRmxvYXRQcmVjaXNpb24gdHgsIEZs
b2F0UHJlY2lzaW9uIHR5LCBGbG9hdFByZWNpc2lvbiB0eik7CiAgICAgCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGZsaXBYKCk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZsaXBZKCk7
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNrZXcoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFu
Z2xlWSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNrZXdYKGRvdWJsZSBhbmdsZSkgeyBy
ZXR1cm4gc2tldyhhbmdsZSwgMCk7IH0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2tld1ko
ZG91YmxlIGFuZ2xlKSB7IHJldHVybiBza2V3KDAsIGFuZ2xlKTsgfQorICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBza2V3KEZsb2F0UHJlY2lzaW9uIGFuZ2xlWCwgRmxvYXRQcmVjaXNpb24gYW5n
bGVZKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2tld1goRmxvYXRQcmVjaXNpb24gYW5n
bGUpIHsgcmV0dXJuIHNrZXcoYW5nbGUsIDApOyB9CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHNrZXdZKEZsb2F0UHJlY2lzaW9uIGFuZ2xlKSB7IHJldHVybiBza2V3KDAsIGFuZ2xlKTsgfQog
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGFwcGx5UGVyc3BlY3RpdmUoZG91YmxlIHApOwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBhcHBseVBlcnNwZWN0aXZlKEZsb2F0UHJlY2lzaW9u
IHApOwogICAgIGJvb2wgaGFzUGVyc3BlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeFsy
XVszXSAhPSAwLjBmOyB9CiAKICAgICAvLyByZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBt
YXBzIGEgcmVjdCB0byBhIHJlY3QKQEAgLTI2NCwxNyArMjY0LDE3IEBAIHB1YmxpYzoKIAogICAg
IC8vIGRlY29tcG9zZSB0aGUgbWF0cml4IGludG8gaXRzIGNvbXBvbmVudCBwYXJ0cwogICAgIHR5
cGVkZWYgc3RydWN0IHsKLSAgICAgICAgZG91YmxlIHNjYWxlWCwgc2NhbGVZLCBzY2FsZVo7Ci0g
ICAgICAgIGRvdWJsZSBza2V3WFksIHNrZXdYWiwgc2tld1laOwotICAgICAgICBkb3VibGUgcXVh
dGVybmlvblgsIHF1YXRlcm5pb25ZLCBxdWF0ZXJuaW9uWiwgcXVhdGVybmlvblc7Ci0gICAgICAg
IGRvdWJsZSB0cmFuc2xhdGVYLCB0cmFuc2xhdGVZLCB0cmFuc2xhdGVaOwotICAgICAgICBkb3Vi
bGUgcGVyc3BlY3RpdmVYLCBwZXJzcGVjdGl2ZVksIHBlcnNwZWN0aXZlWiwgcGVyc3BlY3RpdmVX
OworICAgICAgICBGbG9hdFByZWNpc2lvbiBzY2FsZVgsIHNjYWxlWSwgc2NhbGVaOworICAgICAg
ICBGbG9hdFByZWNpc2lvbiBza2V3WFksIHNrZXdYWiwgc2tld1laOworICAgICAgICBGbG9hdFBy
ZWNpc2lvbiBxdWF0ZXJuaW9uWCwgcXVhdGVybmlvblksIHF1YXRlcm5pb25aLCBxdWF0ZXJuaW9u
VzsKKyAgICAgICAgRmxvYXRQcmVjaXNpb24gdHJhbnNsYXRlWCwgdHJhbnNsYXRlWSwgdHJhbnNs
YXRlWjsKKyAgICAgICAgRmxvYXRQcmVjaXNpb24gcGVyc3BlY3RpdmVYLCBwZXJzcGVjdGl2ZVks
IHBlcnNwZWN0aXZlWiwgcGVyc3BlY3RpdmVXOwogICAgIH0gRGVjb21wb3NlZFR5cGU7CiAgICAg
CiAgICAgYm9vbCBkZWNvbXBvc2UoRGVjb21wb3NlZFR5cGUmIGRlY29tcCkgY29uc3Q7CiAgICAg
dm9pZCByZWNvbXBvc2UoY29uc3QgRGVjb21wb3NlZFR5cGUmIGRlY29tcCk7CiAgICAgCi0gICAg
dm9pZCBibGVuZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnJvbSwgZG91YmxlIHByb2dy
ZXNzKTsKKyAgICB2b2lkIGJsZW5kKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBG
bG9hdFByZWNpc2lvbiBwcm9ncmVzcyk7CiAKICAgICBib29sIGlzQWZmaW5lKCkgY29uc3QKICAg
ICB7CkBAIC0zNzQsMTAgKzM3NCwxMCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gbXVs
dGlwbHkgcGFzc2VkIDJEIHBvaW50IGJ5IG1hdHJpeCAoYXNzdW1lIHo9MCkKLSAgICB2b2lkIG11
bHRWZWNNYXRyaXgoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUmIGRzdFgsIGRvdWJsZSYgZHN0
WSkgY29uc3Q7CisgICAgdm9pZCBtdWx0VmVjTWF0cml4KEZsb2F0UHJlY2lzaW9uIHgsIEZsb2F0
UHJlY2lzaW9uIHksIEZsb2F0UHJlY2lzaW9uJiBkc3RYLCBGbG9hdFByZWNpc2lvbiYgZHN0WSkg
Y29uc3Q7CiAKICAgICAvLyBtdWx0aXBseSBwYXNzZWQgM0QgcG9pbnQgYnkgbWF0cml4Ci0gICAg
dm9pZCBtdWx0VmVjTWF0cml4KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSYg
ZHN0WCwgZG91YmxlJiBkc3RZLCBkb3VibGUmIGRzdFopIGNvbnN0OworICAgIHZvaWQgbXVsdFZl
Y01hdHJpeChGbG9hdFByZWNpc2lvbiB4LCBGbG9hdFByZWNpc2lvbiB5LCBGbG9hdFByZWNpc2lv
biB6LCBGbG9hdFByZWNpc2lvbiYgZHN0WCwgRmxvYXRQcmVjaXNpb24mIGRzdFksIEZsb2F0UHJl
Y2lzaW9uJiBkc3RaKSBjb25zdDsKIAogICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IE1hdHJpeDQg
bSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAKaW5kZXggODFjMzBhZS4uZDZkM2JiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwg
ZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKK1Bhc3NSZWZQdHI8VHJhbnNm
b3JtT3BlcmF0aW9uPiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgRmxvYXRQcmVjaXNpb24gcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5KQogewogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlz
KSkKICAgICAgICAgcmV0dXJuIHRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaAppbmRleCBmYzJiYzFmLi5mYmQzMWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTQzLDkgKzQzLDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbih0eCwgdHksIHR6LCB0eXBlKSk7CiAgICAgfQogCi0gICAgZG91YmxlIHgoY29uc3QgRmxv
YXRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdCB7IHJldHVybiBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG1feCwgYm9yZGVyQm94U2l6ZS53aWR0aCgpKTsgfQotICAgIGRvdWJsZSB5KGNvbnN0IEZsb2F0
U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QgeyByZXR1cm4gZmxvYXRWYWx1ZUZvckxlbmd0aCht
X3ksIGJvcmRlckJveFNpemUuaGVpZ2h0KCkpOyB9Ci0gICAgZG91YmxlIHooY29uc3QgRmxvYXRT
aXplJikgY29uc3QgeyByZXR1cm4gZmxvYXRWYWx1ZUZvckxlbmd0aChtX3osIDEpOyB9CisgICAg
RmxvYXRQcmVjaXNpb24geChjb25zdCBGbG9hdFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0IHsg
cmV0dXJuIGZsb2F0VmFsdWVGb3JMZW5ndGgobV94LCBib3JkZXJCb3hTaXplLndpZHRoKCkpOyB9
CisgICAgRmxvYXRQcmVjaXNpb24geShjb25zdCBGbG9hdFNpemUmIGJvcmRlckJveFNpemUpIGNv
bnN0IHsgcmV0dXJuIGZsb2F0VmFsdWVGb3JMZW5ndGgobV95LCBib3JkZXJCb3hTaXplLmhlaWdo
dCgpKTsgfQorICAgIEZsb2F0UHJlY2lzaW9uIHooY29uc3QgRmxvYXRTaXplJikgY29uc3QgeyBy
ZXR1cm4gZmxvYXRWYWx1ZUZvckxlbmd0aChtX3osIDEpOyB9CiAKICAgICBMZW5ndGggeCgpIGNv
bnN0IHsgcmV0dXJuIG1feDsgfQogICAgIExlbmd0aCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9
CkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX3gudHlwZSgpID09
IFBlcmNlbnQgfHwgbV95LnR5cGUoKSA9PSBQZXJjZW50OwogICAgIH0KIAotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNl
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIEZsb2F0UHJlY2lzaW9uIHByb2dyZXNzLCBib29s
IGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKIAogICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbihjb25zdCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5LCBjb25zdCBMZW5ndGgmIHR6
LCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgICAgIDogbV94KHR4KQotLSAKMS43LjIuNQoK
</data>
<flag name="commit-queue"
          id="181184"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>168725</attachid>
            <date>2012-10-15 08:54:00 -0700</date>
            <delta_ts>2012-10-15 08:54:00 -0700</delta_ts>
            <desc>transform.html</desc>
            <filename>transform.html</filename>
            <type>text/html</type>
            <size>1137</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgoKICA8c3R5bGU+CiAgICAjdHJhbnMgZGl2Om5vdCguY2xlYXIpewoKICAg
ICAgd2lkdGg6NXB4OwogICAgICBoZWlnaHQ6NXB4OwogICAgICBmbG9hdDpsZWZ0OwogICAgICBi
YWNrZ3JvdW5kLWNvbG9yOmdyZWVuOwogICAgfQogIDwvc3R5bGU+Cgo8L2hlYWQ+CgoKCjx0YWJs
ZT48dHI+PHRkIHdpZHRoPSIxMjVweCI+CjxkaXYgaWQ9InRyYW5zIj4KPC9kaXY+CjwvdGQ+PC90
cj48L3RhYmxlPgoKCjxhIGlkPSJmcHMiPmZwczwvYT4KCgo8c2NyaXB0PiAKCnZhciByb3VuZCA9
IE1hdGgucm91bmQ7Cgp2YXIgZnBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZwcycpOwp2
YXIgdHJhbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJhbnMnKTsKCnZhciBzdGFydERh
dGUgPSBuZXcgRGF0ZSgpOwp2YXIgZnJhbWVDb3VudGVyID0gMDsKdmFyIGFuaW1hdGlvbkNvdW50
ZXIgPSAxOwoKCnZhciBtYXggPSA1MDA7CnZhciB0ZXh0ID0gQXJyYXkoKTsKCgpmb3IodmFyIGk9
MDtpPG1heDtpKyspIHsKICAgIHZhciBuZXdkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKICAgIHZhciBkaXZJZE5hbWUgPSAnZWxlbWVudCcgKyBpOwogICAgbmV3ZGl2LnNldEF0
dHJpYnV0ZSgnaWQnLCBkaXZJZE5hbWUpOwogICAgdHJhbnMuYXBwZW5kQ2hpbGQobmV3ZGl2KTsK
CiAgICB0ZXh0W2ldID0gbmV3ZGl2Owp9CgoKZnVuY3Rpb24gYW5pbSgpIHsKCiAgICBhbmltYXRp
b25Db3VudGVyKz0xOwogICAgaWYgKGFuaW1hdGlvbkNvdW50ZXIgPiAzNjApCiAgICAgICAgYW5p
bWF0aW9uQ291bnRlciA9IDE7CgogICAgZm9yKHZhciBpPTA7IGk8dGV4dC5sZW5ndGg7IGkrKykK
ICAgICAgICB0ZXh0W2ldLnN0eWxlWydXZWJraXRUcmFuc2Zvcm0nXSA9ICJyb3RhdGVYKCIgKyBh
bmltYXRpb25Db3VudGVyICsgImRlZykgcm90YXRlWSgiICsgYW5pbWF0aW9uQ291bnRlciArICJk
ZWcpIjsKCiAgICBmcmFtZUNvdW50ZXIrKzsKICAgIGZwcy50ZXh0Q29udGVudCA9IChyb3VuZChm
cmFtZUNvdW50ZXIgKiAxMDAwMDAgLyAobmV3IERhdGUoKSAtIHN0YXJ0RGF0ZSkpIC8gMTAwKSAr
ICIgZnBzIjsKfQoKc2V0SW50ZXJ2YWwoYW5pbSwxKTsKCjwvc2NyaXB0PgoKPC9odG1sPgoK
</data>

          </attachment>
      

    </bug>

</bugzilla>