<?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>80573</bug_id>
          
          <creation_ts>2012-03-07 23:22:39 -0800</creation_ts>
          <short_desc>Support [Custom] for static functions</short_desc>
          <delta_ts>2012-03-08 16:46:55 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>80472</blocked>
    
    <blocked>80485</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Jon Lee">jonlee</assigned_to>
          <cc>abarth</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>573651</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-07 23:22:39 -0800</bug_when>
    <thetext>Currently the bindings script creates an empty default impl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573665</commentid>
    <comment_count>1</comment_count>
      <attachid>130781</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-07 23:54:31 -0800</bug_when>
    <thetext>Created attachment 130781
Patch made with -w

To make it easier to evaluate the patch, I ran the diff with the -w flag. This should fail the style bot, but the actual diff is stylistically correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573694</commentid>
    <comment_count>2</comment_count>
      <attachid>130781</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-08 00:40:00 -0800</bug_when>
    <thetext>Comment on attachment 130781
Patch made with -w

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

Just an out-of-curious question: What method wants to use [Custom] static?

&gt; Source/WebCore/ChangeLog:32
&gt; +        * bindings/scripts/test/JS/JSTestObj.cpp:
&gt; +        (WebCore):
&gt; +        (WebCore::jsTestObjConstructorFunctionClassMethod2):
&gt; +        * bindings/scripts/test/JS/JSTestObj.h:
&gt; +        (JSTestObj):
&gt; +        (WebCore):
&gt; +        * bindings/scripts/test/ObjC/DOMTestObj.h:
&gt; +        * bindings/scripts/test/ObjC/DOMTestObj.mm:
&gt; +        (-[DOMTestObj classMethod2]):
&gt; +        * bindings/scripts/test/V8/V8TestObj.cpp:
&gt; +        (WebCore::ConfigureV8TestObjTemplate):
&gt; +        * bindings/scripts/test/V8/V8TestObj.h:
&gt; +        (V8TestObj):

It seems you also touched CodeGenerator{V8,ObjC}.pm, but they are not included in this patch. Would you please update the patch correctly? BTW, don&apos;t we need to modify CodeGenerator{GObject,CPP}.pm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573990</commentid>
    <comment_count>3</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-08 11:19:24 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 130781 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130781&amp;action=review
&gt; 
&gt; Just an out-of-curious question: What method wants to use [Custom] static?
This would be for bug 80485, where the permission functions are attached to the Notification object itself.

&gt; &gt; Source/WebCore/ChangeLog:32
&gt; &gt; +        * bindings/scripts/test/JS/JSTestObj.cpp:
&gt; &gt; +        (WebCore):
&gt; &gt; +        (WebCore::jsTestObjConstructorFunctionClassMethod2):
&gt; &gt; +        * bindings/scripts/test/JS/JSTestObj.h:
&gt; &gt; +        (JSTestObj):
&gt; &gt; +        (WebCore):
&gt; &gt; +        * bindings/scripts/test/ObjC/DOMTestObj.h:
&gt; &gt; +        * bindings/scripts/test/ObjC/DOMTestObj.mm:
&gt; &gt; +        (-[DOMTestObj classMethod2]):
&gt; &gt; +        * bindings/scripts/test/V8/V8TestObj.cpp:
&gt; &gt; +        (WebCore::ConfigureV8TestObjTemplate):
&gt; &gt; +        * bindings/scripts/test/V8/V8TestObj.h:
&gt; &gt; +        (V8TestObj):
&gt; 
&gt; It seems you also touched CodeGenerator{V8,ObjC}.pm, but they are not included in this patch. Would you please update the patch correctly? BTW, don&apos;t we need to modify CodeGenerator{GObject,CPP}.pm?

Those are just what the scripts produced as a result of the new test case. I did not change the generation scripts. But you&apos;re right for V8; I see some missing generated code, so I&apos;ll work on that. I might need some assistance because I&apos;m unfamiliar with that area.

Looking at the existing test output code for ObjC, GObject, and CPP, it looks like static isn&apos;t used for those languages, because the generated code is already incorrect. I will file bugs to track that work, but don&apos;t think it belongs in this bug since it just extends the existing static generation code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574044</commentid>
    <comment_count>4</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-08 11:58:21 -0800</bug_when>
    <thetext>&gt; &gt; 
&gt; &gt; It seems you also touched CodeGenerator{V8,ObjC}.pm, but they are not included in this patch. Would you please update the patch correctly? BTW, don&apos;t we need to modify CodeGenerator{GObject,CPP}.pm?
&gt; 
&gt; Those are just what the scripts produced as a result of the new test case. I did not change the generation scripts. But you&apos;re right for V8; I see some missing generated code, so I&apos;ll work on that. I might need some assistance because I&apos;m unfamiliar with that area.

Actually, it seems that since this is a custom static method, that the output is correct. Someone else would be responsible for implementing that callback, right? Or am I missing something here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574047</commentid>
    <comment_count>5</comment_count>
      <attachid>130781</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-08 12:00:28 -0800</bug_when>
    <thetext>Comment on attachment 130781
Patch made with -w

Resetting to r? based on my comments and questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574351</commentid>
    <comment_count>6</comment_count>
      <attachid>130781</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-08 16:07:01 -0800</bug_when>
    <thetext>Comment on attachment 130781
Patch made with -w

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:32
&gt;&gt;&gt; +        (V8TestObj):
&gt;&gt; 
&gt;&gt; It seems you also touched CodeGenerator{V8,ObjC}.pm, but they are not included in this patch. Would you please update the patch correctly? BTW, don&apos;t we need to modify CodeGenerator{GObject,CPP}.pm?
&gt; 
&gt; Those are just what the scripts produced as a result of the new test case. I did not change the generation scripts. But you&apos;re right for V8; I see some missing generated code, so I&apos;ll work on that. I might need some assistance because I&apos;m unfamiliar with that area.
&gt; 
&gt; Looking at the existing test output code for ObjC, GObject, and CPP, it looks like static isn&apos;t used for those languages, because the generated code is already incorrect. I will file bugs to track that work, but don&apos;t think it belongs in this bug since it just extends the existing static generation code.

Sorry for the confusion. You are right. In my understanding,

- We need to modify CodeGeneratorJS.pm.
- We do not need to modify CodeGeneratorV8.pm, since it has already supported [Custom] static, fortunately.
- We do not need to modify CodeGenerator{ObjC, GObject, CPP}.pm, since they have not yet supported custom bindings.

Is my understanding correct?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2094
&gt; +            if ($function-&gt;isStatic) {
&gt; +                if ($isCustom) {
&gt; +                    GenerateArgumentsCountCheck(\@implContent, $function, $dataNode);
&gt; +                    push(@implContent, &quot;    return JSValue::encode(${className}::&quot; . $functionImplementationName . &quot;(exec));\n&quot;);
&gt; +                } else {
&gt; +                    GenerateArgumentsCountCheck(\@implContent, $function, $dataNode);
&gt; +
&gt; +                    if (@{$function-&gt;raisesExceptions}) {
&gt; +                        push(@implContent, &quot;    ExceptionCode ec = 0;\n&quot;);
&gt; +                    }
&gt; +
&gt; +                    my $numParameters = @{$function-&gt;parameters};
&gt; +                    my ($functionString, $dummy) = GenerateParametersCheck(\@implContent, $function, $dataNode, $numParameters, $implClassName, $functionImplementationName, $svgPropertyType, $svgPropertyOrListPropertyType, $svgListPropertyType);
&gt; +                    GenerateImplementationFunctionCall($function, $functionString, &quot;    &quot;, $svgPropertyType, $implClassName);
&gt; +                }

Can&apos;t we remove this block? It seems this block is just a duplication of the line 2119 -- 2153.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2098
&gt;              if ($interfaceName eq &quot;DOMWindow&quot;) {
&gt;                  push(@implContent, &quot;    $className* castedThis = toJSDOMWindow(exec-&gt;hostThisValue().toThisObject(exec));\n&quot;);
&gt;                  push(@implContent, &quot;    if (!castedThis)\n&quot;);

Nit: Indentation seems incorrect around here.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2154
&gt; +            }

Nit: Indentation seems incorrect around here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574354</commentid>
    <comment_count>7</comment_count>
      <attachid>130781</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-08 16:11:22 -0800</bug_when>
    <thetext>Comment on attachment 130781
Patch made with -w

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:32
&gt;&gt;&gt;&gt; +        (V8TestObj):
&gt;&gt;&gt; 
&gt;&gt;&gt; It seems you also touched CodeGenerator{V8,ObjC}.pm, but they are not included in this patch. Would you please update the patch correctly? BTW, don&apos;t we need to modify CodeGenerator{GObject,CPP}.pm?
&gt;&gt; 
&gt;&gt; Those are just what the scripts produced as a result of the new test case. I did not change the generation scripts. But you&apos;re right for V8; I see some missing generated code, so I&apos;ll work on that. I might need some assistance because I&apos;m unfamiliar with that area.
&gt;&gt; 
&gt;&gt; Looking at the existing test output code for ObjC, GObject, and CPP, it looks like static isn&apos;t used for those languages, because the generated code is already incorrect. I will file bugs to track that work, but don&apos;t think it belongs in this bug since it just extends the existing static generation code.
&gt; 
&gt; Sorry for the confusion. You are right. In my understanding,
&gt; 
&gt; - We need to modify CodeGeneratorJS.pm.
&gt; - We do not need to modify CodeGeneratorV8.pm, since it has already supported [Custom] static, fortunately.
&gt; - We do not need to modify CodeGenerator{ObjC, GObject, CPP}.pm, since they have not yet supported custom bindings.
&gt; 
&gt; Is my understanding correct?

Yes this is correct.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2094
&gt;&gt; +                }
&gt; 
&gt; Can&apos;t we remove this block? It seems this block is just a duplication of the line 2119 -- 2153.

Yes, it is a simplification of 2119-2153. The code as it is right now is really hard to read because it is peppered with $function-&gt;isStatic checks. Because of the relative simplicity of static implementations, I think it&apos;s much more readable to first separate on whether the function is static.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2098
&gt;&gt;                  push(@implContent, &quot;    if (!castedThis)\n&quot;);
&gt; 
&gt; Nit: Indentation seems incorrect around here.

The wonky indentation is because I generated this diff with the -w flag, which means to ignore whitespace. Without it, the diff looks really confusing and it&apos;s hard to tell what is going on. The actual code that I will check in has correct indentation.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2154
&gt;&gt; +            }
&gt; 
&gt; Nit: Indentation seems incorrect around here.

See above comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574363</commentid>
    <comment_count>8</comment_count>
      <attachid>130781</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-08 16:20:21 -0800</bug_when>
    <thetext>Comment on attachment 130781
Patch made with -w

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

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2094
&gt;&gt;&gt; +                }
&gt;&gt; 
&gt;&gt; Can&apos;t we remove this block? It seems this block is just a duplication of the line 2119 -- 2153.
&gt; 
&gt; Yes, it is a simplification of 2119-2153. The code as it is right now is really hard to read because it is peppered with $function-&gt;isStatic checks. Because of the relative simplicity of static implementations, I think it&apos;s much more readable to first separate on whether the function is static.

I am not super excited at the simplification. This code is just a subset of the line 2119 -- 2153. I would guess that you just need to insert/remove &quot;if($function-&gt;isStatic)&quot; to/from the line 2119 -- 2153, right?

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2098
&gt;&gt;&gt;                  push(@implContent, &quot;    if (!castedThis)\n&quot;);
&gt;&gt; 
&gt;&gt; Nit: Indentation seems incorrect around here.
&gt; 
&gt; The wonky indentation is because I generated this diff with the -w flag, which means to ignore whitespace. Without it, the diff looks really confusing and it&apos;s hard to tell what is going on. The actual code that I will check in has correct indentation.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574383</commentid>
    <comment_count>9</comment_count>
      <attachid>130781</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-08 16:40:54 -0800</bug_when>
    <thetext>Comment on attachment 130781
Patch made with -w

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

&gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2094
&gt;&gt;&gt;&gt; +                }
&gt;&gt;&gt; 
&gt;&gt;&gt; Can&apos;t we remove this block? It seems this block is just a duplication of the line 2119 -- 2153.
&gt;&gt; 
&gt;&gt; Yes, it is a simplification of 2119-2153. The code as it is right now is really hard to read because it is peppered with $function-&gt;isStatic checks. Because of the relative simplicity of static implementations, I think it&apos;s much more readable to first separate on whether the function is static.
&gt; 
&gt; I am not super excited at the simplification. This code is just a subset of the line 2119 -- 2153. I would guess that you just need to insert/remove &quot;if($function-&gt;isStatic)&quot; to/from the line 2119 -- 2153, right?

I am not exactly sure what you&apos;re suggesting. If you expand out the entire section, you need to have that &quot;if&quot; clause around (using the line #s on the right hand side) 2120, then 2122-2130, then 2138-2143. And keep the existing unless and if clauses beforehand, and add additional checks on 2096 and 2100. In fact, if the function is static, we&apos;re ignoring way more lines than we are including. All of that code concerns instances and instance functions.

A static function, aside from checking required parameters, should just call the static function on the WebCore class. It&apos;s really hard to debug with the code as it is because you have to keep track of whether it&apos;s static, which I think is a more important aspect to segregate on. And I think because of its simpler functionality, we should just pull it out. I am not really concerned at all about the small amount of duplicate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574387</commentid>
    <comment_count>10</comment_count>
      <attachid>130781</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-08 16:43:04 -0800</bug_when>
    <thetext>Comment on attachment 130781
Patch made with -w

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2094
&gt;&gt;&gt;&gt;&gt; +                }
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Can&apos;t we remove this block? It seems this block is just a duplication of the line 2119 -- 2153.
&gt;&gt;&gt; 
&gt;&gt;&gt; Yes, it is a simplification of 2119-2153. The code as it is right now is really hard to read because it is peppered with $function-&gt;isStatic checks. Because of the relative simplicity of static implementations, I think it&apos;s much more readable to first separate on whether the function is static.
&gt;&gt; 
&gt;&gt; I am not super excited at the simplification. This code is just a subset of the line 2119 -- 2153. I would guess that you just need to insert/remove &quot;if($function-&gt;isStatic)&quot; to/from the line 2119 -- 2153, right?
&gt; 
&gt; I am not exactly sure what you&apos;re suggesting. If you expand out the entire section, you need to have that &quot;if&quot; clause around (using the line #s on the right hand side) 2120, then 2122-2130, then 2138-2143. And keep the existing unless and if clauses beforehand, and add additional checks on 2096 and 2100. In fact, if the function is static, we&apos;re ignoring way more lines than we are including. All of that code concerns instances and instance functions.
&gt; 
&gt; A static function, aside from checking required parameters, should just call the static function on the WebCore class. It&apos;s really hard to debug with the code as it is because you have to keep track of whether it&apos;s static, which I think is a more important aspect to segregate on. And I think because of its simpler functionality, we should just pull it out. I am not really concerned at all about the small amount of duplicate code.

Makes sense. Thank you for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574389</commentid>
    <comment_count>11</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2012-03-08 16:46:55 -0800</bug_when>
    <thetext>Committed r110232: &lt;http://trac.webkit.org/changeset/110232&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130781</attachid>
            <date>2012-03-07 23:54:31 -0800</date>
            <delta_ts>2012-03-08 16:43:04 -0800</delta_ts>
            <desc>Patch made with -w</desc>
            <filename>0001-Support-Custom-for-static-functions.patch</filename>
            <type>text/plain</type>
            <size>16704</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">RnJvbSBiODAyM2I0MjRmYjZiNmE5Mzg1N2UwZTBlZTkzZjAyZGM5MDE5MDAwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gTGVlIDxqb25sZWVAYXBwbGUuY29tPgpEYXRlOiBXZWQs
IDcgTWFyIDIwMTIgMjM6NTE6MDkgLTA4MDAKU3ViamVjdDogW1BBVENIXSBTdXBwb3J0IFtDdXN0
b21dIGZvciBzdGF0aWMgZnVuY3Rpb25zCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODA1NzMKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKEdlbmVyYXRlSGVhZGVyKTogSWYgdGhlIGZ1bmN0
aW9uIGlzIHN0YXRpYywgYWRkIHN0YXRpYyBxdWFsaWZpZXIgdG8gY3BwIGZ1bmN0aW9uLgooR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbik6IFJlb3JnYW5pemUgdGhlIGZ1bmN0aW9uIHRvIHNwbGl0IG91
dCBiYXNlZCBvbiB0aGUgc3RhdGljCmF0dHJpYnV0ZSwgaW5zdGVhZCBvZiBjaGVja2luZyBmb3Ig
aXQgYXQgZXZlcnkgbGluZSB3ZSBvdXRwdXQuCiAgICBJZiB0aGUgZnVuY3Rpb24gaXMgc3RhdGlj
IGFuZCBub3QgY3VzdG9tLCB0aGUgbGlzdGVkIGNvZGUgc2hvdWxkIGJlIHRoZSBjb2RlIGluCnRo
ZSByZXN0IG9mIHRoZSBmdW5jdGlvbiB0aGF0IGRpZCBub3QgaGF2ZSB0aGUgc3RhdGljIGNoZWNr
LiBJZiBpdCBpcyBjdXN0b20sIHRoZW4Kd2UgY2hlY2sgdGhlIG51bWJlciBvZiBhcmd1bWVudHMs
IGFuZCB0aGVuIGNhbGwgdGhlIHN0YXRpYyBpbXBsIGZ1bmN0aW9uIGRpcmVjdGx5LgogICAgSWYg
dGhlIGZ1bmN0aW9uIGlzIG5vdCBzdGF0aWMsIGFsbCBvZiB0aGUgInVubGVzcyAoJGZ1bmN0aW9u
LT5pc1N0YXRpYykiIGNoZWNrcwphcmUgcmVtb3ZlZCBzaW5jZSBpdCBpcyBub3QgbmVjZXNzYXJ5
LgoKKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFkZGVkIG5ldyB0ZXN0IGNh
c2UuCgoqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgooV2ViQ29yZSk6
CihXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QyKToKKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CihKU1Rlc3RPYmopOgooV2ViQ29y
ZSk6CiogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgoqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CigtW0RPTVRlc3RPYmogY2xhc3NNZXRo
b2QyXSk6CiogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CihXZWJDb3Jl
OjpDb25maWd1cmVWOFRlc3RPYmpUZW1wbGF0ZSk6CiogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5oOgooVjhUZXN0T2JqKToKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMgKysrKysrKysrKysrKysrKysrKwogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gfCAgIDM0ICsr
KysrKysrKysrKysrLS0tLS0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwIHwgICAgOCArKysrKwogLi4uL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oICAgfCAgICAyICsKIC4uLi9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0T2JqLmggICAgICAgIHwgICAgMSArCiAuLi4vYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdE9iai5tbSAgICAgICB8ICAgIDYgKysrCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgICB8ICAgIDIgKy0KIC4uLi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIHwgICAgMSArCiAuLi4vV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmggICB8ICAgIDEgKwogOSBm
aWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggMDNiNzVjNi4uYTVkY2QxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEy
LTAzLTA3ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAgICBTdXBwb3J0IFtD
dXN0b21dIGZvciBzdGF0aWMgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04MDU3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IElmIHRoZSBmdW5jdGlvbiBpcyBzdGF0aWMsIGFk
ZCBzdGF0aWMgcXVhbGlmaWVyIHRvIGNwcCBmdW5jdGlvbi4KKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOiBSZW9yZ2FuaXplIHRoZSBmdW5jdGlvbiB0byBzcGxpdCBvdXQgYmFzZWQg
b24gdGhlIHN0YXRpYworICAgICAgICBhdHRyaWJ1dGUsIGluc3RlYWQgb2YgY2hlY2tpbmcgZm9y
IGl0IGF0IGV2ZXJ5IGxpbmUgd2Ugb3V0cHV0LgorICAgICAgICAgICAgSWYgdGhlIGZ1bmN0aW9u
IGlzIHN0YXRpYyBhbmQgbm90IGN1c3RvbSwgdGhlIGxpc3RlZCBjb2RlIHNob3VsZCBiZSB0aGUg
Y29kZSBpbgorICAgICAgICB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gdGhhdCBkaWQgbm90IGhh
dmUgdGhlIHN0YXRpYyBjaGVjay4gSWYgaXQgaXMgY3VzdG9tLCB0aGVuCisgICAgICAgIHdlIGNo
ZWNrIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLCBhbmQgdGhlbiBjYWxsIHRoZSBzdGF0aWMgaW1w
bCBmdW5jdGlvbiBkaXJlY3RseS4KKyAgICAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBpcyBub3Qg
c3RhdGljLCBhbGwgb2YgdGhlICJ1bmxlc3MgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIiBjaGVja3MK
KyAgICAgICAgYXJlIHJlbW92ZWQgc2luY2UgaXQgaXMgbm90IG5lY2Vzc2FyeS4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDogQWRkZWQgbmV3IHRlc3QgY2Fz
ZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uQ2xhc3NNZXRob2QyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmg6CisgICAgICAgIChKU1Rlc3RPYmopOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAg
ICgtW0RPTVRlc3RPYmogY2xhc3NNZXRob2QyXSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRl
c3RPYmpUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5oOgorICAgICAgICAoVjhUZXN0T2JqKToKKwogMjAxMi0wMy0wNyAgS2VudGFybyBIYXJh
ICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XVtQZXJmb3JtYW5jZV0gT3B0
aW1pemUgRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCwgRWxlbWVudC5sYXN0RWxlbWVudENoaWxk
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQppbmRleCBlOWZhYjI4Li45OWNhMGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtODkxLDcgKzg5MSw3IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2Vu
ZXJhdGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CiAgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlv
bk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxl
bWVudGVkQXMifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSk7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6
SlNWYWx1ZSAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihKU0M6OkV4ZWNTdGF0
ZSopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICIgLiAoJGZ1
bmN0aW9uLT5pc1N0YXRpYyA/ICJzdGF0aWMgIiA6ICIiKSAuICJKU0M6OkpTVmFsdWUgIiAuICRm
dW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA3Nyw2ICsyMDc3LDIyIEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1l
L0Vycm9yLmg+In0gPSAxOwogCisgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5pc1N0YXRpYykg
eworICAgICAgICAgICAgICAgIGlmICgkaXNDdXN0b20pIHsKKyAgICAgICAgICAgICAgICAgICAg
R2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrKFxAaW1wbENvbnRlbnQsICRmdW5jdGlvbiwgJGRh
dGFOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSgke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRh
dGlvbk5hbWUgLiAiKGV4ZWMpKTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjayhcQGltcGxDb250ZW50
LCAkZnVuY3Rpb24sICRkYXRhTm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEB7JGZ1
bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0g
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgICAgICAgICBteSAoJGZ1bmN0
aW9uU3RyaW5nLCAkZHVtbXkpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soXEBpbXBsQ29udGVu
dCwgJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJzLCAkaW1wbENsYXNzTmFtZSwg
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lLCAkc3ZnUHJvcGVydHlUeXBlLCAkc3ZnUHJvcGVy
dHlPckxpc3RQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlKTsKKyAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRm
dW5jdGlvblN0cmluZywgIiAgICAiLCAkc3ZnUHJvcGVydHlUeXBlLCAkaW1wbENsYXNzTmFtZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm
ICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSB0b0pTRE9NV2luZG93
KGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXNPYmplY3QoZXhlYykpO1xuIik7CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYXN0ZWRUaGlzKVxuIik7CkBA
IC0yMDg1LDI3ICsyMTAxLDI2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9
IHRvJHtjbGFzc05hbWV9KGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXNPYmplY3QoZXhlYykp
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYXN0
ZWRUaGlzKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2lm
ICghJGZ1bmN0aW9uLT5pc1N0YXRpYykgeworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9OjpzX2luZm8p
KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PCRjbGFz
c05hbWUqPihhc09iamVjdCh0aGlzVmFsdWUpKTtcbiIpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsICYke2NsYXNzTmFtZX06OnNfaW5mbyk7XG4iKSB1bmxlc3MgKCRmdW5jdGlv
bi0+aXNTdGF0aWMpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJiR7Y2xhc3NOYW1lfTo6c19pbmZv
KTtcbiIpOwogCiAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ2hlY2tTZWN1cml0eSJ9IGFuZAotICAgICAgICAgICAgICAgICEkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tTZWN1cml0eSJ9IGFuZAotICAg
ICAgICAgICAgICAgICEkZnVuY3Rpb24tPmlzU3RhdGljKSB7CisgICAgICAgICAgICAgICAgICAg
ICEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tT
ZWN1cml0eSJ9KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFjYXN0ZWRUaGlzLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKVxuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRpc0N1
c3RvbSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFt
ZSAuICIoZXhlYykpO1xuIikgdW5sZXNzICgkZnVuY3Rpb24tPmlzU3RhdGljKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihleGVjKSk7
XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgJGltcGxUeXBlKiBpbXBsID0gc3RhdGljX2Nhc3Q8JGltcGxUeXBlKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTtcbiIpIHVubGVzcyAoJGZ1bmN0aW9uLT5pc1N0YXRpYyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUgYW5kICEkZnVuY3Rpb24tPmlzU3RhdGlj
KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlw
ZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsVHlwZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGltcGwtPnJvbGUoKSA9PSBB
bmltVmFsUm9sZSkge1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURf
RVJSKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwpAQCAtMjEyMCw3
ICsyMTM1LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9kZSJ9IGFuZCAhJGZ1
bmN0aW9uLT5pc1N0YXRpYykgeworICAgICAgICAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9kZSJ9KSB7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoZXhlYywgaW1wbC0+IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lIC4gIigiIC4gKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSA/ICJlYyIgOiAiIikg
LiIpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAg
ICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKQEAgLTIxMzYs
NiArMjE1MSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoJGZ1bmN0aW9uLCAkZnVuY3Rp
b25TdHJpbmcsICIgICAgIiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGltcGxDbGFzc05hbWUpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDk3ZGNjOGYu
LjExYTIwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xNjMsNiArMTYzLDcgQEAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAi
Q09OU1RfSkFWQVNDUklQVCIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDT05TVF9KQVZBU0NS
SVBUKSwgKGludHB0cl90KTAsIE5vSW50cmluc2ljIH0sCiAgICAgeyAiY2xhc3NNZXRob2QiLCBE
b250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QpLCAoaW50cHRy
X3QpMCwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJjbGFzc01ldGhvZFdpdGhPcHRpb25hbCIsIERv
bnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25h
bCksIChpbnRwdHJfdCkxLCBOb0ludHJpbnNpYyB9LAorICAgIHsgImNsYXNzTWV0aG9kMiIsIERv
bnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDIpLCAoaW50cHRy
X3QpMSwgTm9JbnRyaW5zaWMgfSwKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKICAgICB7ICJvdmVy
bG9hZGVkTWV0aG9kMSIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMSksIChpbnRwdHJfdCkxLCBOb0ludHJpbnNpYyB9LAogI2VuZGlmCkBAIC0y
MDgyLDYgKzIwODMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3Vt
ZW50cyIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Y2xhc3NNZXRo
b2QyKGV4ZWMpKTsKK30KKwogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QxMShFeGVjU3RhdGUqIGV4ZWMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggNTNjNDY0ZS4uMjg0MTll
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ3VzdG9tIGZ1bmN0
aW9ucwogICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKICAg
ICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNsYXNzTWV0aG9kMihKU0M6OkV4ZWNTdGF0ZSopOwogICAg
IFRlc3RPYmoqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KICAgICB2b2lkIHJlbGVh
c2VJbXBsKCkgeyBtX2ltcGwtPmRlcmVmKCk7IG1faW1wbCA9IDA7IH0KIApAQCAtMTk2LDYgKzE5
Nyw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhKCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKEpTQzo6
RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
Q29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNs
YXNzTWV0aG9kV2l0aE9wdGlvbmFsKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9k
MihKU0M6OkV4ZWNTdGF0ZSopOwogI2lmIEVOQUJMRShDb25kaXRpb24xKQogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMShKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKaW5kZXggMzhm
YWI0ZS4uYWViYzM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMjA2LDYgKzIwNiw3IEBAIGVudW0gewog
I2VuZGlmCiAtICh2b2lkKWNsYXNzTWV0aG9kOwogLSAoaW50KWNsYXNzTWV0aG9kV2l0aE9wdGlv
bmFsOihpbnQpYXJnOworLSAodm9pZCljbGFzc01ldGhvZDI6KGludClhcmc7CiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpCiAtICh2b2lkKW92ZXJsb2FkZWRNZXRob2QxOihpbnQpYXJnOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5tbQppbmRleCAzOGY5YzZiLi5hYmQzYjljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KQEAg
LTkzMiw2ICs5MzIsMTIgQEAKICAgICByZXR1cm4gSU1QTC0+Y2xhc3NNZXRob2RXaXRoT3B0aW9u
YWwoYXJnKTsKIH0KIAorLSAodm9pZCljbGFzc01ldGhvZDI6KGludClhcmcKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+Y2xhc3NNZXRob2Qy
KGFyZyk7Cit9CisKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogLSAodm9pZClvdmVybG9hZGVk
TWV0aG9kMTooaW50KWFyZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDVmMWI0NjYuLmZkNWRiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTE3Miw5ICsxNzIs
OSBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIC8vIENsYXNzIG1ldGhvZHMgd2l0aGluIEphdmFT
Y3JpcHQgKGxpa2Ugd2hhdCdzIHVzZWQgZm9yIElEQktleVJhbmdlKS4KICAgICAgICAgc3RhdGlj
IHZvaWQgY2xhc3NNZXRob2QoKTsKICAgICAgICAgc3RhdGljIGxvbmcgY2xhc3NNZXRob2RXaXRo
T3B0aW9uYWwoaW4gW09wdGlvbmFsXSBsb25nIGFyZyk7CisgICAgICAgIFtDdXN0b21dIHN0YXRp
YyB2b2lkIGNsYXNzTWV0aG9kMihpbiBsb25nIGFyZyk7CiAKICAgICAgICAgLy8gU3RhdGljIG1l
dGhvZCB3aXRoIGNvbmRpdGlvbmFsIG9uIG92ZXJsb2FkZWQgbWV0aG9kcwotCiAgICAgICAgIFtD
b25kaXRpb25hbD1Db25kaXRpb24xXSBzdGF0aWMgdm9pZCBvdmVybG9hZGVkTWV0aG9kMShpbiBs
b25nIGFyZyk7CiAgICAgICAgIFtDb25kaXRpb25hbD1Db25kaXRpb24xXSBzdGF0aWMgdm9pZCBv
dmVybG9hZGVkTWV0aG9kMShpbiBET01TdHJpbmcgdHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNmUy
YzZhNy4uNTMwYmJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTIwMTEsNiArMjAxMSw3IEBAIHN0YXRpYyB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0T2JqVGVt
cGxhdGUodjg6OlBlcnNpCiAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFRo
YXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhU
ZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFj
aywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRU
aHJvd3NTaWduYXR1cmUpKTsKICAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjbGFzc01l
dGhvZCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6Y2xhc3NN
ZXRob2RDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpMb2NhbDx2ODo6U2ln
bmF0dXJlPigpKSk7CiAgICAgZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY2xhc3NNZXRob2RX
aXRoT3B0aW9uYWwiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6
OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
LCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkpOworICAgIGRlc2MtPlNldCh2ODo6U3RyaW5n
OjpOZXcoImNsYXNzTWV0aG9kMiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4VGVzdE9i
ajo6Y2xhc3NNZXRob2QyQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9j
YWw8djg6OlNpZ25hdHVyZT4oKSkpOwogI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIGRlc2Mt
PlNldCh2ODo6U3RyaW5nOjpOZXcoIm92ZXJsb2FkZWRNZXRob2QxIiksIHY4OjpGdW5jdGlvblRl
bXBsYXRlOjpOZXcoVGVzdE9iakludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kMUNhbGxiYWNrLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+KCkpKTsKICNl
bmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaAppbmRleCBjZGVhZTNlLi5lNTlkYWI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5oCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJ
bmZvIGluZm87CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXN0b21NZXRob2RD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjdXN0b21NZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzTWV0aG9kMkNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VzdG9tQXR0ckFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7CiAgICAgc3RhdGljIHZv
aWQgY3VzdG9tQXR0ckFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwotLSAKMS43Ljgu
NAoK
</data>
<flag name="review"
          id="133888"
          type_id="1"
          status="+"
          setter="haraken"
    />
          </attachment>
      

    </bug>

</bugzilla>