<?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>38188</bug_id>
          
          <creation_ts>2010-04-27 02:35:03 -0700</creation_ts>
          <short_desc>Remove custom NodeIterator bindings</short_desc>
          <delta_ts>2010-04-27 14:23:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>217615</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 02:35:03 -0700</bug_when>
    <thetext>Remove custom NodeIterator bindings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217619</commentid>
    <comment_count>1</comment_count>
      <attachid>54402</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 02:36:11 -0700</bug_when>
    <thetext>Created attachment 54402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217620</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-27 02:40:42 -0700</bug_when>
    <thetext>Attachment 54402 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:210:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:212:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:225:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:227:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:230:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/JS/JSTestObj.cpp:150:  Missing spaces around |  [whitespace/operators] [3]
WebCore/bindings/scripts/test/JS/JSTestObj.cpp:151:  Missing spaces around |  [whitespace/operators] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 9 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217621</commentid>
    <comment_count>3</comment_count>
      <attachid>54402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-27 02:43:26 -0700</bug_when>
    <thetext>Comment on attachment 54402
Patch

WebCore/bindings/scripts/CodeGeneratorJS.pm:1894
 +          push(@implContent, $indent . &quot;setDOMException(exec, ec);\n&quot;) if @{$function-&gt;raisesExceptions};
Comments in the ChangeLog would be helpful...

WebCore/bindings/scripts/CodeGeneratorV8.pm:2422
 +      if ($hasScriptState) {
Again here....

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:625
 +      setDOMException(exec, ec);
Is this correct to unconditionally set the dom exception?

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:640
 +      setDOMException(exec, ec);
This will smash over an an existing exception on the exec it seems.  Seems wrong.

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:639
 +      JSC::JSValue result = toJS(exec, castedThisObj-&gt;globalObject(), WTF::getPtr(imp-&gt;withScriptStateObjException(exec, ec)));
This will probably cause this to actually fix isolated world bugs.  You may need to update test results.

WebCore/bindings/scripts/test/V8/V8TestObj.cpp: 
 +      if (state-&gt;hadException())
Why?  ChangeLog comment would help here.

WebCore/bindings/scripts/test/V8/V8TestObj.cpp:361
 +      EmptyScriptState state;
Indent?

I think the JSC handling of the case where the callback throws an exception (which is left on the exec) is not handled correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217622</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 02:46:07 -0700</bug_when>
    <thetext>I think the behavior is correct.  I had the same question, but I looked at setDOMException and it made me think it would work right.  I&apos;ll look at the rest of your comments in the morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217623</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-27 02:50:25 -0700</bug_when>
    <thetext>I was wrong:
http://trac.webkit.org/browser/trunk/WebCore/bindings/js/JSDOMBinding.cpp#L566

Could still use some better ChangeLogs.

Seems like it&apos;s also about time to fix setDOMException to take a globalObject. :)  (obviously in a separate change)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217784</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 10:50:18 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 54402 [details])
&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1894
&gt;  +          push(@implContent, $indent . &quot;setDOMException(exec, ec);\n&quot;) if
&gt; @{$function-&gt;raisesExceptions};
&gt; Comments in the ChangeLog would be helpful...

Done.

&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2422
&gt;  +      if ($hasScriptState) {
&gt; Again here....

Done.

&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:625
&gt;  +      setDOMException(exec, ec);
&gt; Is this correct to unconditionally set the dom exception?

I think so.

&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:640
&gt;  +      setDOMException(exec, ec);
&gt; This will smash over an an existing exception on the exec it seems.  Seems
&gt; wrong.

As discussed before, that&apos;s not how setDOMException works.

&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:639
&gt;  +      JSC::JSValue result = toJS(exec, castedThisObj-&gt;globalObject(),
&gt; WTF::getPtr(imp-&gt;withScriptStateObjException(exec, ec)));
&gt; This will probably cause this to actually fix isolated world bugs.  You may
&gt; need to update test results.

We&apos;re going to fix lots of random bugs in this proces.  This didn&apos;t cause any tests to fail AFAIK.

&gt; WebCore/bindings/scripts/test/V8/V8TestObj.cpp: 
&gt;  +      if (state-&gt;hadException())
&gt; Why?  ChangeLog comment would help here.

This is left-over junk from an earlier change where I didn&apos;t re-generate the reference files correctly.  I&apos;ll handle that in a separate commit.

&gt; WebCore/bindings/scripts/test/V8/V8TestObj.cpp:361
&gt;  +      EmptyScriptState state;
&gt; Indent?

This is a different bug in the CodeGenerator.  We should fix it in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217790</commentid>
    <comment_count>7</comment_count>
      <attachid>54431</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 10:57:52 -0700</bug_when>
    <thetext>Created attachment 54431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217795</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-27 11:05:07 -0700</bug_when>
    <thetext>Attachment 54431 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:210:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:212:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:225:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:227:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:230:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/JS/JSTestObj.cpp:150:  Missing spaces around |  [whitespace/operators] [3]
WebCore/bindings/scripts/test/JS/JSTestObj.cpp:151:  Missing spaces around |  [whitespace/operators] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 9 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217822</commentid>
    <comment_count>9</comment_count>
      <attachid>54431</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-27 12:01:17 -0700</bug_when>
    <thetext>Comment on attachment 54431
Patch

Looks right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217823</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-27 12:01:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:640
&gt; &gt;  +      setDOMException(exec, ec);
&gt; &gt; This will smash over an an existing exception on the exec it seems.  Seems
&gt; &gt; wrong.
&gt; 
&gt; As discussed before, that&apos;s not how setDOMException works.

Typically in a case like this we construct a test case demonstrating that&apos;s OK.

&gt; &gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:639
&gt; &gt;  +      JSC::JSValue result = toJS(exec, castedThisObj-&gt;globalObject(),
&gt; &gt; WTF::getPtr(imp-&gt;withScriptStateObjException(exec, ec)));
&gt; &gt; This will probably cause this to actually fix isolated world bugs.  You may
&gt; &gt; need to update test results.
&gt; 
&gt; We&apos;re going to fix lots of random bugs in this proces.  This didn&apos;t cause any
&gt; tests to fail AFAIK.

Our project policy is normally that we create test cases when we notice bugs and fix them. Even if the reason for the code change in the first place was not that particular bug. I don’t think “we’re going to fix lots of random bugs” is a convincing argument.

Whether an existing test covers this or not is not the point.

This won’t prevent me from approving this patch, but I think we should continue to create test cases for bugs we fix. I spend quite a bit of time creating test cases for bugs I notice while fixing another bug, and this seems like the same sort of thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217824</commentid>
    <comment_count>11</comment_count>
      <attachid>54431</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-27 12:02:00 -0700</bug_when>
    <thetext>Comment on attachment 54431
Patch

&gt; +        $result .= $indent . &quot;if (state.hadException())\n&quot;;

I think we want UNLIKELY here just as with the UNLIKELY(ec) case. Can we do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217825</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-27 12:02:19 -0700</bug_when>
    <thetext>Looks like Eric got in with review+ and commit-queue+ before I did, although I had intended both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217830</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 12:07:42 -0700</bug_when>
    <thetext>&gt; Typically in a case like this we construct a test case demonstrating that&apos;s OK.

Ok.  Will do shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217914</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 13:55:25 -0700</bug_when>
    <thetext>Committed r58333: &lt;http://trac.webkit.org/changeset/58333&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217917</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 13:59:37 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Typically in a case like this we construct a test case demonstrating that&apos;s OK.
&gt; 
&gt; Ok.  Will do shortly.

Turns out this is impossible because the only time ec is set is as the first
action of the method:

http://trac.webkit.org/browser/trunk/WebCore/dom/NodeIterator.cpp#L87

which means there&apos;s no test case we can write with our current code that shows
that the ExecState exception has priority.  (At least, I don&apos;t see how to write
code that generates both kinds of exceptions.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217938</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-27 14:16:07 -0700</bug_when>
    <thetext>&gt; Our project policy is normally that we create test cases when we notice bugs
&gt; and fix them. Even if the reason for the code change in the first place was not
&gt; that particular bug. I don’t think “we’re going to fix lots of random bugs” is
&gt; a convincing argument.

A test that documents the prototype chain fix is now available in https://bugs.webkit.org/show_bug.cgi?id=38219</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217940</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-27 14:20:15 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; Our project policy is normally that we create test cases when we notice bugs
&gt; &gt; and fix them. Even if the reason for the code change in the first place was not
&gt; &gt; that particular bug. I don’t think “we’re going to fix lots of random bugs” is
&gt; &gt; a convincing argument.
&gt; 
&gt; A test that documents the prototype chain fix is now available in
&gt; https://bugs.webkit.org/show_bug.cgi?id=38219

Thanks, I really appreciate it!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54402</attachid>
            <date>2010-04-27 02:36:11 -0700</date>
            <delta_ts>2010-04-27 10:57:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38188-20100427023610.patch</filename>
            <type>text/plain</type>
            <size>24779</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2U4NDVjYjkzMGM0MjU4NDcxODQ2NDliZDBiM2E5YjE0N2Q1MGYwYy4uZDI4NzEwZmNmNzk5ZDVk
NWNlODFlMzliMDUzMzI4MjBhZThkZTI3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0MiBAQAogMjAxMC0wNC0yNyAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBjdXN0b20gTm9kZUl0ZXJhdG9yIGJpbmRpbmdz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODE4OAor
CisgICAgICAgIEFub3RoZXIgZXhhbXBsZSBvZiBDYWxsV2l0aD1TY3JpcHRTdGF0ZS4gIFRoaXMg
Y2FzZSBzaG93cyB1cyB0aGUgcmlnaHQKKyAgICAgICAgd2F5IHRvIGhhbmRsZSB0aGUgaW50ZXJh
Y3Rpb24gd2l0aCBleGNlcHRpb24gY29kZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAgKC1bRE9NVGVzdE9iaiB3
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uXSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogd2l0
aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uXSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0
U3RhdGVWb2lkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3
aXRoU2NyaXB0U3RhdGVPYmpDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50
ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vTm9kZUl0
ZXJhdG9yLmlkbDoKKworMjAxMC0wNC0yNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgorCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgogCiAgICAgICAgIFJlbW92ZSBj
dXN0b20gYmluZGluZ3MgZm9yIFRyZWVXYWxrZXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNzdlMjg3Y2U1NzI1Yzc2N2QxMjRl
ZGRhOGM1NzgzN2I0MjczMjc2Yi4uODU0MzhlYTAxMzgyY2YwMWUwYTQyODNjZDM1ZTVjOTI2ODRi
YWZlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTc3MCw3ICs3NzAsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5hbWVkTm9kZXNDb2xsZWN0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhOb2RlRmlsdGVyQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcCcsCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCmluZGV4IDZhMDlhYmY5MWRjODIxNWQ5
ZDEwMmNjZDdiNDNlNmM4YmZiYWU3NzguLjdjODU4ZTVhOGIxOGZiZTBiZDJmMjMxNTRkZTA3ZGFl
ZjVhNDFjNjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JD
dXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCkBAIC0zNywzNCArMzcsNCBAQCB2b2lkIEpTTm9kZUl0ZXJhdG9yOjptYXJrQ2hpbGRyZW4o
TWFya1N0YWNrJiBtYXJrU3RhY2spCiAgICAgICAgIGZpbHRlci0+bWFya0FnZ3JlZ2F0ZShtYXJr
U3RhY2spOwogfQogCi1KU1ZhbHVlIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShleGVjLCBlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBu
b2RlLmdldCgpKTsKLX0KLQotSlNWYWx1ZSBKU05vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShleGVjLCBl
Yyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4g
dG9KUyhleGVjLCBub2RlLmdldCgpKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggYzc1ZjVkNmY2N2M0N2RjNzEyZDU3MDE5NWEwM2Qy
NGRiODViZmNlZC4uMjY5YmNlMzEyNGUzNmQyZTA3YjgyNTNiNjRmNTE0NDQzMTcxY2Y4YyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xODkxLDEy
ICsxODkxLDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKCkKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAicmV0dXJuIGpzVW5kZWZpbmVkKCk7
XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRp
bmRlbnQgLiAiSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0
aW9uLT5zaWduYXR1cmUsIDEsICRpbXBsQ2xhc3NOYW1lLCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAi
Y2FzdGVkVGhpc09iaiIpIC4gIjtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICJzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIikgaWYgQHskZnVuY3Rpb24tPnJh
aXNlc0V4Y2VwdGlvbnN9OworCiAgICAgICAgICRjYWxsV2l0aCA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKICAgICAgICAgaWYgKCRjYWxs
V2l0aCBhbmQgJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChleGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpO1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmIEB7JGZ1bmN0aW9uLT5y
YWlzZXNFeGNlcHRpb25zfTsKIAogICAgICAgICBpZiAoJHBvZFR5cGUgYW5kIG5vdCAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltbXV0YWJsZSJ9KSB7CiAgICAg
ICAgICAgICAjIEltbXV0YWJsZSBtZXRob2RzIGRvIG5vdCBjb21taXQgY2hhbmdlcyBiYWNrIHRv
IHRoZSBpbnN0YW5jZSwgdGh1cyBwcm9kdWNpbmcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDMzYWMyM2Q3YjBhMWExOWJhNjBiZGQ1MDIwNGFmMzBm
YTIyYjdkNmMuLjQ1YmI3ODM1M2UxOGEzZjgxZjZhY2U5YzY5YTJlYzk1OGM1NTAwNzIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjQxNCwxNiAr
MjQxNCwxNiBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgICAgICAkcmV0
dXJuSXNSZWYgPSAwOwogICAgIH0KIAotICAgIGlmICgkaGFzU2NyaXB0U3RhdGUpIHsKLSAgICAg
ICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSlcbiI7Ci0g
ICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUu
ZXhjZXB0aW9uKCkpO1xuIgotICAgIH0KLQogICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhj
ZXB0aW9uc30pIHsKICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChVTkxJS0VMWShl
YykpXG4iOwogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiICAgIGdvdG8gZmFpbDtcbiI7
CiAgICAgfQogCisgICAgaWYgKCRoYXNTY3JpcHRTdGF0ZSkgeworICAgICAgICAkcmVzdWx0IC49
ICRpbmRlbnQgLiAiaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKVxuIjsKKyAgICAgICAgJHJlc3Vs
dCAuPSAkaW5kZW50IC4gIiAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSk7
XG4iCisgICAgfQorCiAgICAgIyBJZiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBQT0QgdHlwZSwgc2Vw
YXJhdGUgb3V0IHRoZSB3cmFwcGVyIGdlbmVyYXRpb24KICAgICBpZiAoJHJldHVybnNMaXN0SXRl
bVBvZFR5cGUpIHsKICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIlJlZlB0cjxWOFNWR1BP
RFR5cGVXcmFwcGVyPCIgLiAkbmF0aXZlUmV0dXJuVHlwZSAuICI+ID4gd3JhcHBlciA9ICI7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T2JqLmNwcAppbmRleCA2NmUwYzJiMjcwZjI1ZGFkNGQ1NzE1MDNmZTcyZjY1ODRi
NWEwNmM2Li42NTAzZjcwNTE1NWQ5MTUzNmNiOTdmYmRiNjQzMzUxOGRhOTAyNTk2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RP
YmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5jcHAKQEAgLTIwNyw2ICsyMDcsMzggQEAgd2Via2l0X2RvbV90ZXN0X29ial93
aXRoX3NjcmlwdF9zdGF0ZV9vYmogKFdlYktpdERPTVRlc3RPYmogKnNlbGYpCiB9CiAKIHZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZF9leGNlcHRpb24gKFdl
YktpdERPTVRlc3RPYmogKnNlbGYsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwgKHNlbGYpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPndp
dGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjOworICAgICAgICBXZWJDb3Jl
OjpnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVzYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisKK30KKworV2ViS2l0RE9NVGVzdE9i
aiogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24g
KFdlYktpdERPTVRlc3RPYmogKnNlbGYsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsIChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+
d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2M7CisgICAgICAgIFdlYkNv
cmU6OmdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihlYywgZWNkZXNjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2Jq
KiAgcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE9iaiogPihXZWJLaXQ6OmtpdChnX3Jl
cy5nZXQoKSkpOworICAgIHJldHVybiByZXM7CisKK30KKwordm9pZAogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcgKFdlYktpdERPTVRlc3RPYmogKnNlbGYsIGds
b25nIG9wdCkKIHsKICAgICBnX3JldHVybl9pZl9mYWlsIChzZWxmKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgK
aW5kZXggODMyNDk3YTAzM2RiZGVmNWQwNGRhNTcxNTU4ZjBmMjMxY2I2ZDc0Mi4uN2QyOTUyNjAz
MTBhNGY4MTM5YzZmOWVkMTJjMDQxNGRhMjU4NDM4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKQEAgLTky
LDYgKzkyLDEyIEBAIFdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVz
dF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqIChXZWJLaXRET01UZXN0T2JqICpzZWxmKTsKIAog
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3Zv
aWRfZXhjZXB0aW9uIChXZWJLaXRET01UZXN0T2JqICpzZWxmLCBHRXJyb3IgKiplcnJvcik7CisK
K1dFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaiogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhf
c2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24gKFdlYktpdERPTVRlc3RPYmogKnNlbGYsIEdFcnJv
ciAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX2FyZyAoV2ViS2l0RE9NVGVzdE9iaiAqc2VsZiwgZ2xvbmcgb3B0KTsK
IAogV0VCS0lUX0FQSSB2b2lkCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcAppbmRleCBmMDg5Y2E3ZGIyZGUwMDliOTNkMDg4OTVkNjY1YjFhNzIyZjEx
MzZhLi5kNGQwMGQ3ZjU3NzJhYmYwYTExOTM3NTNlYjEzZWRkNjBkYTU5MWMyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTEyOCw3ICsx
MjgsNyBAQCBib29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudAogI2RlZmluZSBUSFVOS19HRU5FUkFUT1Io
Z2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlc1syMV0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzIzXSA9CiB7CiAgICAgeyAidm9pZE1ldGhv
ZCIsIERvbnREZWxldGV8RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKSwgKGludHB0cl90KTAg
VEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAidm9pZE1ldGhvZFdpdGhBcmdzIiwgRG9udERl
bGV0ZXxGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRI
VU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMTQ3LDYgKzE0Nyw4IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1syMV0gPQogICAgIHsgIndp
dGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQiLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRCksIChpbnRwdHJfdCkyIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIndpdGhTY3JpcHRTdGF0ZVZvaWQiLCBEb250RGVs
ZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZCksIChpbnRwdHJfdCkwIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIndpdGhTY3JpcHRTdGF0ZU9iaiIsIERvbnREZWxl
dGV8RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopLCAoaW50cHRyX3QpMCBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJ3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uIiwg
RG9udERlbGV0ZXxGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24p
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJ3aXRoU2NyaXB0U3Rh
dGVPYmpFeGNlcHRpb24iLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAg
eyAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZXxGdW5jdGlvbiwgKGludHB0cl90
KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEFyZyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAog
ICAgIHsgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgRG9udERlbGV0
ZXxGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJn
KSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIiwgRG9udERlbGV0ZXxGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyksIChpbnRwdHJf
dCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMTU4LDcgKzE2MCw3IEBAIHN0YXRpYyBKU0Nf
Q09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9CiAjaWYg
RU5BQkxFKFBFUkZFQ1RfSEFTSF9TSVpFKQogICAgIHsgODE5MSwgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXMsIDAgfTsKICNlbHNlCi0gICAgeyA2NiwgNjMsIEpTVGVzdE9ialByb3RvdHlw
ZVRhYmxlVmFsdWVzLCAwIH07CisgICAgeyA2NywgNjMsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxl
VmFsdWVzLCAwIH07CiAjZW5kaWYKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlw
ZTo6c19pbmZvID0geyAiVGVzdE9ialByb3RvdHlwZSIsIDAsICZKU1Rlc3RPYmpQcm90b3R5cGVU
YWJsZSwgMCB9OwpAQCAtNjEwLDYgKzYxMiwzNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmooRXhlY1N0YXRlKiBleAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
eworICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTVGVz
dE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzT2JqLT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworCisgICAgaW1wLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworfQorCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFVOVVNFRF9Q
QVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2lu
Zm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpc09iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzT2JqLT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisKKyAg
ICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzT2JqLT5nbG9iYWxP
YmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZXhl
YywgZWMpKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGFyZ3MpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aAppbmRleCAyM2JkZDNlYjZhMjBjMjFlNDM0MmQ4ZjMyZjZiYmY4M2IzNDBjODk2Li5jMzQ0NmQ0
YzBjNTBmNTZlMjJjOTA4ZTRhMTU1NTFiNzA0MTVkNDc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtMTAyLDYgKzEwMiw4IEBAIEpTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNG
cmFtZUFuZFVzZXJHZXN0CiBKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
KTsKIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aFNjcmlwdFN0YXRlVm9pZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmooSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
KTsKK0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOworSlNDOjpKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBj
b25zdCBKU0M6OkFyZ0xpc3QmKTsKIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CiBKU0M6
OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CiBKU0M6OkpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAppbmRleCA5NWI2MDA1OTIwMDdlOTI0
YWVjNTRiMTgwODU3YTZkNTRkMDg0ZmQzLi40MGJiODQ1MTVlYzk1ZDc4ODJhMTg1YzNhODNhN2Zm
MDRhMDFkNWQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmouaApAQCAtNjcsNiArNjcsOCBAQAogLSAodm9pZCl3aXRoRHluYW1pY0ZyYW1lQW5k
VXNlckdlc3R1cmVBU0FEOihpbnQpaW50QXJnIG9wdGlvbmFsQXJnOihpbnQpb3B0aW9uYWxBcmc7
CiAtICh2b2lkKXdpdGhTY3JpcHRTdGF0ZVZvaWQ7CiAtIChET01UZXN0T2JqICopd2l0aFNjcmlw
dFN0YXRlT2JqOworLSAodm9pZCl3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uOworLSAoRE9N
VGVzdE9iaiAqKXdpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbjsKIC0gKHZvaWQpbWV0aG9kV2l0
aE9wdGlvbmFsQXJnOihpbnQpb3B0OwogLSAodm9pZCltZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRPcHRpb25hbEFyZzooaW50KW5vbk9wdCBvcHQ6KGludClvcHQ7CiAtICh2b2lkKW1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnczooaW50KW5vbk9wdCBvcHQxOihpbnQp
b3B0MSBvcHQyOihpbnQpb3B0MjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQppbmRleCBkYzcwODY3YWQ4NjQzNTQyNmExY2E0NWY5NmYzNDYw
ZmJkMGQxY2RhLi44MDM1OGRmMzQyYjYwNzg3M2IzNzIzMjIyZmJmOGE3NjFjYjQ1Mzk0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0K
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBA
IC0yNDMsNiArMjQzLDIxIEBACiAgICAgcmV0dXJuIGtpdChXVEY6OmdldFB0cihJTVBMLT53aXRo
U2NyaXB0U3RhdGVPYmooKSkpOwogfQogCistICh2b2lkKXdpdGhTY3JpcHRTdGF0ZVZvaWRFeGNl
cHRpb24KK3sKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBJTVBMLT53
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGVjKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9uRE9N
RXJyb3IoZWMpOworfQorCistIChET01UZXN0T2JqICopd2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0
aW9uCit7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgRE9NVGVzdE9i
aiAqcmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwtPndpdGhTY3JpcHRTdGF0ZU9iakV4Y2Vw
dGlvbihlYykpKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIC0gKHZvaWQpbWV0aG9kV2l0aE9wdGlvbmFsQXJnOihpbnQpb3B0CiB7
CiAgICAgSU1QTC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IGViMzBlODdhMDk0YWY2OGE2N2I2NjE4NzBm
NGYyYjQ0NmU5OGUzOTIuLmZhNDJhZGFlYzlmOWQ2NzhmYjg5ZmVjZjM0NTA4MDM4MDk3NjE2MDcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC02OCw2ICs2
OCwxMCBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIFtOZWVkc1VzZXJHZXN0dXJlQ2hlY2ssIENh
bGxXaXRoPUR5bmFtaWNGcmFtZV0gdm9pZCB3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVB
U0FEKGluIGxvbmcgaW50QXJnLCBpbiBbT3B0aW9uYWxdIGxvbmcgb3B0aW9uYWxBcmcpOwogICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHZvaWQgd2l0aFNjcmlwdFN0YXRlVm9pZCgpOwog
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIFRlc3RPYmogd2l0aFNjcmlwdFN0YXRlT2Jq
KCk7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRTdGF0ZV0gdm9pZCB3aXRoU2NyaXB0U3RhdGVW
b2lkRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIFRlc3RPYmogd2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0
aW9uKCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIC8vICdP
cHRpb25hbCcgZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgICAgIHZvaWQgICAgbWV0aG9kV2l0aE9w
dGlvbmFsQXJnKGluIFtPcHRpb25hbF0gbG9uZyBvcHQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMWNmNGFkZWEzZmE5MGUzMmIwOTBl
ZGEzNjMzZmM2OWZhZjEyZWY0MS4uY2E4Yzk1ZGI0YTJjMWY0Nzc3MWMzMjc1MjQyOWVjZjAwYTRk
NDIzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCkBAIC0zMzYsOCArMzM2LDggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRo
U2NyaXB0U3RhdGVWb2lkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKICAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVtcHR5
U2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgaW1wLT53aXRoU2NyaXB0U3RhdGVWb2lkKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJy
b3Ioc3RhdGUtPmV4Y2VwdGlvbigpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKQEAgLTM0NywxMSArMzQ3LDQ5IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJnCiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKICAgICBFbXB0eVNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0
cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRTdGF0ZU9iaigmc3RhdGUpOwotICAg
IGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0
YXRlLT5leGNlcHRpb24oKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHRvVjgo
cmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0
aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoU2NyaXB0U3RhdGVWb2lkRXhj
ZXB0aW9uIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB7CisgICAgRW1wdHlTY3Jp
cHRTdGF0ZSBzdGF0ZTsKKyAgICBpbXAtPndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oJnN0
YXRlLCBlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgZ290byBmYWlsOworICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3Rh
dGUuZXhjZXB0aW9uKCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAg
ICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoud2l0aFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB7CisgICAg
RW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKKyAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0ID0gaW1w
LT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oJnN0YXRlLCBlYyk7CisgICAgaWYgKFVOTElL
RUxZKGVjKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCkpOworICAgIHJl
dHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIH0KKyAgICBmYWlsOgorICAgIFY4UHJv
eHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25h
bEFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai5tZXRob2RXaXRoT3B0aW9uYWxBcmciKTsKQEAgLTQ4OSw2ICs1MjcsOCBA
QCBzdGF0aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RPYmpDYWxsYmFja3NbXSA9IHsKICAg
ICB7IndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQiLCBUZXN0T2JqSW50ZXJuYWw6
OndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQURDYWxsYmFja30sCiAgICAgeyJ3aXRo
U2NyaXB0U3RhdGVWb2lkIiwgVGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVWb2lkQ2Fs
bGJhY2t9LAogICAgIHsid2l0aFNjcmlwdFN0YXRlT2JqIiwgVGVzdE9iakludGVybmFsOjp3aXRo
U2NyaXB0U3RhdGVPYmpDYWxsYmFja30sCisgICAgeyJ3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uIiwgVGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uQ2FsbGJh
Y2t9LAorICAgIHsid2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFs
Ojp3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRo
T3B0aW9uYWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxi
YWNrfSwKICAgICB7Im1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgVGVz
dE9iakludGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxi
YWNrfSwKICAgICB7Im1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIs
IFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxB
cmdzQ2FsbGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhO
b2RlSXRlcmF0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2Rl
SXRlcmF0b3JDdXN0b20uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjhiM2Rj
YTA5OTgzNDQ1YTQwZjNkOTQ0Y2YxZThkYmQ4N2M1MGUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9k
ZUl0ZXJhdG9yQ3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWOE5vZGVJdGVyYXRvci5oIgotCi0jaW5jbHVk
ZSAiTm9kZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKLQotI2luY2x1ZGUg
IlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Tm9kZS5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIK
LQotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjxOb2RlPiBvYmplY3QsIEV4Y2VwdGlvbkNvZGUgZWMsIFNjcmlw
dFN0YXRlKiBzdGF0ZSkKLXsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGVjKTsKLQotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKHN0YXRlLT5leGNlcHRpb24oKSk7Ci0KLSAgICBpZiAoIW9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAgICByZXR1cm4gdG9WOChvYmplY3QpOwotfQotCi12
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb2RlSXRlcmF0b3I6Om5leHROb2RlQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlSXRlcmF0
b3IubmV4dE5vZGUoKSIpOwotICAgIE5vZGVJdGVyYXRvciogbm9kZUl0ZXJhdG9yID0gVjhOb2Rl
SXRlcmF0b3I6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8Tm9kZT4gcmVz
dWx0ID0gbm9kZUl0ZXJhdG9yLT5uZXh0Tm9kZSgmc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCBlYywgJnN0YXRlKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4Tm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLk5vZGVJdGVyYXRvci5wcmV2aW91c05v
ZGUoKSIpOwotICAgIE5vZGVJdGVyYXRvciogbm9kZUl0ZXJhdG9yID0gVjhOb2RlSXRlcmF0b3I6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gbm9k
ZUl0ZXJhdG9yLT5wcmV2aW91c05vZGUoJnN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIHRvVjgocmVz
dWx0LnJlbGVhc2UoKSwgZWMsICZzdGF0ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5pZGwgYi9XZWJDb3JlL2RvbS9O
b2RlSXRlcmF0b3IuaWRsCmluZGV4IGUxODE4YTE4Y2Q1MzEwODJkMzE4MmMwOWM2ZTFhZTY1YzI5
YjExNWUuLjlmNTlhZTFhYWJiYzQ3ZTNmYzkyNDk2MDJhYzdlNTBjM2FmMGI2YWIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5pZGwKKysrIGIvV2ViQ29yZS9kb20vTm9kZUl0
ZXJhdG9yLmlkbApAQCAtMzEsOSArMzEsOSBAQCBtb2R1bGUgdHJhdmVyc2FsIHsKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgcmVmZXJlbmNlTm9kZTsKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGJvb2xlYW4gcG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGU7CiAKLSAgICAgICAg
W0N1c3RvbV0gTm9kZSBuZXh0Tm9kZSgpIAorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGVd
IE5vZGUgbmV4dE5vZGUoKSAKICAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAg
ICAgICAgW0N1c3RvbV0gTm9kZSBwcmV2aW91c05vZGUoKQorICAgICAgICBbQ2FsbFdpdGg9U2Ny
aXB0U3RhdGVdIE5vZGUgcHJldmlvdXNOb2RlKCkKICAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54431</attachid>
            <date>2010-04-27 10:57:52 -0700</date>
            <delta_ts>2010-04-27 12:01:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38188-20100427105751.patch</filename>
            <type>text/plain</type>
            <size>24462</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mjc2Yzc3N2U2ZGYxYjI3MTgxNWIyMGVjN2Q3Y2YyZWYwNmVmOTZhYy4uNWExMWMyYzk4NGNhYzI3
M2IwZWZiZjhiODJkZjNhOWJiMGYxMjE1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0OCBAQAogMjAxMC0wNC0yNyAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBjdXN0b20gTm9kZUl0ZXJhdG9yIGJpbmRpbmdz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODE4OAor
CisgICAgICAgIEFub3RoZXIgZXhhbXBsZSBvZiBDYWxsV2l0aD1TY3JpcHRTdGF0ZS4gIFRoaXMg
Y2FzZSBzaG93cyB1cyB0aGUgcmlnaHQKKyAgICAgICAgd2F5IHRvIGhhbmRsZSB0aGUgaW50ZXJh
Y3Rpb24gd2l0aCBleGNlcHRpb24gY29kZXMuCisKKyAgICAgICAgSW4gbXkgcHJldmlvdXMgcGF0
Y2gsIEkgcHV0IHRoZSBleGNlcHRpb24gY29kZSBoYW5kbGluZyBhZnRlciB0aGUKKyAgICAgICAg
U2NyaXB0U3RhdGUgZXhjZXB0aW9uIGhhbmRsaW5nLiAgSXQgdHVybnMgb3V0IHRoaXMgd2FzIGEg
bWlzdGFrZQorICAgICAgICAoYWx0aG91Z2ggYSBoYXJtbGVzcyBvbmUgYXQgdGhlIHRpbWUgYmVj
YXVzZSBubyBJREwgY2F1c2VkIHVzIHRvCisgICAgICAgIGdlbmVyYXRlIHRoYXQgY29kZSkuICBO
b3cgdGhhdCB3ZSdyZSBnZW5lcmF0aW5nIGJvdGgga2luZHMgb2YgZXhjZXB0aW9uCisgICAgICAg
IGhhbmRsaW5nLCB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaW4gdGhlIHJpZ2h0IG9yZGVyLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUl0
ZXJhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2Jq
LmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9p
ZF9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9z
dGF0ZV9vYmpfZXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
bW06CisgICAgICAgICgtW0RPTVRlc3RPYmogd2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbl0p
OgorICAgICAgICAoLVtET01UZXN0T2JqIHdpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbl0pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlVm9pZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVWb2lkRXhj
ZXB0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRo
U2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjopOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5pZGw6CisKKzIwMTAtMDQtMjcgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwogICAgICAgICBVbnJldmlld2VkLiAgUmVn
ZW5lcmF0ZSByZWZlcmVuY2UgYmluZGluZ3MgY29kZSBnZW5lcmF0b3Igb3V0cHV0LgogCiAgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDc3ZTI4
N2NlNTcyNWM3NjdkMTI0ZWRkYThjNTc4MzdiNDI3MzI3NmIuLjg1NDM4ZWEwMTM4MmNmMDFlMGE0
MjgzY2QzNWU1YzkyNjg0YmFmZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NzAsNyArNzcwLDYgQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVzQ29sbGVjdGlvbi5oJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUZpbHRlckN1c3RvbS5jcHAnLAotICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAn
LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAppbmRleCA2
YTA5YWJmOTFkYzgyMTVkOWQxMDJjY2Q3YjQzZTZjOGJmYmFlNzc4Li43Yzg1OGU1YThiMThmYmUw
YmQyZjIzMTU0ZGUwN2RhZWY1YTQxYzY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUl0ZXJhdG9yQ3VzdG9tLmNwcApAQCAtMzcsMzQgKzM3LDQgQEAgdm9pZCBKU05vZGVJdGVyYXRv
cjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogICAgICAgICBmaWx0ZXItPm1h
cmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKIH0KIAotSlNWYWx1ZSBKU05vZGVJdGVyYXRvcjo6bmV4
dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKLXsKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhl
YywgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgcmV0
dXJuIHRvSlMoZXhlYywgbm9kZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUgSlNOb2RlSXRlcmF0b3I6
OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQotewotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5wcmV2
aW91c05vZGUoZXhlYywgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZS5nZXQoKSk7Ci19Ci0KIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IGM3NWY1ZDZmNjdjNDdk
YzcxMmQ1NzAxOTVhMDNkMjRkYjg1YmZjZWQuLjI2OWJjZTMxMjRlMzZkMmUwN2I4MjUzYjY0ZjUx
NDQ0MzE3MWNmOGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTg5MSwxMiArMTg5MSwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1
bmN0aW9uQ2FsbCgpCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJldHVy
biBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZl
VG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENsYXNzTmFtZSwgIiIsICRm
dW5jdGlvblN0cmluZywgImNhc3RlZFRoaXNPYmoiKSAuICI7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlm
IEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKKwogICAgICAgICAkY2FsbFdpdGggPSAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn07CiAg
ICAgICAgIGlmICgkY2FsbFdpdGggYW5kICRjYWxsV2l0aCBlcSAiU2NyaXB0U3RhdGUiKSB7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4g
IiAgICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBp
ZiBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc307CiAKICAgICAgICAgaWYgKCRwb2RUeXBl
IGFuZCBub3QgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbW11
dGFibGUifSkgewogICAgICAgICAgICAgIyBJbW11dGFibGUgbWV0aG9kcyBkbyBub3QgY29tbWl0
IGNoYW5nZXMgYmFjayB0byB0aGUgaW5zdGFuY2UsIHRodXMgcHJvZHVjaW5nCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAzM2FjMjNkN2IwYTFhMTli
YTYwYmRkNTAyMDRhZjMwZmEyMmI3ZDZjLi40NWJiNzgzNTNlMThhM2Y4MWY2YWNlOWM2OWEyZWM5
NThjNTUwMDcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KQEAgLTI0MTQsMTYgKzI0MTQsMTYgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5n
KCkKICAgICAgICAgJHJldHVybklzUmVmID0gMDsKICAgICB9CiAKLSAgICBpZiAoJGhhc1Njcmlw
dFN0YXRlKSB7Ci0gICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpXG4iOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiICAgIHJldHVybiB0
aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpKTtcbiIKLSAgICB9Ci0KICAgICBpZiAoQHskZnVu
Y3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAu
ICJpZiAoVU5MSUtFTFkoZWMpKVxuIjsKICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAg
ICBnb3RvIGZhaWw7XG4iOwogICAgIH0KIAorICAgIGlmICgkaGFzU2NyaXB0U3RhdGUpIHsKKyAg
ICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSlcbiI7
CisgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIgICAgcmV0dXJuIHRocm93RXJyb3Ioc3Rh
dGUuZXhjZXB0aW9uKCkpO1xuIgorICAgIH0KKwogICAgICMgSWYgdGhlIHJldHVybiB0eXBlIGlz
IGEgUE9EIHR5cGUsIHNlcGFyYXRlIG91dCB0aGUgd3JhcHBlciBnZW5lcmF0aW9uCiAgICAgaWYg
KCRyZXR1cm5zTGlzdEl0ZW1Qb2RUeXBlKSB7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAu
ICJSZWZQdHI8VjhTVkdQT0RUeXBlV3JhcHBlcjwiIC4gJG5hdGl2ZVJldHVyblR5cGUgLiAiPiA+
IHdyYXBwZXIgPSAiOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXggNjZlMGMyYjI3MGYyNWRhZDRk
NTcxNTAzZmU3MmY2NTg0YjVhMDZjNi4uNjUwM2Y3MDUxNTVkOTE1MzZjYjk3ZmJkYjY0MzM1MThk
YTkwMjU5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCkBAIC0yMDcsNiArMjA3LDM4IEBAIHdlYmtp
dF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqIChXZWJLaXRET01UZXN0T2JqICpz
ZWxmKQogfQogCiB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3Zv
aWRfZXhjZXB0aW9uIChXZWJLaXRET01UZXN0T2JqICpzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsIChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYzsK
KyAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBlY2Rlc2Mp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorCit9CisK
K1dlYktpdERPTVRlc3RPYmoqIAord2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0
ZV9vYmpfZXhjZXB0aW9uIChXZWJLaXRET01UZXN0T2JqICpzZWxmLCBHRXJyb3IgKiplcnJvcikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihlYykpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
OworICAgICAgICBXZWJDb3JlOjpnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVz
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAg
V2ViS2l0RE9NVGVzdE9iaiogIHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RPYmoqID4o
V2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4gcmVzOworCit9CisKK3ZvaWQK
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnIChXZWJLaXRET01U
ZXN0T2JqICpzZWxmLCBnbG9uZyBvcHQpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbCAoc2VsZik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5oCmluZGV4IDgzMjQ5N2EwMzNkYmRlZjVkMDRkYTU3MTU1OGYwZjIzMWNi
NmQ3NDIuLjdkMjk1MjYwMzEwYTRmODEzOWM2ZjllZDEyYzA0MTRkYTI1ODQzODYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
ai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5oCkBAIC05Miw2ICs5MiwxMiBAQCBXRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoq
CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaiAoV2ViS2l0RE9NVGVz
dE9iaiAqc2VsZik7CiAKIFdFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial93aXRo
X3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbiAoV2ViS2l0RE9NVGVzdE9iaiAqc2VsZiwgR0Vy
cm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqIAord2Via2l0X2Rv
bV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uIChXZWJLaXRET01UZXN0
T2JqICpzZWxmLCBHRXJyb3IgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcgKFdlYktpdERPTVRlc3RPYmogKnNl
bGYsIGdsb25nIG9wdCk7CiAKIFdFQktJVF9BUEkgdm9pZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggZjA4OWNhN2RiMmRlMDA5YjkzZDA4
ODk1ZDY2NWIxYTcyMmYxMTM2YS4uZDRkMDBkN2Y1NzcyYWJmMGExMTkzNzUzZWIxM2VkZDYwZGE1
OTFjMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUg
VEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMjFdID0KK3N0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1syM10gPQogewog
ICAgIHsgInZvaWRNZXRob2QiLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhv
ZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInZvaWRNZXRob2RX
aXRoQXJncyIsIERvbnREZWxldGV8RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3Mp
LCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE0Nyw2ICsxNDcsOCBAQCBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNb
MjFdID0KICAgICB7ICJ3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEIiwgRG9udERl
bGV0ZXxGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQp
LCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJ3aXRoU2NyaXB0U3Rh
dGVWb2lkIiwgRG9udERlbGV0ZXxGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQp
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJ3aXRoU2NyaXB0U3Rh
dGVPYmoiLCBEb250RGVsZXRlfEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqKSwg
KGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAid2l0aFNjcmlwdFN0YXRl
Vm9pZEV4Y2VwdGlvbiIsIERvbnREZWxldGV8RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3Rh
dGVWb2lkRXhjZXB0aW9uKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAg
eyAid2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uIiwgRG9udERlbGV0ZXxGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFdpdGhPcHRpb25hbEFyZyIsIERvbnREZWxldGV8RnVu
Y3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpLCAoaW50cHRyX3QpMSBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25h
bEFyZyIsIERvbnREZWxldGV8RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAg
IHsgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIsIERvbnREZWxl
dGV8RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25h
bEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE1OCw3ICsxNjAs
NyBAQCBzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGUgPQogI2lmIEVOQUJMRShQRVJGRUNUX0hBU0hfU0laRSkKICAgICB7IDgxOTEsIEpT
VGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiAjZWxzZQotICAgIHsgNjYsIDYzLCBK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OworICAgIHsgNjcsIDYzLCBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OwogI2VuZGlmCiAKIGNvbnN0IENsYXNzSW5mbyBK
U1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNU
ZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKQEAgLTYxMCw2ICs2MTIsMzcgQEAgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2Jq
KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlz
VmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXNPYmogPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTsKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKworICAgIGltcC0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
JkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpc09iai0+aW1wbCgpKTsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKworCisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVk
VGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+d2l0aFNjcmlwdFN0YXRl
T2JqRXhjZXB0aW9uKGV4ZWMsIGVjKSkpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggMjNiZGQzZWI2YTIwYzIxZTQzNDJkOGYzMmY2YmJmODNi
MzQwYzg5Ni4uYzM0NDZkNGMwYzUwZjU2ZTIyYzkwOGU0YTE1NTUxYjcwNDE1ZDQ3OSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTEwMiw2ICsx
MDIsOCBAQCBKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdAogSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1
cmVBU0FEKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpBcmdMaXN0Jik7CiBKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKIEpTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0
YXRlT2JqKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpBcmdMaXN0Jik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsK
K0pTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CiBKU0M6OkpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6
QXJnTGlzdCYpOwogSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYp
OwogSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKaW5kZXgg
OTViNjAwNTkyMDA3ZTkyNGFlYzU0YjE4MDg1N2E2ZDU0ZDA4NGZkMy4uNDBiYjg0NTE1ZWM5NWQ3
ODgyYTE4NWMzYTgzYTdmZjA0YTAxZDVkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTY3LDYgKzY3LDggQEAKIC0gKHZvaWQpd2l0
aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRDooaW50KWludEFyZyBvcHRpb25hbEFyZzoo
aW50KW9wdGlvbmFsQXJnOwogLSAodm9pZCl3aXRoU2NyaXB0U3RhdGVWb2lkOwogLSAoRE9NVGVz
dE9iaiAqKXdpdGhTY3JpcHRTdGF0ZU9iajsKKy0gKHZvaWQpd2l0aFNjcmlwdFN0YXRlVm9pZEV4
Y2VwdGlvbjsKKy0gKERPTVRlc3RPYmogKil3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb247CiAt
ICh2b2lkKW1ldGhvZFdpdGhPcHRpb25hbEFyZzooaW50KW9wdDsKIC0gKHZvaWQpbWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmc6KGludClub25PcHQgb3B0OihpbnQpb3B0Owog
LSAodm9pZCltZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3M6KGludClu
b25PcHQgb3B0MTooaW50KW9wdDEgb3B0MjooaW50KW9wdDI7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0gYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KaW5kZXggZGM3MDg2N2FkODY0MzU0
MjZhMWNhNDVmOTZmMzQ2MGZiZDBkMWNkYS4uODAzNThkZjM0MmI2MDc4NzNiMzcyMzIyMmZiZjhh
NzYxY2I0NTM5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5tbQpAQCAtMjQzLDYgKzI0MywyMSBAQAogICAgIHJldHVybiBraXQoV1RGOjpn
ZXRQdHIoSU1QTC0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpKTsKIH0KIAorLSAodm9pZCl3aXRoU2Ny
aXB0U3RhdGVWb2lkRXhjZXB0aW9uCit7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgSU1QTC0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihlYyk7CisgICAgV2Vi
Q29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKK30KKworLSAoRE9NVGVzdE9iaiAqKXdpdGhTY3Jp
cHRTdGF0ZU9iakV4Y2VwdGlvbgoreworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIERPTVRlc3RPYmogKnJlc3VsdCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT53aXRoU2Ny
aXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKSk7CisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9y
KGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKW1ldGhvZFdpdGhPcHRpb25h
bEFyZzooaW50KW9wdAogewogICAgIElNUEwtPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCBlYjMwZTg3YTA5
NGFmNjhhNjdiNjYxODcwZjRmMmI0NDZlOThlMzkyLi5mYTQyYWRhZWM5ZjlkNjc4ZmI4OWZlY2Yz
NDUwODAzODA5NzYxNjA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbApAQCAtNjgsNiArNjgsMTAgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICBbTmVlZHNVc2Vy
R2VzdHVyZUNoZWNrLCBDYWxsV2l0aD1EeW5hbWljRnJhbWVdIHZvaWQgd2l0aER5bmFtaWNGcmFt
ZUFuZFVzZXJHZXN0dXJlQVNBRChpbiBsb25nIGludEFyZywgaW4gW09wdGlvbmFsXSBsb25nIG9w
dGlvbmFsQXJnKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSB2b2lkIHdpdGhTY3Jp
cHRTdGF0ZVZvaWQoKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSBUZXN0T2JqIHdp
dGhTY3JpcHRTdGF0ZU9iaigpOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHZvaWQg
d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbigpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSBUZXN0T2JqIHdpdGhTY3Jp
cHRTdGF0ZU9iakV4Y2VwdGlvbigpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
IAogICAgICAgICAvLyAnT3B0aW9uYWwnIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAgICB2b2lk
ICAgIG1ldGhvZFdpdGhPcHRpb25hbEFyZyhpbiBbT3B0aW9uYWxdIGxvbmcgb3B0KTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDk2MWJi
NTBlNjE2YTQ2YjM1ZjdmZDYxYjVhNzU2YWY5ODAzMmEwMzYuLmNhOGM5NWRiNGEyYzFmNDc3NzFj
MzI3NTI0MjllY2YwMGE0ZDQyMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtMzUyLDYgKzM1Miw0NCBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZU9iakNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZwogICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
Ymoud2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbiIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgeworICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7CisgICAgaW1wLT53aXRoU2Ny
aXB0U3RhdGVWb2lkRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOworICAgIGlmIChVTkxJS0VMWShlYykp
CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpKTsKKyAgICByZXR1cm4gdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6c2V0
RE9NRXhjZXB0aW9uKGVjKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9
CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0
aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIpOworICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgeworICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7CisgICAgUmVm
UHRyPFRlc3RPYmo+IHJlc3VsdCA9IGltcC0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0
YXRlLmV4Y2VwdGlvbigpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKKyAg
ICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBtZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aE9wdGlvbmFs
QXJnIik7CkBAIC00ODksNiArNTI3LDggQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBU
ZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJ3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1
cmVBU0FEIiwgVGVzdE9iakludGVybmFsOjp3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVB
U0FEQ2FsbGJhY2t9LAogICAgIHsid2l0aFNjcmlwdFN0YXRlVm9pZCIsIFRlc3RPYmpJbnRlcm5h
bDo6d2l0aFNjcmlwdFN0YXRlVm9pZENhbGxiYWNrfSwKICAgICB7IndpdGhTY3JpcHRTdGF0ZU9i
aiIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGJhY2t9LAorICAgIHsi
d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlw
dFN0YXRlVm9pZEV4Y2VwdGlvbkNhbGxiYWNrfSwKKyAgICB7IndpdGhTY3JpcHRTdGF0ZU9iakV4
Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uQ2Fs
bGJhY2t9LAogICAgIHsibWV0aG9kV2l0aE9wdGlvbmFsQXJnIiwgVGVzdE9iakludGVybmFsOjpt
ZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRPcHRpb25hbEFyZyIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kT3B0aW9uYWxBcmdDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNrfSwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNzI4YjNkY2EwOTk4MzQ0NWE0MGYzZDk0NGNmMWU4ZGJkODdjNTBl
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhO
b2RlSXRlcmF0b3IuaCIKLQotI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5oIgotI2luY2x1ZGUgIlNj
cmlwdFN0YXRlLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOE5vZGUu
aCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8Tm9kZT4gb2JqZWN0
LCBFeGNlcHRpb25Db2RlIGVjLCBTY3JpcHRTdGF0ZSogc3RhdGUpCi17Ci0gICAgaWYgKGVjKQot
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7Ci0KLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS0+ZXhjZXB0aW9uKCkpOwot
Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgcmV0
dXJuIHRvVjgob2JqZWN0KTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm9kZUl0ZXJh
dG9yOjpuZXh0Tm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAg
SU5DX1NUQVRTKCJET00uTm9kZUl0ZXJhdG9yLm5leHROb2RlKCkiKTsKLSAgICBOb2RlSXRlcmF0
b3IqIG5vZGVJdGVyYXRvciA9IFY4Tm9kZUl0ZXJhdG9yOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEVtcHR5U2NyaXB0U3RhdGUgc3Rh
dGU7Ci0gICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IG5vZGVJdGVyYXRvci0+bmV4dE5vZGUoJnN0
YXRlLCBlYyk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgZWMsICZzdGF0ZSk7
Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2Rl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5Ob2RlSXRlcmF0b3IucHJldmlvdXNOb2RlKCkiKTsKLSAgICBOb2RlSXRlcmF0b3IqIG5vZGVJ
dGVyYXRvciA9IFY4Tm9kZUl0ZXJhdG9yOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7Ci0gICAg
UmVmUHRyPE5vZGU+IHJlc3VsdCA9IG5vZGVJdGVyYXRvci0+cHJldmlvdXNOb2RlKCZzdGF0ZSwg
ZWMpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGVjLCAmc3RhdGUpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlSXRl
cmF0b3IuaWRsIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmlkbAppbmRleCBlMTgxOGExOGNk
NTMxMDgyZDMxODJjMDljNmUxYWU2NWMyOWIxMTVlLi45ZjU5YWUxYWFiYmM0N2UzZmM5MjQ5NjAy
YWM3ZTUwYzNhZjBiNmFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaWRs
CisrKyBiL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5pZGwKQEAgLTMxLDkgKzMxLDkgQEAgbW9k
dWxlIHRyYXZlcnNhbCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlIHJlZmVyZW5j
ZU5vZGU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHBvaW50ZXJCZWZvcmVS
ZWZlcmVuY2VOb2RlOwogCi0gICAgICAgIFtDdXN0b21dIE5vZGUgbmV4dE5vZGUoKSAKKyAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSBOb2RlIG5leHROb2RlKCkgCiAgICAgICAgICAgICBy
YWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDdXN0b21dIE5vZGUgcHJldmlvdXNOb2Rl
KCkKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSBOb2RlIHByZXZpb3VzTm9kZSgpCiAg
ICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7
CiAgICAgfTsK
</data>
<flag name="review"
          id="38410"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="38411"
          type_id="3"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>