<?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>50493</bug_id>
          
          <creation_ts>2010-12-03 15:16:16 -0800</creation_ts>
          <short_desc>Web Inspector: [Extension API] add support for adding/overriding HTTP request headers</short_desc>
          <delta_ts>2010-12-17 05:28:07 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>51246</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317087</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-12-03 15:16:16 -0800</bug_when>
    <thetext>Being able to modify HTTP request headers for requests generated by the inspected page would allow an extension to communicate with server via custom server (think FirePHP), control caching policies or set custom user agents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317103</commentid>
    <comment_count>1</comment_count>
      <attachid>75556</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-12-03 15:23:46 -0800</bug_when>
    <thetext>Created attachment 75556
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318763</commentid>
    <comment_count>2</comment_count>
      <attachid>75556</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-08 07:08:59 -0800</bug_when>
    <thetext>Comment on attachment 75556
patch

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

&gt; WebCore/inspector/InspectorController.h:178
&gt; +    void applyOverrideHeaders(ResourceRequest&amp;);

Can you do this in willSendRequest instead?

&gt; WebCore/inspector/front-end/ExtensionServer.js:161
&gt; +	var allHeaders = {};

Wrong indent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321977</commentid>
    <comment_count>3</comment_count>
      <attachid>76538</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-12-14 08:21:31 -0800</bug_when>
    <thetext>Created attachment 76538
patch

- now applying header overrides in InspectorController::willSendReqeust()
- fixed test output stability
- rebased
- fixed style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322572</commentid>
    <comment_count>4</comment_count>
      <attachid>76538</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-15 04:41:16 -0800</bug_when>
    <thetext>Comment on attachment 76538
patch

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

&gt; WebCore/inspector/InspectorController.cpp:1833
&gt; +        m_overrideHeaders-&gt;add(it-&gt;first, value);

These are not necessarily &quot;override&quot; header since they are going to be overriden by the network stack. &quot;Extra&quot; headers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322697</commentid>
    <comment_count>5</comment_count>
      <attachid>76668</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-12-15 11:00:48 -0800</bug_when>
    <thetext>Created attachment 76668
patch to land

- rebased
- overrideHeaders -&gt; extraHeaders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322912</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-15 16:06:32 -0800</bug_when>
    <thetext>Did you mean to mark you r&quot;patch to land&quot; with cq+ or r? or something?  Or did it already get landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323106</commentid>
    <comment_count>7</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-12-16 04:50:31 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Did you mean to mark you r&quot;patch to land&quot; with cq+ or r? or something?  Or did it already get landed?

Neither -- this was meant to be &quot;JFYI only&quot;. I&apos;m about to land manually later at a convenient moment (the tests may be platform-sensitive and I&apos;d like to keep an eye on them).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323711</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-12-17 04:37:31 -0800</bug_when>
    <thetext>Manually committed r74234: http://trac.webkit.org/changeset/74234</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75556</attachid>
            <date>2010-12-03 15:23:46 -0800</date>
            <delta_ts>2010-12-14 08:21:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>headers-override.diff</filename>
            <type>text/plain</type>
            <size>28574</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NjU5ODIwLi43NTdlNGQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMTIt
MDMgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5z
aW9uIEFQSV0gYWRkIHN1cHBvcnQgZm9yIGFkZGluZy9vdmVycmlkaW5nIEhUVFAgcmVxdWVzdCBo
ZWFkZXJzCisgICAgICAgIE1vdmVkIGV4dGVuc2lvbnMgdGVzdCBmcmFtZXdvcmtzIHVuZGVyIGh0
dHAvdGVzdHMvaW5zcGVjdG9yLCBzbyBIVFRQIHRlc3RzIG1heSByZXVzZSBpdC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDkzCisKKyAgICAgICAg
KiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMu
aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10
ZXN0LmpzOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVz
dC5qcy4KKyAgICAgICAgKGxvZyk6CisgICAgICAgIChleHRlbnNpb25GdW5jdGlvbnMpOgorICAg
ICAgICAoaW5pdGlhbGl6ZV9FeHRlbnNpb25zVGVzdC5JbnNwZWN0b3JUZXN0LmRpc3BhdGNoT25N
ZXNzYWdlKToKKyAgICAgICAgKGluaXRpYWxpemVfRXh0ZW5zaW9uc1Rlc3QuSW5zcGVjdG9yVGVz
dC5ydW5FeHRlbnNpb25UZXN0cyk6CisgICAgICAgIChpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0
LmV4dGVuc2lvbk91dHB1dCk6CisgICAgICAgIChpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0LmR1
bXBTaWRlYmFyQ29udGVudCk6CisgICAgICAgIChpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0LnJl
bG9hZFBhZ2UpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0
b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmh0bWwuCisgICAgICAgICogaHR0
cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmpzOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5qcy4KKyAg
ICAgICAgKGZldGNoVGVzdHMuY2FsbGJhY2spOgorICAgICAgICAoZmV0Y2hUZXN0cyk6CisgICAg
ICAgIChydW5UZXN0cyk6CisgICAgICAgIChvblRlc3RzRG9uZSk6CisgICAgICAgICgpOgorICAg
ICAgICAoZGlzcGF0Y2hPbkZyb250ZW5kLmNhbGxiYWNrV3JhcHBlcik6CisgICAgICAgIChkaXNw
YXRjaE9uRnJvbnRlbmQpOgorICAgICAgICAoY2FsbGJhY2tBbmROZXh0VGVzdC5jYWxsYmFja1dy
YXBwZXIpOgorICAgICAgICAoY2FsbGJhY2tBbmROZXh0VGVzdCk6CisgICAgICAgICogaHR0cC90
ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sOiBSZW5hbWVkIGZy
b20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tcGFuZWwuaHRtbC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXNpZGVi
YXIuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0
ZW5zaW9uLXNpZGViYXIuaHRtbC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9leHRlbnNpb25zLWFwaS5odG1sOgor
ICAgICAgICAqIGluc3BlY3Rvci9leHRlbnNpb25zLWF1ZGl0cy1hcGkuaHRtbDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1ldmFsLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZl
bnRzLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVzb3VyY2VzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy5odG1sOgorCiAyMDEwLTEyLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBza2lwIGZhaWxpbmcgdGVzdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFkZXJzLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGI5NGM1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFkZXJzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9u
IEFQSQorCitTdGFydGVkIGV4dGVuc2lvbi4KK1J1bm5pbmcgdGVzdHMuLi4KK1JVTk5JTkcgVEVT
VDogZXh0ZW5zaW9uX3Rlc3RBZGRIZWFkZXJzCitIVFRQX1hfV0VCSU5TUEVDVE9SX0VYVEVOU0lP
TjogdGVzdAorSFRUUF9VU0VSX0FHRU5UOiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3
LjBiOyBXaW5kb3dzIE5UIDYuMCkKKworCitBbGwgdGVzdHMgZG9uZS4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFkZXJzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjY5OTA4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFk
ZXJzLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJp
bnNwZWN0b3ItdGVzdDIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImV4dGVuc2lvbnMtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK2Z1bmN0
aW9uIGV4dGVuc2lvbl90ZXN0QWRkSGVhZGVycyhuZXh0VGVzdCkKK3sKKyAgICB3ZWJJbnNwZWN0
b3IucmVzb3VyY2VzLmFkZFJlcXVlc3RIZWFkZXJzKHsKKyAgICAgICAgIngtd2ViaW5zcGVjdG9y
LWV4dGVuc2lvbiI6ICJ0ZXN0IiwKKyAgICAgICAgInVzZXItYWdlbnQiOiAiTW96aWxsYS80LjAg
KGNvbXBhdGlibGU7IE1TSUUgNy4wYjsgV2luZG93cyBOVCA2LjApIgorICAgIH0pOworICAgIHdl
Ykluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZG9YSFIoKSIsIG5leHRUZXN0KTsKK30K
KworZnVuY3Rpb24gZG9YSFIoKQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9lY2hvLWhlYWRlcnMucGhwIiwgZmFs
c2UpOworICAgIHhoci5zZW5kKG51bGwpOworICAgIG91dHB1dCh4aHIucmVzcG9uc2VUZXh0KTsK
K30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5U
ZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9uIEFQSTwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVz
dC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGU5YWJmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10ZXN0
LmpzCkBAIC0wLDAgKzEsODAgQEAKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIG91dHB1
dChtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9uRnVuY3Rpb25zKCkKK3sKKyAgICB2
YXIgZnVuY3Rpb25zID0gIiI7CisKKyAgICBmb3IgKHN5bWJvbCBpbiB3aW5kb3cpIHsKKyAgICAg
ICAgaWYgKC9eZXh0ZW5zaW9uXy8uZXhlYyhzeW1ib2wpICYmIHR5cGVvZiB3aW5kb3dbc3ltYm9s
XSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIGZ1bmN0aW9ucyArPSB3aW5kb3dbc3ltYm9s
XS50b1N0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gZnVuY3Rpb25zOworfQorCit2YXIgaW5p
dGlhbGl6ZV9FeHRlbnNpb25zVGVzdCA9IGZ1bmN0aW9uKCkKK3sKKworSW5zcGVjdG9yVGVzdC5k
aXNwYXRjaE9uTWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2VJZCwgY2FsbGJhY2ssIHJlY3Vycmlu
ZykKK3sKKyAgICBmdW5jdGlvbiBvbk1lc3NhZ2UoZXZlbnQpCisgICAgeworICAgICAgICBpZiAo
dHlwZW9mKGV2ZW50LmRhdGEpICE9PSAib2JqZWN0IiB8fCBldmVudC5kYXRhLmNvbW1hbmQgIT09
IG1lc3NhZ2VJZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFyZWN1cnJpbmcp
CisgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVz
c2FnZSwgZmFsc2UpOworICAgICAgICB2YXIgcG9ydCA9IGV2ZW50LnBvcnRzICYmIGV2ZW50LnBv
cnRzWzBdOworICAgICAgICBpZiAoY2FsbGJhY2soZXZlbnQuZGF0YSwgcG9ydCkgJiYgcG9ydCkK
KyAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIiIpOworICAgIH0KKyAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSwgZmFsc2UpOworfQorCitJbnNwZWN0
b3JUZXN0LnJ1bkV4dGVuc2lvblRlc3RzID0gZnVuY3Rpb24oKQoreworICAgIEluamVjdGVkU2Ny
aXB0QWNjZXNzLmdldERlZmF1bHQoKS5ldmFsdWF0ZSgibG9jYXRpb24uaHJlZiIsICJjb25zb2xl
IiwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHZhciBwYWdlVVJMID0gcmVzdWx0LmRlc2Ny
aXB0aW9uOworICAgICAgICB2YXIgZXh0ZW5zaW9uVVJMID0gKC9eaHR0cHM/Oi8udGVzdChwYWdl
VVJMKSA/IAorICAgICAgICAgICAgcGFnZVVSTC5yZXBsYWNlKC9eKGh0dHBzPzpcL1wvW14vXSpc
LykuKiQvLCIkMSIpIDoKKyAgICAgICAgICAgIHBhZ2VVUkwucmVwbGFjZSgvXC9pbnNwZWN0b3Jc
L1teL10qJC8sICIvaHR0cC90ZXN0cyIpKSArCisgICAgICAgICAgICAiL2luc3BlY3Rvci9yZXNv
dXJjZXMvZXh0ZW5zaW9uLW1haW4uaHRtbCI7CisgICAgICAgIFdlYkluc3BlY3Rvci5hZGRFeHRl
bnNpb25zKFt7IHN0YXJ0UGFnZTogZXh0ZW5zaW9uVVJMIH1dKTsKKyAgICB9KTsKK30KKworSW5z
cGVjdG9yVGVzdC5kaXNwYXRjaE9uTWVzc2FnZSgiZXh0ZW5zaW9uLXRlc3RzLWRvbmUiLCBJbnNw
ZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCwgdHJ1ZSk7CisKK2Z1bmN0aW9uIGV4dGVuc2lvbk91dHB1
dChtZXNzYWdlKQoreworICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KG1lc3NhZ2UudGV4dCk7
Cit9CitJbnNwZWN0b3JUZXN0LmRpc3BhdGNoT25NZXNzYWdlKCJvdXRwdXQiLCBleHRlbnNpb25P
dXRwdXQsIHRydWUpOworCitmdW5jdGlvbiBkdW1wU2lkZWJhckNvbnRlbnQobWVzc2FnZSwgcG9y
dCkKK3sKKyAgICB2YXIgc2lkZWJhclBhbmVzID0gV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50
cy5zaWRlYmFyUGFuZXM7CisgICAgLy8gdGhlIHNpZGViYXIgb2YgaW50ZXJlc3QgaXMgcHJlc3Vt
ZWQgdG8gYWx3YXlzIGJlIGxhc3QuCisgICAgdmFyIHNpZGViYXIgPSBzaWRlYmFyUGFuZXNbT2Jq
ZWN0LmtleXMoc2lkZWJhclBhbmVzKS5wb3AoKV07CisgICAgSW5zcGVjdG9yVGVzdC5ydW5BZnRl
clBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFJlc3VsdCgiU2lkZWJhciBjb250ZW50OiAiICsgc2lkZWJhci5ib2R5RWxlbWVudC50ZXh0Q29u
dGVudCk7CisgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIiIpOworICAgIH0pOworfQorSW5zcGVj
dG9yVGVzdC5kaXNwYXRjaE9uTWVzc2FnZSgiZHVtcC1zaWRlYmFyLWNvbnRlbnQiLCBkdW1wU2lk
ZWJhckNvbnRlbnQsIHRydWUpOworCitmdW5jdGlvbiByZWxvYWRQYWdlKGRhdGEsIHBvcnQpCit7
CisgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKGZ1bmN0aW9uKCkgeworICAgICAgICBwb3J0
LnBvc3RNZXNzYWdlKCIiKTsKKyAgICB9KTsKK30KK0luc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1l
c3NhZ2UoInJlbG9hZCIsIHJlbG9hZFBhZ2UsIHRydWUpOworCit9CisKK3ZhciB0ZXN0ID0gZnVu
Y3Rpb24oKQoreworICAgIEluc3BlY3RvclRlc3QucnVuRXh0ZW5zaW9uVGVzdHMoKTsKK30KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRl
bnNpb24tbWFpbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzL2V4dGVuc2lvbi1tYWluLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTBjODhmNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gb3V0cHV0KG1lc3Nh
Z2UpCit7CisgICAgdG9wLnBvc3RNZXNzYWdlKHsgY29tbWFuZDogIm91dHB1dCIsIHRleHQ6IG1l
c3NhZ2UgfSwgIioiKTsKK30KKworb3V0cHV0KCJTdGFydGVkIGV4dGVuc2lvbi4iKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9ImV4dGVuc2lvbi1tYWluLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jl
c291cmNlcy9leHRlbnNpb24tbWFpbi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lOTRiZDIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmpzCkBAIC0wLDAgKzEsNzIg
QEAKK2Z1bmN0aW9uIGZldGNoVGVzdHMoKQoreworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc3Vs
dCkKKyAgICB7CisgICAgICAgICB3aW5kb3cuZXZhbChyZXN1bHQpOworICAgICAgICAgcnVuVGVz
dHMoKTsKKyAgICB9CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJleHRl
bnNpb25GdW5jdGlvbnMoKSIsIGNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQor
eworICAgIG91dHB1dCgiUnVubmluZyB0ZXN0cy4uLiIpOworICAgIHZhciB0ZXN0cyA9IFtdOwor
ICAgIGZvciAodmFyIHN5bWJvbCBpbiB0aGlzKSB7CisgICAgICAgIGlmICgvXmV4dGVuc2lvbl90
ZXN0Ly50ZXN0KHN5bWJvbCkgJiYgdHlwZW9mIHRoaXNbc3ltYm9sXSA9PT0gImZ1bmN0aW9uIikK
KyAgICAgICAgICAgIHRlc3RzLnB1c2goc3ltYm9sKTsKKyAgICB9CisgICAgdGVzdHMgPSB0ZXN0
cy5zb3J0KCk7CisgICAgdmFyIHRlc3RDaGFpbiA9IG9uVGVzdHNEb25lOworICAgIGZvciAodmFy
IHRlc3QgPSB0ZXN0cy5wb3AoKTsgdGVzdDsgdGVzdCA9IHRlc3RzLnBvcCgpKQorICAgICAgICB0
ZXN0Q2hhaW4gPSBiaW5kKHJ1blRlc3QsIHRoaXMsIGJpbmQodGhpc1t0ZXN0XSwgdGhpcywgdGVz
dENoYWluKSwgdGVzdCk7CisgICAgdGVzdENoYWluKCk7Cit9CisKK2Z1bmN0aW9uIG9uVGVzdHNE
b25lKCkKK3sKKyAgICBvdXRwdXQoIkFsbCB0ZXN0cyBkb25lLiIpOworICAgIHRvcC5wb3N0TWVz
c2FnZSh7IGNvbW1hbmQ6ICJleHRlbnNpb24tdGVzdHMtZG9uZSIgfSwgIioiKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCh0ZXN0LCBuYW1lKQoreworICAgIG91dHB1dCgiUlVOTklORyBURVNUOiAi
ICsgbmFtZSk7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdCgpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgb3V0cHV0KG5hbWUgKyAiOiAiICsgZSk7CisgICAgfQorfQorCitmdW5jdGlvbiBk
aXNwYXRjaE9uRnJvbnRlbmQobWVzc2FnZSwgY2FsbGJhY2spCit7CisgICAgZnVuY3Rpb24gY2Fs
bGJhY2tXcmFwcGVyKCkKKyAgICB7CisgICAgICAgIGNoYW5uZWwucG9ydDEucmVtb3ZlRXZlbnRM
aXN0ZW5lcigibWVzc2FnZSIsIGNhbGxiYWNrV3JhcHBlciwgZmFsc2UpOworICAgICAgICBjYWxs
YmFjaygpOworICAgIH0KKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwor
ICAgIGNoYW5uZWwucG9ydDEuc3RhcnQoKTsKKyAgICBpZiAoY2FsbGJhY2spCisgICAgICAgIGNo
YW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGNhbGxiYWNrV3JhcHBlciwg
ZmFsc2UpOworICAgIHRvcC5wb3N0TWVzc2FnZShtZXNzYWdlLCBbIGNoYW5uZWwucG9ydDIgXSwg
IioiKTsKK30KKworZnVuY3Rpb24gY2FsbGJhY2tBbmROZXh0VGVzdChjYWxsYmFjaywgbmV4dFRl
c3QpCit7CisgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKCkKKyAgICB7CisgICAgICAgIGNh
bGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIG5leHRUZXN0LmNhbGwodGhp
cyk7CisgICAgfQorICAgIHJldHVybiBjYWxsYmFja1dyYXBwZXI7Cit9CisKK2Z1bmN0aW9uIGJp
bmQoZnVuYywgdGhpc09iamVjdCkKK3sKKyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4g
ZnVuYy5hcHBseSh0aGlzT2JqZWN0LCBhcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDApKSk7IH07Cit9CisKK2ZldGNoVGVzdHMoKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tcGFu
ZWwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRl
bnNpb24tcGFuZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDUz
MWE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
cmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sCkBAIC0wLDAgKzEsMiBAQAorPGh0bWw+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tc2lkZWJhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjkwNTMxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbApA
QCAtMCwwICsxLDIgQEAKKzxodG1sPgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9leHRlbnNpb25zLWFwaS1leHBlY3RlZC50eHQKaW5kZXggYzk0MWY2My4uMDM4ZGI1OSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBpLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGktZXhwZWN0ZWQu
dHh0CkBAIC01MSw2ICs1MSw3IEBAIFJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RBUEkKICAg
ICAgICAgICAgIE90aGVyIDogIm90aGVyIgogICAgICAgICB9CiAgICAgICAgIGdldEhBUiA6IDxm
dW5jdGlvbj4KKyAgICAgICAgYWRkUmVxdWVzdEhlYWRlcnMgOiA8ZnVuY3Rpb24+CiAgICAgfQog
ICAgIG9uUmVzZXQgOiB7CiAgICAgICAgIGFkZExpc3RlbmVyIDogPGZ1bmN0aW9uPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBpLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkuaHRtbAppbmRleCBmYzlkYTBmLi5hZDExMDlm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkuaHRtbApAQCAtMSw3ICsx
LDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0
b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJleHRlbnNpb25z
LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCI+CiAKIGZ1bmN0aW9uIGV4dGVuc2lvbl90ZXN0QVBJKG5leHRUZXN0KQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLWFwaS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLWFwaS5odG1sCmluZGV4IDExOGZl
MGQuLjBkNGIwYjIgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25z
LWF1ZGl0cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1h
dWRpdHMtYXBpLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdCBz
cmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9ImF1ZGl0cy10ZXN0czIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImV4
dGVuc2lvbnMtYXVkaXRzLXRlc3RzLmpzIj48L3NjcmlwdD4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMuaHRtbAppbmRleCBlZjY1ZDUxLi5jNzE1ZDM2IDEwMDc1
NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMuaHRtbApAQCAtMSw3ICsx
LDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0
b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJleHRlbnNpb25z
LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iYXVkaXRzLXRlc3Rz
Mi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy1hdWRpdHMtdGVzdHMuanMi
Pjwvc2NyaXB0PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy1ldmFsLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLmh0bWwK
aW5kZXggNGZkM2Y5Yy4uODg3ZTMxYSAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2V4dGVuc2lvbnMtZXZhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNp
b25zLWV2YWwuaHRtbApAQCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNy
Yz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAKIHdpbmRvdy5pbnNwZWN0ZWRWYWx1ZSA9
IHsgc3RyOiAiZm9vIiwgbnVtOiA0MiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2V4dGVuc2lvbnMtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5z
aW9ucy1ldmVudHMuaHRtbAppbmRleCAzZDYxNzAxLi41ZmZjMmY2IDEwMDc1NQotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbApAQCAtMSw3ICsxLDcgQEAKIDxodG1s
PgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9y
LXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMt
dGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVzb3VyY2VzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy1l
eHBlY3RlZC50eHQKaW5kZXggYjFlM2I5YS4uYWRiNGIzMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVzb3VyY2VzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMtZXhwZWN0ZWQudHh0CkBAIC01
LDEwICs1LDEwIEBAIFBhZ2UgcmVsb2FkZWQuCiBTdGFydGVkIGV4dGVuc2lvbi4KIFJ1bm5pbmcg
dGVzdHMuLi4KIFJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RHZXRIQVIKK3Jlc291cmNlOiAu
Li4vdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcwogcmVzb3VyY2U6IC4uLi90ZXN0
cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzCiByZXNvdXJjZTogLi4uL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy5odG1sCiByZXNvdXJjZTogLi4uL0xheW91
dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy5odG1sCi1yZXNvdXJjZTogLi4u
L0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMKIHJlc291cmNlOiAuLi4v
aW5zcGVjdG9yL3Jlc291cmNlcy9hYmUucG5nCiByZXNvdXJjZTogLi4uL2luc3BlY3Rvci9yZXNv
dXJjZXMvQWhlbS50dGYKIHJlc291cmNlOiAuLi4vaW5zcGVjdG9yL3Jlc291cmNlcy9hdWRpdHMt
c3R5bGUxLmNzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMt
cmVzb3VyY2VzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJj
ZXMuaHRtbAppbmRleCAwNDYwODZmLi5iZDIwOGI5IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbApAQCAtMTEsNyArMTEsNyBAQCBwIHsgZm9u
dC1mYW1pbHk6ICd0ZXN0JzsgfQogPC9zdHlsZT4KIAogPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
ZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgogCiBmdW5jdGlvbiBleHRlbnNpb25fdGVzdEdldEhBUihuZXh0VGVz
dCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhZTVmOWZhLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9leHRlbnNpb25zLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1m
dW5jdGlvbiBsb2cobWVzc2FnZSkKLXsKLSAgICBvdXRwdXQobWVzc2FnZSk7Ci19Ci0KLWZ1bmN0
aW9uIGV4dGVuc2lvbkZ1bmN0aW9ucygpCi17Ci0gICAgdmFyIGZ1bmN0aW9ucyA9ICIiOwotCi0g
ICAgZm9yIChzeW1ib2wgaW4gd2luZG93KSB7Ci0gICAgICAgIGlmICgvXmV4dGVuc2lvbl8vLmV4
ZWMoc3ltYm9sKSAmJiB0eXBlb2Ygd2luZG93W3N5bWJvbF0gPT09ICJmdW5jdGlvbiIpCi0gICAg
ICAgICAgICBmdW5jdGlvbnMgKz0gd2luZG93W3N5bWJvbF0udG9TdHJpbmcoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZ1bmN0aW9uczsKLX0KLQotdmFyIGluaXRpYWxpemVfRXh0ZW5zaW9uc1Rlc3Qg
PSBmdW5jdGlvbigpCi17Ci0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3NhZ2UgPSBmdW5j
dGlvbihtZXNzYWdlSWQsIGNhbGxiYWNrLCByZWN1cnJpbmcpCi17Ci0gICAgZnVuY3Rpb24gb25N
ZXNzYWdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZihldmVudC5kYXRhKSAhPT0g
Im9iamVjdCIgfHwgZXZlbnQuZGF0YS5jb21tYW5kICE9PSBtZXNzYWdlSWQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmICghcmVjdXJyaW5nKQotICAgICAgICAgICAgd2luZG93LnJl
bW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UsIGZhbHNlKTsKLSAgICAgICAg
dmFyIHBvcnQgPSBldmVudC5wb3J0cyAmJiBldmVudC5wb3J0c1swXTsKLSAgICAgICAgaWYgKGNh
bGxiYWNrKGV2ZW50LmRhdGEsIHBvcnQpICYmIHBvcnQpCi0gICAgICAgICAgICBwb3J0LnBvc3RN
ZXNzYWdlKCIiKTsKLSAgICB9Ci0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2Ui
LCBvbk1lc3NhZ2UsIGZhbHNlKTsKLX0KLQotSW5zcGVjdG9yVGVzdC5ydW5FeHRlbnNpb25UZXN0
cyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCku
ZXZhbHVhdGUoImxvY2F0aW9uLmhyZWYiLCAiY29uc29sZSIsIGZ1bmN0aW9uKHJlc3VsdCkgewot
ICAgICAgICB2YXIgZXh0ZW5zaW9uVVJMID0gcmVzdWx0LmRlc2NyaXB0aW9uLnJlcGxhY2UoL1wv
W14vXSokLywgIi9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1haW4uaHRtbCIpOwotICAgICAgICBXZWJJ
bnNwZWN0b3IuYWRkRXh0ZW5zaW9ucyhbeyBzdGFydFBhZ2U6IGV4dGVuc2lvblVSTCB9XSk7Ci0g
ICAgfSk7Ci19Ci0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3NhZ2UoImV4dGVuc2lvbi10
ZXN0cy1kb25lIiwgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QsIHRydWUpOwotCi1mdW5jdGlv
biBleHRlbnNpb25PdXRwdXQobWVzc2FnZSkKLXsKLSAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dChtZXNzYWdlLnRleHQpOwotfQotSW5zcGVjdG9yVGVzdC5kaXNwYXRjaE9uTWVzc2FnZSgib3V0
cHV0IiwgZXh0ZW5zaW9uT3V0cHV0LCB0cnVlKTsKLQotZnVuY3Rpb24gZHVtcFNpZGViYXJDb250
ZW50KG1lc3NhZ2UsIHBvcnQpCi17Ci0gICAgdmFyIHNpZGViYXJQYW5lcyA9IFdlYkluc3BlY3Rv
ci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzOwotICAgIC8vIHRoZSBzaWRlYmFyIG9mIGlu
dGVyZXN0IGlzIHByZXN1bWVkIHRvIGFsd2F5cyBiZSBsYXN0LgotICAgIHZhciBzaWRlYmFyID0g
c2lkZWJhclBhbmVzW09iamVjdC5rZXlzKHNpZGViYXJQYW5lcykucG9wKCldOwotICAgIEluc3Bl
Y3RvclRlc3QucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5jdGlvbigpIHsKLSAgICAgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNpZGViYXIgY29udGVudDogIiArIHNpZGViYXIuYm9k
eUVsZW1lbnQudGV4dENvbnRlbnQpOwotICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCIiKTsKLSAg
ICB9KTsKLX0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3NhZ2UoImR1bXAtc2lkZWJhci1j
b250ZW50IiwgZHVtcFNpZGViYXJDb250ZW50LCB0cnVlKTsKLQotZnVuY3Rpb24gcmVsb2FkUGFn
ZShkYXRhLCBwb3J0KQotewotICAgIEluc3BlY3RvclRlc3QucmVsb2FkUGFnZShmdW5jdGlvbigp
IHsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiIik7Ci0gICAgfSk7Ci19Ci1JbnNwZWN0b3JU
ZXN0LmRpc3BhdGNoT25NZXNzYWdlKCJyZWxvYWQiLCByZWxvYWRQYWdlLCB0cnVlKTsKLQotfQot
Ci12YXIgdGVzdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBJbnNwZWN0b3JUZXN0LnJ1bkV4dGVuc2lv
blRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMuaHRtbAppbmRleCAwZWUy
OTE5Li5jMmY3YjdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLmh0bWwKQEAgLTEs
NyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iZXh0ZW5z
aW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgogCiBmdW5jdGlvbiBleHRlbnNpb25fdGVzdENyZWF0ZVBhbmVsKG5leHRUZXN0
KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24t
bWFpbi5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFp
bi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBiNTRlLi4wMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1haW4uaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNy
Yz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gb3V0cHV0KG1lc3Nh
Z2UpCi17Ci0gICAgdG9wLnBvc3RNZXNzYWdlKHsgY29tbWFuZDogIm91dHB1dCIsIHRleHQ6IG1l
c3NhZ2UgfSwgIioiKTsKLX0KLQotb3V0cHV0KCJTdGFydGVkIGV4dGVuc2lvbi4iKTsKLTwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9ImV4dGVuc2lvbi1tYWluLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0
ZW5zaW9uLW1haW4uanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lv
bi1tYWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTRiZDIzLi4wMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1haW4uanMK
KysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1mdW5jdGlvbiBmZXRjaFRlc3RzKCkKLXsK
LSAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCi0gICAgewotICAgICAgICAgd2luZG93LmV2
YWwocmVzdWx0KTsKLSAgICAgICAgIHJ1blRlc3RzKCk7Ci0gICAgfQotICAgIHdlYkluc3BlY3Rv
ci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZXh0ZW5zaW9uRnVuY3Rpb25zKCkiLCBjYWxsYmFjayk7
Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3RzKCkKLXsKLSAgICBvdXRwdXQoIlJ1bm5pbmcgdGVzdHMu
Li4iKTsKLSAgICB2YXIgdGVzdHMgPSBbXTsKLSAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcykg
ewotICAgICAgICBpZiAoL15leHRlbnNpb25fdGVzdC8udGVzdChzeW1ib2wpICYmIHR5cGVvZiB0
aGlzW3N5bWJvbF0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICB0ZXN0cy5wdXNoKHN5bWJv
bCk7Ci0gICAgfQotICAgIHRlc3RzID0gdGVzdHMuc29ydCgpOwotICAgIHZhciB0ZXN0Q2hhaW4g
PSBvblRlc3RzRG9uZTsKLSAgICBmb3IgKHZhciB0ZXN0ID0gdGVzdHMucG9wKCk7IHRlc3Q7IHRl
c3QgPSB0ZXN0cy5wb3AoKSkKLSAgICAgICAgdGVzdENoYWluID0gYmluZChydW5UZXN0LCB0aGlz
LCBiaW5kKHRoaXNbdGVzdF0sIHRoaXMsIHRlc3RDaGFpbiksIHRlc3QpOwotICAgIHRlc3RDaGFp
bigpOwotfQotCi1mdW5jdGlvbiBvblRlc3RzRG9uZSgpCi17Ci0gICAgb3V0cHV0KCJBbGwgdGVz
dHMgZG9uZS4iKTsKLSAgICB0b3AucG9zdE1lc3NhZ2UoeyBjb21tYW5kOiAiZXh0ZW5zaW9uLXRl
c3RzLWRvbmUiIH0sICIqIik7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QodGVzdCwgbmFtZSkKLXsK
LSAgICBvdXRwdXQoIlJVTk5JTkcgVEVTVDogIiArIG5hbWUpOwotICAgIHRyeSB7Ci0gICAgICAg
IHRlc3QoKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIG91dHB1dChuYW1lICsgIjogIiAr
IGUpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gZGlzcGF0Y2hPbkZyb250ZW5kKG1lc3NhZ2UsIGNh
bGxiYWNrKQotewotICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3JhcHBlcigpCi0gICAgewotICAgICAg
ICBjaGFubmVsLnBvcnQxLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBjYWxsYmFja1dy
YXBwZXIsIGZhbHNlKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9Ci0gICAgdmFyIGNoYW5u
ZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKLSAgICBjaGFubmVsLnBvcnQxLnN0YXJ0KCk7Ci0g
ICAgaWYgKGNhbGxiYWNrKQotICAgICAgICBjaGFubmVsLnBvcnQxLmFkZEV2ZW50TGlzdGVuZXIo
Im1lc3NhZ2UiLCBjYWxsYmFja1dyYXBwZXIsIGZhbHNlKTsKLSAgICB0b3AucG9zdE1lc3NhZ2Uo
bWVzc2FnZSwgWyBjaGFubmVsLnBvcnQyIF0sICIqIik7Ci19Ci0KLWZ1bmN0aW9uIGNhbGxiYWNr
QW5kTmV4dFRlc3QoY2FsbGJhY2ssIG5leHRUZXN0KQotewotICAgIGZ1bmN0aW9uIGNhbGxiYWNr
V3JhcHBlcigpCi0gICAgewotICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OwotICAgICAgICBuZXh0VGVzdC5jYWxsKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gY2FsbGJh
Y2tXcmFwcGVyOwotfQotCi1mdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNPYmplY3QpCi17Ci0gICAg
dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAg
IHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc09iamVjdCwgYXJncy5j
b25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSkpOyB9OwotfQot
Ci1mZXRjaFRlc3RzKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNl
cy9leHRlbnNpb24tcGFuZWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA1
MzFhNC4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVu
c2lvbi1wYW5lbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08aHRtbD4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5z
aW9uLXNpZGViYXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5z
aW9uLXNpZGViYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA1MzFhNC4u
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1z
aWRlYmFyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTxodG1sPgotPC9odG1s
PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA3NGY4NjhjLi4zZTMwYjY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEwLTEyLTAzICBBbmRyZXkgS29z
eWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogW0V4dGVuc2lvbiBBUEldIGFkZCBz
dXBwb3J0IGZvciBhZGRpbmcvb3ZlcnJpZGluZyBIVFRQIHJlcXVlc3QgaGVhZGVycworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0OTMKKworICAgICAg
ICBUZXN0OiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMuaHRtbAorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6IGFkZGVkIHNldE92ZXJyaWRlSGVhZGVy
cygpCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0T3ZlcnJpZGVIZWFkZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmFwcGx5T3ZlcnJpZGVIZWFkZXJz
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uQVBJLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLmluamVjdGVkRXh0ZW5zaW9uQVBJLlJlc291cmNlcy5wcm90b3R5cGUuYWRkUmVxdWVzdEhl
YWRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS5fb25BZGRSZXF1ZXN0SGVhZGVycyk6
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvUmVxdWVzdCk6CisKIDIwMTAtMTItMDIgIERhaSBN
aWt1cnViZSAgPGRtaWt1cnViZUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtl
bnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggOTliMmZhYi4uMjg0MWRkYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC0xNjYsNyArMTY2LDcgQEAgbW9kdWxlIGNvcmUg
ewogICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIGRpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0cmluZyBtZXRob2ROYW1lLCBpbiBTdHJp
bmcgYXJndW1lbnRzLCBvdXQgVmFsdWUgcmVzdWx0LCBvdXQgYm9vbGVhbiBpc0V4Y2VwdGlvbik7
CiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9u
TG9hZChpbiBTdHJpbmcgc2NyaXB0U291cmNlKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxl
cl0gdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwotCisgICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc2V0T3ZlcnJpZGVIZWFkZXJzKGluIE9iamVjdCBoZWFk
ZXJzKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldENoaWxkTm9kZXMoaW4gbG9uZyBu
b2RlSWQpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgc2V0QXR0cmlidXRlKGluIGxvbmcg
ZWxlbWVudElkLCBpbiBTdHJpbmcgbmFtZSwgaW4gU3RyaW5nIHZhbHVlLCBvdXQgYm9vbGVhbiBz
dWNjZXNzKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHJlbW92ZUF0dHJpYnV0ZShpbiBs
b25nIGVsZW1lbnRJZCwgaW4gU3RyaW5nIG5hbWUsIG91dCBib29sZWFuIHN1Y2Nlc3MpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA5YjQ1YmJlLi43OTk5
MzNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTMs
NiArNTMsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
VFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5q
ZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKQEAgLTE4NTEs
NiArMTg1MiwyNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbG9hZFBhZ2UoKQogICAg
IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2No
ZWR1bGVSZWZyZXNoKCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0T3ZlcnJp
ZGVIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQoreworICAgIG1f
b3ZlcnJpZGVIZWFkZXJzID0gYWRvcHRQdHIobmV3IEhUVFBIZWFkZXJNYXAoKSk7CisgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQoKTsKKyAgICBm
b3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAo
IWl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbV9vdmVycmlkZUhlYWRlcnMtPmFkZChpdC0+Zmlyc3QsIHZhbHVlKTsKKyAgICB9Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YXBwbHlPdmVycmlkZUhlYWRlcnMoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmICghbV9vdmVycmlkZUhlYWRlcnMpCisgICAg
ICAgIHJldHVybjsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX292
ZXJyaWRlSGVhZGVycy0+ZW5kKCk7CisgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fb3ZlcnJpZGVIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZTU3YzA4OS4u
Mjg0NTViNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNTEs
NiArNTEsNyBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3Mg
RmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSFRUUEhlYWRlck1hcDsK
IGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVj
dGVkU2NyaXB0SG9zdDsKQEAgLTE3Myw2ICsxNzQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNv
dXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIpOwogICAgIHZvaWQgc2NyaXB0SW1w
b3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmlu
Zyk7CiAKKyAgICB2b2lkIHNldE92ZXJyaWRlSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4pOworICAgIHZvaWQgYXBwbHlPdmVycmlkZUhlYWRlcnMoUmVzb3VyY2VSZXF1ZXN0Jik7
CisKICAgICB2b2lkIGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7CiAKICAgICB2b2lkIHN0YXJ0VGlt
ZWxpbmVQcm9maWxlcigpOwpAQCAtMzk0LDYgKzM5OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgaW50IG1fbGFzdEJyZWFrcG9pbnRJZDsKIAogICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxl
ckFnZW50PiBtX3Byb2ZpbGVyQWdlbnQ7CisgICAgT3duUHRyPEhUVFBIZWFkZXJNYXA+IG1fb3Zl
cnJpZGVIZWFkZXJzOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgdHlwZWRlZiBI
YXNoTWFwPGludHB0cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4gV29ya2Vy
c01hcDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25B
UEkuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uQVBJLmpzCmluZGV4
IDAyMzQ5OTQuLmE5YTI0MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9FeHRlbnNpb25BUEkuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVu
c2lvbkFQSS5qcwpAQCAtMTI2LDYgKzEyNiwxMSBAQCBSZXNvdXJjZXMucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
ZXh0ZW5zaW9uU2VydmVyLnNlbmRSZXF1ZXN0KHsgY29tbWFuZDogImdldEhBUiIgfSwgY2FsbGJh
Y2sgJiYgY2FsbGJhY2tXcmFwcGVyKTsKKyAgICB9LAorCisgICAgYWRkUmVxdWVzdEhlYWRlcnM6
IGZ1bmN0aW9uKGhlYWRlcnMpCisgICAgeworICAgICAgICByZXR1cm4gZXh0ZW5zaW9uU2VydmVy
LnNlbmRSZXF1ZXN0KHsgY29tbWFuZDogImFkZFJlcXVlc3RIZWFkZXJzIiwgaGVhZGVyczogaGVh
ZGVycywgZXh0ZW5zaW9uSWQ6IGxvY2F0aW9uLmhvc3RuYW1lIH0pOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKaW5kZXggMTA1
MGM2Zi4uMzVmYzJkYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4
dGVuc2lvblNlcnZlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5z
aW9uU2VydmVyLmpzCkBAIC0zMyw4ICszMywxMCBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2Vy
dmVyID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX2NsaWVudE9iamVjdHMgPSB7fTsKICAgICB0aGlz
Ll9oYW5kbGVycyA9IHt9OwogICAgIHRoaXMuX3N1YnNjcmliZXJzID0ge307CisgICAgdGhpcy5f
b3ZlcnJpZGVIZWFkZXJzID0ge307CiAgICAgdGhpcy5fc3RhdHVzID0gbmV3IFdlYkluc3BlY3Rv
ci5FeHRlbnNpb25TdGF0dXMoKTsKIAorICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcigiYWRkUmVx
dWVzdEhlYWRlcnMiLCB0aGlzLl9vbkFkZFJlcXVlc3RIZWFkZXJzLmJpbmQodGhpcykpOwogICAg
IHRoaXMuX3JlZ2lzdGVySGFuZGxlcigiYWRkQXVkaXRDYXRlZ29yeSIsIHRoaXMuX29uQWRkQXVk
aXRDYXRlZ29yeS5iaW5kKHRoaXMpKTsKICAgICB0aGlzLl9yZWdpc3RlckhhbmRsZXIoImFkZEF1
ZGl0UmVzdWx0IiwgdGhpcy5fb25BZGRBdWRpdFJlc3VsdC5iaW5kKHRoaXMpKTsKICAgICB0aGlz
Ll9yZWdpc3RlckhhbmRsZXIoImNyZWF0ZVBhbmVsIiwgdGhpcy5fb25DcmVhdGVQYW5lbC5iaW5k
KHRoaXMpKTsKQEAgLTE0NCw2ICsxNDYsMjkgQEAgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc3Vic2NyaWJlcnNbbWVz
c2FnZS50eXBlXTsKICAgICB9LAogCisgICAgX29uQWRkUmVxdWVzdEhlYWRlcnM6IGZ1bmN0aW9u
KG1lc3NhZ2UpCisgICAgeworICAgICAgICB2YXIgaWQgPSBtZXNzYWdlLmV4dGVuc2lvbklkOwor
ICAgICAgICBpZiAodHlwZW9mIGlkICE9PSAic3RyaW5nIikKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9zdGF0dXMuRV9CQURBUkdUWVBFKCJleHRlbnNpb25JZCIsIHR5cGVvZiBpZCwgInN0cmlu
ZyIpOworICAgICAgICB2YXIgZXh0ZW5zaW9uSGVhZGVycyA9IHRoaXMuX292ZXJyaWRlSGVhZGVy
c1tpZF07CisgICAgICAgIGlmICghZXh0ZW5zaW9uSGVhZGVycykgeworICAgICAgICAgICAgZXh0
ZW5zaW9uSGVhZGVycyA9IHt9OworICAgICAgICAgICAgdGhpcy5fb3ZlcnJpZGVIZWFkZXJzW2lk
XSA9IGV4dGVuc2lvbkhlYWRlcnM7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChuYW1lIGluIG1l
c3NhZ2UuaGVhZGVycykKKwkgICAgZXh0ZW5zaW9uSGVhZGVyc1tuYW1lXSA9IG1lc3NhZ2UuaGVh
ZGVyc1tuYW1lXTsKKwl2YXIgYWxsSGVhZGVycyA9IHt9OworCWZvciAoZXh0ZW5zaW9uIGluIHRo
aXMuX292ZXJyaWRlSGVhZGVycykgeworCSAgICB2YXIgaGVhZGVycyA9IHRoaXMuX292ZXJyaWRl
SGVhZGVyc1tleHRlbnNpb25dOworCSAgICBmb3IgKG5hbWUgaW4gaGVhZGVycykgeworCSAgICAg
ICAgaWYgKHR5cGVvZiBoZWFkZXJzW25hbWVdID09PSAic3RyaW5nIikKKwkJICAgIGFsbEhlYWRl
cnNbbmFtZV0gPSBoZWFkZXJzW25hbWVdOworCSAgICB9CisJfQorICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnNldE92ZXJyaWRlSGVhZGVycyhhbGxIZWFkZXJzKTsKKyAgICB9LAorCiAgICAgX29u
Q3JlYXRlUGFuZWw6IGZ1bmN0aW9uKG1lc3NhZ2UsIHBvcnQpCiAgICAgewogICAgICAgICB2YXIg
aWQgPSBtZXNzYWdlLmlkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDM1YTQ5MmIuLjhiMzAw
Y2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTI2NzYsNiArMjY3NiwxMCBAQCB2b2lkIEZy
YW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIEZyYW1lTG9hZFR5cAogICAgIC8vIEZvciBhIG5ld2x5IG9wZW5lZCBmcmFtZSB3aXRoIGFu
IGVtcHR5IFVSTCwgZW5jb2RpbmcoKSBzaG91bGQgbm90IGJlIHVzZWQsIGJlY2F1c2UgdGhpcyBt
ZXRob2RzIGFza3MgZGVjb2Rlciwgd2hpY2ggdXNlcyBJU08tODg1OS0xLgogICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgcmVxdWVzdC5zZXRSZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgiVVRGLTgiLCB3cml0ZXIo
KS0+ZGVwcmVjYXRlZEZyYW1lRW5jb2RpbmcoKSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVs
dFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikgJiYgVVNFKEpTQykKKyAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5hcHBseU92ZXJyaWRlSGVhZGVycyhyZXF1ZXN0KTsKKyNlbmRpZgogfQogCiB2b2lkIEZy
YW1lTG9hZGVyOjphZGRIVFRQT3JpZ2luSWZOZWVkZWQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBTdHJpbmcgb3JpZ2luKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76538</attachid>
            <date>2010-12-14 08:21:31 -0800</date>
            <delta_ts>2010-12-17 04:37:57 -0800</delta_ts>
            <desc>patch</desc>
            <filename>extension-headers.diff</filename>
            <type>text/plain</type>
            <size>29420</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4YWEwMDZjLi5lODk5YTRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMTIt
MTQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5z
aW9uIEFQSV0gYWRkIHN1cHBvcnQgZm9yIGFkZGluZy9vdmVycmlkaW5nIEhUVFAgcmVxdWVzdCBo
ZWFkZXJzCisgICAgICAgIE1vdmVkIGV4dGVuc2lvbnMgdGVzdCBmcmFtZXdvcmtzIHVuZGVyIGh0
dHAvdGVzdHMvaW5zcGVjdG9yLCBzbyBIVFRQIHRlc3RzIG1heSByZXVzZSBpdC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDkzCisKKyAgICAgICAg
KiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMu
aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10
ZXN0LmpzOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVz
dC5qcy4KKyAgICAgICAgKGxvZyk6CisgICAgICAgIChleHRlbnNpb25GdW5jdGlvbnMpOgorICAg
ICAgICAoaW5pdGlhbGl6ZV9FeHRlbnNpb25zVGVzdC5JbnNwZWN0b3JUZXN0LmRpc3BhdGNoT25N
ZXNzYWdlKToKKyAgICAgICAgKGluaXRpYWxpemVfRXh0ZW5zaW9uc1Rlc3QuSW5zcGVjdG9yVGVz
dC5ydW5FeHRlbnNpb25UZXN0cyk6CisgICAgICAgIChpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0
LmV4dGVuc2lvbk91dHB1dCk6CisgICAgICAgIChpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0LmR1
bXBTaWRlYmFyQ29udGVudCk6CisgICAgICAgIChpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0LnJl
bG9hZFBhZ2UpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0
b3IvcmVzb3VyY2VzL2VjaG8taGVhZGVycy5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5odG1sOiBSZW5hbWVkIGZyb20g
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5odG1sLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5qczog
UmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1h
aW4uanMuCisgICAgICAgIChmZXRjaFRlc3RzLmNhbGxiYWNrKToKKyAgICAgICAgKGZldGNoVGVz
dHMpOgorICAgICAgICAocnVuVGVzdHMpOgorICAgICAgICAob25UZXN0c0RvbmUpOgorICAgICAg
ICAoKToKKyAgICAgICAgKGRpc3BhdGNoT25Gcm9udGVuZC5jYWxsYmFja1dyYXBwZXIpOgorICAg
ICAgICAoZGlzcGF0Y2hPbkZyb250ZW5kKToKKyAgICAgICAgKGNhbGxiYWNrQW5kTmV4dFRlc3Qu
Y2FsbGJhY2tXcmFwcGVyKToKKyAgICAgICAgKGNhbGxiYWNrQW5kTmV4dFRlc3QpOgorICAgICAg
ICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tcGFuZWwuaHRtbDog
UmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXBh
bmVsLmh0bWwuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVu
c2lvbi1zaWRlYmFyLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVz
b3VyY2VzL2V4dGVuc2lvbi1zaWRlYmFyLmh0bWwuCisgICAgICAgICogaW5zcGVjdG9yL2V4dGVu
c2lvbnMtYXBpLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1h
cGkuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMtYXBpLmh0bWw6
CisgICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLmh0bWw6CisgICAgICAgICog
aW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZhbC5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9leHRl
bnNpb25zLWV2ZW50cy5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9leHRlbnNpb25zLXJlc291
cmNlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVzb3Vy
Y2VzLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMuaHRtbDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTAtMTItMTQg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJl
dmlld2VkLiBDaHJvbWl1bSB0ZXN0cyByZWJhc2VsaW5lZC4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaGVhZGVycy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjdhMTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNp
b25zLWhlYWRlcnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGVzdHMgV2ViSW5zcGVj
dG9yIGV4dGVuc2lvbiBBUEkKKworSFRUUF9YX1dFQklOU1BFQ1RPUl9FWFRFTlNJT046IHRlc3QK
K0hUVFBfVVNFUl9BR0VOVDogTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wYjsgV2lu
ZG93cyBOVCA2LjApCitTdGFydGVkIGV4dGVuc2lvbi4KK1J1bm5pbmcgdGVzdHMuLi4KK1JVTk5J
TkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RBZGRIZWFkZXJzCitBbGwgdGVzdHMgZG9uZS4KKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFk
ZXJzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhl
YWRlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNlM2FjCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5z
aW9ucy1oZWFkZXJzLmh0bWwKQEAgLTAsMCArMSwzMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSJpbnNwZWN0b3ItdGVzdDIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImV4dGVu
c2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0QWRkSGVhZGVycyhuZXh0VGVzdCkKK3sKKyAgICB3
ZWJJbnNwZWN0b3IucmVzb3VyY2VzLmFkZFJlcXVlc3RIZWFkZXJzKHsKKyAgICAgICAgIngtd2Vi
aW5zcGVjdG9yLWV4dGVuc2lvbiI6ICJ0ZXN0IiwKKyAgICAgICAgInVzZXItYWdlbnQiOiAiTW96
aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wYjsgV2luZG93cyBOVCA2LjApIgorICAgIH0p
OworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZG9YSFIoKSIsIG5leHRU
ZXN0KTsKK30KKworZnVuY3Rpb24gZG9YSFIoKQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9lY2hvLWhlYWRlcnMu
cGhwIiwgZmFsc2UpOworICAgIHhoci5zZW5kKG51bGwpOworICAgIC8vIENhbid0IHVzZSBvdXRw
dXQoKSBoZXJlIGR1ZSB0byBvdXRwdXQgb3JkZXIgaW5zdGFiaWxpdHk6IHRoaXMgaXMgaW52b2tl
ZCBieSBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpLAorICAgIC8vIHdoaWNoIGlzIG5vdCBzZXJpYWxp
emVkIGFnYWluc3Qgb3V0cHV0IGZyb20gZXh0ZW5zaW9uLCBhcyB0aGUgbGF0dGVyIGlzIHBvc3Rl
ZCBhc3luY2hyb25vdXNseSB2aWEgCisgICAgLy8gcG9zdE1lc3NhZ2UgdG8gZnJvbnQtZW5kIHdp
bmRvdy4KKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGVhZGVycyIpLnRleHRDb250ZW50
ID0geGhyLnJlc3BvbnNlVGV4dDsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9uIEFQSTwvcD4K
KzxkaXYgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUiIGlkPSJoZWFkZXJzIj48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2V4dGVuc2lvbnMtdGVzdC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMtdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGU5
YWJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy10ZXN0LmpzCkBAIC0wLDAgKzEsODAgQEAKK2Z1bmN0aW9uIGxvZyhtZXNzYWdl
KQoreworICAgIG91dHB1dChtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9uRnVuY3Rp
b25zKCkKK3sKKyAgICB2YXIgZnVuY3Rpb25zID0gIiI7CisKKyAgICBmb3IgKHN5bWJvbCBpbiB3
aW5kb3cpIHsKKyAgICAgICAgaWYgKC9eZXh0ZW5zaW9uXy8uZXhlYyhzeW1ib2wpICYmIHR5cGVv
ZiB3aW5kb3dbc3ltYm9sXSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIGZ1bmN0aW9ucyAr
PSB3aW5kb3dbc3ltYm9sXS50b1N0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gZnVuY3Rpb25z
OworfQorCit2YXIgaW5pdGlhbGl6ZV9FeHRlbnNpb25zVGVzdCA9IGZ1bmN0aW9uKCkKK3sKKwor
SW5zcGVjdG9yVGVzdC5kaXNwYXRjaE9uTWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2VJZCwgY2Fs
bGJhY2ssIHJlY3VycmluZykKK3sKKyAgICBmdW5jdGlvbiBvbk1lc3NhZ2UoZXZlbnQpCisgICAg
eworICAgICAgICBpZiAodHlwZW9mKGV2ZW50LmRhdGEpICE9PSAib2JqZWN0IiB8fCBldmVudC5k
YXRhLmNvbW1hbmQgIT09IG1lc3NhZ2VJZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKCFyZWN1cnJpbmcpCisgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
bWVzc2FnZSIsIG9uTWVzc2FnZSwgZmFsc2UpOworICAgICAgICB2YXIgcG9ydCA9IGV2ZW50LnBv
cnRzICYmIGV2ZW50LnBvcnRzWzBdOworICAgICAgICBpZiAoY2FsbGJhY2soZXZlbnQuZGF0YSwg
cG9ydCkgJiYgcG9ydCkKKyAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIiIpOworICAgIH0K
KyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSwgZmFsc2Up
OworfQorCitJbnNwZWN0b3JUZXN0LnJ1bkV4dGVuc2lvblRlc3RzID0gZnVuY3Rpb24oKQorewor
ICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5ldmFsdWF0ZSgibG9jYXRpb24u
aHJlZiIsICJjb25zb2xlIiwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHZhciBwYWdlVVJM
ID0gcmVzdWx0LmRlc2NyaXB0aW9uOworICAgICAgICB2YXIgZXh0ZW5zaW9uVVJMID0gKC9eaHR0
cHM/Oi8udGVzdChwYWdlVVJMKSA/IAorICAgICAgICAgICAgcGFnZVVSTC5yZXBsYWNlKC9eKGh0
dHBzPzpcL1wvW14vXSpcLykuKiQvLCIkMSIpIDoKKyAgICAgICAgICAgIHBhZ2VVUkwucmVwbGFj
ZSgvXC9pbnNwZWN0b3JcL1teL10qJC8sICIvaHR0cC90ZXN0cyIpKSArCisgICAgICAgICAgICAi
L2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1haW4uaHRtbCI7CisgICAgICAgIFdlYklu
c3BlY3Rvci5hZGRFeHRlbnNpb25zKFt7IHN0YXJ0UGFnZTogZXh0ZW5zaW9uVVJMIH1dKTsKKyAg
ICB9KTsKK30KKworSW5zcGVjdG9yVGVzdC5kaXNwYXRjaE9uTWVzc2FnZSgiZXh0ZW5zaW9uLXRl
c3RzLWRvbmUiLCBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCwgdHJ1ZSk7CisKK2Z1bmN0aW9u
IGV4dGVuc2lvbk91dHB1dChtZXNzYWdlKQoreworICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KG1lc3NhZ2UudGV4dCk7Cit9CitJbnNwZWN0b3JUZXN0LmRpc3BhdGNoT25NZXNzYWdlKCJvdXRw
dXQiLCBleHRlbnNpb25PdXRwdXQsIHRydWUpOworCitmdW5jdGlvbiBkdW1wU2lkZWJhckNvbnRl
bnQobWVzc2FnZSwgcG9ydCkKK3sKKyAgICB2YXIgc2lkZWJhclBhbmVzID0gV2ViSW5zcGVjdG9y
LnBhbmVscy5lbGVtZW50cy5zaWRlYmFyUGFuZXM7CisgICAgLy8gdGhlIHNpZGViYXIgb2YgaW50
ZXJlc3QgaXMgcHJlc3VtZWQgdG8gYWx3YXlzIGJlIGxhc3QuCisgICAgdmFyIHNpZGViYXIgPSBz
aWRlYmFyUGFuZXNbT2JqZWN0LmtleXMoc2lkZWJhclBhbmVzKS5wb3AoKV07CisgICAgSW5zcGVj
dG9yVGVzdC5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgeworICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2lkZWJhciBjb250ZW50OiAiICsgc2lkZWJhci5ib2R5
RWxlbWVudC50ZXh0Q29udGVudCk7CisgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIiIpOworICAg
IH0pOworfQorSW5zcGVjdG9yVGVzdC5kaXNwYXRjaE9uTWVzc2FnZSgiZHVtcC1zaWRlYmFyLWNv
bnRlbnQiLCBkdW1wU2lkZWJhckNvbnRlbnQsIHRydWUpOworCitmdW5jdGlvbiByZWxvYWRQYWdl
KGRhdGEsIHBvcnQpCit7CisgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKGZ1bmN0aW9uKCkg
eworICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCIiKTsKKyAgICB9KTsKK30KK0luc3BlY3RvclRl
c3QuZGlzcGF0Y2hPbk1lc3NhZ2UoInJlbG9hZCIsIHJlbG9hZFBhZ2UsIHRydWUpOworCit9CisK
K3ZhciB0ZXN0ID0gZnVuY3Rpb24oKQoreworICAgIEluc3BlY3RvclRlc3QucnVuRXh0ZW5zaW9u
VGVzdHMoKTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L3Jlc291cmNlcy9lY2hvLWhlYWRlcnMucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2VzL2VjaG8taGVhZGVycy5waHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uZGUyYjZmYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9lY2hvLWhlYWRlcnMucGhwCkBAIC0wLDAgKzEsOSBA
QAorPD9waHAgDQorDQorJGhlYWRlcnMgPSBBcnJheSgnSFRUUF9YX1dFQklOU1BFQ1RPUl9FWFRF
TlNJT04nLCAnSFRUUF9VU0VSX0FHRU5UJyk7DQorDQorZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhl
YWRlcikgew0KKyAgICBlY2hvICRoZWFkZXIgLiAiOiAiIC4gJF9TRVJWRVJbJGhlYWRlcl0gLiAi
XG4iOw0KK30NCisNCis/Pg0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjODhmNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5odG1s
CkBAIC0wLDAgKzEsMTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vaW5zcGVj
dG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ZnVuY3Rpb24gb3V0cHV0KG1lc3NhZ2UpCit7CisgICAgdG9wLnBvc3RNZXNzYWdlKHsgY29tbWFu
ZDogIm91dHB1dCIsIHRleHQ6IG1lc3NhZ2UgfSwgIioiKTsKK30KKworb3V0cHV0KCJTdGFydGVk
IGV4dGVuc2lvbi4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImV4dGVuc2lvbi1tYWluLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5qcyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTRiZDIzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1t
YWluLmpzCkBAIC0wLDAgKzEsNzIgQEAKK2Z1bmN0aW9uIGZldGNoVGVzdHMoKQoreworICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHJlc3VsdCkKKyAgICB7CisgICAgICAgICB3aW5kb3cuZXZhbChyZXN1
bHQpOworICAgICAgICAgcnVuVGVzdHMoKTsKKyAgICB9CisgICAgd2ViSW5zcGVjdG9yLmluc3Bl
Y3RlZFdpbmRvdy5ldmFsKCJleHRlbnNpb25GdW5jdGlvbnMoKSIsIGNhbGxiYWNrKTsKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAgIG91dHB1dCgiUnVubmluZyB0ZXN0cy4uLiIpOwor
ICAgIHZhciB0ZXN0cyA9IFtdOworICAgIGZvciAodmFyIHN5bWJvbCBpbiB0aGlzKSB7CisgICAg
ICAgIGlmICgvXmV4dGVuc2lvbl90ZXN0Ly50ZXN0KHN5bWJvbCkgJiYgdHlwZW9mIHRoaXNbc3lt
Ym9sXSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHRlc3RzLnB1c2goc3ltYm9sKTsKKyAg
ICB9CisgICAgdGVzdHMgPSB0ZXN0cy5zb3J0KCk7CisgICAgdmFyIHRlc3RDaGFpbiA9IG9uVGVz
dHNEb25lOworICAgIGZvciAodmFyIHRlc3QgPSB0ZXN0cy5wb3AoKTsgdGVzdDsgdGVzdCA9IHRl
c3RzLnBvcCgpKQorICAgICAgICB0ZXN0Q2hhaW4gPSBiaW5kKHJ1blRlc3QsIHRoaXMsIGJpbmQo
dGhpc1t0ZXN0XSwgdGhpcywgdGVzdENoYWluKSwgdGVzdCk7CisgICAgdGVzdENoYWluKCk7Cit9
CisKK2Z1bmN0aW9uIG9uVGVzdHNEb25lKCkKK3sKKyAgICBvdXRwdXQoIkFsbCB0ZXN0cyBkb25l
LiIpOworICAgIHRvcC5wb3N0TWVzc2FnZSh7IGNvbW1hbmQ6ICJleHRlbnNpb24tdGVzdHMtZG9u
ZSIgfSwgIioiKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCh0ZXN0LCBuYW1lKQoreworICAgIG91
dHB1dCgiUlVOTklORyBURVNUOiAiICsgbmFtZSk7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdCgp
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgb3V0cHV0KG5hbWUgKyAiOiAiICsgZSk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBkaXNwYXRjaE9uRnJvbnRlbmQobWVzc2FnZSwgY2FsbGJhY2sp
Cit7CisgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKCkKKyAgICB7CisgICAgICAgIGNoYW5u
ZWwucG9ydDEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGNhbGxiYWNrV3JhcHBlciwg
ZmFsc2UpOworICAgICAgICBjYWxsYmFjaygpOworICAgIH0KKyAgICB2YXIgY2hhbm5lbCA9IG5l
dyBNZXNzYWdlQ2hhbm5lbCgpOworICAgIGNoYW5uZWwucG9ydDEuc3RhcnQoKTsKKyAgICBpZiAo
Y2FsbGJhY2spCisgICAgICAgIGNoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIGNhbGxiYWNrV3JhcHBlciwgZmFsc2UpOworICAgIHRvcC5wb3N0TWVzc2FnZShtZXNzYWdl
LCBbIGNoYW5uZWwucG9ydDIgXSwgIioiKTsKK30KKworZnVuY3Rpb24gY2FsbGJhY2tBbmROZXh0
VGVzdChjYWxsYmFjaywgbmV4dFRlc3QpCit7CisgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVy
KCkKKyAgICB7CisgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgIG5leHRUZXN0LmNhbGwodGhpcyk7CisgICAgfQorICAgIHJldHVybiBjYWxsYmFja1dyYXBw
ZXI7Cit9CisKK2Z1bmN0aW9uIGJpbmQoZnVuYywgdGhpc09iamVjdCkKK3sKKyAgICB2YXIgYXJn
cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgeyByZXR1cm4gZnVuYy5hcHBseSh0aGlzT2JqZWN0LCBhcmdzLmNvbmNhdChB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKSk7IH07Cit9CisKK2ZldGNo
VGVzdHMoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jl
c291cmNlcy9leHRlbnNpb24tcGFuZWwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tcGFuZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45MDUzMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sCkBAIC0w
LDAgKzEsMiBAQAorPGh0bWw+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tc2lkZWJhci5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTMxYTQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0
ZW5zaW9uLXNpZGViYXIuaHRtbApAQCAtMCwwICsxLDIgQEAKKzxodG1sPgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBpLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWFwaS1leHBlY3RlZC50eHQKaW5k
ZXggYzk0MWY2My4uMDM4ZGI1OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMtYXBpLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0
ZW5zaW9ucy1hcGktZXhwZWN0ZWQudHh0CkBAIC01MSw2ICs1MSw3IEBAIFJVTk5JTkcgVEVTVDog
ZXh0ZW5zaW9uX3Rlc3RBUEkKICAgICAgICAgICAgIE90aGVyIDogIm90aGVyIgogICAgICAgICB9
CiAgICAgICAgIGdldEhBUiA6IDxmdW5jdGlvbj4KKyAgICAgICAgYWRkUmVxdWVzdEhlYWRlcnMg
OiA8ZnVuY3Rpb24+CiAgICAgfQogICAgIG9uUmVzZXQgOiB7CiAgICAgICAgIGFkZExpc3RlbmVy
IDogPGZ1bmN0aW9uPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lv
bnMtYXBpLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkuaHRtbApp
bmRleCBmYzlkYTBmLi5hZDExMDlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy1hcGkuaHRtbApAQCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0i
Li4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAKIGZ1bmN0aW9uIGV4dGVuc2lvbl90ZXN0QVBJ
KG5leHRUZXN0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMt
YXVkaXRzLWFwaS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRz
LWFwaS5odG1sCmluZGV4IDExOGZlMGQuLjBkNGIwYjIgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9leHRlbnNpb25zLWF1ZGl0cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMtYXBpLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8aHRt
bD4KIDxoZWFkPgogPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rv
ci10ZXN0Mi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25z
LXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImF1ZGl0cy10ZXN0czIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9ImV4dGVuc2lvbnMtYXVkaXRzLXRlc3RzLmpzIj48L3NjcmlwdD4K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMuaHRtbAppbmRleCBl
ZjY1ZDUxLi5jNzE1ZDM2IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5z
aW9ucy1hdWRpdHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1h
dWRpdHMuaHRtbApAQCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0i
Li4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iYXVkaXRzLXRlc3RzMi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iZXh0ZW5z
aW9ucy1hdWRpdHMtdGVzdHMuanMiPjwvc2NyaXB0PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1ldmFsLmh0bWwKaW5kZXggNGZkM2Y5Yy4uODg3ZTMxYSAxMDA3NTUKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZhbC5odG1sCisrKyBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWV2YWwuaHRtbApAQCAtMSw3ICsxLDcgQEAKIDxodG1s
PgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9y
LXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMt
dGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAKIHdp
bmRvdy5pbnNwZWN0ZWRWYWx1ZSA9IHsgc3RyOiAiZm9vIiwgbnVtOiA0MiB9OwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZlbnRzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbAppbmRleCAzZDYxNzAxLi41ZmZj
MmY2IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbApA
QCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0
cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJl
eHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CiAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMtcmVzb3VyY2VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9l
eHRlbnNpb25zLXJlc291cmNlcy1leHBlY3RlZC50eHQKaW5kZXggYjFlM2I5YS4uYWRiNGIzMCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVzb3VyY2VzLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJj
ZXMtZXhwZWN0ZWQudHh0CkBAIC01LDEwICs1LDEwIEBAIFBhZ2UgcmVsb2FkZWQuCiBTdGFydGVk
IGV4dGVuc2lvbi4KIFJ1bm5pbmcgdGVzdHMuLi4KIFJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rl
c3RHZXRIQVIKK3Jlc291cmNlOiAuLi4vdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5q
cwogcmVzb3VyY2U6IC4uLi90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzCiByZXNv
dXJjZTogLi4uL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy5odG1s
CiByZXNvdXJjZTogLi4uL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNl
cy5odG1sCi1yZXNvdXJjZTogLi4uL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRl
c3QuanMKIHJlc291cmNlOiAuLi4vaW5zcGVjdG9yL3Jlc291cmNlcy9hYmUucG5nCiByZXNvdXJj
ZTogLi4uL2luc3BlY3Rvci9yZXNvdXJjZXMvQWhlbS50dGYKIHJlc291cmNlOiAuLi4vaW5zcGVj
dG9yL3Jlc291cmNlcy9hdWRpdHMtc3R5bGUxLmNzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVzb3VyY2VzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbAppbmRleCAwNDYwODZmLi5iZDIwOGI5IDEwMDc1
NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbApAQCAt
MTEsNyArMTEsNyBAQCBwIHsgZm9udC1mYW1pbHk6ICd0ZXN0JzsgfQogPC9zdHlsZT4KIAogPHNj
cmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogCiBmdW5jdGlvbiBleHRlbnNp
b25fdGVzdEdldEhBUihuZXh0VGVzdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9leHRlbnNpb25zLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10
ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTVmOWZhLi4wMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMKKysrIC9kZXYvbnVs
bApAQCAtMSw3NiArMCwwIEBACi1mdW5jdGlvbiBsb2cobWVzc2FnZSkKLXsKLSAgICBvdXRwdXQo
bWVzc2FnZSk7Ci19Ci0KLWZ1bmN0aW9uIGV4dGVuc2lvbkZ1bmN0aW9ucygpCi17Ci0gICAgdmFy
IGZ1bmN0aW9ucyA9ICIiOwotCi0gICAgZm9yIChzeW1ib2wgaW4gd2luZG93KSB7Ci0gICAgICAg
IGlmICgvXmV4dGVuc2lvbl8vLmV4ZWMoc3ltYm9sKSAmJiB0eXBlb2Ygd2luZG93W3N5bWJvbF0g
PT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICBmdW5jdGlvbnMgKz0gd2luZG93W3N5bWJvbF0u
dG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uczsKLX0KLQotdmFyIGluaXRp
YWxpemVfRXh0ZW5zaW9uc1Rlc3QgPSBmdW5jdGlvbigpCi17Ci0KLUluc3BlY3RvclRlc3QuZGlz
cGF0Y2hPbk1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlSWQsIGNhbGxiYWNrLCByZWN1cnJpbmcp
Ci17Ci0gICAgZnVuY3Rpb24gb25NZXNzYWdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHR5
cGVvZihldmVudC5kYXRhKSAhPT0gIm9iamVjdCIgfHwgZXZlbnQuZGF0YS5jb21tYW5kICE9PSBt
ZXNzYWdlSWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghcmVjdXJyaW5nKQot
ICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3Nh
Z2UsIGZhbHNlKTsKLSAgICAgICAgdmFyIHBvcnQgPSBldmVudC5wb3J0cyAmJiBldmVudC5wb3J0
c1swXTsKLSAgICAgICAgaWYgKGNhbGxiYWNrKGV2ZW50LmRhdGEsIHBvcnQpICYmIHBvcnQpCi0g
ICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCIiKTsKLSAgICB9Ci0gICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UsIGZhbHNlKTsKLX0KLQotSW5zcGVjdG9y
VGVzdC5ydW5FeHRlbnNpb25UZXN0cyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBJbmplY3RlZFNjcmlw
dEFjY2Vzcy5nZXREZWZhdWx0KCkuZXZhbHVhdGUoImxvY2F0aW9uLmhyZWYiLCAiY29uc29sZSIs
IGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICB2YXIgZXh0ZW5zaW9uVVJMID0gcmVzdWx0LmRl
c2NyaXB0aW9uLnJlcGxhY2UoL1wvW14vXSokLywgIi9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1haW4u
aHRtbCIpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYWRkRXh0ZW5zaW9ucyhbeyBzdGFydFBhZ2U6
IGV4dGVuc2lvblVSTCB9XSk7Ci0gICAgfSk7Ci19Ci0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hP
bk1lc3NhZ2UoImV4dGVuc2lvbi10ZXN0cy1kb25lIiwgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRl
c3QsIHRydWUpOwotCi1mdW5jdGlvbiBleHRlbnNpb25PdXRwdXQobWVzc2FnZSkKLXsKLSAgICBJ
bnNwZWN0b3JUZXN0LmFkZFJlc3VsdChtZXNzYWdlLnRleHQpOwotfQotSW5zcGVjdG9yVGVzdC5k
aXNwYXRjaE9uTWVzc2FnZSgib3V0cHV0IiwgZXh0ZW5zaW9uT3V0cHV0LCB0cnVlKTsKLQotZnVu
Y3Rpb24gZHVtcFNpZGViYXJDb250ZW50KG1lc3NhZ2UsIHBvcnQpCi17Ci0gICAgdmFyIHNpZGVi
YXJQYW5lcyA9IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzOwotICAg
IC8vIHRoZSBzaWRlYmFyIG9mIGludGVyZXN0IGlzIHByZXN1bWVkIHRvIGFsd2F5cyBiZSBsYXN0
LgotICAgIHZhciBzaWRlYmFyID0gc2lkZWJhclBhbmVzW09iamVjdC5rZXlzKHNpZGViYXJQYW5l
cykucG9wKCldOwotICAgIEluc3BlY3RvclRlc3QucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhm
dW5jdGlvbigpIHsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNpZGViYXIgY29u
dGVudDogIiArIHNpZGViYXIuYm9keUVsZW1lbnQudGV4dENvbnRlbnQpOwotICAgICAgICBwb3J0
LnBvc3RNZXNzYWdlKCIiKTsKLSAgICB9KTsKLX0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1l
c3NhZ2UoImR1bXAtc2lkZWJhci1jb250ZW50IiwgZHVtcFNpZGViYXJDb250ZW50LCB0cnVlKTsK
LQotZnVuY3Rpb24gcmVsb2FkUGFnZShkYXRhLCBwb3J0KQotewotICAgIEluc3BlY3RvclRlc3Qu
cmVsb2FkUGFnZShmdW5jdGlvbigpIHsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiIik7Ci0g
ICAgfSk7Ci19Ci1JbnNwZWN0b3JUZXN0LmRpc3BhdGNoT25NZXNzYWdlKCJyZWxvYWQiLCByZWxv
YWRQYWdlLCB0cnVlKTsKLQotfQotCi12YXIgdGVzdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBJbnNw
ZWN0b3JUZXN0LnJ1bkV4dGVuc2lvblRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVu
c2lvbnMuaHRtbAppbmRleCAwZWUyOTE5Li5jMmY3YjdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9l
eHRlbnNpb25zLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdCBz
cmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogCiBmdW5jdGlvbiBleHRlbnNpb25fdGVz
dENyZWF0ZVBhbmVsKG5leHRUZXN0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jl
c291cmNlcy9leHRlbnNpb24tbWFpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxZDBiNTRlLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMv
ZXh0ZW5zaW9uLW1haW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTxodG1s
PgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVj
dG9yLXRlc3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgot
ZnVuY3Rpb24gb3V0cHV0KG1lc3NhZ2UpCi17Ci0gICAgdG9wLnBvc3RNZXNzYWdlKHsgY29tbWFu
ZDogIm91dHB1dCIsIHRleHQ6IG1lc3NhZ2UgfSwgIioiKTsKLX0KLQotb3V0cHV0KCJTdGFydGVk
IGV4dGVuc2lvbi4iKTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImV4dGVuc2lvbi1tYWluLmpz
Ij48L3NjcmlwdD4KLTwvaGVhZD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1haW4uanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlOTRiZDIzLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJj
ZXMvZXh0ZW5zaW9uLW1haW4uanMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1mdW5j
dGlvbiBmZXRjaFRlc3RzKCkKLXsKLSAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCi0gICAg
ewotICAgICAgICAgd2luZG93LmV2YWwocmVzdWx0KTsKLSAgICAgICAgIHJ1blRlc3RzKCk7Ci0g
ICAgfQotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZXh0ZW5zaW9uRnVu
Y3Rpb25zKCkiLCBjYWxsYmFjayk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3RzKCkKLXsKLSAgICBv
dXRwdXQoIlJ1bm5pbmcgdGVzdHMuLi4iKTsKLSAgICB2YXIgdGVzdHMgPSBbXTsKLSAgICBmb3Ig
KHZhciBzeW1ib2wgaW4gdGhpcykgewotICAgICAgICBpZiAoL15leHRlbnNpb25fdGVzdC8udGVz
dChzeW1ib2wpICYmIHR5cGVvZiB0aGlzW3N5bWJvbF0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAg
ICAgICB0ZXN0cy5wdXNoKHN5bWJvbCk7Ci0gICAgfQotICAgIHRlc3RzID0gdGVzdHMuc29ydCgp
OwotICAgIHZhciB0ZXN0Q2hhaW4gPSBvblRlc3RzRG9uZTsKLSAgICBmb3IgKHZhciB0ZXN0ID0g
dGVzdHMucG9wKCk7IHRlc3Q7IHRlc3QgPSB0ZXN0cy5wb3AoKSkKLSAgICAgICAgdGVzdENoYWlu
ID0gYmluZChydW5UZXN0LCB0aGlzLCBiaW5kKHRoaXNbdGVzdF0sIHRoaXMsIHRlc3RDaGFpbiks
IHRlc3QpOwotICAgIHRlc3RDaGFpbigpOwotfQotCi1mdW5jdGlvbiBvblRlc3RzRG9uZSgpCi17
Ci0gICAgb3V0cHV0KCJBbGwgdGVzdHMgZG9uZS4iKTsKLSAgICB0b3AucG9zdE1lc3NhZ2UoeyBj
b21tYW5kOiAiZXh0ZW5zaW9uLXRlc3RzLWRvbmUiIH0sICIqIik7Ci19Ci0KLWZ1bmN0aW9uIHJ1
blRlc3QodGVzdCwgbmFtZSkKLXsKLSAgICBvdXRwdXQoIlJVTk5JTkcgVEVTVDogIiArIG5hbWUp
OwotICAgIHRyeSB7Ci0gICAgICAgIHRlc3QoKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAg
IG91dHB1dChuYW1lICsgIjogIiArIGUpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gZGlzcGF0Y2hP
bkZyb250ZW5kKG1lc3NhZ2UsIGNhbGxiYWNrKQotewotICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3Jh
cHBlcigpCi0gICAgewotICAgICAgICBjaGFubmVsLnBvcnQxLnJlbW92ZUV2ZW50TGlzdGVuZXIo
Im1lc3NhZ2UiLCBjYWxsYmFja1dyYXBwZXIsIGZhbHNlKTsKLSAgICAgICAgY2FsbGJhY2soKTsK
LSAgICB9Ci0gICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKLSAgICBjaGFu
bmVsLnBvcnQxLnN0YXJ0KCk7Ci0gICAgaWYgKGNhbGxiYWNrKQotICAgICAgICBjaGFubmVsLnBv
cnQxLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBjYWxsYmFja1dyYXBwZXIsIGZhbHNlKTsK
LSAgICB0b3AucG9zdE1lc3NhZ2UobWVzc2FnZSwgWyBjaGFubmVsLnBvcnQyIF0sICIqIik7Ci19
Ci0KLWZ1bmN0aW9uIGNhbGxiYWNrQW5kTmV4dFRlc3QoY2FsbGJhY2ssIG5leHRUZXN0KQotewot
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3JhcHBlcigpCi0gICAgewotICAgICAgICBjYWxsYmFjay5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICBuZXh0VGVzdC5jYWxsKHRoaXMpOwotICAg
IH0KLSAgICByZXR1cm4gY2FsbGJhY2tXcmFwcGVyOwotfQotCi1mdW5jdGlvbiBiaW5kKGZ1bmMs
IHRoaXNPYmplY3QpCi17Ci0gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs
bChhcmd1bWVudHMsIDIpOwotICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGZ1bmMuYXBw
bHkodGhpc09iamVjdCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAwKSkpOyB9OwotfQotCi1mZXRjaFRlc3RzKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tcGFuZWwuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTA1MzFhNC4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
MiArMCwwIEBACi08aHRtbD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTA1MzFhNC4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cmVzb3VyY2VzL2V4dGVuc2lvbi1zaWRlYmFyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICsw
LDAgQEAKLTxodG1sPgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IDI0ZTkzNDAuLjc2NDM1ZmYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKQEAgLTYyMiw2ICs2MjIsNyBAQCBXT05URklYIFNLSVAgOiBpbnNwZWN0b3IvZXh0ZW5zaW9u
cy1hdWRpdHMtYXBpLmh0bWwgPSBGQUlMCiBXT05URklYIFNLSVAgOiBpbnNwZWN0b3IvZXh0ZW5z
aW9ucy1ldmVudHMuaHRtbCA9IEZBSUwKIFdPTlRGSVggU0tJUCA6IGluc3BlY3Rvci9leHRlbnNp
b25zLWV2YWwuaHRtbCA9IEZBSUwKIFdPTlRGSVggU0tJUCA6IGluc3BlY3Rvci9leHRlbnNpb25z
LXJlc291cmNlcy5odG1sID0gVElNRU9VVCBDUkFTSAorV09OVEZJWCBTS0lQIDogaW5zcGVjdG9y
L3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMuaHRtbCA9IEZBSUwKIAogLy8gSW5z
cGVjdG9yIHRlc3RzIGluIERlYnVnIGJ1aWxkIGFyZSB2ZXJ5IHNsb3cuICBJZiB3ZSByZW1vdmUg
U0xPVywgd2UnbGwgc2VlCiAvLyByYW5kb20gVElNRU9VVHMuICBJcyB0aGlzIGlzc3VlIERSVC1z
cGVjaWZpYz8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggNTY0NzU2YS4uOGJjZTdiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMi0xNCAgQW5k
cmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtFeHRlbnNpb24gQVBJ
XSBhZGQgc3VwcG9ydCBmb3IgYWRkaW5nL292ZXJyaWRpbmcgSFRUUCByZXF1ZXN0IGhlYWRlcnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDkzCisK
KyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFkZXJzLmh0
bWwKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOiBBZGRlZCBzZXRPdmVycmlk
ZUhlYWRlcnMoKQorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxTZW5kUmVxdWVzdCk6
IEFwcGx5IGhlYWRlciBvdmVycmlkZXMuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRPdmVycmlkZUhlYWRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25B
UEkuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuaW5qZWN0ZWRFeHRlbnNpb25BUEkuUmVzb3Vy
Y2VzLnByb3RvdHlwZS5nZXRIQVIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmluamVjdGVkRXh0
ZW5zaW9uQVBJLlJlc291cmNlcy5wcm90b3R5cGUuYWRkUmVxdWVzdEhlYWRlcnMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5z
aW9uU2VydmVyLnByb3RvdHlwZS5fb25BZGRSZXF1ZXN0SGVhZGVycyk6CisKIDIwMTAtMTItMTQg
IENoYXJsaWUgUmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IGMyMTM3N2EuLjBhYTlm
ODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMTY5LDYgKzE2OSw3IEBAIG1vZHVsZSBj
b3JlIHsKICAgICAgICAgW2RvbWFpbj1CYWNrZW5kXSB2b2lkIGRpc3BhdGNoT25JbmplY3RlZFNj
cmlwdChpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0cmluZyBtZXRob2ROYW1lLCBpbiBT
dHJpbmcgYXJndW1lbnRzLCBvdXQgVmFsdWUgcmVzdWx0LCBvdXQgYm9vbGVhbiBpc0V4Y2VwdGlv
bik7CiAgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVP
bkxvYWQoaW4gU3RyaW5nIHNjcmlwdFNvdXJjZSk7CiAgICAgICAgIFtkb21haW49SW5zcGVjdG9y
XSB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7CisgICAgICAgIFtkb21h
aW49SW5zcGVjdG9yXSB2b2lkIHNldE92ZXJyaWRlSGVhZGVycyhpbiBPYmplY3QgaGVhZGVycyk7
CiAKICAgICAgICAgW2RvbWFpbj1ET01dIHZvaWQgZ2V0Q2hpbGROb2RlcyhpbiBsb25nIG5vZGVJ
ZCk7CiAgICAgICAgIFtkb21haW49RE9NXSB2b2lkIHNldEF0dHJpYnV0ZShpbiBsb25nIGVsZW1l
bnRJZCwgaW4gU3RyaW5nIG5hbWUsIGluIFN0cmluZyB2YWx1ZSwgb3V0IGJvb2xlYW4gc3VjY2Vz
cyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGUwNDUz
ODIuLjcwOWZlYzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgpA
QCAtODI5LDYgKzgzMCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxTZW5kUmVx
dWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdQogICAgIGlmIChtX2Zy
b250ZW5kKQogICAgICAgICByZXF1ZXN0LnNldFJlcG9ydFJhd0hlYWRlcnModHJ1ZSk7CiAKKyAg
ICBpZiAobV9vdmVycmlkZUhlYWRlcnMpIHsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9vdmVycmlkZUhlYWRlcnMtPmVuZCgpOworICAgICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vdmVycmlkZUhlYWRlcnMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZp
ZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgfQorCiAgICAgYm9vbCBpc01haW5SZXNv
dXJjZSA9IG1fbWFpblJlc291cmNlSWRlbnRpZmllciA9PSBpZGVudGlmaWVyOwogCiAgICAgaWYg
KG1fdGltZWxpbmVBZ2VudCkKQEAgLTE4MTUsNiArMTgyMiwxOCBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnJlbG9hZFBhZ2UoKQogICAgIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkt
Pm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKCk7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0T3ZlcnJpZGVIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBoZWFkZXJzKQoreworICAgIG1fb3ZlcnJpZGVIZWFkZXJzID0gYWRvcHRQdHIobmV3
IEhUVFBIZWFkZXJNYXAoKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBoZWFkZXJzLT5lbmQoKTsKKyAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBoZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
U3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9vdmVycmlkZUhlYWRlcnMtPmFkZChp
dC0+Zmlyc3QsIHZhbHVlKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKaW5kZXggMTRkNTYzMi4uZDdhZTcxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaApAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNz
IERvY3VtZW50TG9hZGVyOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OworY2xhc3MgSFRUUEhlYWRlck1hcDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmpl
Y3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKQEAgLTE3Myw2ICsxNzQsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1i
ZXIpOwogICAgIHZvaWQgc2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7CiAKKyAgICB2b2lkIHNldE92ZXJyaWRlSGVhZGVy
cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOworCiAgICAgdm9pZCBlbnN1cmVTZXR0aW5n
c0xvYWRlZCgpOwogCiAgICAgdm9pZCBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKQEAgLTM5Myw2
ICszOTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5
VVJMOwogCiAgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2Vu
dDsKKyAgICBPd25QdHI8SFRUUEhlYWRlck1hcD4gbV9vdmVycmlkZUhlYWRlcnM7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoV09SS0VSUykKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRyX3QsIFJlZlB0
cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gPiBXb3JrZXJzTWFwOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvbkFQSS5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9FeHRlbnNpb25BUEkuanMKaW5kZXggMDIzNDk5NC4uYTlhMjQyMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvbkFQSS5qcworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uQVBJLmpzCkBAIC0xMjYsNiAr
MTI2LDExIEBAIFJlc291cmNlcy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjYWxsYmFjayhy
ZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBleHRlbnNpb25TZXJ2ZXIuc2VuZFJl
cXVlc3QoeyBjb21tYW5kOiAiZ2V0SEFSIiB9LCBjYWxsYmFjayAmJiBjYWxsYmFja1dyYXBwZXIp
OworICAgIH0sCisKKyAgICBhZGRSZXF1ZXN0SGVhZGVyczogZnVuY3Rpb24oaGVhZGVycykKKyAg
ICB7CisgICAgICAgIHJldHVybiBleHRlbnNpb25TZXJ2ZXIuc2VuZFJlcXVlc3QoeyBjb21tYW5k
OiAiYWRkUmVxdWVzdEhlYWRlcnMiLCBoZWFkZXJzOiBoZWFkZXJzLCBleHRlbnNpb25JZDogbG9j
YXRpb24uaG9zdG5hbWUgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcwppbmRleCAxMDUwYzZmLi4wYzViNGYwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKQEAgLTMzLDgg
KzMzLDEwIEBAIFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIgPSBmdW5jdGlvbigpCiAgICAg
dGhpcy5fY2xpZW50T2JqZWN0cyA9IHt9OwogICAgIHRoaXMuX2hhbmRsZXJzID0ge307CiAgICAg
dGhpcy5fc3Vic2NyaWJlcnMgPSB7fTsKKyAgICB0aGlzLl9vdmVycmlkZUhlYWRlcnMgPSB7fTsK
ICAgICB0aGlzLl9zdGF0dXMgPSBuZXcgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblN0YXR1cygpOwog
CisgICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVyKCJhZGRSZXF1ZXN0SGVhZGVycyIsIHRoaXMuX29u
QWRkUmVxdWVzdEhlYWRlcnMuYmluZCh0aGlzKSk7CiAgICAgdGhpcy5fcmVnaXN0ZXJIYW5kbGVy
KCJhZGRBdWRpdENhdGVnb3J5IiwgdGhpcy5fb25BZGRBdWRpdENhdGVnb3J5LmJpbmQodGhpcykp
OwogICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcigiYWRkQXVkaXRSZXN1bHQiLCB0aGlzLl9vbkFk
ZEF1ZGl0UmVzdWx0LmJpbmQodGhpcykpOwogICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcigiY3Jl
YXRlUGFuZWwiLCB0aGlzLl9vbkNyZWF0ZVBhbmVsLmJpbmQodGhpcykpOwpAQCAtMTQ0LDYgKzE0
NiwyOSBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9zdWJzY3JpYmVyc1ttZXNzYWdlLnR5cGVdOwogICAgIH0sCiAK
KyAgICBfb25BZGRSZXF1ZXN0SGVhZGVyczogZnVuY3Rpb24obWVzc2FnZSkKKyAgICB7CisgICAg
ICAgIHZhciBpZCA9IG1lc3NhZ2UuZXh0ZW5zaW9uSWQ7CisgICAgICAgIGlmICh0eXBlb2YgaWQg
IT09ICJzdHJpbmciKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0JBREFSR1RZ
UEUoImV4dGVuc2lvbklkIiwgdHlwZW9mIGlkLCAic3RyaW5nIik7CisgICAgICAgIHZhciBleHRl
bnNpb25IZWFkZXJzID0gdGhpcy5fb3ZlcnJpZGVIZWFkZXJzW2lkXTsKKyAgICAgICAgaWYgKCFl
eHRlbnNpb25IZWFkZXJzKSB7CisgICAgICAgICAgICBleHRlbnNpb25IZWFkZXJzID0ge307Cisg
ICAgICAgICAgICB0aGlzLl9vdmVycmlkZUhlYWRlcnNbaWRdID0gZXh0ZW5zaW9uSGVhZGVyczsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKG5hbWUgaW4gbWVzc2FnZS5oZWFkZXJzKQorICAgICAg
ICAgICAgZXh0ZW5zaW9uSGVhZGVyc1tuYW1lXSA9IG1lc3NhZ2UuaGVhZGVyc1tuYW1lXTsKKyAg
ICAgICAgdmFyIGFsbEhlYWRlcnMgPSB7fTsKKyAgICAgICAgZm9yIChleHRlbnNpb24gaW4gdGhp
cy5fb3ZlcnJpZGVIZWFkZXJzKSB7CisgICAgICAgICAgICB2YXIgaGVhZGVycyA9IHRoaXMuX292
ZXJyaWRlSGVhZGVyc1tleHRlbnNpb25dOworICAgICAgICAgICAgZm9yIChuYW1lIGluIGhlYWRl
cnMpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGhlYWRlcnNbbmFtZV0gPT09ICJzdHJp
bmciKQorICAgICAgICAgICAgICAgICAgICBhbGxIZWFkZXJzW25hbWVdID0gaGVhZGVyc1tuYW1l
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNl
dE92ZXJyaWRlSGVhZGVycyhhbGxIZWFkZXJzKTsKKyAgICB9LAorCiAgICAgX29uQ3JlYXRlUGFu
ZWw6IGZ1bmN0aW9uKG1lc3NhZ2UsIHBvcnQpCiAgICAgewogICAgICAgICB2YXIgaWQgPSBtZXNz
YWdlLmlkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76668</attachid>
            <date>2010-12-15 11:00:48 -0800</date>
            <delta_ts>2010-12-15 11:00:48 -0800</delta_ts>
            <desc>patch to land</desc>
            <filename>extension-headers.diff</filename>
            <type>text/plain</type>
            <size>29301</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NzE4NTRlLi4xZWYyYTIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTAtMTIt
MTUgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtFeHRlbnNp
b24gQVBJXSBhZGQgc3VwcG9ydCBmb3IgYWRkaW5nL292ZXJyaWRpbmcgSFRUUCByZXF1ZXN0IGhl
YWRlcnMKKyAgICAgICAgTW92ZWQgZXh0ZW5zaW9ucyB0ZXN0IGZyYW1ld29ya3MgdW5kZXIgaHR0
cC90ZXN0cy9pbnNwZWN0b3IsIHNvIEhUVFAgdGVzdHMgbWF5IHJldXNlIGl0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0OTMKKworICAgICAgICAq
IGh0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaGVhZGVycy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaGVhZGVycy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRl
c3QuanM6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10ZXN0
LmpzLgorICAgICAgICAobG9nKToKKyAgICAgICAgKGV4dGVuc2lvbkZ1bmN0aW9ucyk6CisgICAg
ICAgIChpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0Lkluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1l
c3NhZ2UpOgorICAgICAgICAoaW5pdGlhbGl6ZV9FeHRlbnNpb25zVGVzdC5JbnNwZWN0b3JUZXN0
LnJ1bkV4dGVuc2lvblRlc3RzKToKKyAgICAgICAgKGluaXRpYWxpemVfRXh0ZW5zaW9uc1Rlc3Qu
ZXh0ZW5zaW9uT3V0cHV0KToKKyAgICAgICAgKGluaXRpYWxpemVfRXh0ZW5zaW9uc1Rlc3QuZHVt
cFNpZGViYXJDb250ZW50KToKKyAgICAgICAgKGluaXRpYWxpemVfRXh0ZW5zaW9uc1Rlc3QucmVs
b2FkUGFnZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rv
ci9yZXNvdXJjZXMvZWNoby1oZWFkZXJzLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmh0bWwuCisgICAg
ICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmpzOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFp
bi5qcy4KKyAgICAgICAgKGZldGNoVGVzdHMuY2FsbGJhY2spOgorICAgICAgICAoZmV0Y2hUZXN0
cyk6CisgICAgICAgIChydW5UZXN0cyk6CisgICAgICAgIChvblRlc3RzRG9uZSk6CisgICAgICAg
IChkaXNwYXRjaE9uRnJvbnRlbmQuY2FsbGJhY2tXcmFwcGVyKToKKyAgICAgICAgKGRpc3BhdGNo
T25Gcm9udGVuZCk6CisgICAgICAgIChjYWxsYmFja0FuZE5leHRUZXN0LmNhbGxiYWNrV3JhcHBl
cik6CisgICAgICAgIChjYWxsYmFja0FuZE5leHRUZXN0KToKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXBhbmVsLmh0bWw6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tc2lkZWJhci5o
dG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNp
b24tc2lkZWJhci5odG1sLgorICAgICAgICAqIGluc3BlY3Rvci9leHRlbnNpb25zLWFwaS1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBpLmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLWFwaS5odG1sOgorICAgICAgICAqIGlu
c3BlY3Rvci9leHRlbnNpb25zLWF1ZGl0cy5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9leHRl
bnNpb25zLWV2YWwuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMu
aHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGluc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy5odG1sOgorICAg
ICAgICAqIGluc3BlY3Rvci9leHRlbnNpb25zLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDEwLTEyLTE1ICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBD
aHJvbWl1bSB0ZXN0IGV4cGVjdGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaGVhZGVycy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjdhMTYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRl
cnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGVzdHMgV2ViSW5zcGVjdG9yIGV4dGVu
c2lvbiBBUEkKKworSFRUUF9YX1dFQklOU1BFQ1RPUl9FWFRFTlNJT046IHRlc3QKK0hUVFBfVVNF
Ul9BR0VOVDogTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wYjsgV2luZG93cyBOVCA2
LjApCitTdGFydGVkIGV4dGVuc2lvbi4KK1J1bm5pbmcgdGVzdHMuLi4KK1JVTk5JTkcgVEVTVDog
ZXh0ZW5zaW9uX3Rlc3RBZGRIZWFkZXJzCitBbGwgdGVzdHMgZG9uZS4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFkZXJzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjEwNmZkCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1oZWFk
ZXJzLmh0bWwKQEAgLTAsMCArMSwzMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJp
bnNwZWN0b3ItdGVzdDIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImV4dGVuc2lvbnMtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK2Z1bmN0
aW9uIGV4dGVuc2lvbl90ZXN0QWRkSGVhZGVycyhuZXh0VGVzdCkKK3sKKyAgICB3ZWJJbnNwZWN0
b3IucmVzb3VyY2VzLmFkZFJlcXVlc3RIZWFkZXJzKHsKKyAgICAgICAgIngtd2ViaW5zcGVjdG9y
LWV4dGVuc2lvbiI6ICJ0ZXN0IiwKKyAgICAgICAgInVzZXItYWdlbnQiOiAiTW96aWxsYS80LjAg
KGNvbXBhdGlibGU7IE1TSUUgNy4wYjsgV2luZG93cyBOVCA2LjApIgorICAgIH0pOworICAgIHdl
Ykluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZG9YSFIoKSIsIG5leHRUZXN0KTsKK30K
KworZnVuY3Rpb24gZG9YSFIoKQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9lY2hvLWhlYWRlcnMucGhwIiwgZmFs
c2UpOworICAgIHhoci5zZW5kKG51bGwpOworICAgIC8vIENhbid0IHVzZSBvdXRwdXQoKSBoZXJl
IGR1ZSB0byBvdXRwdXQgb3JkZXIgaW5zdGFiaWxpdHk6IHRoaXMgaXMgaW52b2tlZCBieSBpbnNw
ZWN0ZWRXaW5kb3cuZXZhbCgpLAorICAgIC8vIHdoaWNoIGlzIG5vdCBzZXJpYWxpemVkIGFnYWlu
c3Qgb3V0cHV0IGZyb20gZXh0ZW5zaW9uLCBhcyB0aGUgbGF0dGVyIGlzIHBvc3RlZCBhc3luY2hy
b25vdXNseSB2aWEKKyAgICAvLyBwb3N0TWVzc2FnZSB0byBmcm9udC1lbmQgd2luZG93LgorICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoZWFkZXJzIikudGV4dENvbnRlbnQgPSB4aHIucmVz
cG9uc2VUZXh0OworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVz
dCgpIj4KKzxwPlRlc3RzIFdlYkluc3BlY3RvciBleHRlbnNpb24gQVBJPC9wPgorPGRpdiBzdHls
ZT0id2hpdGUtc3BhY2U6IHByZSIgaWQ9ImhlYWRlcnMiPjwvZGl2PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10
ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOGI2MmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25z
LXRlc3QuanMKQEAgLTAsMCArMSw4MCBAQAorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
b3V0cHV0KG1lc3NhZ2UpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25GdW5jdGlvbnMoKQorewor
ICAgIHZhciBmdW5jdGlvbnMgPSAiIjsKKworICAgIGZvciAoc3ltYm9sIGluIHdpbmRvdykgewor
ICAgICAgICBpZiAoL15leHRlbnNpb25fLy5leGVjKHN5bWJvbCkgJiYgdHlwZW9mIHdpbmRvd1tz
eW1ib2xdID09PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgZnVuY3Rpb25zICs9IHdpbmRvd1tz
eW1ib2xdLnRvU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBmdW5jdGlvbnM7Cit9CisKK3Zh
ciBpbml0aWFsaXplX0V4dGVuc2lvbnNUZXN0ID0gZnVuY3Rpb24oKQoreworCitJbnNwZWN0b3JU
ZXN0LmRpc3BhdGNoT25NZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZUlkLCBjYWxsYmFjaywgcmVj
dXJyaW5nKQoreworICAgIGZ1bmN0aW9uIG9uTWVzc2FnZShldmVudCkKKyAgICB7CisgICAgICAg
IGlmICh0eXBlb2YoZXZlbnQuZGF0YSkgIT09ICJvYmplY3QiIHx8IGV2ZW50LmRhdGEuY29tbWFu
ZCAhPT0gbWVzc2FnZUlkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXJlY3Vy
cmluZykKKyAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwg
b25NZXNzYWdlLCBmYWxzZSk7CisgICAgICAgIHZhciBwb3J0ID0gZXZlbnQucG9ydHMgJiYgZXZl
bnQucG9ydHNbMF07CisgICAgICAgIGlmIChjYWxsYmFjayhldmVudC5kYXRhLCBwb3J0KSAmJiBw
b3J0KQorICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiIik7CisgICAgfQorICAgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgb25NZXNzYWdlLCBmYWxzZSk7Cit9CisKK0lu
c3BlY3RvclRlc3QucnVuRXh0ZW5zaW9uVGVzdHMgPSBmdW5jdGlvbigpCit7CisgICAgSW5qZWN0
ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLmV2YWx1YXRlKCJsb2NhdGlvbi5ocmVmIiwgImNv
bnNvbGUiLCBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgdmFyIHBhZ2VVUkwgPSByZXN1bHQu
ZGVzY3JpcHRpb247CisgICAgICAgIHZhciBleHRlbnNpb25VUkwgPSAoL15odHRwcz86Ly50ZXN0
KHBhZ2VVUkwpID8KKyAgICAgICAgICAgIHBhZ2VVUkwucmVwbGFjZSgvXihodHRwcz86XC9cL1te
L10qXC8pLiokLywiJDEiKSA6CisgICAgICAgICAgICBwYWdlVVJMLnJlcGxhY2UoL1wvaW5zcGVj
dG9yXC9bXi9dKiQvLCAiL2h0dHAvdGVzdHMiKSkgKworICAgICAgICAgICAgIi9pbnNwZWN0b3Iv
cmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmh0bWwiOworICAgICAgICBXZWJJbnNwZWN0b3IuYWRk
RXh0ZW5zaW9ucyhbeyBzdGFydFBhZ2U6IGV4dGVuc2lvblVSTCB9XSk7CisgICAgfSk7Cit9CisK
K0luc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3NhZ2UoImV4dGVuc2lvbi10ZXN0cy1kb25lIiwg
SW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QsIHRydWUpOworCitmdW5jdGlvbiBleHRlbnNpb25P
dXRwdXQobWVzc2FnZSkKK3sKKyAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChtZXNzYWdlLnRl
eHQpOworfQorSW5zcGVjdG9yVGVzdC5kaXNwYXRjaE9uTWVzc2FnZSgib3V0cHV0IiwgZXh0ZW5z
aW9uT3V0cHV0LCB0cnVlKTsKKworZnVuY3Rpb24gZHVtcFNpZGViYXJDb250ZW50KG1lc3NhZ2Us
IHBvcnQpCit7CisgICAgdmFyIHNpZGViYXJQYW5lcyA9IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxl
bWVudHMuc2lkZWJhclBhbmVzOworICAgIC8vIHRoZSBzaWRlYmFyIG9mIGludGVyZXN0IGlzIHBy
ZXN1bWVkIHRvIGFsd2F5cyBiZSBsYXN0LgorICAgIHZhciBzaWRlYmFyID0gc2lkZWJhclBhbmVz
W09iamVjdC5rZXlzKHNpZGViYXJQYW5lcykucG9wKCldOworICAgIEluc3BlY3RvclRlc3QucnVu
QWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5jdGlvbigpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC5hZGRSZXN1bHQoIlNpZGViYXIgY29udGVudDogIiArIHNpZGViYXIuYm9keUVsZW1lbnQudGV4
dENvbnRlbnQpOworICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCIiKTsKKyAgICB9KTsKK30KK0lu
c3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3NhZ2UoImR1bXAtc2lkZWJhci1jb250ZW50IiwgZHVt
cFNpZGViYXJDb250ZW50LCB0cnVlKTsKKworZnVuY3Rpb24gcmVsb2FkUGFnZShkYXRhLCBwb3J0
KQoreworICAgIEluc3BlY3RvclRlc3QucmVsb2FkUGFnZShmdW5jdGlvbigpIHsKKyAgICAgICAg
cG9ydC5wb3N0TWVzc2FnZSgiIik7CisgICAgfSk7Cit9CitJbnNwZWN0b3JUZXN0LmRpc3BhdGNo
T25NZXNzYWdlKCJyZWxvYWQiLCByZWxvYWRQYWdlLCB0cnVlKTsKKworfQorCit2YXIgdGVzdCA9
IGZ1bmN0aW9uKCkKK3sKKyAgICBJbnNwZWN0b3JUZXN0LnJ1bkV4dGVuc2lvblRlc3RzKCk7Cit9
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMv
ZWNoby1oZWFkZXJzLnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291
cmNlcy9lY2hvLWhlYWRlcnMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAu
LjljZDNlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvZWNoby1oZWFkZXJzLnBocApAQCAtMCwwICsxLDkgQEAKKzw/cGhwDQor
DQorJGhlYWRlcnMgPSBBcnJheSgnSFRUUF9YX1dFQklOU1BFQ1RPUl9FWFRFTlNJT04nLCAnSFRU
UF9VU0VSX0FHRU5UJyk7DQorDQorZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikgew0KKyAg
ICBlY2hvICRoZWFkZXIgLiAiOiAiIC4gJF9TRVJWRVJbJGhlYWRlcl0gLiAiXG4iOw0KK30NCisN
Cis/Pg0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291
cmNlcy9leHRlbnNpb24tbWFpbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYTBjODhmNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5odG1sCkBAIC0wLDAgKzEs
MTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gb3V0
cHV0KG1lc3NhZ2UpCit7CisgICAgdG9wLnBvc3RNZXNzYWdlKHsgY29tbWFuZDogIm91dHB1dCIs
IHRleHQ6IG1lc3NhZ2UgfSwgIioiKTsKK30KKworb3V0cHV0KCJTdGFydGVkIGV4dGVuc2lvbi4i
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImV4dGVuc2lvbi1tYWluLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tbWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lOTRiZDIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1tYWluLmpzCkBAIC0w
LDAgKzEsNzIgQEAKK2Z1bmN0aW9uIGZldGNoVGVzdHMoKQoreworICAgIGZ1bmN0aW9uIGNhbGxi
YWNrKHJlc3VsdCkKKyAgICB7CisgICAgICAgICB3aW5kb3cuZXZhbChyZXN1bHQpOworICAgICAg
ICAgcnVuVGVzdHMoKTsKKyAgICB9CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5l
dmFsKCJleHRlbnNpb25GdW5jdGlvbnMoKSIsIGNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gcnVu
VGVzdHMoKQoreworICAgIG91dHB1dCgiUnVubmluZyB0ZXN0cy4uLiIpOworICAgIHZhciB0ZXN0
cyA9IFtdOworICAgIGZvciAodmFyIHN5bWJvbCBpbiB0aGlzKSB7CisgICAgICAgIGlmICgvXmV4
dGVuc2lvbl90ZXN0Ly50ZXN0KHN5bWJvbCkgJiYgdHlwZW9mIHRoaXNbc3ltYm9sXSA9PT0gImZ1
bmN0aW9uIikKKyAgICAgICAgICAgIHRlc3RzLnB1c2goc3ltYm9sKTsKKyAgICB9CisgICAgdGVz
dHMgPSB0ZXN0cy5zb3J0KCk7CisgICAgdmFyIHRlc3RDaGFpbiA9IG9uVGVzdHNEb25lOworICAg
IGZvciAodmFyIHRlc3QgPSB0ZXN0cy5wb3AoKTsgdGVzdDsgdGVzdCA9IHRlc3RzLnBvcCgpKQor
ICAgICAgICB0ZXN0Q2hhaW4gPSBiaW5kKHJ1blRlc3QsIHRoaXMsIGJpbmQodGhpc1t0ZXN0XSwg
dGhpcywgdGVzdENoYWluKSwgdGVzdCk7CisgICAgdGVzdENoYWluKCk7Cit9CisKK2Z1bmN0aW9u
IG9uVGVzdHNEb25lKCkKK3sKKyAgICBvdXRwdXQoIkFsbCB0ZXN0cyBkb25lLiIpOworICAgIHRv
cC5wb3N0TWVzc2FnZSh7IGNvbW1hbmQ6ICJleHRlbnNpb24tdGVzdHMtZG9uZSIgfSwgIioiKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdCh0ZXN0LCBuYW1lKQoreworICAgIG91dHB1dCgiUlVOTklO
RyBURVNUOiAiICsgbmFtZSk7CisgICAgdHJ5IHsKKyAgICAgICAgdGVzdCgpOworICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgb3V0cHV0KG5hbWUgKyAiOiAiICsgZSk7CisgICAgfQorfQorCitm
dW5jdGlvbiBkaXNwYXRjaE9uRnJvbnRlbmQobWVzc2FnZSwgY2FsbGJhY2spCit7CisgICAgZnVu
Y3Rpb24gY2FsbGJhY2tXcmFwcGVyKCkKKyAgICB7CisgICAgICAgIGNoYW5uZWwucG9ydDEucmVt
b3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGNhbGxiYWNrV3JhcHBlciwgZmFsc2UpOworICAg
ICAgICBjYWxsYmFjaygpOworICAgIH0KKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hh
bm5lbCgpOworICAgIGNoYW5uZWwucG9ydDEuc3RhcnQoKTsKKyAgICBpZiAoY2FsbGJhY2spCisg
ICAgICAgIGNoYW5uZWwucG9ydDEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGNhbGxiYWNr
V3JhcHBlciwgZmFsc2UpOworICAgIHRvcC5wb3N0TWVzc2FnZShtZXNzYWdlLCBbIGNoYW5uZWwu
cG9ydDIgXSwgIioiKTsKK30KKworZnVuY3Rpb24gY2FsbGJhY2tBbmROZXh0VGVzdChjYWxsYmFj
aywgbmV4dFRlc3QpCit7CisgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKCkKKyAgICB7Cisg
ICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIG5leHRUZXN0
LmNhbGwodGhpcyk7CisgICAgfQorICAgIHJldHVybiBjYWxsYmFja1dyYXBwZXI7Cit9CisKK2Z1
bmN0aW9uIGJpbmQoZnVuYywgdGhpc09iamVjdCkKK3sKKyAgICB2YXIgYXJncyA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkg
eyByZXR1cm4gZnVuYy5hcHBseSh0aGlzT2JqZWN0LCBhcmdzLmNvbmNhdChBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKSk7IH07Cit9CisKK2ZldGNoVGVzdHMoKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRl
bnNpb24tcGFuZWwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291
cmNlcy9leHRlbnNpb24tcGFuZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45MDUzMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sCkBAIC0wLDAgKzEsMiBAQAor
PGh0bWw+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb24tc2lkZWJhci5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTMxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLXNpZGVi
YXIuaHRtbApAQCAtMCwwICsxLDIgQEAKKzxodG1sPgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWFwaS1leHBlY3RlZC50eHQKaW5kZXggYzk0MWY2My4u
MDM4ZGI1OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBp
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkt
ZXhwZWN0ZWQudHh0CkBAIC01MSw2ICs1MSw3IEBAIFJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rl
c3RBUEkKICAgICAgICAgICAgIE90aGVyIDogIm90aGVyIgogICAgICAgICB9CiAgICAgICAgIGdl
dEhBUiA6IDxmdW5jdGlvbj4KKyAgICAgICAgYWRkUmVxdWVzdEhlYWRlcnMgOiA8ZnVuY3Rpb24+
CiAgICAgfQogICAgIG9uUmVzZXQgOiB7CiAgICAgICAgIGFkZExpc3RlbmVyIDogPGZ1bmN0aW9u
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXBpLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkuaHRtbAppbmRleCBmYzlkYTBm
Li5hZDExMDlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1h
cGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hcGkuaHRtbApA
QCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0
cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJl
eHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CiAKIGZ1bmN0aW9uIGV4dGVuc2lvbl90ZXN0QVBJKG5leHRUZXN0KQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLWFwaS5o
dG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLWFwaS5odG1sCmlu
ZGV4IDExOGZlMGQuLjBkNGIwYjIgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9l
eHRlbnNpb25zLWF1ZGl0cy1hcGkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0
ZW5zaW9ucy1hdWRpdHMtYXBpLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgog
PHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9ImF1ZGl0cy10ZXN0czIuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9ImV4dGVuc2lvbnMtYXVkaXRzLXRlc3RzLmpzIj48L3NjcmlwdD4KIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtYXVkaXRzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMuaHRtbAppbmRleCBlZjY1ZDUxLi5jNzE1
ZDM2IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMuaHRtbApA
QCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0
cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJl
eHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iYXVk
aXRzLXRlc3RzMi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy1hdWRpdHMt
dGVzdHMuanMiPjwvc2NyaXB0PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1ldmFsLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1l
dmFsLmh0bWwKaW5kZXggNGZkM2Y5Yy4uODg3ZTMxYSAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9leHRlbnNpb25zLWV2YWwuaHRtbApAQCAtMSw3ICsxLDcgQEAKIDxodG1sPgogPGhlYWQ+CiA8
c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAKIHdpbmRvdy5pbnNwZWN0
ZWRWYWx1ZSA9IHsgc3RyOiAiZm9vIiwgbnVtOiA0MiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbAppbmRleCAzZDYxNzAxLi41ZmZjMmY2IDEwMDc1NQot
LS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMuaHRtbApAQCAtMSw3ICsxLDcg
QEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
aW5zcGVjdG9yLXRlc3QyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJleHRlbnNpb25zLXRl
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CiAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVz
b3VyY2VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXJl
c291cmNlcy1leHBlY3RlZC50eHQKaW5kZXggYjFlM2I5YS4uYWRiNGIzMCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtcmVzb3VyY2VzLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMtZXhwZWN0ZWQu
dHh0CkBAIC01LDEwICs1LDEwIEBAIFBhZ2UgcmVsb2FkZWQuCiBTdGFydGVkIGV4dGVuc2lvbi4K
IFJ1bm5pbmcgdGVzdHMuLi4KIFJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RHZXRIQVIKK3Jl
c291cmNlOiAuLi4vdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtdGVzdC5qcwogcmVzb3VyY2U6
IC4uLi90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzCiByZXNvdXJjZTogLi4uL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy5odG1sCiByZXNvdXJjZTog
Li4uL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy5odG1sCi1yZXNv
dXJjZTogLi4uL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMKIHJlc291
cmNlOiAuLi4vaW5zcGVjdG9yL3Jlc291cmNlcy9hYmUucG5nCiByZXNvdXJjZTogLi4uL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvQWhlbS50dGYKIHJlc291cmNlOiAuLi4vaW5zcGVjdG9yL3Jlc291cmNl
cy9hdWRpdHMtc3R5bGUxLmNzcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMtcmVzb3VyY2VzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy1yZXNvdXJjZXMuaHRtbAppbmRleCAwNDYwODZmLi5iZDIwOGI5IDEwMDc1NQotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1yZXNvdXJjZXMuaHRtbApAQCAtMTEsNyArMTEsNyBA
QCBwIHsgZm9udC1mYW1pbHk6ICd0ZXN0JzsgfQogPC9zdHlsZT4KIAogPHNjcmlwdCBzcmM9Ii4u
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+PC9zY3JpcHQ+Ci08c2Ny
aXB0IHNyYz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogCiBmdW5jdGlvbiBleHRlbnNpb25fdGVzdEdldEhB
UihuZXh0VGVzdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25z
LXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy10ZXN0LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTVmOWZhLi4wMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3NiAr
MCwwIEBACi1mdW5jdGlvbiBsb2cobWVzc2FnZSkKLXsKLSAgICBvdXRwdXQobWVzc2FnZSk7Ci19
Ci0KLWZ1bmN0aW9uIGV4dGVuc2lvbkZ1bmN0aW9ucygpCi17Ci0gICAgdmFyIGZ1bmN0aW9ucyA9
ICIiOwotCi0gICAgZm9yIChzeW1ib2wgaW4gd2luZG93KSB7Ci0gICAgICAgIGlmICgvXmV4dGVu
c2lvbl8vLmV4ZWMoc3ltYm9sKSAmJiB0eXBlb2Ygd2luZG93W3N5bWJvbF0gPT09ICJmdW5jdGlv
biIpCi0gICAgICAgICAgICBmdW5jdGlvbnMgKz0gd2luZG93W3N5bWJvbF0udG9TdHJpbmcoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uczsKLX0KLQotdmFyIGluaXRpYWxpemVfRXh0ZW5z
aW9uc1Rlc3QgPSBmdW5jdGlvbigpCi17Ci0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3Nh
Z2UgPSBmdW5jdGlvbihtZXNzYWdlSWQsIGNhbGxiYWNrLCByZWN1cnJpbmcpCi17Ci0gICAgZnVu
Y3Rpb24gb25NZXNzYWdlKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZihldmVudC5k
YXRhKSAhPT0gIm9iamVjdCIgfHwgZXZlbnQuZGF0YS5jb21tYW5kICE9PSBtZXNzYWdlSWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghcmVjdXJyaW5nKQotICAgICAgICAgICAg
d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UsIGZhbHNlKTsK
LSAgICAgICAgdmFyIHBvcnQgPSBldmVudC5wb3J0cyAmJiBldmVudC5wb3J0c1swXTsKLSAgICAg
ICAgaWYgKGNhbGxiYWNrKGV2ZW50LmRhdGEsIHBvcnQpICYmIHBvcnQpCi0gICAgICAgICAgICBw
b3J0LnBvc3RNZXNzYWdlKCIiKTsKLSAgICB9Ci0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
Im1lc3NhZ2UiLCBvbk1lc3NhZ2UsIGZhbHNlKTsKLX0KLQotSW5zcGVjdG9yVGVzdC5ydW5FeHRl
bnNpb25UZXN0cyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXRE
ZWZhdWx0KCkuZXZhbHVhdGUoImxvY2F0aW9uLmhyZWYiLCAiY29uc29sZSIsIGZ1bmN0aW9uKHJl
c3VsdCkgewotICAgICAgICB2YXIgZXh0ZW5zaW9uVVJMID0gcmVzdWx0LmRlc2NyaXB0aW9uLnJl
cGxhY2UoL1wvW14vXSokLywgIi9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1haW4uaHRtbCIpOwotICAg
ICAgICBXZWJJbnNwZWN0b3IuYWRkRXh0ZW5zaW9ucyhbeyBzdGFydFBhZ2U6IGV4dGVuc2lvblVS
TCB9XSk7Ci0gICAgfSk7Ci19Ci0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3NhZ2UoImV4
dGVuc2lvbi10ZXN0cy1kb25lIiwgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QsIHRydWUpOwot
Ci1mdW5jdGlvbiBleHRlbnNpb25PdXRwdXQobWVzc2FnZSkKLXsKLSAgICBJbnNwZWN0b3JUZXN0
LmFkZFJlc3VsdChtZXNzYWdlLnRleHQpOwotfQotSW5zcGVjdG9yVGVzdC5kaXNwYXRjaE9uTWVz
c2FnZSgib3V0cHV0IiwgZXh0ZW5zaW9uT3V0cHV0LCB0cnVlKTsKLQotZnVuY3Rpb24gZHVtcFNp
ZGViYXJDb250ZW50KG1lc3NhZ2UsIHBvcnQpCi17Ci0gICAgdmFyIHNpZGViYXJQYW5lcyA9IFdl
Ykluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzOwotICAgIC8vIHRoZSBzaWRl
YmFyIG9mIGludGVyZXN0IGlzIHByZXN1bWVkIHRvIGFsd2F5cyBiZSBsYXN0LgotICAgIHZhciBz
aWRlYmFyID0gc2lkZWJhclBhbmVzW09iamVjdC5rZXlzKHNpZGViYXJQYW5lcykucG9wKCldOwot
ICAgIEluc3BlY3RvclRlc3QucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5jdGlvbigpIHsK
LSAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNpZGViYXIgY29udGVudDogIiArIHNp
ZGViYXIuYm9keUVsZW1lbnQudGV4dENvbnRlbnQpOwotICAgICAgICBwb3J0LnBvc3RNZXNzYWdl
KCIiKTsKLSAgICB9KTsKLX0KLUluc3BlY3RvclRlc3QuZGlzcGF0Y2hPbk1lc3NhZ2UoImR1bXAt
c2lkZWJhci1jb250ZW50IiwgZHVtcFNpZGViYXJDb250ZW50LCB0cnVlKTsKLQotZnVuY3Rpb24g
cmVsb2FkUGFnZShkYXRhLCBwb3J0KQotewotICAgIEluc3BlY3RvclRlc3QucmVsb2FkUGFnZShm
dW5jdGlvbigpIHsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiIik7Ci0gICAgfSk7Ci19Ci1J
bnNwZWN0b3JUZXN0LmRpc3BhdGNoT25NZXNzYWdlKCJyZWxvYWQiLCByZWxvYWRQYWdlLCB0cnVl
KTsKLQotfQotCi12YXIgdGVzdCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBJbnNwZWN0b3JUZXN0LnJ1
bkV4dGVuc2lvblRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMuaHRtbApp
bmRleCAwZWUyOTE5Li5jMmY3YjdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLmh0
bWwKQEAgLTEsNyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdCBzcmM9Ii4uL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rl
c3RzL2luc3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgogCiBmdW5jdGlvbiBleHRlbnNpb25fdGVzdENyZWF0ZVBhbmVs
KG5leHRUZXN0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9l
eHRlbnNpb24tbWFpbi5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRl
bnNpb24tbWFpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBiNTRlLi4w
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9uLW1h
aW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08
c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rpb24gb3V0
cHV0KG1lc3NhZ2UpCi17Ci0gICAgdG9wLnBvc3RNZXNzYWdlKHsgY29tbWFuZDogIm91dHB1dCIs
IHRleHQ6IG1lc3NhZ2UgfSwgIioiKTsKLX0KLQotb3V0cHV0KCJTdGFydGVkIGV4dGVuc2lvbi4i
KTsKLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImV4dGVuc2lvbi1tYWluLmpzIj48L3NjcmlwdD4K
LTwvaGVhZD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvZXh0ZW5zaW9uLW1haW4uanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2Vz
L2V4dGVuc2lvbi1tYWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTRiZDIz
Li4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9u
LW1haW4uanMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1mdW5jdGlvbiBmZXRjaFRl
c3RzKCkKLXsKLSAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCi0gICAgewotICAgICAgICAg
d2luZG93LmV2YWwocmVzdWx0KTsKLSAgICAgICAgIHJ1blRlc3RzKCk7Ci0gICAgfQotICAgIHdl
Ykluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZXh0ZW5zaW9uRnVuY3Rpb25zKCkiLCBj
YWxsYmFjayk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3RzKCkKLXsKLSAgICBvdXRwdXQoIlJ1bm5p
bmcgdGVzdHMuLi4iKTsKLSAgICB2YXIgdGVzdHMgPSBbXTsKLSAgICBmb3IgKHZhciBzeW1ib2wg
aW4gdGhpcykgewotICAgICAgICBpZiAoL15leHRlbnNpb25fdGVzdC8udGVzdChzeW1ib2wpICYm
IHR5cGVvZiB0aGlzW3N5bWJvbF0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICB0ZXN0cy5w
dXNoKHN5bWJvbCk7Ci0gICAgfQotICAgIHRlc3RzID0gdGVzdHMuc29ydCgpOwotICAgIHZhciB0
ZXN0Q2hhaW4gPSBvblRlc3RzRG9uZTsKLSAgICBmb3IgKHZhciB0ZXN0ID0gdGVzdHMucG9wKCk7
IHRlc3Q7IHRlc3QgPSB0ZXN0cy5wb3AoKSkKLSAgICAgICAgdGVzdENoYWluID0gYmluZChydW5U
ZXN0LCB0aGlzLCBiaW5kKHRoaXNbdGVzdF0sIHRoaXMsIHRlc3RDaGFpbiksIHRlc3QpOwotICAg
IHRlc3RDaGFpbigpOwotfQotCi1mdW5jdGlvbiBvblRlc3RzRG9uZSgpCi17Ci0gICAgb3V0cHV0
KCJBbGwgdGVzdHMgZG9uZS4iKTsKLSAgICB0b3AucG9zdE1lc3NhZ2UoeyBjb21tYW5kOiAiZXh0
ZW5zaW9uLXRlc3RzLWRvbmUiIH0sICIqIik7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QodGVzdCwg
bmFtZSkKLXsKLSAgICBvdXRwdXQoIlJVTk5JTkcgVEVTVDogIiArIG5hbWUpOwotICAgIHRyeSB7
Ci0gICAgICAgIHRlc3QoKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIG91dHB1dChuYW1l
ICsgIjogIiArIGUpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gZGlzcGF0Y2hPbkZyb250ZW5kKG1l
c3NhZ2UsIGNhbGxiYWNrKQotewotICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3JhcHBlcigpCi0gICAg
ewotICAgICAgICBjaGFubmVsLnBvcnQxLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBj
YWxsYmFja1dyYXBwZXIsIGZhbHNlKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9Ci0gICAg
dmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKLSAgICBjaGFubmVsLnBvcnQxLnN0
YXJ0KCk7Ci0gICAgaWYgKGNhbGxiYWNrKQotICAgICAgICBjaGFubmVsLnBvcnQxLmFkZEV2ZW50
TGlzdGVuZXIoIm1lc3NhZ2UiLCBjYWxsYmFja1dyYXBwZXIsIGZhbHNlKTsKLSAgICB0b3AucG9z
dE1lc3NhZ2UobWVzc2FnZSwgWyBjaGFubmVsLnBvcnQyIF0sICIqIik7Ci19Ci0KLWZ1bmN0aW9u
IGNhbGxiYWNrQW5kTmV4dFRlc3QoY2FsbGJhY2ssIG5leHRUZXN0KQotewotICAgIGZ1bmN0aW9u
IGNhbGxiYWNrV3JhcHBlcigpCi0gICAgewotICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOwotICAgICAgICBuZXh0VGVzdC5jYWxsKHRoaXMpOwotICAgIH0KLSAgICByZXR1
cm4gY2FsbGJhY2tXcmFwcGVyOwotfQotCi1mdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNPYmplY3Qp
Ci17Ci0gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs
IDIpOwotICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc09iamVj
dCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSkp
OyB9OwotfQotCi1mZXRjaFRlc3RzKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcmVzb3VyY2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3Jlc291cmNlcy9leHRlbnNpb24tcGFuZWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTA1MzFhNC4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzL2V4dGVuc2lvbi1wYW5lbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08
aHRtbD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJj
ZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJj
ZXMvZXh0ZW5zaW9uLXNpZGViYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTA1MzFhNC4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4
dGVuc2lvbi1zaWRlYmFyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTxodG1s
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CmluZGV4IDIwYmU4MzcuLmY1ZGQ4MTIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTYyMiw2
ICs2MjIsNyBAQCBXT05URklYIFNLSVAgOiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1hdWRpdHMtYXBp
Lmh0bWwgPSBGQUlMCiBXT05URklYIFNLSVAgOiBpbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmVudHMu
aHRtbCA9IEZBSUwKIFdPTlRGSVggU0tJUCA6IGluc3BlY3Rvci9leHRlbnNpb25zLWV2YWwuaHRt
bCA9IEZBSUwKIFdPTlRGSVggU0tJUCA6IGluc3BlY3Rvci9leHRlbnNpb25zLXJlc291cmNlcy5o
dG1sID0gVElNRU9VVCBDUkFTSAorV09OVEZJWCBTS0lQIDogaW5zcGVjdG9yL3Rlc3RzL2luc3Bl
Y3Rvci9leHRlbnNpb25zLWhlYWRlcnMuaHRtbCA9IEZBSUwKIAogLy8gSW5zcGVjdG9yIHRlc3Rz
IGluIERlYnVnIGJ1aWxkIGFyZSB2ZXJ5IHNsb3cuICBJZiB3ZSByZW1vdmUgU0xPVywgd2UnbGwg
c2VlCiAvLyByYW5kb20gVElNRU9VVHMuICBJcyB0aGlzIGlzc3VlIERSVC1zcGVjaWZpYz8KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIy
NmQwMy4uZjM4MDYxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMi0xNSAgQW5kcmV5IEtvc3lha292
ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogW0V4dGVuc2lvbiBBUEldIGFkZCBzdXBwb3J0
IGZvciBhZGRpbmcvb3ZlcnJpZGluZyBIVFRQIHJlcXVlc3QgaGVhZGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0OTMKKworICAgICAgICBUZXN0
OiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWhlYWRlcnMuaHRtbAorCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
d2lsbFNlbmRSZXF1ZXN0KTogQXBwbHkgZXh0cmEgaGVhZGVycy4KKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEV4dHJhSGVhZGVycyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0V4dGVuc2lvbkFQSS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5pbmplY3RlZEV4dGVuc2lv
bkFQSS5SZXNvdXJjZXMucHJvdG90eXBlLmdldEhBUik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
aW5qZWN0ZWRFeHRlbnNpb25BUEkuUmVzb3VyY2VzLnByb3RvdHlwZS5hZGRSZXF1ZXN0SGVhZGVy
cyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLl9vbkFkZFJlcXVlc3RIZWFkZXJzKToKKwog
MjAxMC0xMi0xNSAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZp
IEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IGM5
NTY2MTMuLjEyZTcyM2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtOTUsNiArOTUsOCBA
QCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1SZXNvdXJjZXNdIHZvaWQg
ZGlkQ29tbWl0TG9hZEZvckZyYW1lKG91dCBPYmplY3QgZnJhbWUsIG91dCBPYmplY3QgbG9hZGVy
KTsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPVJlc291cmNlc10gdm9pZCBmcmFtZURldGFjaGVk
RnJvbVBhcmVudChvdXQgdW5zaWduZWQgbG9uZyBmcmFtZUlkKTsKICAgICAgICAKKyAgICAgICAg
W2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0RXh0cmFIZWFkZXJzKGluIE9iamVjdCBoZWFkZXJz
KTsKKwogICAgICAgICBbZG9tYWluPVJlc291cmNlc10gdm9pZCBjYWNoZWRSZXNvdXJjZXMob3V0
IE9iamVjdCByZXNvdXJjZXMpOwogICAgICAgICBbZG9tYWluPVJlc291cmNlc10gdm9pZCByZXNv
dXJjZUNvbnRlbnQoaW4gdW5zaWduZWQgbG9uZyBmcmFtZUlkLCBpbiBTdHJpbmcgdXJsLCBpbiBi
b29sZWFuIGJhc2U2NEVuY29kZSwgb3V0IFN0cmluZyBjb250ZW50KTsKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAzOWM4MjA3Li4xNzNhNzNiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTMsNiArNTMsNyBA
QAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJN
YXAuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3Jp
cHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKQEAgLTgyOSw2ICs4MzAsMTIg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXUKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAg
cmVxdWVzdC5zZXRSZXBvcnRSYXdIZWFkZXJzKHRydWUpOwogCisgICAgaWYgKG1fZXh0cmFIZWFk
ZXJzKSB7CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZXh0
cmFIZWFkZXJzLT5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZXh0cmFIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
OworICAgIH0KKwogICAgIGJvb2wgaXNNYWluUmVzb3VyY2UgPSBtX21haW5SZXNvdXJjZUlkZW50
aWZpZXIgPT0gaWRlbnRpZmllcjsKIAogICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCkBAIC0xODYy
LDYgKzE4NjksMTggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKCkKICAg
ICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNj
aGVkdWxlUmVmcmVzaCgpOwogfQogCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEV4dHJh
SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykKK3sKKyAgICBtX2V4
dHJhSGVhZGVycyA9IGFkb3B0UHRyKG5ldyBIVFRQSGVhZGVyTWFwKCkpOworICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7CisgICAgZm9yIChJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFpdC0+
c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG1fZXh0cmFIZWFkZXJzLT5hZGQoaXQtPmZpcnN0LCB2YWx1ZSk7CisgICAgfQorfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGU0ZGI5YzYuLmFhYWY1M2MgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTUxLDYgKzUxLDcgQEAg
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZsb2F0UmVjdDsK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEhUVFBIZWFkZXJNYXA7CiBjbGFzcyBIaXRU
ZXN0UmVzdWx0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdEhv
c3Q7CkBAIC0xNzMsNiArMTc0LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVzb3VyY2VSZXRyaWV2
ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkws
IHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKTsKICAgICB2b2lkIHNjcmlwdEltcG9ydGVkKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpOwogCisgICAg
dm9pZCBzZXRFeHRyYUhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKKwogICAg
IHZvaWQgZW5zdXJlU2V0dGluZ3NMb2FkZWQoKTsKIAogICAgIHZvaWQgc3RhcnRUaW1lbGluZVBy
b2ZpbGVyKCk7CkBAIC0zOTUsNiArMzk4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc3RpY2t5
QnJlYWtwb2ludHNSZXN0b3JlZDsKIAogICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50
PiBtX3Byb2ZpbGVyQWdlbnQ7CisgICAgT3duUHRyPEhUVFBIZWFkZXJNYXA+IG1fZXh0cmFIZWFk
ZXJzOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dHB0cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4gV29ya2Vyc01hcDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25BUEkuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uQVBJLmpzCmluZGV4IDAyMzQ5OTQu
LmE5YTI0MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNp
b25BUEkuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvbkFQSS5q
cwpAQCAtMTI2LDYgKzEyNiwxMSBAQCBSZXNvdXJjZXMucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZXh0ZW5zaW9u
U2VydmVyLnNlbmRSZXF1ZXN0KHsgY29tbWFuZDogImdldEhBUiIgfSwgY2FsbGJhY2sgJiYgY2Fs
bGJhY2tXcmFwcGVyKTsKKyAgICB9LAorCisgICAgYWRkUmVxdWVzdEhlYWRlcnM6IGZ1bmN0aW9u
KGhlYWRlcnMpCisgICAgeworICAgICAgICByZXR1cm4gZXh0ZW5zaW9uU2VydmVyLnNlbmRSZXF1
ZXN0KHsgY29tbWFuZDogImFkZFJlcXVlc3RIZWFkZXJzIiwgaGVhZGVyczogaGVhZGVycywgZXh0
ZW5zaW9uSWQ6IGxvY2F0aW9uLmhvc3RuYW1lIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKaW5kZXggMTA1MGM2Zi4uMzcz
Yzg1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNl
cnZlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVy
LmpzCkBAIC0zMyw4ICszMywxMCBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyID0gZnVu
Y3Rpb24oKQogICAgIHRoaXMuX2NsaWVudE9iamVjdHMgPSB7fTsKICAgICB0aGlzLl9oYW5kbGVy
cyA9IHt9OwogICAgIHRoaXMuX3N1YnNjcmliZXJzID0ge307CisgICAgdGhpcy5fZXh0cmFIZWFk
ZXJzID0ge307CiAgICAgdGhpcy5fc3RhdHVzID0gbmV3IFdlYkluc3BlY3Rvci5FeHRlbnNpb25T
dGF0dXMoKTsKIAorICAgIHRoaXMuX3JlZ2lzdGVySGFuZGxlcigiYWRkUmVxdWVzdEhlYWRlcnMi
LCB0aGlzLl9vbkFkZFJlcXVlc3RIZWFkZXJzLmJpbmQodGhpcykpOwogICAgIHRoaXMuX3JlZ2lz
dGVySGFuZGxlcigiYWRkQXVkaXRDYXRlZ29yeSIsIHRoaXMuX29uQWRkQXVkaXRDYXRlZ29yeS5i
aW5kKHRoaXMpKTsKICAgICB0aGlzLl9yZWdpc3RlckhhbmRsZXIoImFkZEF1ZGl0UmVzdWx0Iiwg
dGhpcy5fb25BZGRBdWRpdFJlc3VsdC5iaW5kKHRoaXMpKTsKICAgICB0aGlzLl9yZWdpc3Rlckhh
bmRsZXIoImNyZWF0ZVBhbmVsIiwgdGhpcy5fb25DcmVhdGVQYW5lbC5iaW5kKHRoaXMpKTsKQEAg
LTE0NCw2ICsxNDYsMjkgQEAgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc3Vic2NyaWJlcnNbbWVzc2FnZS50eXBlXTsK
ICAgICB9LAogCisgICAgX29uQWRkUmVxdWVzdEhlYWRlcnM6IGZ1bmN0aW9uKG1lc3NhZ2UpCisg
ICAgeworICAgICAgICB2YXIgaWQgPSBtZXNzYWdlLmV4dGVuc2lvbklkOworICAgICAgICBpZiAo
dHlwZW9mIGlkICE9PSAic3RyaW5nIikKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMu
RV9CQURBUkdUWVBFKCJleHRlbnNpb25JZCIsIHR5cGVvZiBpZCwgInN0cmluZyIpOworICAgICAg
ICB2YXIgZXh0ZW5zaW9uSGVhZGVycyA9IHRoaXMuX2V4dHJhSGVhZGVyc1tpZF07CisgICAgICAg
IGlmICghZXh0ZW5zaW9uSGVhZGVycykgeworICAgICAgICAgICAgZXh0ZW5zaW9uSGVhZGVycyA9
IHt9OworICAgICAgICAgICAgdGhpcy5fZXh0cmFIZWFkZXJzW2lkXSA9IGV4dGVuc2lvbkhlYWRl
cnM7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChuYW1lIGluIG1lc3NhZ2UuaGVhZGVycykKKyAg
ICAgICAgICAgIGV4dGVuc2lvbkhlYWRlcnNbbmFtZV0gPSBtZXNzYWdlLmhlYWRlcnNbbmFtZV07
CisgICAgICAgIHZhciBhbGxIZWFkZXJzID0ge307CisgICAgICAgIGZvciAoZXh0ZW5zaW9uIGlu
IHRoaXMuX2V4dHJhSGVhZGVycykgeworICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB0aGlzLl9l
eHRyYUhlYWRlcnNbZXh0ZW5zaW9uXTsKKyAgICAgICAgICAgIGZvciAobmFtZSBpbiBoZWFkZXJz
KSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXJzW25hbWVdID09PSAic3RyaW5n
IikKKyAgICAgICAgICAgICAgICAgICAgYWxsSGVhZGVyc1tuYW1lXSA9IGhlYWRlcnNbbmFtZV07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRF
eHRyYUhlYWRlcnMoYWxsSGVhZGVycyk7CisgICAgfSwKKwogICAgIF9vbkNyZWF0ZVBhbmVsOiBm
dW5jdGlvbihtZXNzYWdlLCBwb3J0KQogICAgIHsKICAgICAgICAgdmFyIGlkID0gbWVzc2FnZS5p
ZDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>