<?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>233214</bug_id>
          
          <creation_ts>2021-11-16 14:18:58 -0800</creation_ts>
          <short_desc>[GPU Process] [Filters 6/23] Build a postfix expression for applying the FilterEffects of the SVGFilter</short_desc>
          <delta_ts>2021-11-29 21:35:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1815648</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-16 14:18:58 -0800</bug_when>
    <thetext>The goal is to have all inputs of each FilterEffect be applied before applying it. This will eliminate the need to do recursive applying in FilterEffect::apply(). And it will also eliminate the need to store the rectangle of the result of FilterEffect. Once the absolutePaintRect is calculated, the result image can be created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815665</commentid>
    <comment_count>1</comment_count>
      <attachid>444437</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-16 14:50:09 -0800</bug_when>
    <thetext>Created attachment 444437
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815675</commentid>
    <comment_count>2</comment_count>
      <attachid>444437</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-16 15:20:42 -0800</bug_when>
    <thetext>Comment on attachment 444437
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        caller knows that applying the filter function was not successful.

&quot;knows whether applying the filter function was successful&quot;

&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:400
&gt;          // Rare situation, not optimizied for speed

(pre-existing) &quot;optimized&quot;

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:148
&gt;      if (hasResult())
&gt; -        return;
&gt; +        return true;

Is it the case that we should never call FilterEffect::apply() twice on the same object? Wondering if we should `ASSERT(!hasResult())` here before returning true if we do have a result already.

&gt; Source/WebCore/svg/graphics/filters/SVGFilter.cpp:108
&gt; +    lastEffect()-&gt;clearResultsRecursive();

Will you change this in a later patch to be non-recursive?

&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:186
&gt; +    if (stack.contains(effect))

SVG filters are unlikely to have very deep filter effect trees, but this will cause buildExpression to take O(n^2) time (where n is the depth of the expression tree). Can we either keep a side HashSet or (better) a bool on the FilterEffect that gets set and cleared as the effect is pushed to and popped from the stack?

&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:189
&gt; +    expression.insert(0, effect);

This will also cause buildExpression to take O(n^2) time (where n is the total number of effects), if we keep inserting items at the front. Instead you could append them to the end, and as a final step, reverse the vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815677</commentid>
    <comment_count>3</comment_count>
      <attachid>444437</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-16 15:22:16 -0800</bug_when>
    <thetext>Comment on attachment 444437
Patch

r- to see another version with comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815750</commentid>
    <comment_count>4</comment_count>
      <attachid>444437</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-16 17:51:14 -0800</bug_when>
    <thetext>Comment on attachment 444437
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:15
&gt;&gt; +        caller knows that applying the filter function was not successful.
&gt; 
&gt; &quot;knows whether applying the filter function was successful&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:400
&gt;&gt;          // Rare situation, not optimizied for speed
&gt; 
&gt; (pre-existing) &quot;optimized&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:148
&gt;&gt; +        return true;
&gt; 
&gt; Is it the case that we should never call FilterEffect::apply() twice on the same object? Wondering if we should `ASSERT(!hasResult())` here before returning true if we do have a result already.

Consider the following filter:

&lt;svg width=&quot;7.5cm&quot; height=&quot;5cm&quot; viewBox=&quot;0 0 200 120&quot;&gt;
    &lt;defs&gt;
        &lt;filter id=&quot;MyFilter&quot; filterUnits=&quot;userSpaceOnUse&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;200&quot; height=&quot;120&quot;&gt;
            &lt;feGaussianBlur in=&quot;SourceAlpha&quot; stdDeviation=&quot;4&quot; result=&quot;blur&quot;/&gt;
            &lt;feOffset in=&quot;blur&quot; dx=&quot;4&quot; dy=&quot;4&quot; result=&quot;offsetBlur&quot;/&gt;
            &lt;feSpecularLighting in=&quot;blur&quot; surfaceScale=&quot;5&quot; specularConstant=&quot;.75&quot;  specularExponent=&quot;20&quot; lighting-color=&quot;#bbbbbb&quot; result=&quot;specOut&quot;&gt;
                &lt;fePointLight x=&quot;-5000&quot; y=&quot;-10000&quot; z=&quot;20000&quot;/&gt;
            &lt;/feSpecularLighting&gt;
            &lt;feComposite in=&quot;specOut&quot; in2=&quot;SourceAlpha&quot; operator=&quot;in&quot; result=&quot;specOut&quot;/&gt;
            &lt;feComposite in=&quot;SourceGraphic&quot; in2=&quot;specOut&quot; operator=&quot;arithmetic&quot;  k1=&quot;0&quot; k2=&quot;1&quot; k3=&quot;1&quot; k4=&quot;0&quot; result=&quot;litPaint&quot;/&gt;
            &lt;feMerge&gt;
                &lt;feMergeNode in=&quot;offsetBlur&quot;/&gt;
                &lt;feMergeNode in=&quot;litPaint&quot;/&gt;
            &lt;/feMerge&gt;
        &lt;/filter&gt;
    &lt;/defs&gt;
&lt;/svg&gt;

This should generate the following tree of FilterEffects:
(1) FEMerge

    (2) FEOffset (offsetBlur)

        (3) FEGaussianBlur (blur)

            (4) SourceAlpha

                (5) SoureGraphic

    (6) FEComposite (litPaint)

        (7) SoureGraphic

        (8) FEComposite (specOut 2)

            (9) FESpecularLighting (specOut 1)

                (10) FEGaussianBlur (blur)

                    (11) SourceAlpha

                        (12) SoureGraphic

            (13) SourceAlpha

                (14) SoureGraphic

The order of applying this tree with and without this patch is the following:

(5) SoureGraphic
(4) SourceAlpha
(3) FEGaussianBlur (blur)
(2) FEOffset (offsetBlur)
(7) SoureGraphic
(12) SoureGraphic
(11) SourceAlpha
(10) FEGaussianBlur (blur)
(9) FESpecularLighting (specOut 1)
(14) SoureGraphic
(13) SourceAlpha
(8) FEComposite (specOut 2)
(6) FEComposite (litPaint)
(1) FEMerge

As you can see some FilterEffects are referenced more than once in this order because there are referenced multiple times in the filter. So once a FilterEffect is applied we should return true and this is a legitimate case.

This order of applying the FilterEffects is what SVGFilterBuilder::buildExpression() will return.

&gt;&gt; Source/WebCore/svg/graphics/filters/SVGFilter.cpp:108
&gt;&gt; +    lastEffect()-&gt;clearResultsRecursive();
&gt; 
&gt; Will you change this in a later patch to be non-recursive?

Fixed.

&gt;&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:186
&gt;&gt; +    if (stack.contains(effect))
&gt; 
&gt; SVG filters are unlikely to have very deep filter effect trees, but this will cause buildExpression to take O(n^2) time (where n is the depth of the expression tree). Can we either keep a side HashSet or (better) a bool on the FilterEffect that gets set and cleared as the effect is pushed to and popped from the stack?

buildEffectExpression() just flattens the recursion we used to do in FilterEffect::apply(). We also drop applying the SVG filters if the number nodes in the tree is more than 100 nodes, see SVGFilterBuilder::buildFilterEffects. So the size of expression and stack should not be more than 100 at any point.

&gt;&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:189
&gt;&gt; +    expression.insert(0, effect);
&gt; 
&gt; This will also cause buildExpression to take O(n^2) time (where n is the total number of effects), if we keep inserting items at the front. Instead you could append them to the end, and as a final step, reverse the vector.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815751</commentid>
    <comment_count>5</comment_count>
      <attachid>444459</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-16 17:52:53 -0800</bug_when>
    <thetext>Created attachment 444459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815770</commentid>
    <comment_count>6</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-16 18:22:10 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #4)
&gt; As you can see some FilterEffects are referenced more than once in this
&gt; order because there are referenced multiple times in the filter. So once a
&gt; FilterEffect is applied we should return true and this is a legitimate case.

I see now.

&gt; &gt; SVG filters are unlikely to have very deep filter effect trees, but this will cause buildExpression to take O(n^2) time (where n is the depth of the expression tree). Can we either keep a side HashSet or (better) a bool on the FilterEffect that gets set and cleared as the effect is pushed to and popped from the stack?
&gt; 
&gt; buildEffectExpression() just flattens the recursion we used to do in
&gt; FilterEffect::apply(). We also drop applying the SVG filters if the number
&gt; nodes in the tree is more than 100 nodes, see
&gt; SVGFilterBuilder::buildFilterEffects. So the size of expression and stack
&gt; should not be more than 100 at any point.

OK so worst case we perform (100 * 99) / 2 = 4950 comparisons while searching through the stack.  Might be worth a comment here to point out that in practice this won&apos;t be a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815772</commentid>
    <comment_count>7</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-16 18:25:28 -0800</bug_when>
    <thetext>(In reply to Cameron McCormack (:heycam) from comment #6)
&gt; OK so worst case we perform (100 * 99) / 2 = 4950 comparisons while
&gt; searching through the stack.  Might be worth a comment here to point out
&gt; that in practice this won&apos;t be a problem?

(I meant: (100 * 101) / 2 = 5050.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815819</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-16 22:10:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/85490380&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815821</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-16 22:24:20 -0800</bug_when>
    <thetext>Committed r285916 (244325@main): &lt;https://commits.webkit.org/244325@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444459.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444437</attachid>
            <date>2021-11-16 14:50:09 -0800</date>
            <delta_ts>2021-11-16 17:52:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233214-20211116145008.patch</filename>
            <type>text/plain</type>
            <size>64621</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1ODc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NmMWUzYmYzMWY3Zjlj
OGI2OTRjNzNmZjlkMDg0YzBiOWFhNjY5ZS4uNDdmNjYyMTM1ZWQyNDFiNDU0ZTJkMjUzN2I2Mzhk
ZTM2MTJhYzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDIxLTExLTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
QnVpbGQgYSBwb3N0Zml4IGV4cHJlc3Npb24gZm9yIGFwcGx5aW5nIHRoZSBGaWx0ZXJFZmZlY3Rz
IG9mIHRoZSBTVkdGaWx0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMzIxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBnb2FsIG9mIGJ1aWxkaW5nIHRoaXMgZXhwcmVzc2lvbiBpcyB0byBoYXZl
IGFsbCBpbnB1dHMgb2YgZWFjaAorICAgICAgICBGaWx0ZXJFZmZlY3QgYmUgYXBwbGllZCBiZWZv
cmUgYXBwbHlpbmcgaXQuIFRoaXMgd2lsbCBlbGltaW5hdGUgdGhlIG5lZWQKKyAgICAgICAgdG8g
ZG8gcmVjdXJzaXZlIGFwcGx5aW5nIGluIEZpbHRlckVmZmVjdDo6YXBwbHkoKS4gQW5kIGl0IHdp
bGwgYWxzbworICAgICAgICBlbGltaW5hdGUgdGhlIG5lZWQgdG8gc3RvcmUgdGhlIHJlY3Rhbmds
ZSBvZiB0aGUgcmVzdWx0IG9mIEZpbHRlckVmZmVjdC4KKyAgICAgICAgT25jZSB0aGUgYWJzb2x1
dGVQYWludFJlY3QgaXMgY2FsY3VsYXRlZCwgdGhlIHJlc3VsdCBpbWFnZSBjYW4gYmUgY3JlYXRl
ZC4KKworICAgICAgICBGaWx0ZXI6OmFwcGx5KCkgYW5kIEZpbHRlckVmZmVjdDo6YXBwbHkoKSBz
aG91bGQgcmV0dXJuIGEgYm9vbGVhbiBzbyB0aGUKKyAgICAgICAgY2FsbGVyIGtub3dzIHRoYXQg
YXBwbHlpbmcgdGhlIGZpbHRlciBmdW5jdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBwbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAqIHJlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6
CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YnVpbGRFZmZlY3RFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OmJ1aWxkRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCiAyMDIxLTExLTE2ICBBbmRyZXMgR29uemFsZXogIDxh
bmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggZm9yIGFjY2Vzc2liaWxpdHkvbWFj
L3JlcGxhY2UtdGV4dC13aXRoLXJhbmdlLW9uLXdlYmFyZWEtZWxlbWVudC5odG1sIGluIGlzb2xh
dGVkIHRyZWUgbW9kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0ZjJlMjUzMDEyNDY3NTFjYmJkMjc0ZjdkMjBkOWQxZDFiNzVh
YzAyLi45YWJlMTg5ODYwZDhkYzU5YThjMDM0OGQ1NTlhNzdkNTQ5YjBjNzY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDg1
Miw2ICsxMDg1Miw3IEBACiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91
Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBD
OEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyRWZmZWN0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMUI0OTZGMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCaXRtYXBCYWNraW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFj
a2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZy
YW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1OTI1LDYgKzI1OTI2LDcgQEAKIAkJCQkwOEM5MjUxODBG
Q0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCiAJCQkJMkM4NTY1MzgyNEMxMEIw
QjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKIAkJCQkyQzg1NjUzMzI0
QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKKwkJCQk3MjE0QjlC
NzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi8sCiAJCQkJNzI2MkQ3
NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLywKIAkJCQk3MjYyRDc1
NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKIAkJCQk0OUVDRUI2MzE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggNzc4MzZkZGRiMDI1OGU5ZjdjNWJlYjNlYTUzODAwMjIxOGYyYzhi
OC4uYjM2YjY0N2RlYmUwMWY3YzY3M2JmNjQ0NGM1ZjkyZjMzYTE4MTFlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNiwxNCArMTA2LDE0IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQor
Ym9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOwogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIAogICAgIGlmIChzb3VyY2VQaXhlbEFycmF5TGVuZ3Ro
ID49IDgpIHsKICAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oc291cmNlUGl4ZWxBcnJheUEtPmRh
dGEoKSwgc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LmRh
dGEoKSwgc291cmNlUGl4ZWxBcnJheUxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdl
IGV4cGFuZCBpdCB0byB0d28uCiAgICAgQVNTRVJUKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPiAw
KTsKQEAgLTEzOSw2ICsxMzksNyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOwogICAgIHBsYXRmb3Jt
QXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5z
aWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlC
LCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggMWJiODMxY2UzMDlm
YzVmZjdhMzVhNWY1NzYxYmFjNTkyNzE0YmMxNy4uMWExMzc1ODgxZTJhMjk2NDA4MDBjZjIzZmNl
MGFkYjAyMTcxODAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01NCwyMyArNTQsMjQgQEAgYm9vbCBGRUJsZW5k
OjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB9CiAKICNpZiAhSEFWRShBUk1fTkVPTl9J
TlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKK2Jvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICgh
aW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOwogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBtX21vZGUgfSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAppbmRleCBl
ZWQzMThlOGMzNWIwYzdlNmUxNjJmNjNiZWJjMGQyZjRiYjBkYmJhLi4zMzY5M2MxOTk3YmJhN2Ji
ZGU4ODkwNTg3YjE1NmVlZTMzNzZjNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxhdGZvcm1B
cHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIq
IHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CiAgICAgdm9pZCBw
bGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQg
Y2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAppbmRleCBmMGE5ZDMxODE2ZmQ0ZGRhYTkwZTcyNmYyZTgxODQwZDVhZmUy
Y2YxLi42NzllNzhkYWVhODczZjVkMzNhMWFmZjg3MTUyNWJmY2Y4NzcxMGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKQEAgLTI3MywxMyArMjczLDEzIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRT
CiAgICAgfQogfQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVy
UmVzdWx0KCk7CiAgICAgaWYgKGluQnVmZmVyKQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgRkVD
b2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgSW50
UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxT
aXplKCkpOwogICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZm
ZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVs
QnVmZmVyLT5zaXplKCk7CkBAIC0zMTUsNiArMzE1LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICB9CiAKICAgICByZXN1bHRJ
bWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIHJldHVy
biB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyMjlm
ZjBiOGM0NGY1MWMwZWYwNTRlNWVhMmE0MjQ2ZTIyN2Q4N2QzLi40OTdlYjE5NWU0MTc1ZWNkZmQw
Y2FiMjRjYmNkOWIwZTM5YTdmODA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtNTAsNyArNTAsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBW
ZWN0b3I8ZmxvYXQ+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggYjJkYWQzNzE0YzYz
YWFkOWFmMmVlNzNkZDFlMWE2ZTYwZjViZjJjOC4uOTc3Y2E1YjU3ODQxMzQzZTcxOGY0MjAxNWRi
NDEyNGM3ZTBhZWZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0xMDEs
MTMgKzEwMSwxMyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxl
KExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudAogICAgIH0KIH0KIAotdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
K2Jvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMTI3LDYgKzEyNyw4IEBA
IHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3Bp
eGVsT2Zmc2V0ICsgMl1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBU
YWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1
ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmgKaW5kZXggNmFmZWU1ZTk2ODYxNzEzNzQxZTM5OWE2OGI1MWYzOTQwODNmMDQzYi4uNmFkYTlj
MGFiYmU1YzJmOWQ2NWJkOTE5ZmZlYzRmMTczZDAwMzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcHV0ZUxv
b2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxl
LCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSk7CiAKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAg
ICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CmluZGV4IDZkNmJmNWNiNDY0OWVlYjJmYzA3OGYzNTU3OGQ5MDc0M2M1MWMwNTIuLjI1YWMwMDg0
MjRiZDg2MzExODQ3ODkwOTUwYmNmNjNlNWFlZjVmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0y
MjMsNyArMjIzLDcgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVDb21wb3NpdGU6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0
KDEpOwpAQCAtMjMxLDMxICsyMzEsMzEgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDKSB7CiAgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICAgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgICAgIEludFJlY3QgZWZm
ZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4t
PnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwogICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RC
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKICAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChk
ZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKIAogICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc291cmNlUGl4
ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7CiAKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKQEAgLTI5NSw2ICsyOTUsOCBAQCB2
b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggMjI4MDdjYWE4ZDY2
NzgzOWJjMDE3YmI1MDJjMDUwODRmNzJiYzcyNC4uY2ZkMjRjYWZlYjA1ODYzNzA3Yjk0ZDg5YTA5
NjdmODE3ZmJjOGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYzMjZhNTZlMWQzMWVjNDU0NjlkOGU3OGE2NmEz
YWU5YjllMjgzYTkuLjFlMDU0Y2E2OTAyMDEwY2EzNDkyNDZiMzkyMDc3OGRkMjZhYWVmNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMzYxLDEzICszNjEsMTMgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLAogICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5n
RGF0YSwgeDEsIHkxLCB4MiwgeTIpOwogfQogCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7CiAKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIGVsc2UKICAgICAgICAgc291cmNlUGl4
ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIApAQCAtMzk5LDcgKzM5OSw3IEBAIHZv
aWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiAgICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKICAgICAgICAgLy8g
UmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAogICAgICAgICBzZXRPdXRl
clBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUu
aGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkg
KiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24p
IHsKQEAgLTQyNSw2ICs0MjUsOCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90
dG9tKTsKICAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCiAgICAgICAgIHNl
dE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCks
IHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVlOwogfQog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRn
ZU1vZGVUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAppbmRleCA5NTc2ZGZlZTdlODQy
Y2FmNDY1MDg1YWQ3MWJjNzBlMmY1YWFmNTk0Li4wNWMxYTgzN2QyMzRjZjU4NGRlODkwZjU5NGIy
MjA3M2YxMzM2NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaApAQCAtNzgsNyArNzgsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0
ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4
RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMzY3NTY4MGM4MWE0ZGE1
Mzk2MDM4OGExMjU5ZGRlNjI4YzYxZTdhNC4uMmRmZDg1NzZmN2YxZTAyZjFkMDM0OTE5NWRkMGMy
NWY0NjQ0MzZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTkwLDcgKzkwLDcg
QEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1
bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXQKICAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwg
KyB5ICogcm93Qnl0ZXM7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVEaXNwbGFjZW1lbnRNYXA6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBp
bnB1dEVmZmVjdCgxKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFw
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMTEyLDcgKzExMiw3IEBAIHZv
aWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKICAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRS
ZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICAKICAgICBpZiAoIWlucHV0SW1hZ2UgfHwg
IWRpc3BsYWNlbWVudEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFn
ZS0+bGVuZ3RoKCkpOwogCkBAIC0xNDcsNiArMTQ3LDggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAg
ICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlu
cHV0SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVz
KSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3Rv
clR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggNDgxMmI1NGJhZGY0ZWMy
MGU4OTU1Y2E0NzdkYmY2YWVjNzkxYmY2ZS4uM2NkMDVjYzQ5NTUxNzE5OWFjZGM4OGVkNTEzNzY2
NDM2MDZiOTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtNTMsNyArNTMsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5
cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA0ZTBiZDRkOWRm
ZDdmNWVkNDA5ZGM2OTBjNDgxMjIyYjZhMjBmZmZkLi5jMTczOTBhMWE3NjIxNWUxNjkzYTNkN2Zk
YjdiYTk2YzEyZDM5ZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC02OSwxMyArNjksMTMgQEAg
dm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9zdGRYLCBtX3N0ZFkgfSk7
CiAgICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9k
eCwgbV9keSB9KTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghc291cmNlSW1h
Z2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBy
ZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7CkBAIC05OSw3ICs5OSw3IEBA
IHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT50
cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1h
Z2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CiAgICAgaWYgKCFwaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRv
JiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBjb250ZXh0U2hh
ZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhlbEJ1ZmZlci0+
c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsKQEAgLTExMSw2ICsxMTEs
OCBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwogCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uKTsKKworICAg
IHJldHVybiB0cnVlOwogfQogCiBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuaAppbmRleCA2OTc3ZWE3N2M2Y2MxZWQzNDg2MTk0YzBjZDg4ZTdiMmQz
ZDk4MDhhLi40OTZlYzMyZWUxOWMyZDFhNzI4ZmNkNjFkMTc2ZjFlZmM4OTIwMjQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKIAogICAgIEludE91dHNldHMgb3V0
c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggZTBhNzc0MjFhN2RmMGM5NDdlZTM2OTg0OTdmNjA1
Mzc3MDUzNWNiNS4uMjQzMWU3OTE1NTQ2Njk1MDE3NjQ4MWNkMzllY2QzMGQyOGYxYWM2YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwCkBAIC01OCwxNCArNTgsMTYgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHko
ZmxvYXQgZmxvb2RPcGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUZsb29kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBj
b2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNp
dHkoKSk7CiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKworICAgIHJl
dHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRUZsb29kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5oCmluZGV4IDg5ZWI3MjAyOTEwY2FiZjg3NGNkYzE4MzlkODI2N2Q4MDY5NzA0Y2EuLjEz
MzgyMzFjZWRiMWQ5YTlhN2NmZDkxOGU0ZjM5ZGE2NzA2MWNjNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC00OCw3ICs0
OCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCBkYmU1NzE1ZTQxNjcz
NjM1ZmIzNmI0YWUyZTQxMDA5YzdlNDQ0YzUxLi41MGIyYzFlMDJkOWQ4OGM5MWZjY2U4NDUyYmJj
OTE5ODUxODk0ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNTE5LDEzICs1MTksMTMg
QEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7CiAKQEAgLTUzNCwxNiArNTM0LDE3IEBAIHZvaWQgRkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBJ
bnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRS
ZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAgICBJbnRT
aXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIGF1dG8gdG1w
SW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFp
bnRTaXplLmFyZWEoKSAqIDQpOwogICAgIGlmICghdG1wSW1hZ2VEYXRhKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRp
b25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNp
emUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIEludE91dHNl
dHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4
IGM3MDY2ZDMzODM2YWRlYTEwOGE1ZWY5ZTVlOGU1NzA4ODFjN2YxNDcuLmQ3NGJkYWE3MmVkMzA0
ZjViODAxNzdhZDZjY2E3NzVhNWI0OTM3MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTYwLDcg
KzYwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNv
bnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCA5MTE4YTliZjI1MmVjODIwNjQ3MDNk
NWRhZjFmNmZhODQwNTJhMGM0Li5lODNjZjNiN2NkNjM2ODZmMWY0NDFlNTIyOGYyYzU2YjRlYjRh
MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTQ3MSwxMyArNDcxLDEzIEBAIGJvb2wgRkVMaWdodGlu
Zzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50
IGhlaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7
CiAKQEAgLTQ5Miw2ICs0OTIsNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogCiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBp
eGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhl
aWdodCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAppbmRleCAzNjQyOGRiYTMyMzA5OWIzNGZlNTRkZjc1MDMwNzIyNzBlZGU5ODNmLi5h
ZDJmYzI4ZmE5ZTdmNGJmMjkxM2Q2N2I5ODA1N2Y4ZWViYjA4ZGIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAt
MTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIHZvaWQgcGxhdGZv
cm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDM3ODFkYjBjOTA1NGIxYzE3MzIyYmExYzYwYTIwNDY4OTE3
ZjdhYTIuLjExYmM4Nzk1Nzg3ZWE0MjE3ZjA4MDZmN2M1NjNlMGY1OGFjNWEwMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cApAQCAtMzgsMTQgKzM4LDE0IEBAIEZFTWVyZ2U6OkZFTWVyZ2UoKQogewogfQogCi12b2lkIEZF
TWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRU1lcmdl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICB1bnNpZ25lZCBz
aXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogCiAg
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpA
QCAtNTMsNiArNTMsOCBAQCB2b2lkIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKQogICAgICAgICBpZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdl
QnVmZmVyUmVzdWx0KCkpCiAgICAgICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVN
ZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRp
b25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCAwNTE5YTU2ODhhODM2M2ZjMWJh
MDYzMjA0ZGIyMmY3NDMxYWUzNGYxLi44ODdiYTBmZDMzZjg5MzJjYmY0MzM4MjY4ZTdhYWE0OGFm
YTJmMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuaApAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZF
TWVyZ2UoKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDQyZmJhNzRiNTNmYjgwYTM2Zjk4NGM4MTY4Mzk2ZDQ1
MmU2ODRjNzQuLjQzMjg4ZDllNTkyZjAyODI4Mzg0MmU3OTI0YjcxMTVmYzhmNmMyNzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAKQEAgLTIzOSwxMyArMjM5LDEzIEBAIGJvb2wgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwg
Y29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKIApAQCAtMjU1LDE4ICsyNTUsMTggQEAgdm9pZCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIEludFNp
emUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZ
KSk7CiAgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBzb3VyY2VQ
aXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJhZGl1cyA9IGZsb29yZWRJ
bnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kg
fSkpOwogICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgo
KSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVj
dERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIAogICAgIGlmIChw
bGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogICAgIHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKQEAgLTI3Nyw2
ICsyNzcsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVz
WSk7CiAKICAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggZWM5YmRi
Njk2MjUxZmNmYzgxYjNlNWNhYjAyNzdiOTgyYjkxYThmYS4uMjg4ZWVhMGUxZTIxM2NlMzJkODE3
MzBiNjE5OWRkNWUwNDFjOTYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC00OSw3ICs0OSw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRl
ciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmNwcAppbmRleCA1M2QyNTJhOTc2NzQyYTZjMjlhNTQzNmI1NjAzZGNmZmQ4YjNl
ZWNmLi4wMTQ1NTdhMzFkNzA5NzIzNjIyZDc2NjMwYWFjNzI4M2JiMjY1Zjc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cApAQCAtNjQsMjAgKzY0LDIyIEBAIHZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVPZmZzZXQ6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVm
ZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHNldElz
QWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKICAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X2R4LCBtX2R5IH0pKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRl
eHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNzJk
NzZhMzE5OGEzNzI5ZTk1Y2ExZGZhZjYzZjViMGY2ZDg4Y2E2Zi4uMTZmNjBlOTZiNDIzODczYTM0
MWMyZjI2NDVhODAyNjljYTg3Y2Y1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtNDAsNyArNDAsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcAppbmRleCA4MWFhMGM1M2ExYTgzNjU1Zjc4MmVjOTJhZTE3MDk4OWU0ODhmNTNlLi40ZmUy
NGE0ZjI2MmIxNzQyMmU3ODNiNDc2MGYzMzE1MDE4NTJkYzE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00Miw3ICs0
Miw3IEBAIEZFVGlsZTo6RkVUaWxlKCkKIHsKIH0KIAotdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVUaWxlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAvLyBGSVhNRTogU2VlIGJ1ZyA0
NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1
dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgogICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBp
bkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Ug
fHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCkBAIC02Niw3ICs2Niw3
IEBAIHZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiAKICAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCksIGZpbHRlci5yZW5kZXJpbmdNb2RlKCkpOwogICAgIGlmICghdGlsZUltYWdlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYg
dGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwogICAgIHRpbGVJbWFnZUNv
bnRleHQudHJhbnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9j
YXRpb24ueSgpKTsKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIGF1dG8gdGlsZUltYWdlQ29weSA9
IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7CiAg
ICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwogICAgIHBhdHRl
cm5UcmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2Nh
dGlvbik7CkBAIC04NCw2ICs4NCw4IEBAIHZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LnNldEZpbGxQ
YXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwogICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKworICAg
IHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5oCmluZGV4IGMzOThmMzY0MGIwZDc1M2U4ODM4NTQ0MzhmMjAwZDcxNmZiMTNlYmYuLjQy
NmVkN2Q4MWRiYWY0MjZkNjkzN2E5NzYwNGI0OGU5MDUwNDVkYjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMzQsNyArMzQs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGYyY2ZlZjA2MWEzNzA4NDk0
M2EyMGVmYWU4ZDhmYjBjOWJkYTcxY2EuLmRhNDc0ZjQxMDVmMTY0ZTRkZGVlNDhiNmNhYjlkYjhm
ODNhMWE3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTM5MywxMSArMzkzLDExIEBAIHZvaWQg
RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzKQogICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+ZmlsbFJlZ2lvbigqcGFyYW1ldGVycy0+
ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0
YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJz
LT5lbmRZKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKIApAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAgICBpZiAocmVz
dWx0U2l6ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9G
aWxsKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAg
ICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpLnNpemUoKSk7CkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIGF1dG8gYXJl
YSA9IHJlc3VsdFNpemUuYXJlYSgpOwogICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQgaGVpZ2h0ID0g
cmVzdWx0U2l6ZS5oZWlnaHQoKTsKIApAQCAtNDUxLDEyICs0NTEsMTMgQEAgdm9pZCBGRVR1cmJ1
bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8g
cm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KICAg
ICBmaWxsUmVnaW9uKGZpbHRlciwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmgKaW5kZXggZDI0MjZkMzk1ZGRiYzliNzVkMWE4ZjdlMDM5ZWMyOTM0YWQ1
YWFmMS4uZTY5OGIzMTNmMTg4NjI1MDAzNGIwNjU5MGQxZTJiM2VkNmRjMzk4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICBGRVR1cmJ1bGVuY2UoVHVy
YnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwg
aW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpOwogCiAgICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
KyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
ICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgaW5p
dFBhaW50KFBhaW50aW5nRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNGVjNWNmYWM5YzMwNDBhMmZmNWEyN2ZkYWJh
MWMzYjBkMTg5YWRmMi4uODg0ZTc4ODdlZWNlZDBkZTdmYzFmMWE0NjU0MzE3YmYyOThjMGU0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCkBAIC0zMiw2ICszMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlckVm
ZmVjdDsKIAogY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKKyAgICB1c2lu
ZyBGaWx0ZXJGdW5jdGlvbjo6YXBwbHk7CisKIHB1YmxpYzoKICAgICBGbG9hdFNpemUgZmlsdGVy
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9CiAgICAgdm9pZCBzZXRGaWx0
ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBm
aWx0ZXJTY2FsZTsgfQpAQCAtNDMsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGaWx0
ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24g
PSBmaWx0ZXJSZWdpb247IH0KIAogICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVy
U2NhbGUoRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclNjYWxl
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhcHBs
eSgpID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KICAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3Vy
Y2VJbWFnZSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCAxYjdmMzQ1OGQ0Mzk4MTg5NGI0MWFj
NjJjYWI0YWMxM2E0ZTNhNzk3Li40MWJmYzM2NGEzMzkwYjY4YjkyMThiMWJmMmZiOTk4MTkzYjdl
NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0xNDIsMzYgKzE0Miw0MiBAQCBGaWx0ZXJFZmZl
Y3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAogICAg
IHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQogCi12b2lkIEZpbHRl
ckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZpbHRlckVmZmVjdDo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgdW5zaWduZWQgc2l6ZSA9
IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CiAgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChp
KS5nZXQoKTsKLSAgICAgICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgICAgIGlmICghaW4tPmhh
c1Jlc3VsdCgpKQotICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIENvbnZlcnQgaW5w
dXQgcmVzdWx0cyB0byB0aGUgY3VycmVudCBlZmZlY3QncyBjb2xvciBzcGFjZS4KKyAgICAgICAg
QVNTRVJUKGluLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIHRyYW5zZm9ybVJlc3VsdENvbG9yU3Bh
Y2UoaW4sIGkpOwogICAgIH0KIAogICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRl
cik7CiAgICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwogCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZl
Y3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNs
aXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAg
YWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZm
ZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
CisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBhcHBseSgpOiIKKyAgICAgICAgPDwgIlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbgorICAgICAgICA8PCAiXG4gIGVmZmVj
dEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMKKyAgICAgICAgPDwgIlxuICBhYnNv
bHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24K
KyAgICAgICAgPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJl
Y3QKKyAgICAgICAgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0Cisg
ICAgICAgIDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgZmlsdGVyLmZpbHRlclNjYWxlKCkpOwog
CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlcXVpcmVzVmFsaWRQcmVN
dWx0aXBsaWVkUGl4ZWxzKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkKICAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVyUmVzdWx0
SWZOZWVkZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMg
YXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgotICAgIHBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShmaWx0ZXIpOworICAgIHJldHVybiBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoZmls
dGVyKTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDkyOGJjYjQ4Y2QyMTllYjFlZTQ1Mjk3YjU5NzRiYjYz
ZTA5N2U5NWUuLmMwNzUyNjMxNGY3ZTc3ODEyNWUwMDU3YmIwM2IxMWNmOWQwMTdiNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oIgogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUg
IkZpbHRlckVmZmVjdFZlY3Rvci5oIgogI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNDEsMTEgKzQyLDgg
QEAgY2xhc3MgVGV4dFN0cmVhbTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVy
OwotY2xhc3MgRmlsdGVyRWZmZWN0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiAKLXR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7Ci0KIGNsYXNzIEZp
bHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhclJlc3VsdCgpIG92ZXJyaWRlOwpAQCAtODQsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgRmxv
YXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0K
ICAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0
KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHko
Y29uc3QgRmlsdGVyJik7CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
IAogICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRo
ZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVz
ZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUg
ZmluYWwgcmVzdWx0LgpAQCAtMTU2LDcgKzE1NCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNs
aXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAwOwogCiAgICAgdm9pZCBjb3B5
SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2b2lkIGNvcHlD
b252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjMwMjVkMmI0
ZjA0NjY1YWVmZDIyZDgwYWQwMTY5NGJhZDM1OTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKwordXNpbmcgRmlsdGVyRWZmZWN0
VmVjdG9yID0gVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PjsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCmluZGV4IGU4NjRhODYwYTgxN2Y5N2E2ZGM0ZDk4MjE5
NGU3ZWY5Zjc5MDNiOGUuLmFiNGE3MDVlMGQzMmU0ZjVkNTBjNmM5MTFkMDY5M2YwZDE3NTM0ODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTM2LDYgKzM2LDggQEAgY2xhc3MgVGV4dFN0cmVhbTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWx0ZXI7CisKIGNsYXNzIEZpbHRlckZ1
bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rpb24+IHsKIHB1YmxpYzoKICAg
ICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKQEAgLTgyLDYgKzg0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBBdG9tU3RyaW5nIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmlsdGVy
TmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQogICAgIEF0b21TdHJpbmcgZmlsdGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsgfQogCisgICAgdmlydHVh
bCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJSZXN1bHQoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCBlMTA0YThkMjA4
NjBlZjgwMjlhZjczYWU5MTNhOTQ3ZWUxY2U2ODdhLi5jZmI1NzQ0YTdkYTY2ODY3OWExYmQ4NTE4
YWU1YjJkZjNkODJjYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNDUsMjAgKzQ1LDIzIEBAIHZv
aWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpCitib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwotCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAg
ICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKTsKKwogICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VS
ZWN0LCBDb2xvcjo6YmxhY2spOwogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4p
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJjZUFscGhhOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmgKaW5kZXggOGRhNmZmZGJkMjAxZDQ2OTIxOGY5MzcyMDE3OTg2NjNhMGY5
M2ZhNC4uMGE4Y2ZmZDc2NDIwZGU3YTFhN2U0YzA1OTNkNDc2YTE0Y2ZhMTA3NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuaApAQCAtMzQsNyArMzQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXgg
NGE4YTI3NDhiZGU5YzEzNTllNTk0NWQ4MTBlNGMwY2M2NmI4MGIzNS4uZmEyMTBjNzIwNzQxZTQz
NTI3NmVkNWVmMjExZDc3MjYzN2M5Nzc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC00Mywx
NCArNDMsMTUgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgU291cmNlR3JhcGhpYzo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
KnNvdXJjZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0
cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCA4NzIxMGIy
Y2YxNjJhMjZiNDhhMWUwNDkyNzJlNjI2YTQzYzY0ZjdmLi45ZmJjMjBhNzUxZDA3NjVmMTZjMzQ1
YTg4MGFhNjJmYjIwNmM4NjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMzUsNyArMzUsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAppbmRleCBiMjM2N2Zl
MTc0YjA1MTdjYTNhOGU5Y2QxNmZmN2JlZTc5ZWVkNjEyLi5jMmY0YTYyODE3OTkzN2VmZDNiYzU4
NDgwMDE5ZDM3ZmJlZGVjNmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNw
cApAQCAtNDA4LDI2ICs0MDgsMjQgQEAgdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRl
UmVzdWx0cygpCiAgICAgICAgIGZ1bmN0aW9uLT5jbGVhclJlc3VsdCgpOwogfQogCi12b2lkIENT
U0ZpbHRlcjo6YXBwbHkoKQorYm9vbCBDU1NGaWx0ZXI6OmFwcGx5KCkKIHsKICAgICBhdXRvIGVm
ZmVjdCA9IGxhc3RFZmZlY3QoKTsKICAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikgewogICAgICAg
ICBtX2ZpbHRlclJlbmRlcmVyLT5hcHBseUVmZmVjdHMoKnRoaXMsICplZmZlY3QpOwogICAgICAg
ICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKICAgICAgICAgICAgIGVmZmVj
dC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgewot
ICAgICAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpIHsKLSAgICAgICAgICAgIGRvd25j
YXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpLnNldFNvdXJjZUltYWdlKHsgc291cmNlSW1h
Z2UoKSB9KTsKLSAgICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkp
LmFwcGx5KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24tPmlzRmlsdGVyRWZmZWN0KCkp
Ci0gICAgICAgICAgICBkb3duY2FzdDxGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLmdldCgpKS5hcHBs
eSgqdGhpcyk7CisgICAgICAgIGlmICghZnVuY3Rpb24tPmFwcGx5KCp0aGlzKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBlZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIHJldHVybiB0cnVl
OwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRp
cnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0
JiBkaXJ0eVJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggNTkzYjYz
MzcwNDdiZDkxMTAyMGQwMDNiYzYwZmU1M2M2NjUxNmE4OS4uYzM0MDg3MWIyNzNlMjI5MWM2ODAy
ZDUxZjk1ODI4NGQ5YTAxM2FkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApA
QCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZv
aWQgYXBwbHkoKSBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5KCkgb3ZlcnJpZGU7CiAKICAgICBJ
bWFnZUJ1ZmZlciogb3V0cHV0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggYmM2MGFjYjUwMjUyMTExMzFlZGNjZTM2
NGQ2MWM2ZTliY2Y5MDdmMy4uNTU0MDBiN2ViYTNlNGY2YzJiZWQ5ODRiY2NiNTFkMjM3ZTM0NDQ3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5jcHAKQEAgLTc0LDE0ICs3NCwxNCBAQCB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoaW1hZ2VSZWN0KSk7CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGRUltYWdlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgLy8gRkVJ
bWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkK
ICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
IAogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOwogICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OwpAQCAtMTAzLDYgKzEwMyw4IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgfQogICAgICk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5oCmluZGV4IGI1OGQ1MWIxOTdkOGM1ZmM2NGFmYzU1ODE5ZjE1ODVkOTkyM2Jj
OGMuLjM0ZjcxYmE4NDZlYzBmZjJkZDY4MjcwMTZkOWEwNTg5NGNiNGU4ZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTQ2LDcg
KzQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJikgZmluYWw7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKSBmaW5hbDsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFs
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcAppbmRleCA2MWYxMmI3Mzk4N2I4MjI4NjgzMWJjNjhmNmMwNWYwMDAzYzNkNGNhLi42OTc1
OTI1ZTYxMzkxN2EzMDMyZGFjMDJjZDkyYWQxMDY2OTMyYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTU2LDcgKzU2LDEy
IEBAIFJlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQm
IGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1CiAgICAgaWYgKCFsYXN0RWZmZWN0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZpbHRlci0+c2V0TGFzdEVmZmVjdChXVEZNb3ZlKGxh
c3RFZmZlY3QpKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZXhwcmVzc2lvbjsKKyAgICBpZiAo
IWJ1aWxkZXIuYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24pKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEFTU0VSVCghZXhwcmVzc2lvbi5pc0VtcHR5KCkpOworICAgIGZpbHRlci0+
c2V0RXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKTsKICAgICByZXR1cm4gZmlsdGVyOwog
fQogCkBAIC03NSwxOSArODAsMzIgQEAgRmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0
ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKICAgICByZXR1cm4gRmlsdGVyOjpzY2FsZWRC
eUZpbHRlclNjYWxlKHNpemUpOwogfQogCi12b2lkIFNWR0ZpbHRlcjo6YXBwbHkoKQorYm9vbCBT
VkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHNldFNvdXJjZUlt
YWdlKHsgZmlsdGVyLnNvdXJjZUltYWdlKCkgfSk7CisgICAgcmV0dXJuIGFwcGx5KCk7Cit9CisK
K2Jvb2wgU1ZHRmlsdGVyOjphcHBseSgpCiB7Ci0gICAgbV9sYXN0RWZmZWN0LT5hcHBseSgqdGhp
cyk7CisgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKKyAgICBmb3IgKGF1dG8m
IGVmZmVjdCA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBpZiAoIWVmZmVjdC0+YXBwbHkoKnRo
aXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogSW50T3V0c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogewotICAgIHJldHVy
biBtX2xhc3RFZmZlY3QtPm91dHNldHMoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCgpKTsKKyAg
ICByZXR1cm4gbGFzdEVmZmVjdCgpLT5vdXRzZXRzKCk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyOjpj
bGVhclJlc3VsdCgpCiB7Ci0gICAgbV9sYXN0RWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUo
KTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCgpKTsKKyAgICBsYXN0RWZmZWN0KCktPmNsZWFyUmVz
dWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDFhMWI5MmNk
MGJmNzE3YzU2YjY2ZWEyZmEzMjM0ZWY1ZjQyYTI1NWIuLjZlMWI2NjA5YTI2YWIyYWJhN2E4ZGQ2
ZTU3YmEyNmQwYWVmNzE1ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvVHlw
ZUNhc3RzLmg+CkBAIC0zOSwxMCArNDAsMTEgQEAgcHVibGljOgogICAgIEZsb2F0U2l6ZSBzY2Fs
ZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CiAKICAgICBGbG9hdFJlY3Qg
dGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9
Ci0gICAgdm9pZCBhcHBseSgpIG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQotICAgIHZv
aWQgc2V0TGFzdEVmZmVjdChSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGxhc3RFZmZlY3QpIHsgbV9s
YXN0RWZmZWN0ID0gV1RGTW92ZShsYXN0RWZmZWN0KTsgfQorICAgIHZvaWQgc2V0RXhwcmVzc2lv
bihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdURk1v
dmUoZXhwcmVzc2lvbik7IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkg
Y29uc3QgeyByZXR1cm4gIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkgPyBtX2V4cHJlc3Npb24ubGFz
dCgpIDogbnVsbHB0cjsgfQogCiBwcml2YXRlOgogICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFNp
emUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOwpAQCAtNTMsNyArNTUsNyBAQCBwcml2YXRlOgogICAg
IEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwogICAgIGJvb2wgbV9lZmZlY3RCQm94TW9k
ZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKKyAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3IgbV9leHByZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmNwcAppbmRleCA2MGQ0YmIyNmRhNWFlZjM4MDcwYzg3YmUyZmQzNGQ3MjY0YmMy
ZDgyLi45Y2RjYzUzNjMwMWVmNjU5NDNlYTE0YTg5MjBmNjJmMmQxYWE2MWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmNwcApAQCAtMTgwLDQgKzE4MCwzNCBAQCB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFy
UmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKICAgICAgICAgY2xlYXJSZXN1
bHRzUmVjdXJzaXZlKHJlZmVyZW5jZSk7CiB9CiAKK3N0YXRpYyBib29sIGJ1aWxkRWZmZWN0RXhw
cmVzc2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIHN0YWNrLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pCit7CisgICAgLy8g
QSBjeWNsZSBpcyBkZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXhwcmVzc2lvbi5pbnNlcnQoMCwgZWZmZWN0KTsK
KworICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBpbnB1dEVmZmVj
dCA6IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkpIHsKKyAgICAgICAgaWYgKCFidWlsZEVmZmVjdEV4
cHJlc3Npb24oaW5wdXRFZmZlY3QsIHN0YWNrLCBleHByZXNzaW9uKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKHN0YWNrLmxhc3QoKSA9PSBlZmZlY3QpOworCisgICAgc3RhY2sucmVtb3ZlTGFzdCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhw
cmVzc2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pIGNvbnN0Cit7CisgICAgaWYg
KCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3Igc3RhY2s7CisgICAgcmV0dXJuIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihtX2xhc3RFZmZl
Y3QsIHN0YWNrLCBleHByZXNzaW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5oCmluZGV4IGI3YjgyNGI0ODQzMjMyNTc3ZDIxMzBkODQ2YWFjOGI3ZjA5ZGU5OTcuLmNm
NjY1NGQ0ODMxODIyMThhZGIwMDRlMDY5ZWZlZjQyOTkxZjI2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAg
LTY3LDYgKzY3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKFJl
ZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7CisgICAgYm9vbCBidWlsZEV4
cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444459</attachid>
            <date>2021-11-16 17:52:53 -0800</date>
            <delta_ts>2021-11-16 22:24:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233214-20211116175252.patch</filename>
            <type>text/plain</type>
            <size>65320</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1ODc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NmMWUzYmYzMWY3Zjlj
OGI2OTRjNzNmZjlkMDg0YzBiOWFhNjY5ZS4uNDdmNjYyMTM1ZWQyNDFiNDU0ZTJkMjUzN2I2Mzhk
ZTM2MTJhYzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDIxLTExLTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
QnVpbGQgYSBwb3N0Zml4IGV4cHJlc3Npb24gZm9yIGFwcGx5aW5nIHRoZSBGaWx0ZXJFZmZlY3Rz
IG9mIHRoZSBTVkdGaWx0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMzIxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBnb2FsIG9mIGJ1aWxkaW5nIHRoaXMgZXhwcmVzc2lvbiBpcyB0byBoYXZl
IGFsbCBpbnB1dHMgb2YgZWFjaAorICAgICAgICBGaWx0ZXJFZmZlY3QgYmUgYXBwbGllZCBiZWZv
cmUgYXBwbHlpbmcgaXQuIFRoaXMgd2lsbCBlbGltaW5hdGUgdGhlIG5lZWQKKyAgICAgICAgdG8g
ZG8gcmVjdXJzaXZlIGFwcGx5aW5nIGluIEZpbHRlckVmZmVjdDo6YXBwbHkoKS4gQW5kIGl0IHdp
bGwgYWxzbworICAgICAgICBlbGltaW5hdGUgdGhlIG5lZWQgdG8gc3RvcmUgdGhlIHJlY3Rhbmds
ZSBvZiB0aGUgcmVzdWx0IG9mIEZpbHRlckVmZmVjdC4KKyAgICAgICAgT25jZSB0aGUgYWJzb2x1
dGVQYWludFJlY3QgaXMgY2FsY3VsYXRlZCwgdGhlIHJlc3VsdCBpbWFnZSBjYW4gYmUgY3JlYXRl
ZC4KKworICAgICAgICBGaWx0ZXI6OmFwcGx5KCkgYW5kIEZpbHRlckVmZmVjdDo6YXBwbHkoKSBz
aG91bGQgcmV0dXJuIGEgYm9vbGVhbiBzbyB0aGUKKyAgICAgICAgY2FsbGVyIGtub3dzIHRoYXQg
YXBwbHlpbmcgdGhlIGZpbHRlciBmdW5jdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBwbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAqIHJlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6
CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YnVpbGRFZmZlY3RFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OmJ1aWxkRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCiAyMDIxLTExLTE2ICBBbmRyZXMgR29uemFsZXogIDxh
bmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggZm9yIGFjY2Vzc2liaWxpdHkvbWFj
L3JlcGxhY2UtdGV4dC13aXRoLXJhbmdlLW9uLXdlYmFyZWEtZWxlbWVudC5odG1sIGluIGlzb2xh
dGVkIHRyZWUgbW9kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0ZjJlMjUzMDEyNDY3NTFjYmJkMjc0ZjdkMjBkOWQxZDFiNzVh
YzAyLi45YWJlMTg5ODYwZDhkYzU5YThjMDM0OGQ1NTlhNzdkNTQ5YjBjNzY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDg1
Miw2ICsxMDg1Miw3IEBACiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91
Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBD
OEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyRWZmZWN0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMUI0OTZGMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCaXRtYXBCYWNraW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFj
a2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZy
YW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1OTI1LDYgKzI1OTI2LDcgQEAKIAkJCQkwOEM5MjUxODBG
Q0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCiAJCQkJMkM4NTY1MzgyNEMxMEIw
QjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKIAkJCQkyQzg1NjUzMzI0
QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKKwkJCQk3MjE0QjlC
NzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi8sCiAJCQkJNzI2MkQ3
NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLywKIAkJCQk3MjYyRDc1
NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKIAkJCQk0OUVDRUI2MzE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggNzc4MzZkZGRiMDI1OGU5ZjdjNWJlYjNlYTUzODAwMjIxOGYyYzhi
OC4uYjM2YjY0N2RlYmUwMWY3YzY3M2JmNjQ0NGM1ZjkyZjMzYTE4MTFlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNiwxNCArMTA2LDE0IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQor
Ym9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOwogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIAogICAgIGlmIChzb3VyY2VQaXhlbEFycmF5TGVuZ3Ro
ID49IDgpIHsKICAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oc291cmNlUGl4ZWxBcnJheUEtPmRh
dGEoKSwgc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LmRh
dGEoKSwgc291cmNlUGl4ZWxBcnJheUxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdl
IGV4cGFuZCBpdCB0byB0d28uCiAgICAgQVNTRVJUKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPiAw
KTsKQEAgLTEzOSw2ICsxMzksNyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOwogICAgIHBsYXRmb3Jt
QXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5z
aWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlC
LCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggMWJiODMxY2UzMDlm
YzVmZjdhMzVhNWY1NzYxYmFjNTkyNzE0YmMxNy4uMWExMzc1ODgxZTJhMjk2NDA4MDBjZjIzZmNl
MGFkYjAyMTcxODAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01NCwyMyArNTQsMjQgQEAgYm9vbCBGRUJsZW5k
OjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB9CiAKICNpZiAhSEFWRShBUk1fTkVPTl9J
TlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKK2Jvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICgh
aW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOwogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBtX21vZGUgfSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAppbmRleCBl
ZWQzMThlOGMzNWIwYzdlNmUxNjJmNjNiZWJjMGQyZjRiYjBkYmJhLi4zMzY5M2MxOTk3YmJhN2Ji
ZGU4ODkwNTg3YjE1NmVlZTMzNzZjNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxhdGZvcm1B
cHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIq
IHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CiAgICAgdm9pZCBw
bGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQg
Y2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAppbmRleCBmMGE5ZDMxODE2ZmQ0ZGRhYTkwZTcyNmYyZTgxODQwZDVhZmUy
Y2YxLi42NzllNzhkYWVhODczZjVkMzNhMWFmZjg3MTUyNWJmY2Y4NzcxMGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKQEAgLTI3MywxMyArMjczLDEzIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRT
CiAgICAgfQogfQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVy
UmVzdWx0KCk7CiAgICAgaWYgKGluQnVmZmVyKQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgRkVD
b2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgSW50
UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxT
aXplKCkpOwogICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZm
ZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVs
QnVmZmVyLT5zaXplKCk7CkBAIC0zMTUsNiArMzE1LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICB9CiAKICAgICByZXN1bHRJ
bWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIHJldHVy
biB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyMjlm
ZjBiOGM0NGY1MWMwZWYwNTRlNWVhMmE0MjQ2ZTIyN2Q4N2QzLi40OTdlYjE5NWU0MTc1ZWNkZmQw
Y2FiMjRjYmNkOWIwZTM5YTdmODA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtNTAsNyArNTAsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBW
ZWN0b3I8ZmxvYXQ+JiYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggYjJkYWQzNzE0YzYz
YWFkOWFmMmVlNzNkZDFlMWE2ZTYwZjViZjJjOC4uOTc3Y2E1YjU3ODQxMzQzZTcxOGY0MjAxNWRi
NDEyNGM3ZTBhZWZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0xMDEs
MTMgKzEwMSwxMyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxl
KExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudAogICAgIH0KIH0KIAotdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
K2Jvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMTI3LDYgKzEyNyw4IEBA
IHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3Bp
eGVsT2Zmc2V0ICsgMl1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBU
YWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1
ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmgKaW5kZXggNmFmZWU1ZTk2ODYxNzEzNzQxZTM5OWE2OGI1MWYzOTQwODNmMDQzYi4uNmFkYTlj
MGFiYmU1YzJmOWQ2NWJkOTE5ZmZlYzRmMTczZDAwMzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcHV0ZUxv
b2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxl
LCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSk7CiAKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAg
ICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CmluZGV4IDZkNmJmNWNiNDY0OWVlYjJmYzA3OGYzNTU3OGQ5MDc0M2M1MWMwNTIuLjI1YWMwMDg0
MjRiZDg2MzExODQ3ODkwOTUwYmNmNjNlNWFlZjVmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0y
MjMsNyArMjIzLDcgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVDb21wb3NpdGU6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0
KDEpOwpAQCAtMjMxLDMxICsyMzEsMzEgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDKSB7CiAgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICAgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgICAgIEludFJlY3QgZWZm
ZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4t
PnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwogICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RC
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKICAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChk
ZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKIAogICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc291cmNlUGl4
ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7CiAKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKQEAgLTI5NSw2ICsyOTUsOCBAQCB2
b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggMjI4MDdjYWE4ZDY2
NzgzOWJjMDE3YmI1MDJjMDUwODRmNzJiYzcyNC4uY2ZkMjRjYWZlYjA1ODYzNzA3Yjk0ZDg5YTA5
NjdmODE3ZmJjOGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYzMjZhNTZlMWQzMWVjNDU0NjlkOGU3OGE2NmEz
YWU5YjllMjgzYTkuLjkzZjZkZjg3YThjYmQzYzE2NDI0M2YyNDM2MDRkY2VlZWI4MWE2NjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMzYxLDEzICszNjEsMTMgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLAogICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5n
RGF0YSwgeDEsIHkxLCB4MiwgeTIpOwogfQogCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7CiAKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIGVsc2UKICAgICAgICAgc291cmNlUGl4
ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIApAQCAtMzk3LDkgKzM5Nyw5IEBAIHZv
aWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiAgICAgaW50IGNsaXBCb3R0b20gPSBwYWludFNpemUuaGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUu
aGVpZ2h0KCk7CiAKICAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8fCBjbGlwQm90dG9tIDwgMCkgewot
ICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVkCisgICAg
ICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAogICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWlu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAogICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndp
ZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1l
bnNpb24pIHsKQEAgLTQyNSw2ICs0MjUsOCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKICAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCiAgICAg
ICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNl
dC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVl
OwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRWRnZU1vZGVUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAppbmRleCA5NTc2ZGZl
ZTdlODQyY2FmNDY1MDg1YWQ3MWJjNzBlMmY1YWFmNTk0Li4wNWMxYTgzN2QyMzRjZjU4NGRlODkw
ZjU5NGIyMjA3M2YxMzM2NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaApAQCAtNzgsNyArNzgs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMzY3NTY4MGM4
MWE0ZGE1Mzk2MDM4OGExMjU5ZGRlNjI4YzYxZTdhNC4uMmRmZDg1NzZmN2YxZTAyZjFkMDM0OTE5
NWRkMGMyNWY0NjQ0MzZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTkwLDcg
KzkwLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25l
ZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXQKICAgICByZXR1cm4geCAqIGJ5dGVzUGVy
UGl4ZWwgKyB5ICogcm93Qnl0ZXM7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVEaXNwbGFjZW1l
bnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMTEyLDcgKzExMiw3
IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRp
cGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICAKICAgICBpZiAoIWlucHV0SW1h
Z2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1l
bnRJbWFnZS0+bGVuZ3RoKCkpOwogCkBAIC0xNDcsNiArMTQ3LDggQEAgdm9pZCBGRURpc3BsYWNl
bWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAg
ICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJv
d0J5dGVzKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxT
ZWxlY3RvclR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggNDgxMmI1NGJh
ZGY0ZWMyMGU4OTU1Y2E0NzdkYmY2YWVjNzkxYmY2ZS4uM2NkMDVjYzQ5NTUxNzE5OWFjZGM4OGVk
NTEzNzY2NDM2MDZiOTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtNTMsNyArNTMs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA0ZTBi
ZDRkOWRmZDdmNWVkNDA5ZGM2OTBjNDgxMjIyYjZhMjBmZmZkLi5jMTczOTBhMWE3NjIxNWUxNjkz
YTNkN2ZkYjdiYTk2YzEyZDM5ZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC02OSwxMyArNjks
MTMgQEAgdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVEcm9wU2hhZG93Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0U2l6ZSBi
bHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9zdGRYLCBtX3N0
ZFkgfSk7CiAgICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHsgbV9keCwgbV9keSB9KTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghc291
cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
R3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsK
ICAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7CkBAIC05OSw3ICs5
OSw3IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdElt
YWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVz
dWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CiAgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBjb250
ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhlbEJ1
ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsKQEAgLTExMSw2
ICsxMTEsOCBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwogCiAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uKTsK
KworICAgIHJldHVybiB0cnVlOwogfQogCiBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0
cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCA2OTc3ZWE3N2M2Y2MxZWQzNDg2MTk0YzBjZDg4
ZTdiMmQzZDk4MDhhLi40OTZlYzMyZWUxOWMyZDFhNzI4ZmNkNjFkMTc2ZjFlZmM4OTIwMjQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKIAogICAgIEludE91dHNl
dHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggZTBhNzc0MjFhN2RmMGM5NDdlZTM2OTg0
OTdmNjA1Mzc3MDUzNWNiNS4uMjQzMWU3OTE1NTQ2Njk1MDE3NjQ4MWNkMzllY2QzMGQyOGYxYWM2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuY3BwCkBAIC01OCwxNCArNTgsMTYgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9w
YWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZF
Rmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUZsb29k
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVz
dWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
YXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9v
ZE9wYWNpdHkoKSk7CiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKwor
ICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRUZsb29kOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5oCmluZGV4IDg5ZWI3MjAyOTEwY2FiZjg3NGNkYzE4MzlkODI2N2Q4MDY5NzA0
Y2EuLjEzMzgyMzFjZWRiMWQ5YTlhN2NmZDkxOGU0ZjM5ZGE2NzA2MWNjNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC00
OCw3ICs0OCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCBkYmU1NzE1
ZTQxNjczNjM1ZmIzNmI0YWUyZTQxMDA5YzdlNDQ0YzUxLi41MGIyYzFlMDJkOWQ4OGM5MWZjY2U4
NDUyYmJjOTE5ODUxODk0ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNTE5LDEzICs1
MTksMTMgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFR2F1c3Np
YW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKQEAgLTUzNCwxNiArNTM0LDE3IEBAIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
ICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBp
eGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBpbi0+Y29weVByZW11bHRp
cGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50U2l6ZSBrZXJuZWxTaXpl
ID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIGF1
dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwogICAgIGlmICghdG1wSW1hZ2VEYXRhKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHBsYXRmb3JtQXBwbHkoZGVz
dGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIElu
dE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CmluZGV4IGM3MDY2ZDMzODM2YWRlYTEwOGE1ZWY5ZTVlOGU1NzA4ODFjN2YxNDcuLmQ3NGJkYWE3
MmVkMzA0ZjViODAxNzdhZDZjY2E3NzVhNWI0OTM3MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAg
LTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0
cygpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCA5MTE4YTliZjI1MmVjODIw
NjQ3MDNkNWRhZjFmNmZhODQwNTJhMGM0Li5lODNjZjNiN2NkNjM2ODZmMWY0NDFlNTIyOGYyYzU2
YjRlYjRhMTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTQ3MSwxMyArNDcxLDEzIEBAIGJvb2wgRkVM
aWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0
aCwgaW50IGhlaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7CiAKQEAgLTQ5Miw2ICs0OTIsNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogCiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6
ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIGRyYXdMaWdodGluZyhkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRT
aXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuaAppbmRleCAzNjQyOGRiYTMyMzA5OWIzNGZlNTRkZjc1MDMwNzIyNzBlZGU5
ODNmLi5hZDJmYzI4ZmE5ZTdmNGJmMjkxM2Q2N2I5ODA1N2Y4ZWViYjA4ZGIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aApAQCAtMTM0LDcgKzEzNCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDM3ODFkYjBjOTA1NGIxYzE3MzIyYmExYzYwYTIw
NDY4OTE3ZjdhYTIuLjExYmM4Nzk1Nzg3ZWE0MjE3ZjA4MDZmN2M1NjNlMGY1OGFjNWEwMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmNwcApAQCAtMzgsMTQgKzM4LDE0IEBAIEZFTWVyZ2U6OkZFTWVyZ2UoKQogewogfQogCi12
b2lkIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBG
RU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICB1bnNp
Z25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDAp
OwogCiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewpAQCAtNTMsNiArNTMsOCBAQCB2b2lkIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogICAgICAgICBpZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4t
PmltYWdlQnVmZmVyUmVzdWx0KCkpCiAgICAgICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVh
bSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCAwNTE5YTU2ODhhODM2
M2ZjMWJhMDYzMjA0ZGIyMmY3NDMxYWUzNGYxLi44ODdiYTBmZDMzZjg5MzJjYmY0MzM4MjY4ZTdh
YWE0OGFmYTJmMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEZFTWVyZ2UoKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDQyZmJhNzRiNTNmYjgwYTM2Zjk4NGM4MTY4
Mzk2ZDQ1MmU2ODRjNzQuLjQzMjg4ZDllNTkyZjAyODI4Mzg0MmU3OTI0YjcxMTVmYzhmNmMyNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTIzOSwxMyArMjM5LDEzIEBAIGJvb2wgRkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheSwgY29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMjU1LDE4ICsyNTUsMTggQEAgdm9pZCBGRU1vcnBo
b2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAg
IEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9y
YWRpdXNZKSk7CiAgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0
KCkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBz
b3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJhZGl1cyA9IGZs
b29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3Jh
ZGl1c1kgfSkpOwogICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qu
d2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWlu
KGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIAogICAg
IGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogICAg
IHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKQEAg
LTI3Nyw2ICsyNzcsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYo
cmFkaXVzWSk7CiAKICAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXgg
ZWM5YmRiNjk2MjUxZmNmYzgxYjNlNWNhYjAyNzdiOTgyYjkxYThmYS4uMjg4ZWVhMGUxZTIxM2Nl
MzJkODE3MzBiNjE5OWRkNWUwNDFjOTYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC00OSw3ICs0OSw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCA1M2QyNTJhOTc2NzQyYTZjMjlhNTQzNmI1NjAzZGNm
ZmQ4YjNlZWNmLi4wMTQ1NTdhMzFkNzA5NzIzNjIyZDc2NjMwYWFjNzI4M2JiMjY1Zjc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcApAQCAtNjQsMjAgKzY0LDIyIEBAIHZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVPZmZzZXQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbkJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwg
IWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKICAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2Nh
bGUoeyBtX2R4LCBtX2R5IH0pKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOworCisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIFRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5k
ZXggNzJkNzZhMzE5OGEzNzI5ZTk1Y2ExZGZhZjYzZjViMGY2ZDg4Y2E2Zi4uMTZmNjBlOTZiNDIz
ODczYTM0MWMyZjI2NDVhODAyNjljYTg3Y2Y1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtNDAsNyArNDAsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmNwcAppbmRleCA4MWFhMGM1M2ExYTgzNjU1Zjc4MmVjOTJhZTE3MDk4OWU0ODhmNTNl
Li40ZmUyNGE0ZjI2MmIxNzQyMmU3ODNiNDc2MGYzMzE1MDE4NTJkYzE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC00
Miw3ICs0Miw3IEBAIEZFVGlsZTo6RkVUaWxlKCkKIHsKIH0KIAotdm9pZCBGRVRpbGU6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAvLyBGSVhNRTogU2Vl
IGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1
cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBGRVRpbGU6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVm
ZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0
SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiAKICAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIGZpbHRlci5yZW5kZXJpbmdNb2RlKCkpOwogICAgIGlmICghdGlsZUltYWdlKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwogICAgIHRpbGVJ
bWFnZUNvbnRleHQudHJhbnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZm
ZWN0TG9jYXRpb24ueSgpKTsKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIGF1dG8gdGlsZUltYWdl
Q29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdl
KSk7CiAgICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwogICAg
IHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZl
Y3RMb2NhdGlvbik7CkBAIC04NCw2ICs4NCw4IEBAIHZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0LnNl
dEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwogICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5oCmluZGV4IGMzOThmMzY0MGIwZDc1M2U4ODM4NTQ0MzhmMjAwZDcxNmZiMTNl
YmYuLjQyNmVkN2Q4MWRiYWY0MjZkNjkzN2E5NzYwNGI0OGU5MDUwNDVkYjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMzQs
NyArMzQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGYyY2ZlZjA2MWEz
NzA4NDk0M2EyMGVmYWU4ZDhmYjBjOWJkYTcxY2EuLmRhNDc0ZjQxMDVmMTY0ZTRkZGVlNDhiNmNh
YjlkYjhmODNhMWE3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTM5MywxMSArMzkzLDExIEBA
IHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJz
KiBwYXJhbWV0ZXJzKQogICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+ZmlsbFJlZ2lvbigqcGFyYW1l
dGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50
aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJh
bWV0ZXJzLT5lbmRZKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgRkVUdXJidWxl
bmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAgICBp
ZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5
Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpLnNpemUoKSk7CkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBGRVR1cmJ1bGVu
Y2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIGF1
dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwogICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQgaGVp
Z2h0ID0gcmVzdWx0U2l6ZS5oZWlnaHQoKTsKIApAQCAtNDUxLDEyICs0NTEsMTMgQEAgdm9pZCBG
RVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUg
aXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFs
bC4KICAgICBmaWxsUmVnaW9uKGZpbHRlciwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlw
ZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgKaW5kZXggZDI0MjZkMzk1ZGRiYzliNzVkMWE4ZjdlMDM5ZWMy
OTM0YWQ1YWFmMS4uZTY5OGIzMTNmMTg4NjI1MDAzNGIwNjU5MGQxZTJiM2VkNmRjMzk4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICBGRVR1cmJ1bGVu
Y2UoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVl
bmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpOwogCiAg
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlk
ZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgp
KSk7IH0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZv
aWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNGVjNWNmYWM5YzMwNDBhMmZmNWEy
N2ZkYWJhMWMzYjBkMTg5YWRmMi4uODg0ZTc4ODdlZWNlZDBkZTdmYzFmMWE0NjU0MzE3YmYyOThj
MGU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlci5oCkBAIC0zMiw2ICszMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZp
bHRlckVmZmVjdDsKIAogY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKKyAg
ICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6YXBwbHk7CisKIHB1YmxpYzoKICAgICBGbG9hdFNpemUg
ZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9CiAgICAgdm9pZCBz
ZXRGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKSB7IG1fZmlsdGVyU2Nh
bGUgPSBmaWx0ZXJTY2FsZTsgfQpAQCAtNDMsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJS
ZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KIAogICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5
RmlsdGVyU2NhbGUoRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRl
clNjYWxlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBhcHBseSgpID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KICAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92
ZShzb3VyY2VJbWFnZSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCAxYjdmMzQ1OGQ0Mzk4MTg5
NGI0MWFjNjJjYWI0YWMxM2E0ZTNhNzk3Li40MWJmYzM2NGEzMzkwYjY4YjkyMThiMWJmMmZiOTk4
MTkzYjdlNDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0xNDIsMzYgKzE0Miw0MiBAQCBGaWx0
ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25z
dAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQogCi12b2lk
IEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZpbHRlckVm
ZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgdW5zaWduZWQg
c2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0
cy5hdChpKS5nZXQoKTsKLSAgICAgICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgICAgIGlmICgh
aW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIENvbnZl
cnQgaW5wdXQgcmVzdWx0cyB0byB0aGUgY3VycmVudCBlZmZlY3QncyBjb2xvciBzcGFjZS4KKyAg
ICAgICAgQVNTRVJUKGluLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgIHRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoaW4sIGkpOwogICAgIH0KIAogICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KGZpbHRlcik7CiAgICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2Up
OwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxu
ICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8
ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAg
bWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAi
IDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKKyAgICAgICAgPDwgIlxuICBmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbgorICAgICAgICA8PCAiXG4g
IGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMKKyAgICAgICAgPDwgIlxu
ICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJy
ZWdpb24KKyAgICAgICAgPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQ
YWludFJlY3QKKyAgICAgICAgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RS
ZWN0CisgICAgICAgIDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwogCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlcXVpcmVzVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkKICAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVy
UmVzdWx0SWZOZWVkZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBBZGQgcGxhdGZvcm0gc3Bl
Y2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgotICAgIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShmaWx0ZXIpOworICAgIHJldHVybiBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoZmlsdGVyKTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDkyOGJjYjQ4Y2QyMTllYjFlZTQ1Mjk3YjU5
NzRiYjYzZTA5N2U5NWUuLmMwNzUyNjMxNGY3ZTc3ODEyNWUwMDU3YmIwM2IxMWNmOWQwMTdiNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgogI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNDEsMTEg
KzQyLDggQEAgY2xhc3MgVGV4dFN0cmVhbTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RmlsdGVyOwotY2xhc3MgRmlsdGVyRWZmZWN0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiAKLXR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7Ci0KIGNs
YXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6CiAgICAg
dm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwpAQCAtODQsNyArODIsNyBAQCBwdWJsaWM6CiAg
ICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJl
Y3Q7IH0KICAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZl
Y3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0KIAotICAgIHZvaWQg
YXBwbHkoY29uc3QgRmlsdGVyJik7CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAogICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3Nhcnks
IGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgogICAgIC8vIFRoaXMgbWV0aG9k
IGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFu
ZCB0aGUgZmluYWwgcmVzdWx0LgpAQCAtMTU2LDcgKzE1NCw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAwOwogCiAgICAgdm9p
ZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2b2lk
IGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjMw
MjVkMmI0ZjA0NjY1YWVmZDIyZDgwYWQwMTY5NGJhZDM1OTU4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0
b3IuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKwordXNpbmcgRmlsdGVy
RWZmZWN0VmVjdG9yID0gVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PjsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCmluZGV4IGU4NjRhODYwYTgxN2Y5N2E2ZGM0
ZDk4MjE5NGU3ZWY5Zjc5MDNiOGUuLmFiNGE3MDVlMGQzMmU0ZjVkNTBjNmM5MTFkMDY5M2YwZDE3
NTM0ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTM2LDYgKzM2LDggQEAgY2xhc3MgVGV4dFN0
cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWx0ZXI7CisKIGNsYXNzIEZp
bHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rpb24+IHsKIHB1Ymxp
YzoKICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKQEAgLTgyLDYgKzg0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBBdG9tU3RyaW5nIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4g
ZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQogICAgIEF0b21TdHJpbmcgZmlsdGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsgfQogCisgICAg
dmlydHVhbCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCBlMTA0
YThkMjA4NjBlZjgwMjlhZjczYWU5MTNhOTQ3ZWUxY2U2ODdhLi5jZmI1NzQ0YTdkYTY2ODY3OWEx
YmQ4NTE4YWU1YjJkZjNkODJjYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNDUsMjAgKzQ1LDIz
IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCitib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwotCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAgICBJbWFn
ZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKwogICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3Qo
aW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uSW4pOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJjZUFscGhh
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggOGRhNmZmZGJkMjAxZDQ2OTIxOGY5MzcyMDE3OTg2
NjNhMGY5M2ZhNC4uMGE4Y2ZmZDc2NDIwZGU3YTFhN2U0YzA1OTNkNDc2YTE0Y2ZhMTA3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuaApAQCAtMzQsNyArMzQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAK
aW5kZXggNGE4YTI3NDhiZGU5YzEzNTllNTk0NWQ4MTBlNGMwY2M2NmI4MGIzNS4uZmEyMTBjNzIw
NzQxZTQzNTI3NmVkNWVmMjExZDc3MjYzN2M5Nzc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBA
IC00MywxNCArNDMsMTUgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgU291cmNlR3Jh
cGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAg
ICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAg
aWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKnNvdXJjZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
VGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCA4
NzIxMGIyY2YxNjJhMjZiNDhhMWUwNDkyNzJlNjI2YTQzYzY0ZjdmLi45ZmJjMjBhNzUxZDA3NjVm
MTZjMzQ1YTg4MGFhNjJmYjIwNmM4NjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMzUsNyArMzUs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAppbmRleCBi
MjM2N2ZlMTc0YjA1MTdjYTNhOGU5Y2QxNmZmN2JlZTc5ZWVkNjEyLi5jMmY0YTYyODE3OTkzN2Vm
ZDNiYzU4NDgwMDE5ZDM3ZmJlZGVjNmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmNwcApAQCAtNDA4LDI2ICs0MDgsMjQgQEAgdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJt
ZWRpYXRlUmVzdWx0cygpCiAgICAgICAgIGZ1bmN0aW9uLT5jbGVhclJlc3VsdCgpOwogfQogCi12
b2lkIENTU0ZpbHRlcjo6YXBwbHkoKQorYm9vbCBDU1NGaWx0ZXI6OmFwcGx5KCkKIHsKICAgICBh
dXRvIGVmZmVjdCA9IGxhc3RFZmZlY3QoKTsKICAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikgewog
ICAgICAgICBtX2ZpbHRlclJlbmRlcmVyLT5hcHBseUVmZmVjdHMoKnRoaXMsICplZmZlY3QpOwog
ICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKICAgICAgICAgICAg
IGVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9u
cykgewotICAgICAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpIHsKLSAgICAgICAgICAg
IGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpLnNldFNvdXJjZUltYWdlKHsgc291
cmNlSW1hZ2UoKSB9KTsKLSAgICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24u
Z2V0KCkpLmFwcGx5KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24tPmlzRmlsdGVyRWZm
ZWN0KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLmdldCgp
KS5hcHBseSgqdGhpcyk7CisgICAgICAgIGlmICghZnVuY3Rpb24tPmFwcGx5KCp0aGlzKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBlZmZlY3QtPnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIHJldHVy
biB0cnVlOwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVj
dEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXgg
NTkzYjYzMzcwNDdiZDkxMTAyMGQwMDNiYzYwZmU1M2M2NjUxNmE4OS4uYzM0MDg3MWIyNzNlMjI5
MWM2ODAyZDUxZjk1ODI4NGQ5YTAxM2FkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXIuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwot
ICAgIHZvaWQgYXBwbHkoKSBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5KCkgb3ZlcnJpZGU7CiAK
ICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggYmM2MGFjYjUwMjUyMTExMzFl
ZGNjZTM2NGQ2MWM2ZTliY2Y5MDdmMy4uNTU0MDBiN2ViYTNlNGY2YzJiZWQ5ODRiY2NiNTFkMjM3
ZTM0NDQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAKQEAgLTc0LDE0ICs3NCwxNCBAQCB2b2lkIEZFSW1hZ2U6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoaW1hZ2VSZWN0KSk7CiB9CiAKLXZvaWQgRkVJbWFn
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGRUlt
YWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAg
Ly8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkKICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKIAogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOwogICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOwpAQCAtMTAzLDYgKzEwMyw4IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgfQog
ICAgICk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJl
cHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGI1OGQ1MWIxOTdkOGM1ZmM2NGFmYzU1ODE5ZjE1ODVk
OTkyM2JjOGMuLjM0ZjcxYmE4NDZlYzBmZjJkZDY4MjcwMTZkOWEwNTg5NGNiNGU4ZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJikgZmluYWw7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyLmNwcAppbmRleCA2MWYxMmI3Mzk4N2I4MjI4NjgzMWJjNjhmNmMwNWYwMDAzYzNkNGNh
Li5kZjczNzQ5OTMxZmRkZGNiMzFkZGVkYWM3NDYwMWQwY2ZlODc0ZGI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTU2LDcg
KzU2LDEyIEBAIFJlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVs
ZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1CiAgICAgaWYgKCFsYXN0RWZmZWN0KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZpbHRlci0+c2V0TGFzdEVmZmVjdChXVEZN
b3ZlKGxhc3RFZmZlY3QpKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZXhwcmVzc2lvbjsKKyAg
ICBpZiAoIWJ1aWxkZXIuYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24pKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghZXhwcmVzc2lvbi5pc0VtcHR5KCkpOworICAgIGZp
bHRlci0+c2V0RXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKTsKICAgICByZXR1cm4gZmls
dGVyOwogfQogCkBAIC03NSwxOSArODAsMzMgQEAgRmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVk
QnlGaWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKICAgICByZXR1cm4gRmlsdGVyOjpz
Y2FsZWRCeUZpbHRlclNjYWxlKHNpemUpOwogfQogCi12b2lkIFNWR0ZpbHRlcjo6YXBwbHkoKQor
Ym9vbCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHNldFNv
dXJjZUltYWdlKHsgZmlsdGVyLnNvdXJjZUltYWdlKCkgfSk7CisgICAgcmV0dXJuIGFwcGx5KCk7
Cit9CisKK2Jvb2wgU1ZHRmlsdGVyOjphcHBseSgpCiB7Ci0gICAgbV9sYXN0RWZmZWN0LT5hcHBs
eSgqdGhpcyk7CisgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKKyAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBpZiAoIWVmZmVjdC0+YXBw
bHkoKnRoaXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogSW50T3V0c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogewotICAg
IHJldHVybiBtX2xhc3RFZmZlY3QtPm91dHNldHMoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCgp
KTsKKyAgICByZXR1cm4gbGFzdEVmZmVjdCgpLT5vdXRzZXRzKCk7CiB9CiAKIHZvaWQgU1ZHRmls
dGVyOjpjbGVhclJlc3VsdCgpCiB7Ci0gICAgbV9sYXN0RWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1
cnNpdmUoKTsKKyAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpOworICAgIGZvciAo
YXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKQorICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggMWExYjkyY2QwYmY3MTdjNTZiNjZl
YTJmYTMyMzRlZjVmNDJhMjU1Yi4uODk2ZmJiMjYzN2UyYjVjNjM1YTQ5MzI4Nzg4ZDc1OTEwNDZi
MWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KQEAg
LTM5LDIxICs0MCwyMiBAQCBwdWJsaWM6CiAgICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyU2Nh
bGUoRmxvYXRTaXplKSBjb25zdCBmaW5hbDsKIAogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAgICB2b2lkIGFw
cGx5KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQotICAg
IHZvaWQgc2V0TGFzdEVmZmVjdChSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGxhc3RFZmZlY3QpIHsg
bV9sYXN0RWZmZWN0ID0gV1RGTW92ZShsYXN0RWZmZWN0KTsgfQorICAgIHZvaWQgc2V0RXhwcmVz
c2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdU
Rk1vdmUoZXhwcmVzc2lvbik7IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0
KCkgY29uc3QgeyByZXR1cm4gIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkgPyBtX2V4cHJlc3Npb24u
bGFzdCgpIDogbnVsbHB0cjsgfQogCiBwcml2YXRlOgogICAgIFNWR0ZpbHRlcihjb25zdCBGbG9h
dFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOwogCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKICAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFJlY3QgbV90YXJn
ZXRCb3VuZGluZ0JveDsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CiAKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1fZXhw
cmVzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5k
ZXggNjBkNGJiMjZkYTVhZWYzODA3MGM4N2JlMmZkMzRkNzI2NGJjMmQ4Mi4uODJkZTY1NjQ2ODFh
MjM5YTU3OWNjNWFjMDg0ZWExMTU1NGIyZmI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTIxLDEy
ICsyMSwxMCBAQAogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKIAogI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiU1ZH
RmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3Jh
cGhpYy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgog
CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogI2luY2x1
ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgpAQCAtMTgwLDQgKzE3OCw0MCBAQCB2
b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3Qq
IGVmZmVjdCkKICAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKHJlZmVyZW5jZSk7CiB9CiAK
K3N0YXRpYyBib29sIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiYgZWZmZWN0LCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGV4cHJlc3Npb24pCit7CisgICAgLy8gQSBjeWNsZSBpcyBkZXRlY3RlZC4KKyAgICBpZiAo
c3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3Rh
Y2suYXBwZW5kKGVmZmVjdCk7CisgICAgCisgICAgZXhwcmVzc2lvbi5hcHBlbmQoZWZmZWN0KTsK
KworICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3QtPmlucHV0RWZmZWN0cygpKSB7
CisgICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBzdGFjaywg
ZXhwcmVzc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCkgPT0gZWZmZWN0
KTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBl
eHByZXNzaW9uKSBjb25zdAoreworICAgIGlmICghbV9sYXN0RWZmZWN0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7CisgICAgaWYgKCFidWls
ZEVmZmVjdEV4cHJlc3Npb24obV9sYXN0RWZmZWN0LCBzdGFjaywgZXhwcmVzc2lvbikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGV4cHJlc3Npb24ucmV2ZXJzZSgpOworICAgIGV4cHJl
c3Npb24uc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGI3YjgyNGI0ODQzMjMyNTc3ZDIxMzBkODQ2YWFj
OGI3ZjA5ZGU5OTcuLmNmNjY1NGQ0ODMxODIyMThhZGIwMDRlMDY5ZWZlZjQyOTkxZjI2YmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXR1cEJ1
aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwogICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7Cisg
ICAgYm9vbCBidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBj
b25zdDsKIAogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>